Compare commits

...

182 Commits

Author SHA1 Message Date
Cutls
dd2a7b4228 to build 2019-03-06 21:01:36 +09:00
Cutls
30805a2263 Merge branch 'master' of https://github.com/cutls/TheDesk 2019-03-06 21:00:25 +09:00
Cutls
2dcf702d54 fix to master 2019-03-06 21:00:01 +09:00
Cutls
b6f2feb147 Merge pull request #20 from cutls/WIP-(before-CI)
travis CI and vote for 2.8
2019-03-06 17:18:55 +09:00
Cutls
f45fa97e95 travis CI 2019-03-06 17:17:25 +09:00
Cutls
86d99f40a5 vote(Mastodon 2.8) 2019-03-06 17:08:48 +09:00
Cutls
d5f3354e71 絵文字ボックスが閉じない不具合 #19 2019-03-04 14:49:25 +09:00
Cutls
5134dd274b TheDesk Miria (17.0.2) 2019-02-28 02:02:23 +09:00
Cutls
560494467b TheDesk Miria (17.0.1) 2019-02-27 10:58:29 +09:00
Cutls
75a397aafd TheDesk Miria (17.0.1) 2019-02-27 10:17:35 +09:00
Cutls
4d5916b595 TheDesk Miria (17.0.1) 2019-02-27 01:51:37 +09:00
cutls
3c00ff5695 TheDesk Miria (17.0.1) beta4 2019-02-05 11:33:32 +09:00
cutls
6513fc0e3e last mistake clear 2019-02-01 02:12:43 +09:00
cutls
b16ef4576f mistake clear 2019-02-01 01:53:40 +09:00
cutls
67a7b1e08e mistakes 2019-02-01 01:37:36 +09:00
cutls
092f3bd7d7 travis mac test 2019-02-01 01:33:46 +09:00
cutls
810a08c8e7 TheDesk Miria (17.0.1)-beta3 2019-02-01 01:30:25 +09:00
cutls
456500e954 TheDesk Miria (17.0.1)-beta2 2019-01-29 10:49:14 +09:00
Cutls
e3470ae0f2 electron-builder error
electron must be in devDependencies, not in dependencies.
2019-01-29 01:06:24 +09:00
Cutls
7da4cd53d2 Merge pull request #13 from kaias1jp/nowplaying-node-linux-disabled
Nowplaying node linux disabled
2019-01-29 00:56:05 +09:00
kaias1jp
1f1a429e35 Delete TheDeskBuild.sh 2019-01-28 21:45:49 +09:00
kaias1jp
1efa656529 modified: main.js
modified:   package.json
2019-01-28 21:37:59 +09:00
popn.ja
52cb240be3 modified: TheDeskBuild.sh 2019-01-28 20:32:21 +09:00
kaias1jp
6411fc9fb1 modified: TheDeskBuild.sh 2019-01-28 18:56:36 +09:00
kaias1jp
48da2cf287 new file: TheDeskBuild.sh 2019-01-28 18:44:50 +09:00
kaias1jp
8968c248df modified: main.js
modified:   package.json
2019-01-28 18:39:16 +09:00
cutls
27721fa481 check 2019-01-28 09:45:32 +09:00
Cutls
ee618155ac file cng 2019-01-28 09:22:17 +09:00
Cutls
f6e8f04b2a Update .travis.yml 2019-01-28 09:00:41 +09:00
cutls
c6e99b2b47 tetst release 2019-01-28 03:31:10 +09:00
cutls
c6701a4d59 finish to absolute 2019-01-28 03:28:25 +09:00
cutls
693993e899 typo 2019-01-28 02:59:27 +09:00
cutls
314ec5ab4d pray for last commit 2019-01-28 02:57:13 +09:00
cutls
d344a7fc47 git bash 2019-01-28 02:41:58 +09:00
cutls
28f2e9302a git bash 2019-01-28 02:40:15 +09:00
cutls
697d942180 rename to mobe 2019-01-28 01:54:20 +09:00
cutls
6412139ae4 back-escape deleted 2019-01-28 01:08:10 +09:00
cutls
add018263e abs path 2019-01-28 00:53:38 +09:00
cutls
baaa3e2527 last update I do 2019-01-28 00:33:28 +09:00
cutls
79276bf698 replacer 2019-01-28 00:20:33 +09:00
cutls
3953f560e4 some bugs for WBT 2019-01-28 00:11:53 +09:00
cutls
75d6a558ad for windows 2019-01-27 23:53:33 +09:00
cutls
230dd30294 wine required 2019-01-27 23:21:35 +09:00
cutls
e49c803f89 mistake 2 2019-01-27 23:09:24 +09:00
cutls
80577639d7 mistake 2019-01-27 22:58:53 +09:00
cutls
b85ac213da plus dependencies 2019-01-27 22:48:23 +09:00
cutls
a8f446a1bd delete np-node 2019-01-27 22:36:17 +09:00
cutls
b7ec01aa1f travis set up file 2019-01-27 22:19:31 +09:00
cutls
6cc765a6f1 travis master update 2019-01-27 22:07:51 +09:00
cutls
54a39151d1 travis update 2019-01-27 21:32:35 +09:00
cutls
37a1b7e52d travis update 2019-01-27 21:22:58 +09:00
cutls
54231cde73 traviss update 2019-01-27 21:17:40 +09:00
cutls
57f7a92063 travis update 2019-01-27 21:09:30 +09:00
cutls
61c67457ac travis 2019-01-27 21:07:11 +09:00
cutls
c05e13858b Merge branch 'master' of https://github.com/cutls/TheDesk 2019-01-27 19:49:33 +09:00
cutls
caa8d97a23 update versions 2019-01-27 19:49:17 +09:00
cutls
7921633efd Local NowPlaying for Windows 2019-01-26 23:27:35 +09:00
cutls
77ad2bd200 Some additional info & improve format 2019-01-26 23:26:56 +09:00
cutls
fa3b3e0800 New language style for worldwide 2019-01-26 12:24:26 +09:00
cutls
e1fb172f5b New electron-builder files 2019-01-26 12:24:08 +09:00
cutls
ccb0cb6db4 Excluded type of Notifications 2019-01-26 12:23:53 +09:00
Cutls
44e507dc90 Build command(npm) 2019-01-25 11:41:48 +09:00
Cutls
c59267bf6e Update package.json 2019-01-24 01:04:21 +09:00
Cutls
da0d9bbb51 Update README.md 2019-01-24 00:59:21 +09:00
Cutls
c6d9d7aa49 typo 2019-01-23 22:39:21 +09:00
Cutls
a08b7501ce macOS icons(electron-builder) 2019-01-23 22:20:14 +09:00
Cutls
5950fa5bbd Create README.md 2019-01-23 22:19:34 +09:00
Cutls
ed326cb264 Update package.json 2019-01-23 18:03:11 +09:00
Cutls
4a984af695 electron-builder 2019-01-23 17:58:31 +09:00
Cutls
d36a9215af Update README.md 2019-01-23 13:48:11 +09:00
Cutls
e145efb1a2 Update index.html 2019-01-23 13:31:21 +09:00
Cutls
c434ed903d Update index.html 2019-01-23 13:31:02 +09:00
Cutls
fa546df375 Update snapcraft.yaml 2019-01-23 13:24:44 +09:00
Cutls
cbe0cb171b Update snapcraft.yaml 2019-01-23 13:22:21 +09:00
Cutls
70f76d61f4 typo
from crowdin issue
2019-01-23 11:08:00 +09:00
cutls
0d0a9c43ad TheDesk Miria (17.0.1) 2019-01-22 01:26:22 +09:00
cutls
f762dd600c Alert when posting unlisted, private, direct toot with tags 2019-01-22 01:26:11 +09:00
cutls
f3186373bf Scheduled toot available 2019-01-22 01:25:40 +09:00
cutls
4f82cf00d6 fix some bugs(icon) 2019-01-22 01:24:37 +09:00
cutls
ec2fb97a68 Change from Instance to Server 2019-01-22 01:24:15 +09:00
cutls
2c85cee77a Update README.md 2019-01-13 11:05:41 +09:00
cutls
c6ad258c1c Merge branch 'master' of https://github.com/cutls/TheDesk 2019-01-13 11:03:10 +09:00
cutls
4c0735b2ed CSS Fixed 2019-01-13 11:02:52 +09:00
Cutls
cdaca5c9f7 Update 2018-12-16 23:04:00 +09:00
Cutls
0175038e77 How to install 2018-12-16 23:01:25 +09:00
Cutls
205e1d3332 TOS, priv, Build 2018-12-16 16:17:52 +09:00
Cutls
66d97388f5 Delete TOS 2018-12-16 16:12:33 +09:00
cutls
c60572b132 Merge branch 'master' of https://github.com/cutls/TheDesk 2018-12-09 03:46:22 +09:00
cutls
bc197db0d5 TheDesk Miria (17.0.0) 2018-12-09 03:46:01 +09:00
Cutls
a93c488aa5 Update README.md 2018-11-28 01:21:52 +09:00
Cutls
a2d0268d39 LICENSE Updated 2018-11-28 01:21:23 +09:00
cutls
8bb27aa8d5 Merge branch 'master' of https://github.com/cutls/TheDesk 2018-09-27 00:25:59 +09:00
cutls
0c7cf6f776 TheDesk Akane (16.1.6) 2018-09-27 00:25:35 +09:00
Cutls
abd2a39204 Create LICENSE.md 2018-09-21 15:54:12 +09:00
cutls
1c476fe9b1 TheDesk Akane (16.1.5) 2018-09-20 00:10:53 +09:00
cutls
eb57d7f58d TheDesk Akane (16.1.3) 2018-09-19 01:41:48 +09:00
Cutls
3be7b06010 Update TOS.md 2018-09-18 00:16:17 +09:00
cutls
c3133e5544 package.json 2018-09-18 00:03:48 +09:00
cutls
80c6af04cc ToS 2018-09-18 00:02:32 +09:00
Cutls
7794cb75e1 Merge pull request #7 from cutls/add-license-1
Create LICENSE.md
2018-09-17 23:38:36 +09:00
Cutls
f51f18d1ad Create LICENSE.md 2018-09-17 23:38:04 +09:00
Cutls
01232153cd Delte LICENSE.md 2018-09-17 23:36:21 +09:00
cutls
cc258230f8 TheDesk LICENSE modifying: phase:1 2018-09-17 23:35:42 +09:00
cutls
f87ece1535 TheDesk Akane (16.1.3) 2018-09-17 20:55:00 +09:00
cutls
1b96b42356 tag bag/link to acct on users data. 2018-09-14 01:40:51 +09:00
cutls
9e05a1443a Merge branch 'master' of https://github.com/cutls/TheDesk 2018-09-14 01:26:03 +09:00
cutls
5ef3305ef2 Emojis increasing 2018-09-14 01:25:43 +09:00
Cutls
9931225e9d Crowdin link added. 2018-09-12 03:08:25 +09:00
cutls
07ad76f125 TheDesk AKane (16.1.2) 2018-09-12 02:53:21 +09:00
cutls
0f860f1814 TheDesk Akane (16.1.2) 2018-09-12 02:40:29 +09:00
cutls
e57264ae7e about window 2018-09-12 02:39:02 +09:00
cutls
2f8b11b0b2 TheDesk Akane (16.1.1) 2018-09-12 01:49:41 +09:00
cutls
9ce718fbf0 remove 2018-09-11 04:46:26 +09:00
cutls
f2db5cab20 remove 2018-09-11 04:45:45 +09:00
cutls
f381d71239 TheDesk Akane (16.1.0) 2018-09-11 03:59:44 +09:00
cutls
75fb2e202a Webview for Twitter😵 2018-09-10 02:06:00 +09:00
cutls
0fa27bad73 Winstore common 2018-09-06 01:53:12 +09:00
cutls
c3b787cb39 Misskey breaking change 2018-09-06 01:47:27 +09:00
cutls
335440560a Profile page updated(Endorse/Design) 2018-09-05 00:04:56 +09:00
cutls
25b385b77c Prepare: use officail API instead of instances.social 2018-09-01 22:02:15 +09:00
cutls
0ef0c80ac8 Trend tag on Astarte was set disabled. 2018-09-01 21:39:33 +09:00
cutls
cf587c76e6 TheDesk Akane (16.0.11) 2018-08-29 19:17:34 +09:00
cutls
8439aa3e05 TheDesk Akane (16.0.10) 2018-08-24 00:15:57 +09:00
cutls
8ed7796556 TheDesk Akane (16.0.9) 2018-08-23 02:29:39 +09:00
cutls
406f65b17f To fix many bygs 2018-08-21 03:26:14 +09:00
cutls
5dbafe5dc7 README.md 2018-08-17 02:26:06 +09:00
cutls
c5151f6db0 TheDesk Akane (16.0.8) 2018-08-17 02:21:40 +09:00
cutls
621a1f3797 TheDesk Akane (16.0.6) macOS 2018-08-11 07:13:26 +09:00
cutls
2fc7b6b183 TheDesk Akane (16.0.6)macOS 2018-08-11 07:12:41 +09:00
cutls
c18af0042d TheDesk Akane (16.0.5) 2018-08-11 00:58:00 +09:00
cutls
d0061c5a95 TheDesk Akane (16.0.5) beta 2018-08-10 11:35:21 +09:00
cutls
edd712b6ba TheDesk Akane (16.0.4) 2018-08-10 00:18:35 +09:00
cutls
1ac79f21ae Fav ct had had bugs yet. and fix some bugs...(TheDesk Akane (16.0.3)) 2018-08-07 00:14:55 +09:00
cutls
b29da449f0 TheDesk Akane (16.0.3) 2018-08-06 10:15:57 +09:00
cutls
c21cacf180 TheDesk Akane (16.0.3) !unsolved!:av/BT countor bugs 2018-08-06 01:24:17 +09:00
cutls
131c4ae35e TheDesk Akane (16.0.2) 2018-08-05 14:16:12 +09:00
cutls
b71a8eab26 TheDesk Akane (16.0.2) - Mod1 2018-08-05 13:35:48 +09:00
cutls
7ab860c34c TheDesk Akane (16.0.2) 2018-08-05 12:36:23 +09:00
cutls
a2a937e220 TheDesk Akane (16.0.1) 2018-08-05 01:26:34 +09:00
cutls
b3ff01188c Delete some files 2018-07-30 21:39:05 +09:00
cutls
57e736b253 TheDesk LICENSE v5.1 2018-07-30 20:26:06 +09:00
cutls
7ab23339ef TheDesk Akane (16.0.0) -m1 2018-07-30 20:06:39 +09:00
cutls
dd81771ccf TheDesk Akane (16.0.0) 2018-07-30 20:03:49 +09:00
cutls
96995066ac TheDesk Akane (16.0.0) - phase:2[final] 2018-07-30 02:35:29 +09:00
cutls
7178c2d6c5 TheDesk Akane (16.0.0) - phase:2.1 2018-07-29 18:43:08 +09:00
cutls
f6f3525bc8 README.md ELectron ver 2018-07-29 16:46:43 +09:00
cutls
1020106382 TheDesk Akane (16.0.0) - phase2 2018-07-29 16:44:03 +09:00
cutls
5a920d63fd TheDesk Akane (16.0.0) -phase 2 2018-07-29 16:37:54 +09:00
cutls
7f64bd6d2a TheDesk Akane beta-phase:1 2018-07-28 06:25:12 +09:00
cutls
5473c22fe5 TheDesk LICENSE v5 2018-07-22 22:22:54 +09:00
cutls
62b52e4ffa TheDesk LICENSE v5 2018-07-22 22:21:53 +09:00
cutls
7ba4b3d442 TheDesk LICENSE v5 2018-07-22 22:20:46 +09:00
cutls
5844e81277 TheDesk Mio (15.10.1) - LATEST.md 2018-07-22 22:06:28 +09:00
cutls
48c184699a TheDesk Mio (15.10.0) 2018-07-22 22:03:46 +09:00
cutls
7dfbd6e2e4 TheDesk Mio (15.9.1) - 1 2018-07-19 01:24:16 +09:00
cutls
29f3d3af58 TheDesk Mio (15.9.1) 2018-07-19 01:05:53 +09:00
cutls
f1fd3f0197 TheDesk Mio (15.9.0) - index.html 2018-07-17 01:00:58 +09:00
cutls
faa8b70aff TheDesk Mio (15.9.0) 2018-07-17 00:39:06 +09:00
cutls
49a45f2ecf Unshown top of ssrc-box update(For 15.8.1) 2018-07-11 01:36:56 +09:00
cutls
d0af57b69d Modify some bugs...(for 15.8.1) 2018-07-08 10:47:11 +09:00
Cutls
1cfe24ba94 Merge pull request #5 from hakaba-hitoyo/patch-1
ユーザーマッチングを呼ぶとき、自分自身、フォロー済み、ブラックリスト、ボットを除く。
2018-07-07 21:22:16 +09:00
Hakaba Hitoyo
760522312d ユーザーマッチングを呼ぶとき、自分自身、フォロー済み、ブラックリスト、ボットを除く。 2018-07-07 20:14:15 +09:00
cutls
aad1ae656e README(15.8.0) 2018-07-07 04:22:26 +09:00
cutls
ea4e17920c TheDesk Mio (15.8.0) 2018-07-07 02:51:48 +09:00
cutls
5c39443d92 Update for big supprise! 2018-07-05 10:26:07 +09:00
Cutls P
ca3aff674d TheDesk Mio (15.7.0) macOS main.js 2018-06-18 00:07:16 +09:00
Cutls P
16649e6913 TheDesk Mio (15.7.0 macOS) 2018-06-17 23:48:33 +09:00
cutls
f42f6e2572 TheDesk Mio (15.7.0) 2018-06-17 23:26:45 +09:00
Cutls P
a8e0133edb TheDesk Mio (15.6.0) macOS 2018-06-12 01:41:11 +09:00
cutls
cc95b26cdb TheDesk Mio (15.6.0) 2018-06-12 00:44:28 +09:00
cutls
f4ec593e26 ver.json for v5 2018-05-26 22:03:35 +09:00
a a
e47a952f0e TheDesk Mio (ver.5) 2018-05-26 21:48:13 +09:00
a a
d5f7153464 TheDesk Mio (ver.4) mac modify 2018-05-26 04:00:04 +09:00
cutls
d4de0a6ca8 TheDesk Mio (ver.4) 2018-05-26 03:21:56 +09:00
cutls
97e4d16642 TheDesk Mio (ver.4) 2018-05-26 01:37:35 +09:00
cutls
03485425be pac.json 2018-05-20 16:15:35 +09:00
a a
103f0853bb TheDesk Mio (ver.3) - 1 2018-05-20 16:04:30 +09:00
cutls
de8f063aea TheDesk Mio (ver.3) 2018-05-20 15:17:10 +09:00
cutls
a379617427 TheDesk Mio (ver.2) 2018-05-12 03:12:25 +09:00
cutls
f19d95a2a6 TheDesk Mio (ver.1[fixed]) 2018-05-10 01:01:06 +09:00
cutls
3fa604533a TheDesk Mio (ver.1) 2018-05-10 00:41:32 +09:00
cutls
c20b14b708 TheDesk Mio (ver.1 beta2) 2018-05-10 00:33:08 +09:00
1265 changed files with 23889 additions and 183811 deletions

14
.gitignore vendored
View File

@@ -1,4 +1,16 @@
*.bat
*.zip
*.7z
TheDesk-*
*.exe
TheDesk-*
app/build
build
make.js
app/.DS_Store
.DS_Store
.vs/*
.vscode/*
enq.md
app/.tkn
app/node_modules
app/js/login/tkn.js

33
.travis.yml Normal file
View File

@@ -0,0 +1,33 @@
os: windows
language: node_js
node_js:
- '10.15.2'
script: node -v
before_deploy:
- cd app
- npm install electron-builder -g
- npm install
- electron-builder --win --ia32
- mv ../build/TheDesk-setup.exe ../TheDesk-setup-ia32.exe
- mv ../build/TheDesk*.exe ../TheDesk-ia32.exe
- electron-builder --win --x64
- mv ../build/TheDesk-setup.exe ../TheDesk-setup.exe
- mv ../build/TheDesk*.exe ../TheDesk.exe
- cd ../
- ls
after_deploy: ls
deploy:
skip_cleanup: true
provider: releases
api_key:
secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
file:
- TheDesk.exe
- TheDesk-setup.exe
- TheDesk-ia32.exe
- TheDesk-setup-ia32.exe
on:
repo: cutls/TheDesk
branches:
only:
- master

View File

@@ -1,2 +0,0 @@
{
}

View File

@@ -1,17 +1,22 @@
## For Astarte(kirishima.cloud), My Primary Instance
TheDesk :thedesk: Mizuki (ver.7)
【重要】
このアップデートは必ず適用して下さい。
理由:インスタンスにログインできない、トゥートができない等の問題を修正しています。
TheDesk :thedesk: Akane (16.1.0)
・不具合修正(マウスオーバー,クリックに関する)
・2.5.0に対する対応(リプ数やendorseなど)
・軽量化を図った
・一つのカラムをTwitter(TweetDeck)にできる機能
・画像の保存先を変えられるように
・インスタンス情報の拡充
・デザイン変更
・トゥートバーを左端に持ってこれるように
・Windowsのネイティブ通知が復活
ほか
https://thedesk.top
:github: https://github.com/cutls/TheDesk #Desk #DeskUpdate
## For Other Instances
PCクライアントTheDesk :thedesk: Mizuki (ver.7)
【重要】このトゥートは重要な事項を含むため他のインスタンスでもトゥートされます。
このアップデートは必ず適用して下さい。
理由:インスタンスにログインできない、トゥートができない等の問題を修正しています。
TheDeskはマルチカラムマルチアカウントはもちろんのことなにかとマストドンライフをシンプルに効率化するクライアントです。
TheDesk :thedesk: Akane (16.0.1)
https://thedesk.top

674
LICENSE Normal file
View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@@ -1,78 +1,8 @@
# TheDesk LICENSE v3
# プライバシーポリシー
(C)TheDesk 2018 all rights reserved. Website:[https://thedesk.top](https://thedesk.top)
* TheDeskは「開発者からのお知らせ」配信のためにサーバー(thedesk.top)に常時アクセスしています。
* 上記の接続によるユーザーの情報提供はありません。(IPアドレス等を含む)
* thedesk.topのページにおいては、Googleアナリティクスによる解析を採用しています。
* 配信についてAmazon Web Service CloudFrontを使用しています。CloudFrontにはアクセス解析機能がありますが、これの使用につきましては同プライバシーポリシーに則ります。
* 接続するインスタンスのプライバシーポリシーはAPIを通じた全てのアクションに対して有効ですので、TheDeskについてもそれらに則ります。
以下のライセンスに基づき当ソフトウェアを公開します。
- 以下の条件の範囲内で個人ないし団体による再頒布を認めます。
- 必ず上記コピーライトと本ライセンス条項を改変無く含めること。(必ず年度が2018であること。他言語翻訳を付与する場合も原文を表記。)
- 変更を含め全てのコードを公開すること。商用利用やライセンスの変更は認めない。依存パッケージのライセンスにも従っているものとする。
- プラットフォームはElectronやCordova、またはそれに準ずるものであること。Webアプリケーションとしての配布は認めない。
- TheDeskとして他のプラットフォームに移植する場合、コードを一切変更してはならない。
- 改変する場合、必ずソフトウェアのタイトルの末尾が"Powered by TheDesk"であり、ユーザーの見えるところにTheDesk [使用バージョン名]を表示すること。
- 改変する場合、一切thedesk.topにアクセスしてはならない。TheDeskは標準でバージョン確認のためにthedesk.topにアクセスする。
- 改変する場合、サポートインスタンスを廃止すること。
- 改変する場合、アイコンを必ず変更するし、かつそれがTheDeskを想起させるものであること。
- このソフトウェアを改変して同時に複数インスタンスへ投稿させてはならない。
- このソフトウェアの使用、再頒布に伴う一切の責任をTheDeskは負いません。
- このソフトウェアを通じて投稿される内容やAPIを通じたアクションは全て投稿者が権利を主張でき、責務を負うことになります。
- APIを通じたアクションは、全てそのインスタンスの規約に従っていなければなりません。特記無き場合、法的責任はそのインスタンスのホストの所在国の法律に従って下さい。
- 利用しているインスタンスに関わらないTheDeskに起因する法的責任は日本国の法律に従います。
- [https://thedesk.top](https://thedesk.top)で公式に頒布されるソフトのみ[kirishima.cloud](https://kirishima.cloud)(アスタルテ)公認クライアントです。
このライセンス条項は2018年3月27日以降であり、TheDesk Airi (ver.9)以降をダウンロードした際に効力を持ちます。
以下バージョンとコードネームの比較です。
_斜字_ はTheDeskには採用していません。前作等に使用されています。
__太字__ は2018年3月27日現在のTheDeskで使用されたコードネームです。
[カッコ囲み]は飛ばされることが確定しています。バージョンの番号も飛ばされます。
52以降が必要になったときに使用します。
1. _Rin_oct
1. _Anzu_
1. _Kanako_
1. _Kaede_
1. _Rika_
1. _Ranko_
1. __Miku__
1. _Kirari_
1. __Mika__
1. __Uzuki__
1. __Miho__
1. __Riina__
1. __Airi__
1. __Mizuki__
1. Mio
1. Akane
1. Miria
1. Nana
1. [Minami]
1. Sachiko
1. Mayu
1. Koume
1. Chieri
1. Anastasia
1. Aiko
1. Shoko
1. Nao
1. Karen
1. Sae
1. Yuko
1. Fumika
1. Yuki
1. Frederica
1. Kanade
1. Nina
1. Arisu
1. Sanae
1. Shiki
1. Syuko
1. Momoka
1. Yui
1. Yuka
1. Asuka
1. Yumi
1. Kyoko
1. Yuuki
1. Ryo
1. Yoshino
1. Hiromi
1. Miyu
1. Tomoe

117
README.md
View File

@@ -1,47 +1,110 @@
# TheDesk
Mastodon client for Windows/Linux(Linux ver. is not supported by developer.)
オープンソースSNSマストドンのWindows/Linuxクライアント
[![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)
[![Server-up time](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com/)
Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント
Download:[TheDesk](https://thedesk.top)
Latest Info(Markdown Toot)/最新情報(マークダウン形式のトゥート): [LATEST.md](https://github.com/cutls/TheDesk/blob/master/LATEST.md)
## Developer/作った人
### Cutls P
<img src="https://thedesk.top/img/desk.png" width="100px">
I'm developing TheDesk on Mastodon in Nishinomiya and Kyoto, Japan.
My works:[Cutls Portal](https://the.cutls.com)
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk
TheDeskを関西で開発しています。[Cutls Portal](https://the.cutls.com)で他のサービスをご覧いただけます。
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ、または#Deskでトゥートして下さい
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.
## License
## License/ライセンス
[TheDesk LICENSE v3](https://github.com/cutls/TheDesk/blob/master/LICENSE.md)
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
## Component/構成
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)/アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)
app:Raw files(you can download to modify or check)
* [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)
app:そのままのファイル。ダウンロード→テスト用
## Terms of Use/利用規約
desk.icns: If you build yourself on macOS, you can use this .icns file as icon.
desk.icns: macOS向けアイコン。セルフビルドにどうぞ。
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
## Language/言語
Japanese
日本語
* 日本語(Japanese)
* English(英語)
### Translation/翻訳
Crowdin project is available! Visit: https://translate.thedesk.top
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
## Requirement/環境
- Windows (to launch TheDesk/実行に必要) / Linux (x64/ia32/armv7l)
- Electron beta.1.8.4
- electron-dl
- Jimp(Node.js)
- Ability to read unformated files!
* Electron 3.0.10(install yourself)
* electron-dl(in package.json)
* Jimp(in package.json)
* font-manager(in package.json)
* Python 2.x(install yourself)
* VisualC++(Windows)(install yourself)
* itunes-nowplaying-mac(for macOS)(in package.json)
* node-notifier(in package.json)
* sumchecker(in package.json)
* Ability to read unformated files!(install yourself)
## Contributors/コントリビューター
macOSビルダー
* [とねぢ](https://minohdon.jp/@toneji)
Linuxビルダー
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
## Build/ビルド
Misskey(misskey.xyz) application token is not in cutls/TheDesk
Misskey(misskey.xyz)のトークンは含まれておりません。
`git clone https://github.com/cutls/TheDesk`
`npm install electron -g`
`cd TheDesk/app`
`npm install`
`npm install --save-dev electron-rebuild`
Linux/macOS
`./node_modules/.bin/electron-rebuild`
Windows
`.\node_modules\.bin\electron-rebuild.cmd`
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild`
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)
`npm install --global windows-build-tools`
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
### electron-packager
Windows
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite`
Linux
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=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`
### electron-builder
Config is all on package.json
ビルド設定はすべてpackage.jsonに記載しています。
## Pleroma support
Did you find a bug with Pleroma accounts?
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
Please write issues to improve TheDesk affinity with Pleroma.
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
## See also/詳しく
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)

View File

@@ -5,6 +5,7 @@
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8">
@@ -70,7 +71,7 @@ a,button{
</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.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%;">
<h5>TheDesk</h5>

View File

@@ -1,65 +0,0 @@
<!doctype html>
<html lang="ja">
<head>
<title>Account Manager - 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/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>.acct{display:flex; justify-content:space-around;}
.text{overflow-x: scroll;}
body,html{overflow-y: scroll;}
</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.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>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
<div id="acct-list" class="row"></div>
<div class="divider"></div>
アカウントを追加<br>
<div id="add">
<div class="row">
<div class="col s6">
<input type="text" id="url" style="width:70%" placeholder="mstdn.jp">
<div id="ins-suggest"></div>
Windows以外でご使用の方やPleromaにログインされる方はチェックを入れて下さい。<br>
<input type="checkbox" class="filled-in" id="linux" />
<label for="linux">コードセットアップ</label><br>
<button class="btn waves-effect" onclick="instance()">Login</button><br>
</div>
<div class="col s6">
<span style="font-family:Open Sans;">Supports</span>
<div id="support" class="collection transparent"></div>
</div>
</div>
</div>
<div id="auth" style="display:none">
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
<input type="text" id="code" placeholder="コードを入力">
<button class="btn waves-effect" onclick="code()">認証</button><br>
</div>
現在ログイン中のインスタンス情報 by <a href="https://instances.social" target="_blank">instances.social API</a><br>
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
<span id="ins-upd"></span>現在<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>
マストドンバージョン:<span id="ins-ver"></span><br>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<script type="text/javascript" src="./js/login/manager.js"></script>
<script type="text/javascript" src="./js/login/instance.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>

260
app/adobe.html Normal file
View File

@@ -0,0 +1,260 @@
<!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>

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

@@ -0,0 +1 @@

BIN
app/build/icon.icns Normal file

Binary file not shown.

View File

@@ -1,5 +1,14 @@
/*共通CSS*/
html,body{overflow:hidden; user-select: none; cursor:default; font-size:13px;height: 100vh;}
html,body{
/*transform: translate3d(0,0,0);*/
overflow:hidden;
user-select: none;
cursor:default;
font-size:13px;
height: 100vh;
background-color: var(--bg);
color: var(--color);
}
.btn {
margin: 5px;
text-transform: none;
@@ -32,13 +41,11 @@ option {
display: none;
max-width: 100vw;
max-height: 100vh;
top:0;
background-color: white;
position: fixed;
z-index: 9;
}
#imagemodal, #videomodal, #tootmodal {
background-color: white;
#videomodal, #tootmodal {
background-color: var(--modal);
}
#imagemodal .modal-content {
overflow: hidden;
@@ -47,6 +54,7 @@ option {
overflow-x:scroll;
overflow-y:hidden;
}
#imagewrap {
width: 100%;
height: 100%;
@@ -54,6 +62,10 @@ option {
.pointer {
cursor: pointer;
}
.badge{
min-width: 0 !important;
margin-left: 5px !important;
}
.bbcode-pulse-loadings, .bbcode-pulse-loading, .fa-pulse {
display: inline-block;
animation-duration: 3s;
@@ -69,6 +81,38 @@ option {
opacity: 0;
}
}
@keyframes shake {
from,
to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
10%,
30%,
50%,
70%,
90% {
-webkit-transform: translate3d(-10px, 0, 0);
transform: translate3d(-10px, 0, 0);
}
20%,
40%,
60%,
80% {
-webkit-transform: translate3d(10px, 0, 0);
transform: translate3d(10px, 0, 0);
}
}
.shake {
display: inline-block;
animation-duration: 1s;
animation-fill-mode: both;
animation-iteration-count: infinite;
animation-name: shake;
}
code:before, .pre:before {
content: "Code";
font-size: 1.8rem;
@@ -91,12 +135,9 @@ code, pre {
background-color: #000;
padding: 1em 1em 1em;
position: relative;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
-moz-border-radius-topleft: 10px;
-moz-border-radius-bottomright: 10px;
-moz-border-radius-bottomleft: 10px;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}
blockquote, .quote p {
margin: 0;
@@ -106,12 +147,9 @@ blockquote, .quote {
background-color: #ddd;
padding: 1em 1em 1em;
position: relative;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
-moz-border-radius-topleft: 10px;
-moz-border-radius-bottomright: 10px;
-moz-border-radius-bottomleft: 10px;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}
blockquote:before, .quote:before {
content: "Quote";
@@ -123,12 +161,53 @@ blockquote:before, .quote:before {
right: 0;
top: 0;
}
.twitter-tweet {
color: black;
background-color: #fff;
padding: 1em 1em 1em;
position: relative;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
border-left: 5px solid #0c7abf;
}
.twitter-tweet :before {
content: "From Twitter";
font-size: 1.8rem;
line-height: 1em;
font-family: Open Sans;
color: #999;
position: absolute;
right: 0;
top: 0;
}
.pixiv-post {
color: black;
background-color: #fff;
padding: 1em 1em 1em;
position: relative;
border-top-left-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
border-left: 5px solid #0096fa;
}
.pixiv-post :before {
content: "From Pixiv";
font-size: 1.8rem;
line-height: 1em;
font-family: Open Sans;
color: #999;
position: absolute;
right: 0;
top: 0;
}
#drag {
display: none;
position: fixed;
width: 100vw;
height: 100vh;
background-color: rgba(255, 255, 255, 0.8);
background-color: var(--bg);
color: var(--color);
z-index: 99999;
justify-content: center;
align-items: center;
@@ -142,7 +221,7 @@ blockquote:before, .quote:before {
#pip{
z-index:504;
width:418px;
background-color: white;
background-color: var(--subcolor);
position:absolute;
}
.pip-bottom{
@@ -160,7 +239,15 @@ blockquote:before, .quote:before {
#pip-content .material-icons{
display:none;
}
.big-text{
font-size:1.2rem;
}
#releasenote {
background-color: var(--modal);
}
#releasenote li{
list-style-type: disc
}
@media only screen and (min-width: 993px){
#toast-container {
top:auto;
@@ -181,75 +268,42 @@ blockquote:before, .quote:before {
opacity: 1;
}
}
.hide-anime{
animation: hide 0.2s linear 0s;
display:none;
}
@keyframes hide{
from{
opacity: 1;
}
to{
opacity: 0;
}
}
.collapsible-header,.tabs{
background-color: var(--subcolor);
}
.modal-footer{
background-color: var(--modalfooter) !important;
}
.font{
font-size:1.5rem;
margin-bottom:5px;
}
.font:hover{
background-color: #999;
}
.release-do{
border: solid 2px;
border-color:var(--color);
padding:5px;
}
/*black theme*/
.blacktheme body {
color: white;
background-color: #212121;
}
.blacktheme #drag {
color: white;
background-color: rgba(0, 0, 0, 0.8);
position: fixed;
width: 100vw;
height: 100vh;
z-index: 99999;
justify-content: center;
align-items: center;
}
.blacktheme #imagemodal,.blacktheme #videomodal,.blacktheme #tootmodal {
background-color: black;
}
.blacktheme .collapsible-header,.blacktheme .tabs,.blacktheme #pip {
background-color: #212121;
}
/*indigo theme*/
.indigotheme body {
color: white;
background-color: #031833;
}
.indigotheme #drag {
color: white;
background-color: rgba(0, 0, 0, 0.8);
position: fixed;
width: 100vw;
height: 100vh;
z-index: 99999;
justify-content: center;
align-items: center;
}
.indigotheme #imagemodal,.indigotheme #videomodal,.indigotheme #tootmodal {
background-color: #0d1351;
}
.indigotheme .collapsible-header,.indigotheme .tabs,.indigotheme #pip {
background-color: #0d1351;
}
/*brown theme*/
.browntheme body {
color: white;
background-color: #261411;
}
.browntheme #drag {
color: white;
background-color: rgba(0, 0, 0, 0.8);
position: fixed;
width: 100vw;
height: 100vh;
z-index: 99999;
justify-content: center;
align-items: center;
}
.browntheme #imagemodal,.browntheme #videomodal,.browntheme #tootmodal {
background-color: #261411;
}
.browntheme .collapsible-header,.browntheme .tabs,.browntheme #pip {
background-color: #4e342e;
}
/*スクロールバー*/
::-webkit-scrollbar {
width: 5px;
height: 5px;
height: 10px;
background: rgba(0, 0, 0, 0.05);
}
::-webkit-scrollbar-track {
@@ -260,6 +314,6 @@ blockquote:before, .quote:before {
::-webkit-scrollbar-thumb {
-webkit-border-radius: 5px;
border-radius: 5px;
background: #9e9e9e;
background: #607d8b;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
}

View File

@@ -1,23 +1,35 @@
/*トゥートボックス向けCSS*/
#post-box {
display:none;
position: fixed;
right: 78px;
bottom: 3px;
background-color: white;
left: calc(50vw - 150px);
top: 50vh;
background-color: var(--postbox);
border: thin solid gray;
z-index: 500;
width: 300px;
z-index: 501;
min-width:300px;
max-width:100%;
padding: 5px;
}
#post-bar{
cursor:move;
text-align:center;
width:calc(100% + 10px);
background-color: var(--bg);
margin-left:-5px;
margin-right:-5px;
margin-top:-5px;
font-size:16px;
padding:4px;
}
.cancel {
font-size: 0.5rem;
color: gray;
cursor: pointer;
position: absolute;
width: 60px;
right: 0px;
right: 2px;
top:4px;
}
.more-show {
display: none;
@@ -25,8 +37,6 @@
#drag {
width: 100%;
height: 100px;
background-color: #e0e0e0;
color: black;
}
#post-btn {
display: none;
@@ -37,6 +47,15 @@
#cw-text {
display: none;
}
#sch-box {
display: none;
}
#sch-box input {
width:auto;
}
.picker__close, .picker__today, .picker__clear {
color: #26a69a !important;
}
.cw {
display: none;
}
@@ -44,17 +63,11 @@
filter: blur(50px);
}
#emoji {
position: fixed;
bottom: 120px;
right: 20px;
width: 300px;
height: 440px;
z-index: 502;
padding: 5px;
}
#emoji-list {
width: 100%;
height: calc(100% - 190px);
height: 200px;
overflow-y: scroll;
}
#preview-field {
@@ -68,30 +81,38 @@
position: relative;
top: -25px;
}
/*black theme*/
.blacktheme #post-box {
background-color: #424242;
.trendtag{
overflow-y:scroll;
max-height:100px;
}
/*indigo theme*/
.indigotheme #post-box {
background-color: #1a237e ;
#toot-btn-field{
display:flex;
}
/*brown theme*/
.browntheme #post-box {
background-color: #4e342e;
#toot-post-btn{
width:calc(100% - 10px); padding:0; margin-top:10px;
}
/*
.blacktheme #drag {
width: 100%;
height: 100px;
background-color: #004d40;
color: white;
padding: 3px;
#toot-sec-btn{
width:30px; padding:0; margin-top:10px;
}
#left-side{
float:left;
width:300px;
}
#right-side{
display:none;
float:left;
width:300px;
padding:5px;
}
#poll{
}
.poll-provider{
position: absolute;
height: calc(100% - 90px);
overflow-y: scroll;
top: 90px;
}
*/
/*mini*/
.mini-post .mize{

View File

@@ -1,13 +1,41 @@
.drag-content{
width:300px;
max-width:100%;
height:30px;
height:300px;
text-overflow: ellipsis;
cursor:move;
user-select: none;
background-color:black;
background-color:var(--modalfooter);
margin:5px;
border-radius:5px;
color:white;
color:var(--color);
padding:3px;
font-family:Open Sans;
font-size:20px;
flex-grow:1;
text-align: center;
padding:10px;
}
#sort{
display:flex;
flex-direction:row;
overflow-x:scroll;
display: flex;
width:100vw;
}
#sort-box{
position:absolute;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width:100vw;
height:calc(100vh - 40px);
background-color: rgba(0, 0, 0, 0.8);
z-index:10002;
}
#sort-box button{
background-color: var(--notfbox);
color:var(--color);
}

100
app/css/themes.css Normal file
View File

@@ -0,0 +1,100 @@
:root{
--bg:white;
--drag:rgba(255, 255, 255, 0.8);
--color:black;
--beforehover:#757575;
--modal:white;
--subcolor:#e0e0e0;
--box:white;
--sidebar:#eeeeee;
--shared:#cfd8dc;
--notfbox:white;
--emphasized:#81c784;
--his-data:rgba(255, 255, 255, 0.9);
--active:#e6ee9c;
--postbox:white;
--modalfooter:#fafafa;
}
#imagemodal{
background: url("../img/pixel.white.svg");
}
.blacktheme {
--bg:#212121;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--modal:black;
--subcolor:#212121;
--box:#424242;
--sidebar:#424242;
--shared:#004d40;
--notfbox:#333333;
--emphasized:#4e342e;
--his-data:rgba(0, 0, 0, 0.8);
--active:#757575;
--postbox:#424242;
--modalfooter:#212121;
}
.blacktheme #imagemodal{
background: url("../img/pixel.svg");
}
.indigotheme {
--bg:#031833;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--modal:#0d1351;
--subcolor:#0d1351;
--shared:#004d40;
--box:#0d1351;
--sidebar:#0d1351;
--notfbox:#0d47a1;
--emphasized:#4e342e;
--his-data:rgba(13, 19, 81,0.8);
--active:#757575;
--postbox:#1a237e;
--modalfooter:#031833;
}
.indigotheme #imagemodal{
background: url("../img/pixel.svg");
}
.browntheme {
--bg:#261411;
--drag:rgba(0, 0, 0, 0.8);
--color:white;
--beforehover:#e0e0e0;
--modal:#261411;
--subcolor:#4e342e;
--shared:#004d40;
--box:#4e342e;
--sidebar:#4e342e;
--notfbox:#4e342e;
--emphasized:#0d47a1;
--his-data:rgba(62, 39, 35,0.8);
--active:#757575;
--postbox:#4e342e;
--modalfooter:#261411;
}
.browntheme #imagemodal{
background: url("../img/pixel.svg");
}
.greentheme{
--bg:#c8e6c9;
--drag:rgba(255, 255, 255, 0.8);
--color:black;
--beforehover:#757575;
--modal:#81c784;
--subcolor:#a5d6a7;
--box:#81c784;
--sidebar:#81c784;
--shared:#ffcc80;
--notfbox:#a5d6a7;
--emphasized:#9e9d24;
--his-data:rgba(255, 255, 255, 0.9);
--active:#e6ee9c;
--postbox:#a5d6a7;
--modalfooter:#81c784;
}
.greentheme #imagemodal{
background: url("../img/pixel.white.svg");
}

View File

@@ -7,54 +7,89 @@
overflow-x: scroll;
overflow-y: hidden;
display: flex;
height: 100vh;
height: calc(100vh - 40px);
flex-grow:4;
}
#sidebar{
width:75px;
min-width:75px;
height:100vh;
background-color:#e0e0e0;
#bottom{
position:absolute;
bottom:0;
width:100vw;
height:40px;
padding:3px;
padding-right:0;
padding-left:40px;
background-color:var(--sidebar);
display:flex;
justify-content: space-between;
flex-wrap:wrap;
z-index:500;
box-shadow: 10px 0 10px 10px rgba(0, 0, 0, 0.2);
}
#sidebar-top{
height:calc(100vh - 100px);
#bottom.reverse{
padding-left:0;
padding-right:40px;
}
.reverse{
flex-direction: row-reverse;
}
#bottom #dambox{
width:300px;
margin-right:10px;
}
#bottom.reverse #dambox{
margin-right:0;
}
#bottom .trendtag{
height:40px;
}
#bottom #group{
margin-right:40px;
}
#bottom .leftside{
display:flex;
flex-wrap:wrap;
align-content:flex-start;
overflow-y:scroll;
}
#sidebar-btm{
height:9em;
display:flex;
flex-wrap:wrap;
align-content:flex-end;
#bottom #tips img{
vertical-align: -3px;
}
#sidebar div{
width:100%;
vertical-align:text-bottom;
#bottom a{
color:var(--color);
}
#sidebar a{
color:black;
#bottom i{
font-size:30px;
}
#sidebar .big-menu{
text-align:center;
.exc-icons{
font-size:20px;
}
#sidebar .big-menu i.big-icon{
font-size:5em;
.exc-chb{
padding-left:24px !important;
}
#sidebar .small-menu i{
font-size:2rem;
#bottom .btnsgroup{
border:1px solid;
padding:1px;
padding-left:5px;
padding-right:5px;
margin-right:15px;
border-radius:5px;
}
#sidebar .small-menu .side-label{
font-size:12px;
vertical-align: 0.6rem;
#spot-box{
white-space: nowrap;
text-overflow: ellipsis;
}
#sidebar .side-dead{
height:30px;
#spot-img{
margin-right:2px;
}
#spot-art{
margin-right:2px;
margin-left:2px;
}
.btnsgroup .grouptitle{
font-family:Open Sans;
font-size:15px;
}
@media screen and (max-width: 1344px) {
.btnsgroup .grouptitle{ display: none; }
#tips,#tips-menu{ display: none; }
}
iframe {
max-width:100%;
}
@@ -82,9 +117,12 @@ iframe {
}
.user{
cursor:text;
font-size:1.2rem;
font-size:1.1rem;
}
.emojione,.emoji-img{
.emoji,.emoji-img{
width: 15px;
}
.area-toot .emoji,.area-toot .emoji-img{
width: 20px;
vertical-align: middle;
margin: -3px 0 0;
@@ -100,14 +138,25 @@ iframe {
.media-filter .nomedia{
display:none;
}
.bt-filter .shared{
display:none;
}
.except-bt-filter .unshared{
display:none;
}
.cvo {
user-select: text;
padding-left: 5px;
border-bottom:0.5px solid;
padding-right: 2px;
word-break: break-all;
word-break: break-word;
width: 100%;
display: grid;
grid-template-columns: 43px 2fr 1fr;
grid-template-areas: 'notice notice notice' 'icon display_name acct' 'icon toot toot' 'vis additional additional' 'actions actions actions';
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{
margin:0;
}
.area-notice {
@@ -122,28 +171,30 @@ grid-area: icon;
}
.area-display_name {
user-select: auto;
user-select: text;
height:1.5em;
margin:2px;
margin-left:5px;
overflow:hidden;
grid-area: display_name;
white-space: nowrap;
text-overflow: ellipsis;
display:flex;
justify-content:space-between;
width:100%;
flex-wrap:nowrap
}
.area-acct {
margin:2px;
grid-area: acct;
overflow:hidden;
text-align:right;
white-space: nowrap;
text-overflow: ellipsis;
.flex-name{
max-width:calc(100% - 60px);
overflow:hidden;
text-overflow: ellipsis;
}
.area-toot {
cursor:text;
user-select: auto;
margin:2px;
margin-left:5px;
grid-area: toot;
}
@@ -159,18 +210,41 @@ grid-area: toot;
}
.area-actions {
margin:2px;
grid-area: actions;
padding:0;
margin:0;
top:-20px;
display:flex;
justify-content:space-around;
width:250px;
max-width:100%;
grid-area: actions;
}
.area-vis {
margin:2px;
font-size:0.5rem !important;
grid-area: vis;
}
.action i{
font-size:1rem;
.area-side {
display:flex;
justify-content:flex-end;
margin:2px;
grid-area: side;
}
.area-side i{
margin-left:10px;
}
.viabadge{
margin-top:10px;
}
.action i{
font-size:1.2rem;
margin-right:2px;
color:var(--beforehover);
}
.action i:hover{
color:var(--color);
transition: 1s;
}
.gray {
color: gray;
}
@@ -207,6 +281,14 @@ font-size:1rem;
text-overflow: ellipsis;
height:calc(0.8em + 8px);
}
.cbadge-hover {
color: var(--color);
background-color: transparent;
}
.cbadge-hover:hover {
color: #fff;
background-color: #777;
}
p {
margin: 0;
margin-bottom: 0px;
@@ -215,17 +297,17 @@ p:not(:last-child){
margin-bottom: 10px;
}
.shared {
background-color: #cfd8dc;
background-color: var(--shared);
}
.emphasized {
background-color: #81c784;
background-color: var(--emphasized);
}
.udg {
cursor: pointer;
}
.notice-box {
top: 0;
background-color:white;
background-color:var(--notfbox);
position: relative;
margin-right: 10px;
width:100%;
@@ -233,9 +315,9 @@ p:not(:last-child){
z-index:500;
padding:5px;
display: grid;
grid-template-columns: 40px 1fr 1fr 1fr;
grid-template-columns: 40px 48px 1fr 24px;
grid-template-rows: 30px 30px;
grid-template-areas: 'notice notice_name notice_name notice_name' 'notice a1 a2 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;
@@ -258,7 +340,10 @@ p:not(:last-child){
text-align: center;
grid-area: a1;
}
.area-sta {
text-align: center;
grid-area: sta;
}
.area-a2 {
text-align: center;
grid-area: a2;
@@ -288,7 +373,7 @@ p:not(:last-child){
.notf-box {
position: fixed;
right: 70px;
background-color: white;
background-color: var(--box);
border: thin solid gray;
z-index: 501;
width: 400px;
@@ -296,73 +381,139 @@ p:not(:last-child){
min-height: 100px;
max-height: 500px;
}
.column-hide{
display:none;
overflow:hidden;
height:0;
}
.prof-img{
border-radius: 3px;
}
.notf-icon{
position: relative;
top: -20px;
width: 20px;
left: 20px;
}
.notf-indv-box {
width:100%;
min-height: 100px;
max-height: 400px;
overflow-y: scroll;
overflow-x: hidden;
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;
}
#src-contents {
min-height: 100px;
max-height: 190px;
overflow-y: scroll;
}
.mention {
color: black;
.u-url {
color: var(--color);
cursor: text;
}
.type-b{
display:none;
}
.modal-footer{
background-color:var(--box);
}
.ballons{
background-color: var(--box);
position:absolute;
bottom:0px;
right:0px;
}
.btn-flat{
color:var(--color);
}
.toot a span.ellipsis:after{
content:"...";
}
.toot a:not(.mention) span:last-of-type{
display:none;
}
.tl-box .via-hide{
display:none;
}
.vote{
width: 100%;
border: 1px solid;
margin-top: 3px;
padding: 1px;
border-radius: 3px;
}
.fa-2x>.emoji-img {
width: 36px!important;
height: 36px!important
}
.fa-3x>.emoji-img {
width: 54px!important;
height: 54px!important
}
.fa-4x>.emoji-img {
width: 72px!important;
height: 72px!important
}
.fa-5x>.emoji-img {
width: 90px!important;
height: 90px!important
}
#lists-user{
overflow-y: scroll;
overflow-x: hidden;
max-height: 200px;
}
.votebtn{
border: 1px solid;
color: var(--color);
background-color: var(--modal);
cursor:pointer;
width: 50px;
padding: 2px;
display: inline-block;
text-align: center;
margin-top: 5px;
border-radius: 10px;
transition-duration: 0.5s;
}
.votebtn:hover{
background-color:transparent;
}
@keyframes fadeInDown {
from {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
/*black theme*/
.blacktheme .notf-box,.blacktheme .modal-footer,.blacktheme #sidebar {
background-color: #424242;
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.blacktheme .btn-flat,.blacktheme .mention ,.blacktheme #sidebar a {
color: white
@keyframes fadeInLeft {
from {
opacity: 0;
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
to {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}
.blacktheme .shared {
background-color: #004d40;
.box-anime {
animation-duration: 1s;
animation-name: fadeInLeft;
}
.blacktheme .notice-box {
background-color: #333333;
}
.blacktheme .emphasized {
background-color: #4e342e;
}
/*indigo theme*/
.indigotheme .notf-box,.indigotheme .modal-footer,.indigotheme #sidebar {
background-color: #0d1351;
}
.indigotheme .btn-flat,.indigotheme .mention ,.indigotheme #sidebar a {
color: white
}
.indigotheme .shared {
background-color: #004d40;
}
.indigotheme .notice-box {
background-color: #0d47a1;
}
.indigotheme .emphasized {
background-color: #4e342e;
}
/*brown theme*/
.browntheme .notf-box,.browntheme .modal-footer,.browntheme #sidebar {
background-color: #4e342e;
}
.browntheme .btn-flat,.browntheme .mention ,.browntheme #sidebar a {
color: white
}
.browntheme .shared {
background-color: #004d40;
}
.browntheme .notice-box {
background-color: #4e342e;
}
.browntheme .emphasized {
background-color: #0d47a1;
.cvo-anime {
animation-duration: 0.1s;
animation-name: fadeInDown;
}

View File

@@ -1,58 +1,92 @@
/*アイコンをクリックした時とかにでてくるユーザーデータ*/
#his-data {
background-repeat: no-repeat;
background-image: url('/img/loading.svg');
background-image: url('../../loading.svg');
overflow-y: hidden;
}
#his-name{
font-size:1.5rem;
}
#his-prof {
float: left;
width: 100px;
margin-right:5px;
}
.his-float {
float: left;
width: calc(50% - 50px);
height: 122px;
overflow-y: scroll;
padding: 5px;
}
#his-float-data{
width: 400px;
height: 100%;
}
#his-float-timeline{
width: calc(100% - 400px);
height:100%;
overflow-y:hidden;
}
#his-basic-prof{
min-height:130px;
}
#his-matching-list{
overflow-y: scroll;
overflow-x: hidden;
}
#his-field{
vertical-align: baseline;
text-align:center;
padding:0;
}
#his-field tr{
height:1.5rem;
}
.his-field-title{
height:1.5rem; padding:0; background-color:#757575; text-align:center;
padding:5px;
margin-bottom:1px;
}
.his-field-content{
height:1.5rem; padding:0; padding-left:5px;
}
#his-data a span.ellipsis:after{
content:"...";
}
#his-data a:not(.mention) span:last-of-type{
display:none;
}
#his-data-show {
margin: 50px;
background-color:rgba(255, 255, 255, 0.9);
width: calc(100% - 50px);
height: calc(100% - 50px);
margin: 20px;
background-color:var(--his-data);
width: calc(100% - 20px);
height: calc(100% - 20px);
margin-bottom: 0;
padding: 5px;
}
.tab-content {
overflow-y: scroll;
overflow-x: hidden;
height: calc(100% - 240px)
}
.my-data-width {
width: 11.11%;
width: 10%;
}
.active-back{
background-color: #e6ee9c;
background-color: var(--active);
}
/*black theme*/
.blacktheme #his-data-show {
background-color: rgba(0, 0, 0, 0.8);
#his-name .emojione,#his-name .emoji-img{
width: 20px;
}
.blacktheme .active-back{
background-color:#757575;
#his-plus-action .btn{
width:170px
}
/*indigo theme*/
.indigotheme #his-data-show {
background-color: rgba(13, 19, 81,0.8);
.custom-tabs{
display:flex;
}
.indigotheme .active-back{
background-color:#757575;
.custom-tabs .custom-tab a{
padding: 8px 12px;
}
/*brown theme*/
.browntheme #his-data-show {
background-color: rgba(62, 39, 35,0.8);
}
.browntheme .active-back{
background-color:#757575;
#his-des .mention{
color: #039be5;
cursor: pointer;
}

Binary file not shown.

BIN
app/icon.icns Normal file

Binary file not shown.

BIN
app/img/kyash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

11
app/img/pixel.svg Normal file
View File

@@ -0,0 +1,11 @@
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
<rect x="0" y="0" width="15" height="15" fill="#616161" />
<rect x="0" y="15" width="15" height="15" fill="#000000" />
<rect x="15" y="15" width="15" height="15" fill="#616161" />
<rect x="15" y="0" width="15" height="15" fill="#000000" />
</pattern>
</defs>
<rect width="300" height="300" fill="url(#pp)" />
</svg>

After

Width:  |  Height:  |  Size: 503 B

11
app/img/pixel.white.svg Normal file
View File

@@ -0,0 +1,11 @@
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
<rect x="0" y="0" width="15" height="15" fill="#e0e0e0" />
<rect x="0" y="15" width="15" height="15" fill="#ffffff" />
<rect x="15" y="15" width="15" height="15" fill="#e0e0e0" />
<rect x="15" y="0" width="15" height="15" fill="#ffffff" />
</pattern>
</defs>
<rect width="300" height="300" fill="url(#pp)" />
</svg>

After

Width:  |  Height:  |  Size: 503 B

BIN
app/img/sticker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,751 +0,0 @@
<!doctype html>
<html lang="ja">
<head>
<title>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/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='./css/post.css' rel='stylesheet' type='text/css'>
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/sort.css' rel='stylesheet' type='text/css'>
<link href='./css/twemoji-awesome.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<script type="text/javascript" src="./js/ui/tips.js"></script>
<script type="text/javascript" src="./js/common/time.js"></script>
<script type="text/javascript" src="./js/common/version.js"></script>
<script type="text/javascript" src="./js/common/keyshortcut.js"></script>
<script type="text/javascript" src="./js/common/modal.js"></script>
<script type="text/javascript" src="./js/ui/jquery-ui.min.js"></script>
<script>
//必ずアプデ時のremove instance消して
var ver="Mio (ver.1 beta)";
//betaを入れるとバージョンチェックしない
var ver="beta";
var acct_id=0;
var tlid=0;
verck(ver);
</script>
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
<div id="tl">
<!--TL-->
<!--ドラッグハンドラ-->
<div id="drag">
<div id="drag-content" data-trans="drag_here">ここにドラッグして添付(ドラッグと同時にアップロードされます)
<br>
<button class="btn waves-effect" onclick="closedrop()" data-trans="close">閉じる</button>
</div>
</div>
<!--カラム追加-->
<div id="add-box" class="hide z-depth-4 notf-box">
<div class="input-field"><span data-trans="your_acct">アカウント選択</span>
<br>
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
<label></label>
</div>
<div class="input-field">
<div id="auth">
<select id="type-sel" style="color:black">
<option value="local" data-trans="local">ローカル</option>
<option value="home" data-trans="home">ホーム</option>
<option value="pub" data-trans="public">連合</option>
<option value="mix" data-trans="integrated">統合(ローカルとホーム)</option>
<option value="plus" data-trans="plus">統合(ローカルとブースト・リプライ)</option>
<option value="notf" data-trans="notification">通知</option>
</select>
<label data-trans="show_tl">表示するタイムライン</label>
</div>
<div id="noauth" class="hide">表示するタイムライン
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
</div>
</div>
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
<i class="material-icons left">add</i>追加
</button>
<br>
<br>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="addToggle()" data-trans-i="close">
<i class="material-icons left">close</i>閉じる
</button>
</div>
<!--検索-->
<div id="src-box" class="hide notf-box z-depth-4">
<div class="input-field">
<i class="material-icons prefix">search</i>
<input id="src" type="text" class="validate" style="width:calc( 70% - 40px);">
<br><span data-trans="src_tip">ハッシュタグを検索するときは#を抜いてください。</span>
<br><span data-trans="src_acct_sel">検索に使用するアカウントを選択</span>
<br>
<div class="input-field">
<select id="src-acct-sel" class="acct-sel"></select>
<label></label>
</div>
<label for="src" data-trans="src">検索</label>
<button class="btn waves-effect indigo" style="width:calc( 60% - 40px);" onclick="src()" data-trans-i="src">
<i class="material-icons left">search</i>検索
</button>
</div>
<div id="search">
<div id="src-contents">
</div>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="srcToggle()">
<i class="material-icons left" data-trans-i="close">close</i>閉じる
</button>
</div>
</div>
<!--並べ替え-->
<div id="sort-box" class="hide notf-box z-depth-4">
<ul id="sort"></ul>
<button onclick="sort()" class="btn waves-effect light-blue nex" style="width:100%; max-width:200px;" data-trans-i="sort">
<i class="material-icons left">sort</i>並べ替え設定
</button>
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="sortToggle()" data-trans-i="close">
<i class="material-icons left">close</i>閉じる
</button>
</div>
<!--リスト-->
<div id="list-box" class="hide notf-box z-depth-4">
アカウント選択
<div class="input-field">
<select id="list-acct-sel" class="acct-sel"></select>
<label></label>
</div>
<button class="btn waves-effect indigo" style="width:calc( 60% - 40px);" onclick="list()" data-trans-i="lists">
リスト一覧
</button><br><br>
<div id="lists"></div>
<div id="lists-user"></div>
<input type="text" style="width:150px" id="list-add" placeholder="タイトル">
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">新規作成</button>
</div>
<div id="main">
<!--TLのTL-->
<div id="timeline-container">
まずは右のアカウントボタンからアカウントを追加してください。<br>
右のカラム追加ボタンで認証せずにローカルタイムラインを見ることもできます。
</div>
<!--サイドバー-->
<div id="sidebar">
<div id="sidebar-top">
<div class="side-dead"></div>
<div class="big-menu" id="add-tgl">
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add">
<i class="material-icons nex big-icon" title="カラム追加" data-trans-title="column_add">add</i>
</a>
<br>
<span class="side-label" data-trans="column_add">カラム追加</span>
</div>
<div class="big-menu">
<a href="acct.html" class="nex waves-effect">
<i class="material-icons nex big-icon" title="アカウントマネージャー(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
</a>
<br>
<span class="side-label" data-trans="manager_short">アカウント</span>
</div>
<div class="big-menu" id="sort-tgl">
<a onclick="sortToggle()" class="nex waves-effect">
<i class="material-icons nex big-icon" title="カラム一覧" data-trans-title="sort">sort</i>
</a>
<br>
<span class="side-label" data-trans="sort">カラム一覧</span>
</div>
<div class="side-dead">
</div>
<div class="small-menu" id="src-tgl">
<a onclick="srcToggle()" class="nex waves-effect">
<i class="material-icons" title="検索" data-trans-title="src">search</i>
<span class="side-label" data-trans="src">検索</span>
</a>
</div>
<div class="small-menu">
<a href="setting.html" class="nex waves-effect">
<i class="material-icons nex" title="設定(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
<span class="side-label" data-trans="setting">設定</span>
</a>
</div>
<div class="small-menu" id="list-tgl">
<a onclick="listToggle()" class="nex waves-effect">
<i class="material-icons" title="リスト" data-trans-title="list">view_headline</i>
<span class="side-label" data-trans="list">リスト</span>
</a>
</div>
<div class="small-menu">
<a href="index.html" class="nex mize waves-effect">
<i class="material-icons nex" title="スーパーリロード" data-trans-title="reload">refresh</i>
<span class="side-label" data-trans="reload">再読込</span>
</a>
</div>
<div class="small-menu">
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
<span class="side-label">暇ラン</span>
</a>
</div>
<div class="small-menu">
<a onclick="nano()" class="nex waves-effect">
<i class="material-icons" title="最小のマストドン。TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
<span class="side-label" data-trans="nano">Nano</span>
</a>
</div>
<div id="side-dead">
</div>
<div class="small-menu">
<a onclick="xpand()" class="nex waves-effect">
<i class="material-icons" title="サイドバーの開閉" data-trans-title="sidebar_xpand" id="x-btn">keyboard_arrow_right</i>
<span class="side-label" data-trans="sidebar_xpand_short">たたむ</span>
</a>
</div>
</div>
<div id="sidebar-btm">
<!--最小化-->
<div id="menu-btn" class="big-menu" onclick="show()" style="display:none;">
<a class="waves-effect">
<i class="material-icons big-icon">mode_edit</i>
<br>
<span class="side-label" data-trans="post">投稿</span>
</a>
</div>
</div>
</div>
</div>
</div>
<div id="post-box" class="z-depth-3">
<!--トゥートボックス-->
<div class="row" style="margin-bottom:0;">
</span>
<div class="" style="float:left;">
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
<img src="./img/missing.svg" id="acct-sel-prof" title="選択中のプロフィール表示(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px">
</a>
</div>
<div class="input-field mize" style="float:left; width:calc(100% - 24px)">
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
</div>
<span class="cancel">
<i class="material-icons waves-effect" onclick="hide()" title="このボックスを閉じる(X)" data-trans-title="post_box_close">cancel</i>
<i class="material-icons waves-effect mini-btn" onclick="mini()" title="このボックスを最小化" data-trans-title="post_box_mini">expand_more</i>
</span>
<!--Markdown-->
<div class="row" style="margin-bottom:0">
<div class="markdown mize">
<div class="col s12">
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i>
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i>
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
<span class="sml gray pointer waves-effect">
<a onclick="mdToggle()">Markdownエディタを隠す</a>
</span>
<br>
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
<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="リンクアドレス">
<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="画像アドレス">
</div>
</div>
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
<div id="md-preview">
</div>
<span class="sml gray pointer">
<a onclick="previewEdit()">Edit</a>
</span>
</div>
<div class="input-field col s12" id="toot-field" style="margin-top: 0;">
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea>
<label for="textarea" data-trans="toot">トゥート</label>
<br>
<span class="sml gray pointer more-show markdown mize" id="preview-btn">
<a onclick="preview()">Preview</a>
</span>
<span class="sml gray pointer more-show anti-markdown hide mize">
<a onclick="mdToggle()">Markdownエディタを表示</a>
</span>
<span id="suggest"></span>
</div>
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与" onclick="nsfw()">visibility_off</i>
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a>
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobeフォトエディタ">format_shapes</i>
<i class="waves-effect gray material-icons" onclick="emoji()" title="絵文字を挿入">tag_faces</i>
<a onclick="nowplaying('spotify')" class="pointer waves-effect gray" title="Spotify Now Playing(アカウント連携が必要です)Ctrl+Shift+N"><i class="fa fa-spotify" style="font-size:24px;"></i></a>
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
</div>
<div class="col s11 mize" style="margin-bottom:5px; padding:0;">
<span id="preview" class="mize"></span>
<span class=" sml mize"><span data-trans="reply">返信モード</span>:
<span id="rec">いいえ</span>/<span data-trans="file">添付</span>:
<span id="mec">なし</span>/<span data-trans="vis">公開範囲</span>:
<span id="vis">public</span>
</span>
<br>
<input type="text" id="cw-text" placeholder="警告文" class="mize">
</div>
</div>
<!-- 公開範囲 Dropdown Structure -->
<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>
<li>
<a onclick="vis('unlisted')">未収載(Unlisted)</a>
</li>
<li>
<a onclick="vis('private')" id="private-button">非公開(Private)</a>
</li>
<li id="limited-button" class="hide">
<a onclick="vis('limited')">限定公開(Limited)</a>
</li>
<li>
<a onclick="vis('direct')" class="disabled direct">ダイレクト(Direct)</a>
</li>
</ul>
<!--hidden area-->
<input type="hidden" id="reply">
<input type="hidden" id="media">
<!--END hidden area-->
</div>
<div id="toot-btn-field">
<button class="btn waves-effect indigo unmize" style="width:calc(100% - 10px); padding:0; margin-top:10px;" onclick="post()" id="toot-post-btn">トゥート</button>
</div>
</div>
<!--絵文字ピッカー-->
<div id="emoji" class="hide shared z-depth-4">
<span class="gray sml">インスタンスによって実装が異なります。
<i>
<a onclick="emojiGet('true')" class="pointer">絵文字更新</a>
</i>
<br>
</span>
<input type="text" id="emoji-suggest" placeholder="カスタム絵文字検索">
<div id="emoji-list" class="" style="">
</div>
<div class="emoji-control center">
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before">
<i class="material-icons">navigate_before</i>
</button>
<span id="emoji-count"></span>/
<span id="emoji-sum"></span>
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next">
<i class="material-icons">navigate_next</i>
</button>
</div>
<div id="default-emoji">
<span id="now-emoji"></span>一覧を表示中<br><span class="gray sml">一部デフォルト絵文字は入力・描画できません。(国旗系など)</span>
<br>
<a onclick="customEmoji()" class="pointer waves-effect" title="カスタム絵文字">
<i class="material-icons">add</i>
</a>
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="ひと">
<i class="material-icons">people</i>
</a>
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="自然">
<i class="material-icons">local_florist</i>
</a>
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="食べ物">
<i class="material-icons">restaurant</i>
</a>
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="活動">
<i class="material-icons">directions_run</i>
</a>
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="場所">
<i class="material-icons">directions_car</i>
</a>
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="もの">
<i class="material-icons">attach_file</i>
</a>
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="記号">
<i class="material-icons">gesture</i>
</a>
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="国旗">
<i class="material-icons">flag</i>
</a>
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
<i class="fa fa-fort-awesome"></i>
</a>
</div>
</div>
<!-- Modal Structure Tootdata-->
<div id="tootmodal" class="modal modal-fixed-footer">
<div class="modal-content">
<ul class="collapsible" data-collapsible="accordion" id="det-col">
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_upward</i>これより前の会話
</div>
<div class="collapsible-body toot-reset" id="toot-reply">
</div>
</li>
<li>
<div class="collapsible-header" id="activator">
<i class="material-icons">more_horiz</i>対象のトゥート
</div>
<div class="collapsible-body toot-reset" id="toot-this">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">arrow_downward</i>これよりあとの会話
</div>
<div class="collapsible-body toot-reset" id="toot-after">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">people_outline</i>これより前のLocal TL(エアリプソース確認)
</div>
<div class="collapsible-body toot-reset" id="toot-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">person_outline</i>これより前のユーザーTL(BTソース確認)
</div>
<div class="collapsible-body toot-reset" id="user-before">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="material-icons">star</i>このトゥートをお気に入りに登録した人
</div>
<div class="collapsible-body toot-reset" id="toot-fav">
</div>
</li>
<li>
<div class="collapsible-header">
<i class="text-darken-3 fa fa-retweet"></i>このトゥートをブーストした人
</div>
<div class="collapsible-body toot-reset" id="toot-rt">
</div>
</li>
</ul>
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br>
<div class="row">
<div class="col s4">
<select id="status-acct-sel" class="acct-sel"></select>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>返信</button>
</div>
<div class="col s2">
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>ブースト</button>
</div>
<div class="col s3">
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>お気に入り登録</button>
</div>
</div>
<div id="toot-tools">
</div>
<div id="toot-after">
</div>
</div>
<div class="modal-footer">
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">ブラウザで開く</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">スクリーンショット</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">URLをコピー</a>
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">埋め込む</a>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
<!-- Modal Structure Userdata -->
<div id="his-data" class="modal bottom-sheet modal-fixed-footer" style="max-height:750px; height:90%;">
<div id="his-data-content" class="modal-content" style="padding-bottom: 0;overflow-y:hidden;">
<div id="his-data-show">
<img src="./img/loading.svg" id="his-prof" style="">
<div class="his-float">
<span id="his-name" style="font-size:1.5rem">Loading...</span>
<br>@
<span id="his-acct"></span>
<span class="gray" id="his-relation"></span>
<br>
<span class="cbadge">
<span id="his-sta"></span>トゥート
</span>
<span class="cbadge">フォロー:
<span id="his-follow"></span>
</span>
<span class="cbadge">フォロワー:
<span id="his-follower"></span>
</span>
<span class="cbadge" style="max-width:150px; width:150px; ">Since:
<span id="his-since"></span>
</div>
<div class="his-float">
<span id="his-des"></span>
<br>
</div>
<div class="row">
<div class="col s12" id="my-data-nav">
<ul class="custom-tabs transparent">
<li class="custom-tab col my-data-width active-back">
<a go="#his-tl">タイムライン</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follow-list">フォロー</a>
</li>
<li class="custom-tab col my-data-width">
<a go="#his-follower-list">フォロワー</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-action">他アカウントで操作</a>
</li>
<li class="custom-tab col my-data-width only-his-data">
<a go="#his-list">リスト</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-fav-list">お気に入り登録</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-blocking-list">ブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-muting-list">ミュート</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-domain-list">ドメインブロック</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-prof-list">プロフィール編集</a>
</li>
<li class="custom-tab col my-data-width only-my-data">
<a go="#his-request-list">フォローリクエスト</a>
</li>
</ul>
</div>
<div id="his-tl" class="col s12 tab-content">
<div id="his-tl-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">もっと</button>
</div>
<div id="his-follow-list" class="col s12 tab-content">
<div id="his-follow-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">もっと</button>
</div>
<div id="his-follower-list" class="col s12 tab-content">
<div id="his-follower-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">もっと</button>
</div>
<div id="his-action" class="col s12 tab-content">
他のアカウントを使用してフォロー(解除はできません)<br>
<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>
</div>
<div id="his-list" class="col s12 tab-content">
<div id="his-lists-a"></div>
<div id="his-lists-b"></div>
</div>
<div id="his-fav-list" class="col s12 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>
</div>
<div id="his-blocking-list" class="col s12 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>
</div>
<div id="his-muting-list" class="col s12 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>
</div>
<div id="his-domain-list" class="col s12 tab-content">
<div id="his-domain-list-contents" class="cont-series">
</div>
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">もっと</button>ブロックするドメイン
<br>
<input type="text" placeholder="example.com" id="domainblock">
<button class="btn waves-effect" onclick="addDomainblock()">ブロック</button>
<br>
</div>
<div id="his-prof-list" class="col s12 tab-content">名前
<br>
<input type="text" placeholder="名前" id="his-name-val" width="max-width:150px;">
<br>自己紹介
<br>
<div class="input-field col s12">
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
<label for="his-des-val">自己紹介</label>
</div>
<button onclick="profedit()" class="btn waves-effect indigo">適用</button>
<br>
<br>プロフィール画像変更:
<span id="prof-change">
<input type="file" onchange="imgChange(this,'avatar')">
</span>
<br>ヘッダー画像変更:
<span id="header-change">
<input type="file" onchange="imgChange(this,'header')">
</span>
</div>
<div id="his-request-list" class="col s12 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>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">一つ前のユーザーデータ</button>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">フォロー</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">ミュート</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">ブロック</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-emp-btn" onclick="empUser()">ユーザー強調</a>
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
</div>
</div>
<!-- Modal Structure Image-->
<div id="imagemodal" class="modal modal-fixed-footer" style="min-width:550px">
<div class="modal-content">
<div id="imagewrap">
<img src="" id="imgmodal">
</div>
<br>
</div>
<div class="modal-footer">
DL:<span id="imgprog"></span>%
<a class="waves-effect white-text" onclick="zoom(2)">
<i class="material-icons">zoom_in</i>
</a>
<a class="waves-effect white-text" onclick="zoom(0.5)">
<i class="material-icons">zoom_out</i>
</a>
<button class="btn waves-effect purple" onclick="dlImg()">
<i class="material-icons">file_download</i>
</button>
<button class="btn waves-effect brown" onclick="detFromImg()">当該トゥート</button>
<button class="btn waves-effect orange" onclick="imgCont('prev')" id="image-prev">
<i class="material-icons">keyboard_arrow_left</i>
</button>
<button class="btn waves-effect orange" onclick="imgCont('next')" id="image-next">
<i class="material-icons">keyboard_arrow_right</i>
</button>
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">
<i class="material-icons">close</i>
</a>
</div>
</div>
<!-- Modal Structure Video-->
<div id="videomodal" class="modal modal-fixed-footer">
<div class="modal-content">
<video src="" id="video" style="max-width:100%; max-height:100%;" controls >
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
<!--PiP-->
<div id="pip" class="hide pip-bottom pip-left">
<i class="material-icons pip-horiz pointer" onclick="pipHoriz()">chevron_right</i> 
<i class="material-icons pip-vert pointer" onclick="pipVert()">expand_less</i> 
<i class="material-icons pointer" onclick="endPip()">close</i>
<div id="pip-content">
</div>
</div>
<!--左下メッセージ-->
<div id="message">
</div>
<!--Radio Happy(Yui) Taku Inoue-->
<audio src="" id="radio"></audio>
<!--JS-->
<script type="text/javascript" src="./js/common/about.js"></script>
<script type="text/javascript" src="./js/tl/parse.js"></script>
<script type="text/javascript" src="./js/ui/scroll.js"></script>
<script type="text/javascript" src="./js/tl/tl.js"></script>
<script type="text/javascript" src="./js/tl/card.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>
<script type="text/javascript" src="./js/tl/notification.js"></script>
<script type="text/javascript" src="./js/tl/datails.js"></script>
<script type="text/javascript" src="./js/tl/mix.js"></script>
<script type="text/javascript" src="./js/tl/src.js"></script>
<script type="text/javascript" src="./js/tl/filter.js"></script>
<script type="text/javascript" src="./js/tl/tag.js"></script>
<script type="text/javascript" src="./js/tl/list.js"></script>
<script type="text/javascript" src="./js/ui/post-box.js"></script>
<script type="text/javascript" src="./js/ui/layout.js"></script>
<script type="text/javascript" src="./js/login/login.js"></script>
<script type="text/javascript" src="./js/ui/img.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/ui/pip.js"></script>
<script type="text/javascript" src="./js/ui/sort.js"></script>
<script type="text/javascript" src="./js/ui/spotify.js"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
<script type="text/javascript" src="./js/post/secure.js"></script>
<script type="text/javascript" src="./js/post/img.js"></script>
<script type="text/javascript" src="./js/post/status.js"></script>
<script type="text/javascript" src="./js/post/emoji.js"></script>
<script type="text/javascript" src="./js/post/suggest.js"></script>
<script type="text/javascript" src="./js/post/bb-md.js"></script>
<script type="text/javascript" src="./js/userdata/showOnTL.js"></script>
<script type="text/javascript" src="./js/userdata/his-data.js"></script>
<script type="text/javascript" src="./js/userdata/prof-edit.js"></script>
<script type="text/javascript" src="./js/emoji/emojione.js"></script>
<script type="text/javascript" src="./js/emoji/emojipack.js"></script>
<script type="text/javascript" src="./js/emoji/default-emoji.js"></script>
<script type="text/javascript" src="./js/platform/end.js"></script>
<!--
<script type="text/javascript" src="https://dme0ih8comzn4.cloudfront.net/imaging/v2/editor.js"></script>
<script type="text/javascript">
//Adobeエディターのセットアップ関数
function set_adbe_image(){
//<body>内の画像要素を取得
var image = document.getElementById('imgmodal');
//画像編集エディタを利用するための準備
var Editor = new Aviary.Feather({
apiKey: 'ffee425017ab44b18ce95dab98a5cdc1',
language: 'ja',
onSave: function(imageID, newURL) {
console.log(newURL);
},
});
//画像要素をクリックしたら、「編集エディタ」を表示
image.addEventListener('click', function () {
Editor.launch({
//<img>内のidとsrcを取得
image: image.id,
url: image.src
});
});
}
//エディター動作割り当てる
set_adbe_image();
</script>-->

5
app/index.start.html Normal file
View File

@@ -0,0 +1,5 @@
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" />
</head>

View File

@@ -3,20 +3,33 @@ $(function($) {
$(window).keydown(function(e) {
var hasFocus = $('input').is(':focus');
var hasFocus2 = $('textarea').is(':focus');
if(document.getElementById("webview")){
if($("#webviewsel:checked").val()){
var wv=false;
}else{
var wv=true;
}
}else{
var wv=true;
}
//Ctrl+Shift+Enter:Lgen
if (event.metaKey || event.ctrlKey && wv) {
if (event.shiftKey) {
if (e.keyCode === 13) {
post('local');
return false;
}
}
}
//Ctrl+Enter:投稿
if (event.ctrlKey) {
if (event.metaKey || event.ctrlKey && wv) {
if (e.keyCode === 13) {
post();
return false;
}
}
//Shift+Enter:Markdown
if (event.shiftKey) {
if (e.keyCode === 13) {
brInsert(" \n");
return false;
}
}
//Shift+Space:Markdownゼロ幅スペース
if (event.shiftKey) {
if (e.keyCode === 32) {
@@ -25,17 +38,17 @@ $(function($) {
}
}
//Esc:消す
if (e.keyCode === 27) {
if (e.keyCode === 27 && wv) {
hide();
return false;
}
//F5リロード
if (e.keyCode === 116) {
if (e.keyCode === 116 && wv) {
location.href = "index.html";
return false;
}
//Ctrl+R:ランキング
if (event.ctrlKey) {
if ((event.metaKey || event.ctrlKey) && wv) {
if (e.keyCode === 82) {
if(localStorage.getItem("kirishima")){
window.open("https://astarte.thedesk.top");
@@ -43,26 +56,35 @@ $(function($) {
}
}
//Ctrl+Sift+C:全消し
if (event.ctrlKey && event.shiftKey) {
if (((event.metaKey || event.ctrlKey) && event.shiftKey )&& wv) {
if (e.keyCode === 67) {
clear();
return false;
}
}
//Ctrl+Sift+N:NowPlaying
if (event.ctrlKey && event.shiftKey) {
if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
if (e.keyCode === 78) {
show();
nowplaying()
return false;
}
}
//input/textareaにフォーカスなし時
if (!hasFocus && !hasFocus2) {
if ((!hasFocus && !hasFocus2 ) && wv) {
if(!wv){
return true;
}
//Ctrl+V:いつもの
if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 86) {
show();
}
}
//X:開閉
if (e.keyCode === 88) {
if ($("#post-box").hasClass("hidenbox")) {
if (!$("#post-box").hasClass("appear")) {
show();
$('textarea').focus();
} else {
hide();
}
@@ -70,47 +92,49 @@ $(function($) {
}
//N:新トゥート
if (e.keyCode === 78) {
if ($("#post-box").hasClass("hidenbox")) {
if (!$("#post-box").hasClass("appear")) {
show();
}
$('textarea').focus();
return false;
}
//E:拡張On/Off
if (e.keyCode === 69) {
zoomBox();
return false;
//Ctrl+E:全ての通知未読を既読にする
if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 69) {
allNotfRead();
return false;
}
}
//Ctrl+Space:読み込み
if (event.ctrlKey) {
if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 32) {
parseColumn();
return false;
}
}
//Ctrl+Sift+S:設定
if (event.ctrlKey && event.shiftKey) {
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 83) {
location.href = "setting.html";
return false;
}
}
//Ctrl+Sift+M:アカマネ
if (event.ctrlKey && event.shiftKey) {
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 77) {
location.href = "acct.html";
return false;
}
}
//Ctrl+Sift+P:プロフ
if (event.ctrlKey && event.shiftKey) {
if ((event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 80) {
profShow()
return false;
}
}
//数字:TL
if (event.ctrlKey) {
if (event.metaKey || event.ctrlKey) {
if (e.keyCode >= 49 && e.keyCode <= 57) {
var kz=e.keyCode-49;
goColumn(kz);
@@ -119,8 +143,8 @@ $(function($) {
}
}
//textareaフォーカス時
if (hasFocus2) {
if (event.ctrlKey) {
if (hasFocus2 && wv) {
if (event.metaKey || event.ctrlKey) {
//Ctrl+B:太字
if (e.keyCode === 66) {
tagsel('b');
@@ -141,16 +165,24 @@ $(function($) {
tagsel('s');
return false;
}
//C+S+(No):ワンクリ
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode >= 49 && e.keyCode <= 51) {
var no=e.keyCode-48;
if(localStorage.getItem("oks-"+no)){$("#textarea").val($("#textarea").val()+localStorage.getItem("oks-"+no))}
return false;
}
}
}
}
//イメージビューワー切り替え
if (e.keyCode === 37) {
if (e.keyCode === 37 &&wv) {
if ($("#imagemodal").hasClass("open")) {
imgCont('prev');
return false;
}
}
if (e.keyCode === 39) {
if (e.keyCode === 39 && wv) {
if ($("#imagemodal").hasClass("open")) {
imgCont('next');
return false;

33
app/js/common/sha256.js Normal file
View File

@@ -0,0 +1,33 @@
/*
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
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;
}

View File

@@ -1,11 +1,25 @@
//バージョンチェッカー
function verck(ver) {
localStorage.setItem("ver", ver);
function verck(ver,winstore) {
if(localStorage.getItem("ver")!=ver){
localStorage.setItem("ver", ver);
console.log("Thank you for your update");
$(document).ready(function(){
$('#releasenote').modal('open');
verp=ver.replace( '(', '');
verp=verp.replace( '.', '-');
verp=verp.replace( '.', '-');
verp=verp.replace( '[', '-');
verp=verp.replace( ']', '');
verp=verp.replace( ')', '');
verp=verp.replace( ' ', '_');
console.log(verp);
$("#release-"+verp).show();
});
}
var l = 5;
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var cl = c.length;
var r = "";
for(var i=0; i<l; i++){
@@ -22,15 +36,148 @@ function verck(ver) {
}).then(function(mess) {
console.log(mess);
if (mess) {
if (mess.desk == ver) {
todo("お使いのバージョン" + mess.desk + "は最新です。");
//betaならアプデチェックしない
} else if (ver != "beta") {
var electron = require("electron");
var remote=electron.remote;
var platform=remote.process.platform;
if(platform=="darwin"){
var newest=mess.desk_mac;
}else{
var newest=mess.desk;
}
if (newest == ver) {
todo(lang.lang_version_usever.replace("{{ver}}" ,mess.desk));
//betaかWInstoreならアプデチェックしない
} else if (ver.indexOf("beta")!=-1 || winstore) {
}else{
localStorage.removeItem("instance")
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
if(localStorage.getItem("new-ver-skip")){
if(localStorage.getItem("next-ver")!=newest){
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}else{
todo(lang.lang_version_skipver);
}
}else{
var ipc = electron.ipcRenderer;
ipc.send('update', "true");
}
}
}
});
}
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) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(mess) {
console.log(mess.length);
if(mess.length<1){
return false;
}else{
var last=localStorage.getItem("last-notice-id")
localStorage.setItem("last-notice-id",mess[0].ID)
for(i=0;i<mess.length;i++){
var obj=mess[i];
if(obj.ID*1<=last){
break;
}else{
var show=true;
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){
show=true;
}else{
show=false;
}
}
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){
show=true;
}
});
}
}
if(show){
Materialize.toast(obj.Text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
}
}
}
}
});
infows = new WebSocket("wss://thedesk.top/ws/");
infows.onopen = function(mess) {
console.log(tlid + ":Connect Streaming Info:");
console.log(mess);
}
infows.onmessage = function(mess) {
console.log(":Receive Streaming:");
console.log(JSON.parse(mess.data));
var obj=JSON.parse(mess.data);
if(obj.type!="counter"){
if(obj.id*1<=localStorage.getItem("last-notice-id")){
}else{
localStorage.setItem("last-notice-id",obj.id)
var show=true;
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){
show=true;
}else{
show=false;
}
}
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){
show=true;
}
});
}
}
if(show){
Materialize.toast(obj.text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
}
}
}else{
$("#persons").text(obj.text);
}
}
infows.onerror = function(error) {
console.error("Error closing:info");
console.error(error);
return false;
};
infows.onclose = function() {
console.error("Closing:info");
};
}

View File

@@ -9,25 +9,40 @@ var defaultemoji={
place:place,
symbol:symbol
};
var defaultemojiname={
activity:"活動",
flag:"国旗",
food:"食べ物",
nature:"自然",
object:"もの",
people:"ひと",
place:"場所",
symbol:"記号"
};
if(lang=="ja"){
var defaultemojiname={
activity:"活動",
flag:"国旗",
food:"食べ物",
nature:"自然",
object:"もの",
people:"ひと",
place:"場所",
symbol:"記号"
};
}else{
var defaultemojiname={
activity:"Activities",
flag:"Flags",
food:"Foods",
nature:"Nature",
object:"Tools",
people:"People",
place:"Places",
symbol:"Symbols"
};
}
function defaultEmoji(target){
var json=defaultemoji[target];
var emojis="";
Object.keys(json).forEach(function(key) {
var emoji = json[key];
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'./img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'../../img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
});
$("#emoji-list").html(emojis);
$("#now-emoji").text(defaultemojiname[target]+"の絵文字");
$("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
console.log(target);
$(".emoji-control").addClass("hide");
}
function customEmoji(){
@@ -36,10 +51,10 @@ function customEmoji(){
emojiList('home')
}
function defEmoji(target){
if(target=="thinking_face"){
target="thinking";
}
var emoji=emojione.shortnameToUnicode(":"+target+":");
var emojiraw = newpack.filter(function(item, index){
if (item.short_name == target) return true;
});
emoji=twemoji.convert.fromCodePoint(emojiraw[0].unified);
var now = $("#textarea").val();
var selin = localStorage.getItem("cursor");
var now = $("#textarea").val();
@@ -53,6 +68,11 @@ function defEmoji(target){
console.log(emoji);
$("#textarea").val(newt);
$("#textarea").focus();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
}
localStorage.setItem("cursor", selin);
}
function faicon(){
var json=faicons;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

@@ -0,0 +1,234 @@
//commonError
var lang={
"language":"en",
"lang_toot":"Toot",
"lang_there":"Yes",
"lang_nothing":"None",
"lang_yesno":"Yes",
"lang_no":"No",
"lang_progress":"Wait...",
"lang_edit":"Edit",
"lang_del":"Delete",
"lang_add":"Add",
"lang_fatalerroroccured":"Some errors are occured, please restart TheDesk.",
"lang_speech":"Google US English",
//language.html
"lang_lang":"Language",
"lang_langlocale":"English",
"lang_back":"Back",
"lang_set":"Set",
"lang_langadd":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help.",
//common/version.js
"lang_version_usever":"No update is found({{ver}})",
"lang_version_skipver":"Update was ignored.",
//login
//login/login.js
"lang_login_noauth":"Show TL of unlogined accounts",
//login/manager.js
"lang_manager_info":"About this instance",
"lang_manager_refresh":"Refresh",
"lang_manager_delete":"Logout",
"lang_manager_color":"Account Color",
"lang_manager_confirm":"is about to logout. Continue?",
"lang_manager_mainAcct":"Done:choose main account",
"lang_manager_def":"Default",
"lang_manager_none":"None",
"lang_manager_godev":"Open DevCenter of Misskey. We show also an official documents to refer.",
//post/bb-md.js
"lang_bbmd_misskey":"TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
//post/emoji.js
"lang_emoji_get":"Get emojis",
"lang_emoji_custom":"Custom emojis",
"lang_defaultemojis_text":"Emojis about {{cat}}",
//post/img.js
"lang_postimg_previewdis":"cannot preview",
"lang_postimg_aftupload":"You cannot change accounts after uploading.",
//post/post.js
"lang_post_tagTL":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?",
"lang_post_tagVis":"This toot(not 'public' toot) is not shown on this tag's TL.",
"lang_post_cwtitle":"Auto CW Alert",
"lang_post_cwtxt":"You are about to post longer toot than you set.\nWarning text:",
"lang_post_btn1":"Cancel (will not post)",
"lang_post_btn2":"Make text hidden automatically",
"lang_post_btn3":"Continue to post",
//post/status.js
"lang_status_favWarn":"It will take a miunte to favourite a remote toot.",
"lang_status_btWarn":"It will take a miunte to boost a remote toot.",
"lang_status_follow":"Follow",
"lang_status_unfollow":"Unfollow",
"lang_status_block":"Block",
"lang_status_unblock":"Unblock",
"lang_status_mute":"Mute",
"lang_status_unmute":"Unmute",
"lang_status_redraft":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1.",
"lang_status_emphas":"'s toots are emphasized. Please reload after this action.",
"lang_status_unemphas":"'s toots are not emphasized. Please reload after this action.",
"lang_status_unendorse":"Not feature on profile",
"lang_status_endorse":"Feature on profile",
//post/suggest.js
"lang_suggest_nodata":"Please get emojis list in order to show suggestion.",
//post/use-txtbox.js
"lang_usetxtbox_reply":"Reply Mode. Ctrl+Shift+C to clear.",
//tl/card.js
"lang_cards_check":" check",
"lang_cards_pip":"PiP mode",
//tl/details.js
"lang_details_nodata":"No data",
"lang_details_filtered":"Filtered toot",
"lang_details_embed":"Embed HTML is cliped.",
"lang_details_url":"URL of this toot is cliped.",
"lang_details_txt":"Content of this toot is cliped.",
//tl/filter.js
"lang_filter_nodata":"No data",
"lang_filter_errordegree":"Please check a context",
//tl/list.js
"lang_list_nodata":"No data",
"lang_list_show":"Show",
"lang_list_users":"Users list",
"lang_list_nouser":"No users in this list.",
"lang_list_add":"Add to the list",
"lang_list_remove":"Remove from the list",
//tl/notification.js
"lang_notf_new":" new notifications",
//tl/speech.js
"lang_speech_refresh":"Save value about TTS config",
//tl/src.js
"lang_src_ts":"chronological order",
"lang_src_people":" people toot",
//tl/tag.js
"lang_tags_always":"Always toots with ",
"lang_tags_realtime":"Tag-stream toot",
"lang_tags_tagunpin":"Unpin {{tag}}",
"lang_tags_tagwarn":"When you toot without {{tag}}, tag-streaming mode will be off.",
//tl/tl.js
"lang_tl_media":"Media",
"lang_tl_reconnect":"Reconnect to streaming API",
//ui/layout.js
"lang_layout_gotop":"Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
"lang_layout_thisacct":"{{notf}} of this account",
"lang_layout_delthis":"Remove this column",
"lang_layout_setthis":"Preferences of this column",
"lang_layout_mediafil":"Media filtering",
"lang_layout_linkana":"Auto Link Analyzer",
"lang_layout_linkanades":"Auto link analyzer",
"lang_layout_tts":"Text to speech ",
"lang_layout_reconnect":"Reconnect to streaming API",
"lang_layout_headercolor":"Header color of this column",
"lang_layout_nodata":"[No data]<br>F5/⌘+R to reload",
"lang_layout_dm":"Direct Message",
"lang_layout_webviewmode":"Prefer WebView",
"lang_excluded":"Excluded type of notification",
"lang_layout_excludingbt":"Show BT mode(OFF/Exclude BT/Only BT)",
//ui/spotify.js
"lang_spotify_img":"Attach an album artwork",
"lang_spotify_imgno":"Not attach an album artwork",
"lang_spotify_acct":"Connect TheDesk to Spotify",
"lang_spotify_np":"Done:templete of NowPlaying",
"lang_setting_npprovide":"NowPlaying provider:{{set}}",
//userdata/his-data.js
"lang_hisdata_frcreq":"Required Mastodon 2.4.3 and above",
"lang_hisdata_frcwarn":"Unfollow accounts will be shown.",
"lang_hisdata_taketime":"It will take 30s ~ several minutes",
"lang_hisdata_notonmisskey":"Misskey is unable to request.",
//userdata/showOnTL.js
"lang_showontl_movetxt":"This account was moved",
"lang_showontl_movebtn":"Continue on the new account",
"lang_showontl_botacct":"[bot]",
"lang_showontl_followed":"Following you",
"lang_showontl_notf":"Notification ",
"lang_showontl_domain":"Domain ",
"lang_showontl_listwarn":"Follow to add this user to lists.",
//parse
"lang_parse_mentioned":" replied to you",
"lang_parse_faved":" favourited your toot",
"lang_parse_bted":" boosted your toot",
"lang_parse_btedsimple":" boosted",
"lang_parse_notftime":"Actioned at",
"lang_parse_cwshow":"Show",
"lang_parse_fulltext":"Full size text:",
"lang_parse_autofold":"Auto folded",
"lang_parse_more":"More",
"lang_parse_url":"URL Analyzer",
"lang_parse_tagTL":"Timeline of {{tag}}",
"lang_parse_tagtoot":"Toot with {{tag}}",
"lang_parse_tagpin":"Pin {{tag}}",
"lang_parse_public":"Public",
"lang_parse_unlisted":"Unlisted",
"lang_parse_private":"Private",
"lang_parse_direct":"Direct",
"lang_parse_clickcopy":"Click to copy text of this toot",
"lang_parse_clickcopyurl":"Click to copy URL of this toot",
"lang_parse_trans":"Translate to Japanese",
"lang_parse_replyto":"Reply to this toot",
"lang_parse_bt":"Boost this toot",
"lang_parse_fav":"Favourite this toot",
"lang_parse_quote":"Quote this toot",
"lang_parse_del":"Delete this toot",
"lang_parse_pin":"Pin this toot",
"lang_parse_det":"Details via your main account.",
"lang_parse_redraft":"Delete & re-draft",
"lang_parse_followed":"Followed you",
"lang_parse_clientop":"Operation of this client",
"lang_parse_clienttxt":" will be",
"lang_parse_clientno":"done nothing",
"lang_parse_clientemp":"emphasized(/not emphasized)",
"lang_parse_clientmute":"muted",
"lang_parse_mute":" will be muted. You can remove on preferences.",
"lang_parse_voted":"Voted",
"lang_parse_vote":"Voted",
"lang_parse_unvoted":"Show the result without voting",
//misskey
"lang_misskeyparse_renote":"Repost",
"lang_misskeyparse_renoteqt":"Renote",
"lang_misskeyparse_reaction":"Reaction",
"lang_misskeyparse_tagnostr":"No streaming API on Tag TLs",
"lang_misskeyparse_listnostr":"No streaming API on List TLs",
"lang_misskeyparse_home":"Home",
"lang_misskeyparse_followers":"Follower",
"lang_misskeyparse_specified":"Specified User",
"lang_misskeyparse_qt":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear",
"lang_misskeyparse_renoted":" renoted your following post.",
"lang_misskeyparse_quoted":" quoted your following post.",
"lang_misskeyparse_reacted":" reacted your following post.",
//setting
"lang_setting_time":"Time format:{{set}}",
"lang_setting_theme":"Theme:{{set}}",
"lang_setting_nsfw":"NSFW:{{set}}",
"lang_setting_cw":"CW:{{set}}",
"lang_setting_cwtext":"Default CW text:{{set}}",
"lang_setting_cws":"Always CW on:{{set}}",
"lang_setting_rp":"Reply counter:{{set}}",
"lang_setting_vis":"Default visibility:{{set}}",
"lang_setting_popup":"Popup notification:{{set}}",
"lang_setting_off":"Off",
"lang_setting_s":"s",
"lang_setting_box":"Default toot box action:{{set}}",
"lang_setting_gif":"GIF:{{set}}",
"lang_setting_selt":"Auto fold:{{set1}} lines and above, {{set2}} letters and above",
"lang_setting_autocw":"Auto CW:{{set1}} lines and above, {{set2}} letters and above",
"lang_setting_width":"Minimam width:{{set}}",
"lang_setting_fixwidth":"TweetDeck fixed width:{{set}}px",
"lang_setting_img":"After posting an image:{{set}}",
"lang_setting_font":"Fonts:{{set}}",
"lang_setting_default":"default font",
"lang_setting_size":"Font size:{{set}}px",
"lang_setting_imgheight":"Image height:{{set}}px",
"lang_setting_ticker":"#InstanceTicker:{{set}}px",
"lang_setting_animation":"Animation: {{set}}",
"lang_setting_tag":"Tag TL:{{set}}",
"lang_setting_boxConfirm":"Post box:{{set}}",
"lang_setting_ul":"Native locale:{{set}}",
"lang_setting_notf":"Native notification:{{set}}",
"lang_setting_quote":"Quote format:{{set}}",
"lang_setting_via":"Via:{{set}}",
"lang_setting_mov":"Action buttons hiding:{{set}}",
"lang_setting_setasread":"Notification markers:{{set}}",
"lang_setting_main":"Default account:{{set}}",
"lang_setting_sec":"Secondary toot button:{{set}}",
"lang_setting_ksref":"Keyboard shortcuts are refreshed.",
"lang_setting_nomuting":"No client is muted.",
"lang_setting_notftest":" Notification test ",
"lang_setting_notftestprof":"Your icon is shown.",
"lang_setting_exportwarn":"Only important data will be exported. You must keep this data secure.",
"lang_setting_importwarn":"All data will be deleted.",
}

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

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

189
app/js/lang/parse.lang.js Normal file
View File

@@ -0,0 +1,189 @@
var lang_parse_mentioned={
"ja":"が返信しました",
"en":" replied to you"
}
var lang_parse_faved={
"ja":"がお気に入り登録しました",
"en":" favourited your toot"
}
var lang_parse_bted={
"ja":"がブーストしました",
"en":" boosted your toot"
}
var lang_parse_btedsimple={
"ja":"がブースト",
"en":" boosted"
}
var lang_parse_notftime={
"ja":"通知された時間",
"en":"Actioned at"
}
var lang_parse_cwshow={
"ja":"見る",
"en":"Show"
}
var lang_parse_fulltext={
"ja":"以下全文",
"en":"Full size text:"
}
var lang_parse_autofold={
"ja":"自動折り畳み",
"en":"Auto folded"
}
var lang_parse_more={
"ja":"続き...",
"en":"More"
}
var lang_parse_url={
"ja":"URL解析",
"en":"URL Analyzer"
}
var lang_parse_tagTL={
"ja":"{{tag}}のタイムライン",
"en":"Timeline of {{tag}}"
}
var lang_parse_tagtoot={
"ja":"{{tag}}でトゥート",
"en":"Toot with {{tag}}"
}
var lang_parse_tagpin={
"ja":"{{tag}}をよく使うタグへ",
"en":"Pin {{tag}}"
}
var lang_parse_public={
"ja":"公開",
"en":"Public"
}
var lang_parse_unlisted={
"ja":"未収載",
"en":"Unlisted"
}
var lang_parse_private={
"ja":"非公開",
"en":"Private"
}
var lang_parse_direct={
"ja":"ダイレクト",
"en":"Direct"
}
var lang_parse_clickcopy={
"ja":"クリックして本文をコピー",
"en":"Click to copy text of this toot"
}
var lang_parse_clickcopyurl={
"ja":"クリックしてトゥートURLをコピー",
"en":"Click to copy URL of this toot"
}
var lang_parse_trans={
"ja":"このトゥートを日本語に翻訳",
"en":"Translate to Japanese"
}
var lang_parse_replyto={
"ja":"このトゥートに返信",
"en":"Reply to this toot"
}
var lang_parse_bt={
"ja":"このトゥートをブースト",
"en":"Boost this toot"
}
var lang_parse_fav={
"ja":"このトゥートをお気に入り登録",
"en":"Favourite this toot"
}
var lang_parse_quote={
"ja":"このトゥートを引用",
"en":"Quote this toot"
}
var lang_parse_del={
"ja":"このトゥートを削除",
"en":"Delete this toot"
}
var lang_parse_pin={
"ja":"このトゥートをピン留め",
"en":"Pin this toot"
}
var lang_parse_det={
"ja":"詳細(メインアカウント経由)",
"en":"Details via your main account."
}
var lang_parse_redraft={
"ja":"このトゥートを削除して再編集",
"en":"Delete & re-draft"
}
var lang_parse_followed={
"ja":"フォローされました。",
"en":"Followed you"
}
var lang_parse_clientop={
"ja":"クライアント処理",
"en":"Operation of this client"
}
var lang_parse_clienttxt={
"ja":"に対する処理を選択してください。",
"en":" will be"
}
var lang_parse_clientno={
"ja":"何もしない",
"en":"done nothing"
}
var lang_parse_clientemp={
"ja":"強調表示/解除",
"en":"emphasized(/not emphasized)"
}
var lang_parse_clientmute={
"ja":"ミュート",
"en":"muted"
}
var lang_parse_mute={
"ja":"ミュートします。設定から解除できます。",
"en":" will be muted. You can remove on preferences."
}
//misskey
var lang_misskeyparse_renote={
"ja":"再投稿",
"en":"Repost"
}
var lang_misskeyparse_renoteqt={
"ja":"引用",
"en":"Renote"
}
var lang_misskeyparse_reaction={
"ja":"リアクション",
"en":"Reaction"
}
var lang_misskeyparse_tagnostr={
"ja":"タグTLはストリーミング非対応です。",
"en":"No streaming API on Tag TLs"
}
var lang_misskeyparse_listnostr={
"ja":"リストTLはストリーミング非対応です。",
"en":"No streaming API on List TLs"
}
var lang_misskeyparse_home={
"ja":"ホーム",
"en":"Home"
}
var lang_misskeyparse_followers={
"ja":"フォロワー",
"en":"Follower"
}
var lang_misskeyparse_specified={
"ja":"ユーザー指定",
"en":"Specified User"
}
var lang_misskeyparse_qt={
"ja":"MisskeyのRenote(引用モード)中:Ctrl+Shift+Cでクリア",
"en":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear"
}
var lang_misskeyparse_renoted={
"ja":"がRepost",
"en":" renoted your following post."
}
var lang_misskeyparse_quoted={
"ja":"が引用",
"en":" quoted your following post."
}
var lang_misskeyparse_reaction={
"ja":"がリアクション",
"en":" reacted your following post."
}

152
app/js/lang/setting.lang.js Normal file
View File

@@ -0,0 +1,152 @@
var lang_setting_time={
"ja":"時間設定を{{set}}に設定しました。",
"en":"Time format:{{set}}"
}
var lang_setting_theme={
"ja":"テーマ設定を{{set}}に設定しました。",
"en":"Theme:{{set}}"
}
var lang_setting_nsfw={
"ja":"画像表示設定を{{set}}に設定しました。",
"en":"NSFW:{{set}}"
}
var lang_setting_cw={
"ja":"テキスト表示設定を{{set}}に設定しました。",
"en":"CW:{{set}}"
}
var lang_setting_cwtext={
"ja":"デフォルトの警告文を「{{set}}」に設定しました。",
"en":"Default CW text:{{set}}"
}
var lang_setting_cws={
"ja":"標準でCW:{{set}}",
"en":"Always CW on:{{set}}"
}
var lang_setting_rp={
"ja":"リプライ数表示:{{set}}",
"en":"Reply counter:{{set}}"
}
var lang_setting_vis={
"ja":"デフォルトの公開設定を{{set}}に設定しました。",
"en":"Default visibility:{{set}}"
}
var lang_setting_popup={
"ja":"ポップアップお知らせを{{set}}に設定しました。",
"en":"Popup notification:{{set}}"
}
var lang_setting_off={
"ja":"オフ",
"en":"Off"
}
var lang_setting_s={
"ja":"秒",
"en":"s"
}
var lang_setting_box={
"ja":"デフォルトでのボックスの挙動を{{set}}に設定しました。",
"en":"Default toot box action:{{set}}"
}
var lang_setting_gif={
"ja":"アイコンアニメーション再生を{{set}}に設定しました。",
"en":"GIF:{{set}}"
}
var lang_setting_selt={
"ja":"{{set1}}行以上または{{set2}}文字以上でテキストを隠します。",
"en":"Auto fold:{{set1}} lines and above, {{set2}} letters and above"
}
var lang_setting_autocw={
"ja":"{{set1}}行以上または{{set2}}文字以上で警告を表示します。",
"en":"Auto CW:{{set1}} lines and above, {{set2}} letters and above"
}
var lang_setting_width={
"ja":"横幅最低を{{set}}pxに設定しました。",
"en":"Minimam width:{{set}}"
}
var lang_setting_img={
"ja":"画像投稿後の設定を「{{set}}」に設定しました。",
"en":"After posting an image:{{set}}"
}
var lang_setting_font={
"ja":"フォントを{{set}}に設定しました。",
"en":"Fonts:{{set}}"
}
var lang_setting_default={
"ja":"デフォルト",
"en":"default font"
}
var lang_setting_size={
"ja":"フォントサイズを{{set}}pxに設定しました。",
"en":"Font size:{{set}}px"
}
var lang_setting_imgheight={
"ja":"画像高さを{{set}}pxに設定しました。",
"en":"Image height:{{set}}px"
}
var lang_setting_ticker={
"ja":"#InstanceTicker使用を{{set}}に設定しました。",
"en":"#InstanceTicker:{{set}}px"
}
var lang_setting_tag={
"ja":"タグの取得範囲を「{{set}}」に設定しました。",
"en":"Tag TL:{{set}}"
}
var lang_setting_box={
"ja":"投稿ボックスを{{set}}",
"en":"Post box:{{set}}"
}
var lang_setting_ul={
"ja":"独自ロケール設定を{{set}}に設定しました。",
"en":"Native locale:{{set}}"
}
var lang_setting_notf={
"ja":"ネイティブ通知を{{set}}に設定しました。",
"en":"Native notification:{{set}}"
}
var lang_setting_quote={
"ja":"引用形式を{{set}}に設定しました。",
"en":"Quote format:{{set}}"
}
var lang_setting_via={
"ja":"via表示を{{set}}に設定しました。",
"en":"Via:{{set}}"
}
var lang_setting_mov={
"ja":"アクションボタン非表示を{{set}}に設定しました。",
"en":"Action buttons hiding:{{set}}"
}
var lang_setting_setasread={
"ja":"通知カラム存在時新着非表示を{{set}}に設定しました。",
"en":"Notification markers:{{set}}"
}
var lang_setting_main={
"ja":"起動時・投稿時のアカウントを{{set}}に設定しました。",
"en":"Default account:{{set}}"
}
var lang_setting_sec={
"ja":"セカンダリートゥートボタン:{{set}}",
"en":"Secondary toot button:{{set}}"
}
var lang_setting_ksref={
"ja":"キーボードショートカットが更新されました。",
"en":"Keyboard shortcuts are refreshed."
}
var lang_setting_nomuting={
"ja":"ミュートしているクライアントはありません。",
"en":"No client is muted."
}
var lang_setting_notftest={
"ja":"通知テスト",
"en":" Notification test "
}
var lang_setting_notftestprof={
"ja":"アイコンはあなたのアカウントのものです。",
"en":"Your icon is shown."
}
var lang_setting_exportwarn={
"ja":"重要なデータのみエクスポートされます。エクスポートされたデータは外部に公開しないでください。全ての認証データが含まれています。",
"en":"Only important data will be exported. You must keep this data secure."
}
var lang_setting_importwarn={
"ja":"全てのデータがリセットされます。",
"en":"All data will be deleted."
}

View File

@@ -1,51 +1,110 @@
//入力時にハッシュタグと@をサジェスト
var timer = null;
//インスタンスリスト
var idata={
"kirishima.cloud":"instance",
"kirishima.cloud_name":"アスタルテ",
"kirishima.cloud_letters":"6229",
"kirishima.cloud_bbcode":"enabled",
"kirishima.cloud_markdown":"enabled",
"kirishima.cloud_glitch":"enabled",
"kirishima.cloud_public":"パブリックタイムライン",
"minohdon.jp":"instance",
"minohdon.jp_name":"箕面丼",
"minohdon.jp_letters":"500",
"minohdon.jp_bbcode":"disabled",
"minohdon.jp_markdown":"disabled",
"minohdon.jp_glitch":"disabled",
"knzk.me":"instance",
"knzk.me_name":"神崎丼",
"knzk.me_letters":"5000",
"knzk.me_bbcode":"disabled",
"knzk.me_markdown":"disabled",
"knzk.me_glitch":"enabled",
"mastodos.com":"instance",
"mastodos.com_name":"マストどす",
"mastodos.com_letters":"500",
"mastodos.com_bbcode":"disabled",
"mastodos.com_markdown":"disabled",
"mastodos.com_glitch":"disabled",
"dev.kirishima.cloud":"hidden",
"dev.kirishima.cloud_name":"アスタルテ(Dev)",
"dev.kirishima.cloud_letters":"6229",
"dev.kirishima.cloud_bbcode":"enabled",
"dev.kirishima.cloud_markdown":"enabled",
"dev.kirishima.cloud_glitch":"enabled",
"mstdn.y-zu.org":"instance",
"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
"mstdn.y-zu.org_letters":"500",
"mstdn.y-zu.org_bbcode":"disabled",
"mstdn.y-zu.org_markdown":"enabled",
"mstdn.y-zu.org_glitch":"disabled",
"imastodon.net":"instance",
"imastodon.net_name":"im@stodon",
"imastodon.net_letters":"500",
"imastodon.net_bbcode":"disabled",
"imastodon.net_markdown":"disabled",
"imastodon.net_home":"オフィス",
"imastodon.net_local":"楽屋",
"imastodon.net_notification":"ホワイトボード",
"imastodon.net_public":"ライブステージ",
"imastodon.net_post":"あふぅ",
"imastodon.net_fav":"の頭にティンときたようです",
"imastodon.net_bt":":「わかるわ」",
"imastodon.net_follow":"名刺をいただきました",
"imastodon.net_glitch":"disabled",
"mstdn.osaka":"instance",
"mstdn.osaka_name":"大阪丼",
"mstdn.osaka_letters":"500",
"mstdn.osaka_bbcode":"disabled",
"mstdn.osaka_markdown":"disabled",
"mstdn.osaka_home":"ウチ",
"mstdn.osaka_local":"近所",
"mstdn.osaka_notification":"あめちゃん",
"mstdn.osaka_public":"新世界",
"mstdn.osaka_post":"なんや!",
"mstdn.osaka_fav":"がええやん言いました",
"mstdn.osaka_bt":"がしばいた",
"mstdn.osaka_follow":"ツルまれました",
"mstdn.osaka_glitch":"disabled",
"mstdn.kemono-friends.info":"instance",
"mstdn.kemono-friends.info_name":"ますとどんちほー",
"mstdn.kemono-friends.info_letters":"1024",
"mstdn.kemono-friends.info_bbcode":"disabled",
"mstdn.kemono-friends.info_markdown":"disabled",
"mstdn.kemono-friends.info_home":"なわばり",
"mstdn.kemono-friends.info_local":"ますとどんちほー",
"mstdn.kemono-friends.info_notification":"ねえねえ!",
"mstdn.kemono-friends.info_public":"ジャパリパーク",
"mstdn.kemono-friends.info_post":"がおー!",
"mstdn.kemono-friends.info_fav":":「すごーい」",
"mstdn.kemono-friends.info_bt":":「たーのしー」",
"mstdn.kemono-friends.info_glitch":"disabled",
"itabashi.0j0.jp":"instance",
"itabashi.0j0.jp_name":"板橋丼",
"itabashi.0j0.jp_letters":"1024",
"itabashi.0j0.jp_bbcode":"disabled",
"itabashi.0j0.jp_markdown":"disabled",
"itabashi.0j0.jp_glitch":"disabled",
"theboss.tech":"instance",
"theboss.tech_name":"theboss.tech",
"theboss.tech_letters":"1000",
"theboss.tech_bbcode":"disabled",
"theboss.tech_markdown":"disabled",
"theboss.tech_glitch":"disabled",
"dtp-mstdn.jp":"instance",
"dtp-mstdn.jp_name":"DTP鯖",
"dtp-mstdn.jp_letters":"500",
"dtp-mstdn.jp_bbcode":"disabled",
"dtp-mstdn.jp_markdown":"disabled",
"dtp-mstdn.jp_glitch":"disabled",
"misskey.xyz":"instance",
"misskey.xyz_name":"Misskey",
"misskey.xyz_letters":"1000",
"misskey.xyz_bbcode":"disabled",
"misskey.xyz_markdown":"enabled",
"misskey.xyz_public":"Global",
"misskey.xyz_post":"Post",
"misskey.xyz_fav":" reacted your post.",
"misskey.xyz_bt":" reposted your post.",
};
var input = document.getElementById("url");
var prev_val = input.value;
var oldSuggest;
var suggest;
input.addEventListener("focus", function() {
$("#ins-suggest").html("");
window.clearInterval(timer);
timer = window.setInterval(function() {
var new_val = input.value;
if (prev_val != new_val) {
if (new_val.length > 3) {
var start = "https://instances.social/api/1.0/instances/search?q=" +
new_val;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (!json.error) {
var urls = "もしかして:";
Object.keys(json.instances).forEach(function(key) {
var url = json.instances[key];
urls = urls + ' <a onclick="login(\'' + url.name +
'\')" class="pointer">' + url.name + '</a> ';
});
$("#ins-suggest").html(urls);
}
});
}
oldSuggest = suggest;
prev_value = new_val;
}
}, 1000);
}, false);
input.addEventListener("blur", function() {
window.clearInterval(timer);
}, false);
localStorage.setItem("instance", JSON.stringify(idata));

View File

@@ -5,75 +5,31 @@
localStorage.removeItem("kirishima")
localStorage.removeItem("imas")
localStorage.removeItem("image");
var idata={
"kirishima.cloud":"instance",
"kirishima.cloud_name":"アスタルテ",
"kirishima.cloud_letters":"6229",
"kirishima.cloud_bbcode":"disabled",
"kirishima.cloud_markdown":"disabled",
"minohdon.jp":"instance",
"minohdon.jp_name":"箕面丼",
"minohdon.jp_letters":"500",
"minohdon.jp_bbcode":"disabled",
"minohdon.jp_markdown":"disabled",
"knzk.me":"instance",
"knzk.me_name":"神崎丼",
"knzk.me_letters":"5000",
"knzk.me_bbcode":"disabled",
"knzk.me_markdown":"disabled",
"mastodos.com":"instance",
"mastodos.com_name":"マストどす",
"mastodos.com_letters":"500",
"mastodos.com_bbcode":"disabled",
"mastodos.com_markdown":"disabled",
"dev.kirishima.cloud":"hidden",
"dev.kirishima.cloud_name":"アスタルテ(Dev)",
"dev.kirishima.cloud_letters":"6229",
"dev.kirishima.cloud_bbcode":"enabled",
"dev.kirishima.cloud_markdown":"enabled",
"mstdn.y-zu.org":"instance",
"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
"mstdn.y-zu.org_letters":"500",
"mstdn.y-zu.org_bbcode":"disabled",
"mstdn.y-zu.org_markdown":"disabled",
"imastodon.net":"instance",
"imastodon.net_name":"im@stodon",
"imastodon.net_letters":"500",
"imastodon.net_bbcode":"disabled",
"imastodon.net_markdown":"disabled",
"imastodon.net_home":"オフィス",
"imastodon.net_local":"楽屋",
"imastodon.net_notification":"ホワイトボード",
"imastodon.net_public":"ライブステージ",
"mstdn.osaka":"instance",
"mstdn.osaka_name":"大阪丼",
"mstdn.osaka_letters":"500",
"mstdn.osaka_bbcode":"disabled",
"mstdn.osaka_markdown":"disabled",
"mstdn.osaka_home":"ウチ",
"mstdn.osaka_local":"近所",
"mstdn.osaka_notification":"あめちゃん",
"mstdn.osaka_public":"新世界",
"mstdn.kemono-friends.info":"instance",
"mstdn.kemono-friends.info_name":"ますとどんちほー",
"mstdn.kemono-friends.info_letters":"1024",
"mstdn.kemono-friends.info_bbcode":"disabled",
"mstdn.kemono-friends.info_markdown":"disabled",
"mstdn.kemono-friends.info_home":"なわばり",
"mstdn.kemono-friends.info_local":"ますとどんちほー",
"mstdn.kemono-friends.info_notification":"ねえねえ!",
"mstdn.kemono-friends.info_public":"ジャパリパーク",
"itabashi.0j0.jp":"instance",
"itabashi.0j0.jp_name":"板橋丼",
"itabashi.0j0.jp_letters":"1024",
"itabashi.0j0.jp_bbcode":"disabled",
"itabashi.0j0.jp_markdown":"disabled",
};
localStorage.setItem("instance", JSON.stringify(idata));
localStorage.setItem("mode_misskey.xyz","misskey")
function ck() {
var main = localStorage.getItem("main");
if(!main){
localStorage.setItem("main",0)
}
var domain = localStorage.getItem("domain_0");
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_0_at");
var oldat = localStorage.getItem(domain + "_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=(.+)/);
@@ -81,19 +37,31 @@ function ck() {
var codex=m[2];
if(mode=="manager" || mode=="login"){
code(codex,mode);
}else{
}else{
}
}
if (at) {
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function(key) {
var acct=obj[key];
if(acct.domain){
refresh(key,true)
}
});
console.log(obj);
if (obj[0].domain) {
$("#tl").show();
parseColumn();
multi();
ticker();
multiSelector();
} else {
$("#tl").show();
multi();
$("#post-box").hide();
}
}
ck();
@@ -201,7 +169,7 @@ function code(code,mode) {
function getdata() {
var acct_id = 0;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
fetch(start, {
method: 'GET',
@@ -218,7 +186,7 @@ function getdata() {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
@@ -232,7 +200,9 @@ function getdata() {
name: json["display_name"],
domain: domain,
user: json["acct"],
prof: avatar
prof: avatar,
id: json["id"],
vis: json["source"]["privacy"]
}];
var json = JSON.stringify(obj);
console.log(obj);
@@ -266,14 +236,19 @@ function getdataAdv(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
var avatar=json["avatar"];
//missingがmissingなやつ
if(avatar=="/avatars/original/missing.png"){
avatar="./img/missing.svg";
avatar="../../img/missing.svg";
}
if(json["source"]["privacy"]){
var priv=json["source"]["privacy"];
}else{
var priv="public";
}
var add = {
at: at,
@@ -281,7 +256,8 @@ function getdataAdv(domain, at) {
domain: domain,
user: json["acct"],
prof: avatar,
id: json["id"]
id: json["id"],
vis: priv
};
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
@@ -297,17 +273,86 @@ function getdataAdv(domain, at) {
location.href="index.html";
});
}
//ユーザーデータ更新
function refresh(target,loadskip) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if(obj[target].mode=="misskey"){
return
}
var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials";
console.log(start);
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + obj[target].at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
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);
return;
}
var avatar=json["avatar"];
//missingがmissingなやつ
if(avatar=="/avatars/original/missing.png" || !avatar){
avatar="./img/missing.svg";
}
var ref = {
at: obj[target].at,
name: json["display_name"],
domain: obj[target].domain,
user: json["acct"],
prof: avatar,
id: json["id"],
vis: json["source"]["privacy"]
};
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;
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
if(!loadskip){
load();
}
});
}
//MarkdownやBBCodeの対応、文字数制限をチェック
//絶対ストリーミングを閉じさせないマン
function ckdb(acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
localStorage.removeItem("home_" + acct_id);
localStorage.removeItem("bb_" + acct_id);
localStorage.removeItem("md_" + acct_id);
localStorage.removeItem("local_" + acct_id);
localStorage.removeItem("public_" + acct_id);
localStorage.removeItem("notification_" + acct_id);
localStorage.removeItem("post_" + acct_id);
localStorage.removeItem("fav_" + acct_id);
localStorage.removeItem("bt_" + acct_id);
localStorage.removeItem("followlocale_" + acct_id);
if(domain=="kirishima.cloud"){
localStorage.setItem("kirishima", "true");
$("#ranking-btn").show();
}else if(domain=="imastodon.nat"){
}else if(domain=="imastodon.net"){
localStorage.setItem("imas", "true");
$(".imasonly").show();
}
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var bbcode = domain + "_bbcode";
var letters = domain + "_letters";
if(localStorage.getItem("instance")){
@@ -330,6 +375,8 @@ function ckdb(acct_id) {
localStorage.setItem("md_" + acct_id, "true");
$(".markdown").show();
}else{
$(".anti-markdown").hide();
$(".markdown").hide();
localStorage.removeItem("bb_" + acct_id);
}
if(json[domain + "_home"]){
@@ -345,27 +392,53 @@ function ckdb(acct_id) {
if(json[domain + "_notification"]){
localStorage.setItem("notification_" + acct_id, json[domain + "_notification"]);
}
if(json[domain + "_post"]){
localStorage.setItem("post_" + acct_id, json[domain + "_post"]);
}
if(json[domain + "_fav"]){
localStorage.setItem("fav_" + acct_id, json[domain + "_fav"]);
}
if(json[domain + "_bt"]){
localStorage.setItem("bt_" + acct_id, json[domain + "_bt"]);
}
if(json[domain + "_follow"]){
localStorage.setItem("followlocale_" + acct_id, json[domain + "_follow"]);
}
}
}
//サポートインスタンス取得
function support() {
var json=JSON.parse(localStorage.getItem("instance"));
console.log(json);
Object.keys(json).forEach(function(key) {
var instance = json[key];
if (instance == "instance") {
templete = '<button class="btn waves-effect" onclick="login(\'' + key +
'\')">' + json[key + "_name"] + '(' + key + ')</button>';
$("#support").append(templete);
if(localStorage.getItem("mode_" + domain)!="misskey"){
var start = "https://" + domain + "/api/v1/instance";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
console.error(error);
}).then(function(json) {
console.log(json);
if (json.error) {
return;
}
if(json){
if(json["max_toot_chars"]){
localStorage.setItem("letters_" + acct_id, json["max_toot_chars"]);
}
if(json["urls"]["streaming_api"]){
localStorage.setItem("streaming_" + acct_id, json["urls"]["streaming_api"]);
}
}
});
}else{
}
}
//アカウントを選択…を実装
function multi() {
function multiSelector() {
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [];
@@ -375,41 +448,68 @@ function multi() {
var obj = JSON.parse(multi);
}
var templete;
var last = localStorage.getItem("last-use");
if(localStorage.getItem("mainuse")=="main"){
var last = localStorage.getItem("main");
}else if(localStorage.getItem("last-use")){
var last = localStorage.getItem("last-use");
}else{
var last=0;
}
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">認証せずに見る</option>');
$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
var list = key * 1 + 1;
if (key == last) {
sel = "selected";
var domain = localStorage.getItem("domain_" + key);
var domain = acct.domain;
localStorage.setItem("domain_" + key, domain);
if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"])
}else{
$("#textarea").attr("data-length", 500)
var maxletters = localStorage.getItem("letters_" + key);
if(maxletters>0){
$("#textarea").attr("data-length", maxletters)
}else{
$("#textarea").attr("data-length", 500)
}
}
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">ダイレクトメッセージ</option>');
}else{
$("#direct-add").remove();
if(idata[domain+"_glitch"]){
$("#local-button").removeClass("hide")
}
var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key);
var profimg = acct.prof;
localStorage.setItem("prof_" + key, profimg);
console.log(profimg);
if(!profimg){
profimg="./img/missing.svg";
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
$("#toot-post-btn").text("トゥート("+domain+")");
console.log(domain);
if(domain){
var cc="("+domain+")";
}else{
var cc="";
}
$("#toot-post-btn").text(lang.lang_toot+cc);
if(acct.background && acct.background!="def" && acct.text && acct.text!="def"){
$("#toot-post-btn").removeClass("indigo");
$("#toot-post-btn").css("background-color","#"+acct.background);
$("#toot-post-btn").css("color",acct.text);
}else{
}
if(domain=="kirishima.cloud"){
$("#faicon-btn").show();
}else{
$("#faicon-btn").hide();
}
if(domain=="imastodon.net"){
trendTag();
}else{
$("#trendtag").html("");
}
} else {
sel = "";
}
@@ -420,9 +520,10 @@ function multi() {
});
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
$("#add-acct-sel").append('<option value="noauth">認証せずに見る</option>');
$("#add-acct-sel").append('<option value="noauth">'+lang.lang_login_noauth+'</option><option value="webview">Twitter</option>');
}
$('select').material_select('update');
parseColumn();
}
//バージョンエンコ
@@ -434,3 +535,24 @@ function enc(ver){
var ver = ver.replace( /\]/g , "" );
return ver;
}
//インスタンスティッカー
function ticker() {
var start = "https://toot.app/toot/";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
console.error(error);
}).then(function(json) {
if (json.error) {
return;
}
if(json){
localStorage.setItem("ticker", JSON.stringify(json));
}
});
}

View File

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

View File

@@ -12,35 +12,46 @@ function load() {
$(".now-domain").text(domain);
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [{
at: localStorage.getItem(localStorage.getItem("domain_0") + "_at"),
name: localStorage.getItem("name_0"),
domain: localStorage.getItem("domain_0"),
user: localStorage.getItem("user_0"),
prof: localStorage.getItem("prof_0"),
id: localStorage.getItem("user-id_0")
}];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
var obj = [];
} else {
var obj = JSON.parse(multi);
}
if(obj[0]){
if(!obj[0].at){
obj=[];
localStorage.removeItem("multi");
}
}
console.log(obj);
var templete;
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
var list = key * 1 + 1;
templete = '<div id="acct_' + key + '"><div class="col s1">' + list +
'.</div><div class="col s2"><img src="' + acct.prof + '" width="40" height="40"></div><div class="text col s3">' +
acct.name + '&nbsp;<span class="gray">' + escapeHTML(acct.user) + '@' + acct.domain +
'</span></div><div class="col s2"><button class="btn waves-effect disTar" onclick="data(\'' +
if(acct.background!="def" && acct.text!="def"){
var style='style="background-color:#'+acct.background+'; color:'+acct.text+';"'
}else{
var style=""
}
if(acct.name){
var name=acct.name;
}else{
var name=acct.user;
}
templete = '<div id="acct_' + key + '" class="card" '+style+'><div class="card-content "><span class="lts">' + list +
'.</span><img src="' + acct.prof + '" width="40" height="40"><span class="card-title">' +
name + '</span>' + escapeHTML(acct.user) + '@' + acct.domain +
'</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' +
acct.domain +
'\')">インスタンス情報</button></div><div class="col s2"><button class="btn waves-effect" onclick="refresh(' +
'\')"><i class="material-icons">info</i>'+lang.lang_manager_info+'</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
key +
')">情報更新</button></div><div class="col s2"><button class="btn waves-effect red disTar" onclick="multiDel(' +
key + ')">削除</button><br></div></div>';
')"><i class="material-icons">refresh</i>'+lang.lang_manager_refresh+'</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
key +
')"><i class="material-icons">delete</i>'+lang.lang_manager_delete+'</a><br>'+lang.lang_manager_color+'<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
$("#acct-list").append(templete);
colorpicker(key)
});
multisel();
var acctN = localStorage.getItem("acct");
if (!acctN) {
localStorage.setItem("acct", 0);
@@ -50,17 +61,17 @@ function load() {
var remote=electron.remote;
var platform=remote.process.platform;
if(platform=="win32"){
$("#linux").prop("checked", false);
}else{
$("#linux").prop("checked", true);
}
}
}
//最初に読む
load();
support();
//instances.social
//instances.social/instances API
function data(domain) {
$("#ins-upd").text("Loading...");
$("#ins-add").text("Loading...");
@@ -71,7 +82,7 @@ function data(domain) {
$("#ins-user").text("Loading...");
$("#ins-ver").text("Loading...");
$("#ins-name").text("Loading...");
$("#ins-prof").attr('src', "./img/loading.svg");
$("#ins-prof").attr('src', "../../img/loading.svg");
var start = "https://instances.social/api/1.0/instances/show?name=" + domain;
fetch(start, {
method: 'GET',
@@ -96,7 +107,31 @@ function data(domain) {
$("#ins-per").text(json.uptime * 100);
$("#ins-user").text(json.users);
$("#ins-ver").text(json.version);
}
});
var start = "https://" + domain +"/api/v1/instance";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (!json.error) {
$("#ins-title").text(json.title);
$("#ins-desc").html(json.description);
$("#ins-email").text(json.email);
$("#ins-toot").text(json.stats.status_count);
$("#ins-user").text(json.stats.user_count);
$("#ins-ver").text(json.version);
$("#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);
}
});
}
@@ -105,26 +140,127 @@ function data(domain) {
function multiDel(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] + "を削除します")) {
//削除確認ダイアログ
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
Object.keys(obj).forEach(function(key) {
var nk=key-1;
//公開範囲(差分のみ)
if(key>=target){
var oldvis=localStorage.getItem("vis-memory-"+key);
console.log(oldvis);
if(oldvis){
localStorage.setItem("vis-memory-"+nk,oldvis);
}
}
//独自ロケール
localStorage.removeItem("home_" + key);
localStorage.removeItem("local_" + key);
localStorage.removeItem("public_" + key);
localStorage.removeItem("notification_" + key);
//アクセストークンとドメイン、プロフ(差分)
if(key>target){
var olddom=localStorage.getItem("domain_"+key);
localStorage.setItem("domain_"+nk,olddom);
var oldat=localStorage.getItem("acct_"+key+"_at");
localStorage.setItem("acct_"+nk+"_at",oldat);
localStorage.setItem("name_" + nk, localStorage.getItem("name_" + key));
localStorage.setItem("user_" + target, localStorage.getItem("user_" + key));
localStorage.setItem("user-id_" + target, localStorage.getItem("user-id_" + key));
localStorage.setItem("prof_" + target, localStorage.getItem("prof_" + key));
}
});
//とりあえず消す
obj.splice(target, 1);
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
//カラムデータコンフリクト
var col = localStorage.getItem("column");
var oldcols = JSON.parse(col);
var newcols=[];
Object.keys(oldcols).forEach(function(key) {
var nk=key-1;
var oldcol=oldcols[key];
if(target<oldcol.domain){
var newdom=oldcol.domain-1;
}else{
var newdom=oldcol.domain;
}
var type=oldcol.type;
//消した垢のコラムじゃないときコピー
if(target!=oldcol.domain){
var add = {
domain: newdom,
type: type
};
newcols.push(add);
}
});
var json = JSON.stringify(newcols);
localStorage.setItem("column", json);
}
}
function multiDel2(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
obj.splice(target, 1);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
Object.keys(obj).forEach(function(key) {
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);
}
}
localStorage.removeItem("home_" + key);
localStorage.removeItem("local_" + key);
localStorage.removeItem("public_" + key);
localStorage.removeItem("notification_" + key);
refresh(key);
});
var col = localStorage.getItem("column");
if (!col) {
var obj = [{
domain: 0,
type: 'local'
}];
localStorage.setItem("card_0","true");
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
} else {
var cobj = JSON.parse(col);
}
Object.keys(cobj).forEach(function(key) {
var column = cobj[key];
if(column.domain>target){
var nk=key-1;
column.domain=nk;
cobj[key]=column;
}else if(column.domain==target){
localStorage.removeItem("card_" + tlid);
cobj.splice(key, 1);
}
});
var json = JSON.stringify(column);
localStorage.setItem("column", json);
load();
}
}
//サポートインスタンス
function support() {
var json=JSON.parse(localStorage.getItem("instance"));
console.log(json);
Object.keys(json).forEach(function(key) {
var instance = json[key];
Object.keys(idata).forEach(function(key) {
var instance = idata[key];
if (instance == "instance") {
templete = '<a onclick="login(\'' + key +
'\')" class="collection-item pointer transparent">' + json[key + "_name"] + '(' + key + ')</a>';
'\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>';
$("#support").append(templete);
}
});
@@ -134,23 +270,17 @@ function support() {
function login(url) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var ng;
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
if (acct.domain == url) {
Materialize.toast(url + "は登録できません。同一インスタンスには一つのアカウントでしかログインできません。", 5000);
ng = "true";
return;
}
});
if (ng) {
if($('#misskey:checked').val()=="on" || url=="misskey.xyz"){
$("#misskey").prop("checked", true);
misskeyLogin(url);
return;
}
if($('#linux:checked').val()=="on"){
var red = "urn:ietf:wg:oauth:2.0:oob"
var red = "https://thedesk.top/hello.html"
}else{
var red = 'thedesk://manager';
}
console.log(red);
localStorage.setItem("redirect", red);
var start = "https://" + url + "/api/v1/apps";
var httpreq = new XMLHttpRequest();
@@ -167,9 +297,10 @@ function login(url) {
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"] +
"&response_type=code&scope=read+write+follow&redirect_uri=" + red;
"&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent(red);
localStorage.setItem("domain_tmp", url);
localStorage.setItem("client_id", json["client_id"]);
localStorage.setItem("client_secret", json["client_secret"]);
@@ -178,7 +309,7 @@ function login(url) {
const {
shell
} = require('electron');
shell.openExternal(auth);
var electron = require("electron");
var ipc = electron.ipcRenderer;
@@ -189,11 +320,75 @@ function login(url) {
}
}
//これが後のMisskeyである。
function misskeyLogin(url) {
if(!url){
var url=$("#misskey-url").val();
}
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var start = "https://"+url+"/api/auth/session/generate";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
localStorage.setItem("msky","true");
if(url=="misskey.xyz" && misskeytoken){
var mkc=misskeytoken;
localStorage.setItem("mkc",mkc)
}else{
var mkc=$("#misskey-key").val();
localStorage.setItem("mkc",mkc)
if(!mkc){
$("#misskeylogin").show();
$("#misskey-url").val(url);
if(confirm(lang.lang_manager_godev)){
const {
shell
} = require('electron');
console.log("https://"+url+"/dev")
shell.openExternal("https://"+url+"/dev");
shell.openExternal("https://thedesk.top/how-to-login-misskey.html");
}
return false;
}else{
$("#misskeylogin").hide();
$("#misskey-url").val("");
}
}
httpreq.send(JSON.stringify({
appSecret: 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);
var electron = require("electron");
}
}
}
//テキストボックスにURL入れた
function instance() {
var url = $("#url").val();
if(url.indexOf("@")!=-1 || url.indexOf("https")!=-1){
alert("入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは\"mstdn.jp\"です。)")
return false;
}
login(url);
}
@@ -202,36 +397,85 @@ function code(code) {
localStorage.removeItem("redirect")
if(!code){
var code = $("#code").val();
$("#code").val("");
}
var url = localStorage.getItem("domain_tmp");
localStorage.removeItem("domain_tmp");
var start = "https://" + url + "/oauth/token";
var id = localStorage.getItem("client_id");
var secret = localStorage.getItem("client_secret");
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
grant_type: "authorization_code",
redirect_uri: "urn:ietf:wg:oauth:2.0:oob",
client_id: id,
client_secret: secret,
code: code
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
if (json["access_token"]) {
$("#auth").hide();
$("#add").show();
getdata(url, json["access_token"]);
console.log(localStorage.getItem("msky"));
if(localStorage.getItem("msky")=="true"){
var start = "https://"+url+"/api/auth/session/userkey";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
token:code,
appSecret:localStorage.getItem("mkc")
}));
httpreq.onreadystatechange = function() {
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 = {
at: i,
name: json["user"]["name"],
domain: url,
user: json["user"]["username"],
prof: avatar,
id: json["user"]["id"],
vis: priv,
mode: "misskey"
};
localStorage.setItem("mode_" + url,"misskey")
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var target = obj.lengtth;
obj.push(add);
localStorage.setItem("name_" + target, json["user"]["name"]);
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();
return;
}
}
return;
}else{
var start = "https://" + url + "/oauth/token";
var id = localStorage.getItem("client_id");
var secret = localStorage.getItem("client_secret");
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
grant_type: "authorization_code",
redirect_uri: "https://thedesk.top/hello.html",
client_id: id,
client_secret: secret,
code: code
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
if (json["access_token"]) {
$("#auth").hide();
$("#add").show();
getdata(url, json["access_token"]);
}
}
}
}
}
//ユーザーデータ取得
function getdata(domain, at) {
var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
@@ -250,14 +494,19 @@ function getdata(domain, at) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
var avatar=json["avatar"];
//missingがmissingなやつ
if(avatar=="/avatars/original/missing.png"){
avatar="./img/missing.svg";
avatar="../../img/missing.svg";
}
if(json["source"]){
var priv=json["source"]["privacy"];
}else{
var priv="public";
}
var add = {
at: at,
@@ -265,7 +514,9 @@ function getdata(domain, at) {
domain: domain,
user: json["acct"],
prof: avatar,
id: json["id"]
id: json["id"],
vis: priv,
mode: "mastodon"
};
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
@@ -286,6 +537,10 @@ function getdata(domain, at) {
function refresh(target) {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
if(obj[target].mode=="misskey"){
misskeyRefresh(obj,target,obj[target].domain);
return
}
var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials";
console.log(start);
@@ -304,7 +559,7 @@ function refresh(target) {
console.log(json);
if (json.error) {
console.error("Error:" + json.error);
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
5000);
return;
}
@@ -319,7 +574,8 @@ function refresh(target) {
domain: obj[target].domain,
user: json["acct"],
prof: avatar,
id: json["id"]
id: json["id"],
vis: json["source"]["privacy"]
};
localStorage.setItem("name_" + target, json["display_name"]);
localStorage.setItem("user_" + target, json["acct"]);
@@ -328,10 +584,200 @@ function refresh(target) {
console.log(localStorage.getItem("user-id_"+target));
localStorage.setItem("prof_" + target, avatar);
obj[target] = ref;
console.log(obj);
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
load();
});
}
function misskeyRefresh(obj,target,url){
var start = "https://"+url+"/api/users/show";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
username:obj[target].user,
i:localStorage.getItem("at")
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
return;
var avatar=json["user"]["avatarURL"];
var priv="public";
var add = {
at: json.accessToken,
name: json["user"]["name"],
domain: url,
user: json["user"]["username"],
prof: avatar,
id: json["user"]["id"],
vis: priv
};
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var target = obj.lengtth;
obj.push(add);
localStorage.setItem("name_" + target, json["user"]["name"]);
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();
return;
}
}
}
//アカウントを選択…を実装
function multisel() {
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
var obj = JSON.parse(multi);
}
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>');
}else{
Object.keys(obj).forEach(function(key) {
var acct = obj[key];
var list = key * 1 + 1;
if (key == last) {
sel = "selected";
mainb='('+lang.lang_manager_def+')'
var domain = localStorage.getItem("domain_" + key);
var profimg=localStorage.getItem("prof_"+key);
var domain=localStorage.getItem("domain_"+key);
if(!profimg){
profimg="../../img/missing.svg";
}
} else {
sel = "";
mainb=""
}
templete = '<option value="' + key + '" data-icon="' + acct.prof +
'" class="left circle" ' + sel + '>' + acct.user + '@' + acct.domain +mainb+
'</option>';
$(".acct-sel").append(templete);
});
}
$('select').material_select('update');
}
function mainacct(){
var acct_id = $("#main-acct-sel").val();
localStorage.setItem("main", acct_id);
Materialize.toast(lang.lang_manager_mainAcct, 3000);
}
function colorpicker(key){
temp=
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">'+lang.lang_manager_none+'</div>'+
'<div onclick="coloradd('+key+',\'f44336\',\'white\')" class="red white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'e91e63\',\'white\')" class="pink white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'9c27b0\',\'white\')" class="purple white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'673ab7\',\'white\')" class="deep-purple white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'3f51b5\',\'white\')" class="indigo white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'2196f3\',\'white\')" class="blue white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'03a9f4\',\'black\')" class="light-blue black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'00bcd4\',\'black\')" class="cyan black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'009688\',\'white\')" class="teal white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'4caf50\',\'black\')" class="green black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'8bc34a\',\'black\')" class="light-green black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'cddc39\',\'black\')" class="lime black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'ffeb3b\',\'black\')" class="yellow black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'ffc107\',\'black\')" class="amber black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'ff9800\',\'black\')" class="orange black-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'ff5722\',\'white\')" class="deep-orange white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'795548\',\'white\')" class="brown white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'9e9e9e\',\'white\')" class="grey white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'607d8b\',\'white\')" class="blue-grey white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'000000\',\'white\')" class="black white-text pointer"></div>'+
'<div onclick="coloradd('+key+',\'ffffff\',\'black\')" class="white black-text pointer"></div>';
$("#colorsel_"+key).html(temp);
}
function coloradd(key,bg,txt){
var col = localStorage.getItem("multi");
var o = JSON.parse(col);
var obj=o[key];
obj.background=bg;
obj.text=txt;
o[key]=obj;
var json = JSON.stringify(o);
localStorage.setItem("multi", json);
if(txt=="def"){
$("#acct_"+key).attr("style","")
}else{
$("#acct_"+key).css('background-color','#'+bg);
if(txt=="black"){
var bghex="000000";
var ichex="9e9e9e"
}else if(txt=="white"){
var bghex="ffffff";
var ichex="eeeeee"
}
$("#acct_"+key+" .nex").css('color','#'+ichex);
$("#acct_"+key).css('color','#'+bghex);
}
}
//入力時にハッシュタグと@をサジェスト
var timer = null;
var input = document.getElementById("url");
var prev_val = input.value;
var oldSuggest;
var suggest;
input.addEventListener("focus", function() {
$("#ins-suggest").html("");
window.clearInterval(timer);
timer = window.setInterval(function() {
var new_val = input.value;
if (prev_val != new_val) {
if (new_val.length > 3) {
var start = "https://instances.social/api/1.0/instances/search?q=" +
new_val;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
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];
urls = urls + ' <a onclick="login(\'' + url.name +
'\')" class="pointer">' + url.name + '</a> ';
});
$("#ins-suggest").html(urls);
}
});
}
oldSuggest = suggest;
prev_value = new_val;
}
}, 1000);
}, false);
input.addEventListener("blur", function() {
window.clearInterval(timer);
}, false);

View File

@@ -8,9 +8,20 @@
}
var urls=[];
if(url){
urls = url.match(/https?:\/\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/);
urls = url.match(/https?:\/\/(.+)/);
//トゥートのURLぽかったら
toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
//タグのURLぽかったら
var tags=[];
tags = url.match(
/https:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
);
//メンションっぽかったら
var ats=[];
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");
@@ -21,6 +32,28 @@
$a.parent().text("Loading...")
detEx(url,acct_id);
}
}else if(tags){
if(tags[2]){
tagShow(tags[2]);
Materialize.toast('<a class="btn-flat toast-action" href="detEx(\''+url+'\')">Open in browser</a>', 86400);
}
}else if(ats){
console.log(ats);
if(ats[2]){
if(ats[1]!="quesdon.rinsuki.net"){
udgEx(ats[2]+"@"+ats[1],"main");
return false
}else{
const {
shell
} = require('electron');
shell.openExternal(url);
}
}
}else{
//hrefがhttp/httpsならブラウザで
if(urls){
@@ -28,7 +61,10 @@
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);
} else {
@@ -77,22 +113,7 @@
}
return ret;
};
$.strip_tags = function(str, allowed) {
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
//コピー
function execCopy(string){
var temp = $("#copy");
@@ -115,7 +136,48 @@ function progshow(e) {
if(percent<1){
$("#imgup").text(Math.floor(percent*100)+"%");
}else{
$("#imgup").text("処理中");
$("#imgup").text(lang.lang_progress);
}
}
}
}
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();
/*webview.sendInputEvent({
type: "keyDown",
keyCode: '2'
});
*/
}
var webview = document.getElementById('webview');
const {
shell
} = require('electron');
webview.addEventListener('new-window', function(e) {
shell.openExternal(e.url);
});

View File

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

View File

@@ -1,3 +1,84 @@
//jQuery読む
window.jQuery = window.$ = require('./js/common/jquery.js');
var Hammer = require('./js/common/hammer.min.js');
window.jQuery = window.$ = require('../../js/common/jquery.js');
var Hammer = require('../../js/common/hammer.min.js');
$.strip_tags = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
//PHPのnl2brと同様
function nl2br(str) {
if(!str){
return "";
}
str = str.replace(/\r\n/g, "<br />");
str = str.replace(/(\n|\r)/g, "<br />");
return str;
}
function formattime(date){
var str=date.getFullYear()+"-";
if(date.getMonth()+1<10){
str=str+"0"+(date.getMonth()+1)+"-";
}else{
str=str+(date.getMonth()+1)+"-";
}
if(date.getDate()<10){
str=str+"0"+date.getDate()
}else{
str=str+date.getDate()
}
str=str+"T";
if(date.getHours()<10){
str=str+"0"+date.getHours()+":"
}else{
str=str+date.getHours()+":"
}
if(date.getMinutes()<10){
str=str+"0"+date.getMinutes()
}else{
str=str+date.getMinutes()
}
return str;
}
function formattimeutc(date){
var str=date.getUTCFullYear()+"-";
if(date.getUTCMonth()+1<10){
str=str+"0"+(date.getUTCMonth()+1)+"-";
}else{
str=str+(date.getUTCMonth()+1)+"-";
}
if(date.getUTCDate()<10){
str=str+"0"+date.getUTCDate()
}else{
str=str+date.getUTCDate()
}
str=str+"T";
if(date.getUTCHours()<10){
str=str+"0"+date.getUTCHours()+":"
}else{
str=str+date.getUTCHours()+":"
}
if(date.getUTCMinutes()<10){
str=str+"0"+date.getUTCMinutes()
}else{
str=str+date.getUTCMinutes()
}
return str;
}

View File

@@ -10,7 +10,7 @@ function tl(data) {
//デフォルト
var type = "local";
}
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
$("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
var start = "https://" + domain + "/api/v1/timelines/" + com(type, data);
@@ -29,16 +29,10 @@ function tl(data) {
var templete = parse([json[0]], '', acct_id, tlid);
$("#timeline_nano").html(templete);
jQuery("time.timeago").timeago();
reload(type, '', acct_id, data);
});
}
//Streaming接続
var websocket=[];
function reload(type, cc, acct_id, data) {
var tlid=0;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if (type == "home") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=user&access_token=" + at;
@@ -132,6 +126,7 @@ function icon(type) {
}
function todo(){}
function todc(){}
function hide(){}
$(function($) {
//キーボードショートカット
$(window).keydown(function(e) {

View File

@@ -48,9 +48,4 @@ function shot(){
}
})
})
}
$(window).load(function(){
setTimeout(function(){
shot();
},2000);
});
}

File diff suppressed because one or more lines are too long

319
app/js/platform/twitter.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -3,14 +3,20 @@
function mdCheck(){
var acct_id = $("#post-acct-sel").val();
var profimg=localStorage.getItem("prof_"+acct_id);
$("#acct-sel-prof").attr("src",profimg);
$("#toot-post-btn").text("トゥート("+localStorage.getItem("domain_"+acct_id)+")");
if(!profimg){
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
if(localStorage.getItem("post_" + acct_id)){
$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")");
}else{
$("#toot-post-btn").text(lang.lang_toot+"("+localStorage.getItem("domain_"+acct_id)+")");
}
if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
$(".markdown").addClass("hide");
$(".anti-markdown").addClass("hide");
}else{
$(".markdown").removeClass("hide");
$(".anti-markdown").addClass("hide");
$(".anti-markdown").removeClass("hide");
}
if($(".markdown").hasClass("hide")){
localStorage.setItem("md","hide");
@@ -28,11 +34,39 @@ function mdCheck(){
}else{
$("#faicon-btn").hide();
}
if(domain=="imastodon.net"){
trendTag();
}else{
$("#trendtag").html("");
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
Materialize.toast(lang.lang_bbmd_misskey, 5000);
}
if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"])
}else{
$("#textarea").attr("data-length", 500)
}
if(idata[domain+"_glitch"]==="true"){
$("#local-button").removeClass("hide");
}else{
$("#local-button").addClass("hide");
}
var multi = localStorage.getItem("multi");
if (multi) {
var obj = JSON.parse(multi);
if(obj[acct_id].background && obj[acct_id].background!="def" && obj[acct_id].text && obj[acct_id].text!="def"){
$("#toot-post-btn").removeClass("indigo");
$("#toot-post-btn").css("background-color","#"+obj[acct_id].background);
$("#toot-post-btn").css("color",obj[acct_id].text);
}else{
$("#toot-post-btn").css("background-color","");
$("#toot-post-btn").css("color","");
$("#toot-post-btn").addClass("indigo");
}
}
loadVis();
}
//BOXのトグルボタン
function mdToggle(){
@@ -83,12 +117,6 @@ if(localStorage.getItem("md")=="hide"){
}[match]
});
}
//PHPのnl2brと同様
function nl2br(str) {
str = str.replace(/\r\n/g, "<br />");
str = str.replace(/(\n|\r)/g, "<br />");
return str;
}
//テキストボックスで選択したやつをタグで囲む(BB版)
function surroundHTML(tagS,tagE) {
var acct_id = $("#post-acct-sel").val();

View File

@@ -4,24 +4,28 @@ $("#emoji-before").addClass("disabled");
$("#emoji-next").addClass("disabled");
//絵文字ボタンのトグル
function emoji() {
function emojiToggle() {
var acct_id = $("#post-acct-sel").val();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
}
localStorage.setItem("cursor", selin);
if ($("#emoji").hasClass("hide")) {
$("#emoji").removeClass("hide")
$("#right-side").show()
if (!localStorage.getItem("emoji_" + acct_id)) {
var html =
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">絵文字リスト取得</button>';
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">'+lang.lang_emoji_get+'</button>';
$("#emoji-list").html(html);
} else {
emojiList('home');
}
} else {
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
$("#right-side").hide()
}
@@ -63,7 +67,7 @@ function emojiGet(parse) {
//リストの描画
function emojiList(target) {
$("#now-emoji").text("カスタム絵文字");
$("#now-emoji").text(lang.lang_emoji_custom);
var acct_id = $("#post-acct-sel").val();
var start = localStorage.getItem("emojiseek");
if (target == "next") {
@@ -125,50 +129,21 @@ function emojiInsert(code, del) {
var now = now.replace(regExp, "");
$("#textarea").val(now + " " + code);
}
$("#textarea").focus();
var selin = $("#textarea").prop('selectionStart');
if(!selin){
selin=0;
}
localStorage.setItem("cursor", selin);
}
//改行挿入
function brInsert(code) {
if(!$('#post-box').hasClass("appear")){
localStorage.setItem("nohide",true);
show();
}
var now = $("#textarea").val();
$("#textarea").val(now + code);
$("#textarea").focus();
}
//入力時に絵文字をサジェスト
var etimer = null;
var einput = document.getElementById("emoji-suggest");
var prev_val = einput.value;
var oldSuggest;
var suggest;
einput.addEventListener("focus", function() {
$(".emoji-control").addClass("hide");
$("#suggest").html("");
window.clearInterval(etimer);
etimer = window.setInterval(function() {
var new_val = einput.value;
var html="";
if (prev_val != new_val && new_val.length > 3) {
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
var num = obj.length;
for (i = 0; i < num; i++) {
var emoji = obj[i];
if ( ~emoji.shortcode.indexOf(new_val)) {
//strにhogeを含む場合の処理
if (emoji) {
html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
': \')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
}
}
}
$("#emoji-list").html(html+'<br><a onclick="customEmoji()" class="pointer waves-effect">リセット</a>');
};
oldSuggest = suggest;
prev_value = new_val;
}, 1000);
}, false);
einput.addEventListener("blur", function() {
window.clearInterval(etimer);
}, false);

View File

@@ -43,7 +43,7 @@ function pimg(files) {
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('bmp-image', [files[i].path,i]);
todo("変換中...");
todo(lang.lang_progress);
}else{
handleFileUpload(files[i], obj,i);
@@ -90,7 +90,8 @@ function media(b64, type, no) {
} else {
$("#media").val("tmp_"+r);
}
$("#toot-post-btn").prop("disabled", true);
$(".toot-btn-group").prop("disabled", true);
$("#post-acct-sel").prop("disabled", true);
localStorage.setItem("image","busy");
todo("Image Upload...");
var media = toBlob(b64, type);
@@ -99,24 +100,41 @@ function media(b64, type, no) {
fd.append('file', media);
var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/media";
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(fd);
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/drive/files/create";
httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.responseType = 'json';
if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = true;
} else {
var nsfw = false;
}
var previewer="url"
fd.append('i', at);
//fd.append('isSensitive', nsfw);
httpreq.send(fd);
}else{
var previewer="preview_url"
var start = "https://" + domain + "/api/v1/media";
httpreq.open('POST', start, true);
httpreq.upload.addEventListener("progress", progshow, false);
httpreq.responseType = 'json';
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.send(fd);
}
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
var img = localStorage.getItem("img");
if (json.type=="image") {
var html = '<img src="' + json.preview_url + '" style="width:50px; max-height:100px;">';
if (json.type.indexOf("image")!=-1) {
var html = '<img src="' + json[previewer] + '" style="width:50px; max-height:100px;">';
$('#preview').append(html);
} else {
$('#preview').append("プレビューできません");
$('#preview').append(lang.lang_postimg_previewdis);
}
if (!img) {
var img = "no-act";
@@ -132,11 +150,10 @@ function media(b64, type, no) {
$("#textarea").val($("#textarea").val() + " " + json["text_url"])
}
todc();
$("#toot-post-btn").prop("disabled", false);
$("#post-acct-sel").prop("disabled", true);
$(".toot-btn-group").prop("disabled", false);
$('select').material_select();
$("#mec").text("あり");
Materialize.toast("ファイルアップロード後はアカウントを切り替えられません。", 1000);
$("#mec").text(lang.lang_there);
Materialize.toast(lang.lang_postimg_aftupload, 1000);
$("#imgup").text("");
$("#imgsel").show();
localStorage.removeItem("image");
@@ -165,6 +182,7 @@ function toBlob(base64, type) {
//画像を貼り付けたら…
var element = document.querySelector("#textarea");
element.addEventListener("paste", function(e){
console.log(e)
// 画像の場合
// e.clipboardData.types.length == 0
// かつ
@@ -174,6 +192,7 @@ element.addEventListener("paste", function(e){
|| !e.clipboardData.types
|| (e.clipboardData.types.length != 1)
|| (e.clipboardData.types[0] != "Files")) {
console.log("not image")
return true;
}
@@ -188,7 +207,7 @@ element.addEventListener("paste", function(e){
var base64 = e.target.result;
var mediav = $("#media").val();
if(mediav){
var i=media.split(",").length;
var i=mediav.split(",").length;
}
media(base64, "image/png", i)
};

View File

@@ -0,0 +1,217 @@
//Renpost
function renote(id, acct_id, remote) {
if ($("#pub_" + id).hasClass("rted")) {
return
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/create";
if(localStorage.getItem("mode_" + domain)!="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({i:at,renoteId:id}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
$("[toot-id=" + id + "]").addClass("rted");
$(".rt_"+id).toggleClass("teal-text");
}
}
}
//Renote
function renoteqt(id, acct_id) {
localStorage.setItem("nohide",true);
show();
$("#reply").val("renote_"+id);
$("#rec").text("Renote");
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
//Reply
function misskeyreply(id, acct_id) {
localStorage.setItem("nohide",true);
show();
$("#reply").val(id);
$("#rec").text("Renote");
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
$("#textarea").focus();
}
//Reaction
function reactiontoggle(id,acct_id,tlid){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/show";
if(localStorage.getItem("mode_" + domain)!="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({i:at,noteId:id}));
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"];
for(var i=0;i<reactions.length;i++){
if(json.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
}
}
$("#pub_" + id +" .reactions").removeClass("hide");
$("#pub_" + id +" .reactions").toggleClass("fullreact")
}else{
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .reactions").addClass("hide")
$("#pub_" + id +" .reactions").removeClass("fullreact")
}else{
$("#pub_" + id +" .reactions").removeClass("hide");
$("#pub_" + id +" .reaction").removeClass("hide");
$("#pub_" + id +" .reactions").addClass("fullreact");
}
}
}
}
}
function reactRefresh(acct_id,id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/show";
var req={};
req.i=at;
req.noteId=id;
var i={
method: "POST",
body: JSON.stringify(req),
}
console.log(req)
fetch(start, i,
).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if(!json){
return false;
}
var poll="";
console.log(json);
reactRefreshCore(json)
});
}
function reactRefreshCore(json){
var id=json.id;
if(json.reactionCounts){
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
$("#pub_" + id +" .reactions").removeClass("hide")
for(var i=0;i<reactions.length;i++){
if(json.reactionCounts[reactions[i]]){
console.log(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
}
}
}
}
function reaction(mode,id,acct_id,tlid){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if($(".fav_"+id).hasClass("yellow-text")){
var flag="delete";
}else{
var flag="create";
}
var start = "https://" + domain + "/api/notes/reactions/"+flag;
if(localStorage.getItem("mode_" + domain)!="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({i:at,noteId:id,reaction:mode}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
$(".fav_"+id).toggleClass("yellow-text");
}
}
}
//Vote
function vote(acct_id,id,to){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/polls/vote";
if(localStorage.getItem("mode_" + domain)!="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({i:at,noteId:id,choice:to}));
httpreq.onreadystatechange = function() {
voterefresh(acct_id,id)
}
}
function voterefresh(acct_id,id){
var httpreqd = new XMLHttpRequest();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/show";
httpreqd.open('POST', start, true);
httpreqd.setRequestHeader('Content-Type', 'application/json');
httpreqd.responseType = 'json';
httpreqd.send(JSON.stringify({i:at,noteId:id}));
httpreqd.onreadystatechange = function() {
if (httpreqd.readyState == 4) {
var json = httpreqd.response;
if(!json){
return false;
}
var poll="";
if(json.poll){
var choices=json.poll.choices;
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(choice.isVoted){
var myvote=twemoji.parse("✅");
}else{
var myvote="";
}
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+json.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>';
});
$(".vote_"+json.id).html(poll)
}
}
}
}

View File

@@ -1,12 +1,81 @@
/*投稿系*/
/*投稿系*/
//投稿
function post() {
function sec(){
var mode=localStorage.getItem("sec");
var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
if(~domain.indexOf("kirishima.cloud")>=0 && mode=="local"){
mode="unlisted";
}
post(null,mode);
}
function post(mode,postvis) {
if($("#toot-post-btn").prop("disabled")){
return
}
var str = $("#textarea").val();
var acct_id = $("#post-acct-sel").val();
localStorage.setItem("last-use", acct_id);
todo("Posting");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(domain=="theboss.tech"){
if(~str.indexOf("#")){
if(str.indexOf("#theboss_tech")=="-1"){
if(!confirm(lang.lang_post_tagTL)){
return false;
}
}
}
}
if(domain=="dtp-mstdn.jp"){
if(~str.indexOf("#")){
if(str.indexOf("#dtp")=="-1"){
if(!confirm(lang.lang_post_tagTL)){
return false;
}
}
}
}
if(!localStorage.getItem("cw_sentence")){
var cw_sent=500;
}else{
var cw_sent=localStorage.getItem("cw_sentence");
}
if(!localStorage.getItem("cw_letters")){
var cw_ltres=500;
}else{
var cw_ltres=localStorage.getItem("cw_letters");
}
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',
title: lang.lang_post_cwtitle,
message: lang.lang_post_cwtxt+plus,
buttons: [lang.lang_post_btn1,lang.lang_post_btn2, lang.lang_post_btn3]
}
dialog.showMessageBox(options, function(arg) {
if(arg==1){
$("#cw-text").show();
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
$("#cw-text").val(plus);
post("pass");
}else if(arg==2){
post("pass");
}
})
return false;
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
misskeyPost();
return;
}
$(".toot-btn-group").prop("disabled", true);
todo("Posting");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses";
var reply = $("#reply").val();
var toot={
@@ -25,9 +94,24 @@ function post() {
} else {
var nsfw = "false";
}
var vis = $("#vis").text();
if(vis!="inherit"){
if(postvis){
var vis = postvis;
}else{
var vis = $("#vis").text();
}
if(vis!="inherit" && vis!="local"){
toot.visibility=vis;
}else if(vis=="local"){
toot.status=str+"👁️";
}
//ここに非公開・未収載タグについてwarn
if(~str.indexOf("#")){
if(vis == "local" || vis=="unlisted" || vis=="direct" || vis=="private"){
if(!confirm(lang.lang_post_tagVis)){
return false;
}
}
}
if ($("#cw").hasClass("cw-avail")) {
var spo = $("#cw-text").val();
@@ -36,6 +120,38 @@ function post() {
} else {
var spo = "";
}
if ($("#sch-box").hasClass("sch-avail")) {
var scheduled=formattimeutc(new Date(Date.parse($("#sch-date").val())))
console.log(scheduled)
schedule();
toot.scheduled_at=scheduled;
} else {
var scheduled = "";
}
if ($("#poll-sel").val()=="mastodon-poll") {
var options=[];
$(".mastodon-choice").map(function() {
var choice=$(this).val();
if(choice!=""){
options.push(choice);
}
});
if($("#poll-multiple:checked").val()=="1"){
var mul=true;
}else{
var mul=false;
}
var exin=pollCalc();
if(!exin){
todc("Error: Poll expires_in param")
}
toot.poll={
options: options,
expires_in: exin,
multiple: mul
}
}
console.log(toot);
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
@@ -44,6 +160,81 @@ function post() {
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if(str.indexOf(localStorage.getItem("stable"))==-1){
localStorage.removeItem("stable")
}
var json = httpreq.response;
console.log(json);
var box = localStorage.getItem("box");
if (box == "yes" || !box) {
$("#textarea").blur();
hide();
}
$(".toot-btn-group").prop("disabled", false);
todc();
clear();
}
}
}
function misskeyPost(){
var str = $("#textarea").val();
var acct_id = $("#post-acct-sel").val();
localStorage.setItem("last-use", acct_id);
var domain = localStorage.getItem("domain_" + acct_id);
$(".toot-btn-group").prop("disabled", true);
todo("Posting");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/notes/create";
var reply = $("#reply").val();
var toot={
text: str
}
if(reply){
if(reply.indexOf("renote")!== -1){
toot.renoteId=reply.replace("renote_","")
}else{
toot.replyId=reply
}
}
var media = $("#media").val();
if(media){
toot.mediaIds=media.split(",");
}
if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = "true";
toot.sensitive=nsfw;
} else {
var nsfw = "false";
}
var vis = $("#vis").text();
if(vis=="unlisted"){
vis=="home"
}else if(vis=="direct"){
vis=="specified";
toot.visibleUserIds=str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@");
}
if(vis!="inherit"){
toot.visibility=vis;
}
if ($("#cw").hasClass("cw-avail")) {
var spo = $("#cw-text").val();
cw();
toot.cw=spo;
} else {
var spo = "";
}
toot.i=at;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if(str.indexOf(localStorage.getItem("stable"))==-1){
localStorage.removeItem("stable")
}
var json = httpreq.response;
console.log(json);
var box = localStorage.getItem("box");
@@ -53,6 +244,7 @@ function post() {
$("body").addClass("mini-post");
$(".mini-btn").text("expand_less");
}
$(".toot-btn-group").prop("disabled", false);
todc();
clear();
}
@@ -62,7 +254,10 @@ function post() {
//クリア(Shift+C)
function clear() {
$("#textarea").val("");
$("#textarea").attr("placeholder", "");
if(localStorage.getItem("stable")){
$("#textarea").val(localStorage.getItem("stable"));
}
$("#textarea").attr("placeholder", lang.lang_toot);
$("#reply").val("");
$("#media").val("");
var cwt = localStorage.getItem("cw-text");
@@ -71,28 +266,36 @@ function clear() {
} else {
$("#cw-text").val("");
}
$("#cw").removeClass("yellow-text");
$("#cw").removeClass("cw-avail");
$("#rec").text("いいえ");
$("#mec").text("なし");
var vist = localStorage.getItem("vis");
if (!vist) {
vis("public");
} else {
if (vist == "memory") {
localStorage.setItem("vis-memory", $("#vis").text());
} else {
vis(vist);
}
var acw = localStorage.getItem("always-cw");
if (acw != "yes") {
$("#cw").removeClass("yellow-text");
$("#cw").removeClass("cw-avail");
$("#cw-text").hide();
}else{
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
$("#cw-text").show();
}
$("#rec").text(lang.lang_no);
$("#mec").text(lang.lang_nothing);
loadVis();
$("#nsfw").removeClass("yellow-text");
$("#nsfw").html("visibility_off");
$("#nsfw").removeClass("nsfw-avail");
$("#nsc").text("なし");
$("#nsc").text(lang.lang_nothing);
$("#drag").css("background-color", "#e0e0e0");
$("#preview").html("");
$("#toot-post-btn").prop("disabled", false);
$(".toot-btn-group").prop("disabled", false);
$("#post-acct-sel").prop("disabled", false);
$('select').material_select();
$("#days_poll").val(0);
$("#hours_poll").val(0);
$("#mins_poll").val(0);
$(".mastodon-choice").map(function() {
$(this).val("");
});
localStorage.removeItem("image");
if(localStorage.getItem("mainuse")=="main"){
$("#post-acct-sel").val(localStorage.getItem("main"));
}
$('select').material_select();
}

View File

@@ -19,34 +19,52 @@ function vis(set){
$("#vis-icon").removeClass("orange-text");
$("#vis-icon").removeClass("blue-text");
$("#vis-icon").removeClass("purple-text");
$("#vis-icon").removeClass("light-blue-text");
$("#vis-icon").removeClass("teal-text");
if(set=="public"){
$("#vis-icon").text("public");
$("#vis-icon").addClass("purple-text");
}else if(set=="unlisted"){
$("#vis-icon").text("lock_open");
$("#vis-icon").addClass("blue-text");
}else if(set=="private"){
}else if(set=="private"){
$("#vis-icon").text("lock");
$("#vis-icon").addClass("orange-text");
}else if(set=="direct"){
}else if(set=="direct"){
$("#vis-icon").text("mail");
$("#vis-icon").addClass("red-text");
}else if(set=="limited"){
}else if(set=="limited"){
$("#vis-icon").text("group");
$("#vis-icon").addClass("teal-text");
}else if(set=="local"){
$("#vis-icon").text("visibility");
$("#vis-icon").addClass("light-blue-text");
}
var vis=localStorage.getItem("vis");
if(vis=="memory"){
localStorage.setItem("vis-memory",set);
var acct_id = $("#post-acct-sel").val();
localStorage.setItem("vis-memory-"+acct_id,set);
}
$('.dropdown-button').dropdown('close');
}
function loadVis(){
var vist = localStorage.getItem("vis");
console.log(vist);
if (!vist) {
vis("public");
} else {
if (vist == "memory") {
var memory = localStorage.getItem("vis-memory");
var acct_id = $("#post-acct-sel").val();
var memory = localStorage.getItem("vis-memory-"+acct_id);
if (!memory) {
memory = "public";
}
vis(memory);
} else if(vist == "server") {
var acct_id = $("#post-acct-sel").val();
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var memory = obj[acct_id]["vis"];
if (!memory) {
memory = "public";
}
@@ -58,7 +76,7 @@ function loadVis(){
}
loadVis();
//コンテンワーニング
//コンテンワーニング
function cw(){
if($("#cw").hasClass("cw-avail")){
$("#cw-text").val();
@@ -75,8 +93,37 @@ function cw(){
}
}
}
//TLでコンテンワーニングを表示トグル
//TLでコンテンワーニングを表示トグル
function cw_show(id){
$(".cw_hide_"+id).toggleClass("cw");
$(".cw-long-"+id).toggleClass("hide");
}
}
$(function() {
$('#cw-text').on('change', function(event) {
var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var cwlen=$('#cw-text').val().length;
if(idata[domain+"_letters"]){
$("#textarea").attr("data-length", idata[domain+"_letters"]-cwlen)
}else{
$("#textarea").attr("data-length", 500-cwlen)
}
});
});
//スケジュール
function schedule(){
if($("#sch-box").hasClass("sch-avail")){
$("#sch-box").hide();
$("#sch-box").removeClass("sch-avail");
}else{
var date = new Date();
$("#sch-box").show();
$("#sch-date").val(formattime(date));
console.log(formattime(date));
$("#sch-box").addClass("sch-avail");
}
}

View File

@@ -7,7 +7,7 @@ function fav(id, acct_id, remote) {
var flag = "favourite";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
@@ -43,7 +43,7 @@ function fav(id, acct_id, remote) {
$(".fav_" + id).addClass("yellow-text");
}
}else{
Materialize.toast("お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。", 1000);
Materialize.toast(lang.lang_status_favWarn, 1000);
}
}
}
@@ -57,7 +57,7 @@ function rt(id, acct_id, remote) {
var flag = "reblog";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
@@ -90,7 +90,7 @@ function rt(id, acct_id, remote) {
$(".rt_" + id).addClass("teal-text");
}
} else {
Materialize.toast("ブーストしました。インスタンスが違うときは時間がかかる場合があります。", 1000);
Materialize.toast(lang.lang_status_btWarn, 1000);
}
}
}
@@ -105,16 +105,22 @@ function follow(acct_id,remote) {
}
if (!remote && $("#his-data").hasClass("following")) {
var flag = "unfollow";
var flagm = "delete";
} else {
var flag = "follow";
var flagm = "create";
}
var id = $("#his-data").attr("user-id");
if(!remote){
var remote = $("#his-data").attr("remote");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(remote=="true" && flag=="follow"){
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/following/"+flagm;
var user=$("#his-acct").text();
var ent={"i":at,"userId":id}
}else if(remote=="true" && flag=="follow"){
var start = "https://" + domain + "/api/v1/follows";
var user=$("#his-acct").text();
var ent={"uri":user}
@@ -122,22 +128,23 @@ 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');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
httpreq.send(JSON.stringify(ent));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
if ($("#his-data").hasClass("following")) {
$("#his-data").removeClass("following");
$("#his-follow-btn").text("フォロー");
$("#his-follow-btn").text(lang.lang_status_follow);
} else {
$("#his-data").addClass("following");
$("#his-follow-btn").text("フォロー解除");
$("#his-follow-btn").text(lang.lang_status_unfollow);
}
}
}
@@ -155,7 +162,7 @@ function block(acct_id) {
var flag = "block";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
@@ -167,10 +174,10 @@ function block(acct_id) {
if (httpreq.readyState == 4) {
if ($("#his-data").hasClass("blocking")) {
$("#his-data").removeClass("blocking");
$("#his-block-btn").text("ブロック");
$("#his-block-btn").text(lang.lang_status_block);
} else {
$("#his-data").addClass("blocking");
$("#his-block-btn").text("ブロック解除");
$("#his-block-btn").text(lang.lang_status_unblock);
}
}
}
@@ -184,26 +191,35 @@ function mute(acct_id) {
var id = $("#his-data").attr("user-id");
if ($("#his-data").hasClass("muting")) {
var flag = "unmute";
var flagm = "delete";
} else {
var flag = "mute";
var flagm = "create";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/mute/"+flagm;
var ent={"i":at,"userId":id}
var rq=JSON.stringify(ent);
}else{
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var rq="";
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
httpreq.send(rq);
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
if ($("#his-data").hasClass("muting")) {
$("#his-data").removeClass("muting");
$("#his-mute-btn").text("ミュート");
$("#his-mute-btn").text(lang.lang_status_mute);
} else {
$("#his-data").addClass("muting");
$("#his-mute-btn").text("ミュート解除");
$("#his-mute-btn").text(lang.lang_status_unmute);
}
}
}
@@ -212,19 +228,64 @@ function mute(acct_id) {
//投稿削除
function del(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/notes/delete";
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({i:at,noteId:id}));
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
}
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
}
}
}
//redraft
function redraft(id, acct_id){
if(confirm(lang.lang_status_redraft)){
show();
del(id, acct_id);
$("#post-acct-sel").prop("disabled", true);
var medias=$("[toot-id="+id+"]").attr("data-medias");
var vismode=$("[toot-id="+id+"] .vis-data").attr("data-vis");
vis(vismode);
$("#media").val(medias);
var ct=medias.split(",").length;
$("[toot-id="+id+"] img.toot-img").each(function(i, elem) {
if(i<ct){
var url=$(elem).attr("src");
console.log(url);
$('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">');
}
});
var html=$("[toot-id="+id+"] .toot").html();
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, "\n");
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
localStorage.setItem("nohide",true);
show();
$("#textarea").val(html);
var cwtxt=$("[toot-id="+id+"] .cw_text").html();
if(cwtxt!=""){
cwtxt=$.strip_tags(cwtxt);
cw();
$("#cw-text").val(cwtxt);
}
}
}
//ピン留め
function pin(id, acct_id) {
if ($("#pub_" + id).hasClass("pined")) {
@@ -233,10 +294,10 @@ function pin(id, acct_id) {
var flag = "pin";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true);
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
@@ -259,7 +320,7 @@ function pin(id, acct_id) {
//フォロリク
function request(id, flag, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/follow_requests/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
@@ -282,7 +343,7 @@ function domainblock(add, flag, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/domain_blocks"
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
@@ -312,7 +373,7 @@ function empUser(){
if(!obj){
var obj=[];
obj.push(id);
Materialize.toast(id+"を強調します。設定を適用するにはF5を押して下さい。", 4000);
Materialize.toast(id+lang.lang_status_emphas, 4000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@@ -322,17 +383,50 @@ function empUser(){
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(id+"の強調を解除しました。設定を適用するにはF5を押して下さい。", 4000);
Materialize.toast(id+lang.lang_status_unemphas, 4000);
}
});
}
var json = JSON.stringify(obj);
localStorage.setItem("user_emp", json);
}
//Endorse
function pinUser(){
var id=$("#his-data").attr("user-id");
var acct_id=$("#his-data").attr("use-acct");
if ($("#his-end-btn").hasClass("endorsed")) {
var flag = "unpin";
} else {
var flag = "pin";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
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)
} else {
$("#his-end-btn").addClass("endorsed")
$("#his-end-btn").text(lang.lang_status_unendorse)
}
}
}
}
//URLコピー
function tootUriCopy(url){
execCopy(url);
Materialize.toast("トゥートURLをコピーしました", 1500);
Materialize.toast(lang.lang_details_url, 1500);
}
//他のアカウントで…
@@ -340,7 +434,7 @@ function staEx(mode){
var url=$("#tootmodal").attr("data-url");
var acct_id = $("#status-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+url
fetch(start, {
method: 'GET',

View File

@@ -17,32 +17,46 @@ input.addEventListener("focus", function() {
var semoji = new_val.match(/:(\S{3,})/);
if(semoji){
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
var num = obj.length;
var ehtml="";
for (i = 0; i < num; i++) {
var emoji = obj[i];
if ( ~emoji.shortcode.indexOf(semoji[1])) {
if (emoji) {
ehtml = ehtml+'<a onclick="emojiInsert(\':' + emoji.shortcode +
': \',\':'+semoji[1]+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
if(!obj){
var ehtml=lang.lang_suggest_nodata;
}else{
var num = obj.length;
var ehtml="";
for (i = 0; i < num; i++) {
var emoji = obj[i];
if ( ~emoji.shortcode.indexOf(semoji[1])) {
if (emoji) {
ehtml = ehtml+'<a onclick="emojiInsert(\':' + emoji.shortcode +
': \',\':'+semoji[1]+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
}
}
}
}
}
}
$("#suggest").html(ehtml);
}
var tag = new_val.match(/#(\S{3,})/);
var acct = new_val.match(/@(\S{3,})/);
if (tag && tag[1]) {
if(localStorage.getItem("imas")){
//セルフNP
var cpnp = new_val.match(/^(?!.*http)\/\/(\S{1,})/);
}else{
var cpnp=[];
}
if (cpnp && cpnp[1]) {
var q = cpnp[1];
cgNPs(q);
} else if (tag && tag[1]) {
var q = tag[1];
} else if (acct && acct[1]) {
var q = acct[1];
} else {
}else {
//$("#suggest").html("");
return;
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
suggest = "https://" + domain + "/api/v1/search?q=" + q
if (suggest != oldSuggest) {
console.log(suggest)
@@ -108,4 +122,33 @@ function tagInsert(code, del) {
$("#textarea").val(newt);
$("#textarea").focus();
$("#suggest").html("");
}
function cgNPs(q){
suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
if (suggest != oldSuggest) {
console.log(suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json[0]) {
var tags = "";
Object.keys(json).forEach(function(key4) {
var tag = json[key4];
tags = tags + '<a onclick="cgNP(\''+json[key4]+'\')" class="pointer">' + json[key4] + '</a> ';
});
$("#suggest").html("Cinderella NowPlaying:" + tags);
}else{
$("#suggest").html("Cinderella NowPlaying:Not Found");
}
});
}
}

View File

@@ -1,14 +1,21 @@
/*リプライ*/
function re(id,at,acct_id,mode){
localStorage.setItem("nohide",true);
show();
$("#reply").val(id);
var te=$("#textarea").val();
$("#textarea").val("@"+at+" "+te);
$("#rec").text("はい");
$("#rec").text(lang.lang_yesno);
$("#post-acct-sel").val(acct_id);
$("#post-acct-sel").prop("disabled", true);
$('select').material_select();
$("#textarea").attr("placeholder","返信モードです。クリアするときはCtrl+Shift+Cを押してください。");
$("#textarea").attr("placeholder",lang.lang_usetxtbox_reply);
$("#textarea").focus();
var profimg=localStorage.getItem("prof_"+acct_id);
if(!profimg){
profimg="../../img/missing.svg";
}
$("#acct-sel-prof").attr("src",profimg);
vis(mode);
}
function reEx(id){
@@ -20,6 +27,7 @@ function reEx(id){
}
//引用
function qt(id,acct_id,at,url){
localStorage.setItem("nohide",true);
var qt = localStorage.getItem("quote");
if(!qt){
var qt="simple";

View File

@@ -2,17 +2,41 @@
//全てのTL処理で呼び出し
function additional(acct_id, tlid) {
//メンション系
$(".mention").attr("href", "#");
//$(".mention").attr("href", "");
$(".mention").addClass("parsed");
$(".hashtag").each(function(i, elem) {
var tags = $(this).attr("href").match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
);
$(this).attr("href","#");
if(tags){
if(tags[2]){
$(this).attr("onclick",'tagShow(\'' + tags[2] + '\')');
}
}
});
//トゥートサムネ
$("#timeline_" + tlid + " .toot a:not(.parsed)").each(function(i, elem) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var card = localStorage.getItem("card_" + tlid);
var text = $(this).attr('href');
var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
);
if(text){
if(text.indexOf("twimg.com")=== -1){
var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
);
}
}else{
var urls =[]
}
//トゥートのURLぽかったら
toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
if(toot){
@@ -23,36 +47,31 @@ function additional(acct_id, tlid) {
if (urls) {
$(this).remove();
} else if (!card) {
var id = $(this).parents('.cvo').attr("toot-id");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons" onclick="pip('+id+')">picture_in_picture_alt</i>');
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/url?url="+text;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}
}else{
$(this).attr("title",text);
}
@@ -106,7 +125,7 @@ function additional(acct_id, tlid) {
function additionalIndv(tlid, acct_id, id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var text = $("[toot-id="+id+"] .toot a").attr('href');
var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
@@ -114,37 +133,81 @@ function additionalIndv(tlid, acct_id, id) {
if (urls) {
$("[toot-id="+id+"] .toot a").remove();
} else {
var id = $("[toot-id="+id+"] .toot a").parents('.cvo').attr("toot-id");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
json.description + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="ながら観モード">picture_in_picture_alt</i>');
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/url?url="+text;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
json.description + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}else{
var id = $("[toot-id="+id+"] .toot a").parents('.cvo').attr("toot-id");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
//このリンク鳥やんけ、ってとき
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">';
}else{
var twiImg='';
}
$("[toot-id=" + id + "] .additional").html(
'<div class="twitter-tweet"><b>'+escapeHTML(json.author_name)+'</b><br>'+escapeHTML(json.description)+twiImg+'</div>');
}else if (json.provider_name=="pixiv"){
if(json.image){
var pxvImg='<br><img src="'+json.image+'" style="max-width:100%" onclick="imgv(\'pixiv_'+id+'\', 0, \'pixiv\');" id="pixiv_'+id+'-image-0" data-url="'+json.embed_url+'" data-type="image">';
}else{
var pxvImg='';
}
$("[toot-id=" + id + "] .additional").html(
'<div class="pixiv-post"><b><a href="'+json.author_url+'" target="_blank">'+escapeHTML(json.author_name)+'</a></b><br>'+escapeHTML(json.title)+pxvImg+'</div>');
}else{
if (json.title) {
$("[toot-id=" + id + "] .additional").html(
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(json.title) + "<br>" +
escapeHTML(json.description) + "</span>");
}
if (json.html) {
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>');
}
}
if (json.title) {
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}
}
}
@@ -173,26 +236,37 @@ function cardCheck(tlid) {
}
}
function mov(id,tlid){
function mov(id,tlid,type){
if(tlid=="notf"){
var tlide="[data-notf="+acct_id+"]";
}else if(tlid=="user"){
var tlide="#his-data";
}else{
var tlide="[tlid="+tlid+"]";
}
console.log(tlid)
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
mouseover="";
}else if(mouseover=="yes"){
}
if(mouseover=="yes"){
mouseover="hide";
}else if(mouseover=="click"){
if(type=="mv"){
mouseover="";
}else{
mouseover="hide";
}
}else if(mouseover=="no"){
mouseover="";
}
if(mouseover=="hide"){
$(tlide+" [toot-id="+id+"] .area-actions").removeClass("hide")
$(tlide+" [toot-id="+id+"] .area-actions").toggleClass("hide")
$(tlide+" [toot-id="+id+"] .area-side").toggleClass("hide")
}
}
function resetmv(){
function resetmv(type){
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
mouseover="";
@@ -200,9 +274,12 @@ function resetmv(){
mouseover="hide";
}else if(mouseover=="no"){
mouseover="";
}else if(mouseover=="click" && type!="mv"){
mouseover="hide";
}
if(mouseover=="hide"){
$(".area-actions").addClass("hide");
$(".area-side").addClass("hide");
}
}

View File

@@ -1,46 +1,97 @@
//トゥートの詳細
function details(id, acct_id, tlid) {
$(".toot-reset").html("データなし");
var html = $("#timeline_"+tlid+" #pub_" + id).html();
$(".toot-reset").html(lang.lang_details_nodata);
var html = $("#timeline_"+tlid+" [toot-id=" + id + "]").html();
$("#toot-this").html(html);
$('#tootmodal').modal('open');
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/notes/show";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
noteId:id
})
}
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}
}
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if(!$("#timeline_"+tlid+" #pub_" + id).length){
var html = parse([json], '', acct_id);
$("#toot-this").html(html);
jQuery("time.timeago").timeago();
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
var url="https://"+domain+"/notes/"+json.id;
var scn=json.user.username;
if(!json.user.host){
var local=true;
}else{
var local=false;
scn=scn+"@"+host;
}
var rep="";
var uid=json.user.id;
if(json._replyIds){
replyTL(json._replyIds[0], acct_id);
}
}else{
var url=json.url
if(json.account.acct==json.account.username){
var local=true;
}else{
var local=false;
}
var scn=json.account.acct;
var uid=json.account.id;
if (json["in_reply_to_id"]) {
replyTL(json["in_reply_to_id"], acct_id);
}
}
$("#toot-this .fav_ct").text(json.favourites_count);
$("#toot-this .rt_ct").text(json.reblogs_count);
$("#tootmodal").attr("data-url",json.url);
$("#tootmodal").attr("data-url",url);
$("#tootmodal").attr("data-id",json.id);
if(json.account.acct==json.account.username){
$("#tootmodal").attr("data-user",json.account.acct+"@"+domain);
if(local){
$("#tootmodal").attr("data-user",scn+"@"+domain);
}else{
$("#tootmodal").attr("data-user",json.account.acct);
}
if (json.in_reply_to_id) {
replyTL(json.in_reply_to_id, acct_id);
$("#tootmodal").attr("data-user",scn);
}
context(id, acct_id);
beforeToot(id, acct_id);
userToot(id, acct_id, json.account.id);
if(!local){
var dom=scn.replace(/.+@/g,'');
}else{
var dom=domain;
}
beforeToot(id, acct_id, dom);
userToot(id, acct_id, uid);
faved(id, acct_id);
rted(id, acct_id);
if($("#toot-this div").hasClass("cvo")){
$("#toot-this").removeClass("cvo");
}else{
$("#toot-this").addClass("cvo");
}
if(!$("#activator").hasClass("active")){
$('#det-col').collapsible('open', 1);
}
@@ -51,103 +102,224 @@ function details(id, acct_id, tlid) {
//返信タイムライン
function replyTL(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/notes/show";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
noteId:id
})
}
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id;
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}
}
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse([json], '', acct_id);
$("#toot-reply").prepend(templete);
jQuery("time.timeago").timeago();
if (json.in_reply_to_id) {
replyTL(json.in_reply_to_id, acct_id);
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
}else{
var mute=[];
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = misskeyParse([json], '', acct_id,"","",mute);
$("#toot-after").prepend(templete);
$("#toot-after .hide").html(lang.lang_details_filtered);
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
var rep="_replyIds";
if (json[rep]) {
replyTL(json[rep][0], acct_id);
}
}else{
var templete = parse([json], '', acct_id,"","",mute);
$("#toot-reply").prepend(templete);
$("#toot-reply .hide").html(lang.lang_details_filtered);
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
var rep="in_reply_to_id";
if (json[rep]) {
replyTL(json[rep], acct_id);
}
}
});
}
//コンテクストってなんですか
function context(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain + "/api/notes/conversation";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
noteId:id
})
}
}else{
var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}
}
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json.descendants, '', acct_id);
$("#toot-after").html(templete);
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);
$("#toot-reply .by_filter").css("display","block");
$("#toot-reply .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
}else{
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
}else{
var mute=[];
}
var templete = parse(json.descendants, '', acct_id,"","",mute);
$("#toot-after").html(templete);
$("#toot-after .hide").html(lang.lang_details_filtered);
$("#toot-after .by_filter").css("display","block");
$("#toot-after .by_filter").removeClass("hide");
jQuery("time.timeago").timeago();
}
jQuery("time.timeago").timeago();
});
}
//前のトゥート(Back TL)
function beforeToot(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain +
function beforeToot(id, acct_id, domain) {
//var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain +
"/api/notes/local-timeline"
fetch(start, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
untilID:id
})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = misskeyParse(json, 'noauth', acct_id);
$("#toot-before").html(templete);
jQuery("time.timeago").timeago();
});
}else{
var start = "https://" + domain +
"/api/v1/timelines/public?local=true&max_id=" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
$("#toot-before").html(templete);
jQuery("time.timeago").timeago();
});
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, 'noauth', acct_id);
$("#toot-before").html(templete);
jQuery("time.timeago").timeago();
});
}
}
//前のユーザーのトゥート
function userToot(id, acct_id, user) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
$("#user-before").html(templete);
jQuery("time.timeago").timeago();
});
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var start = "https://" + domain +
"/api/users/notes"
fetch(start, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at,
untilID:id,
userId:user
})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = misskeyParse(json, 'noauth', acct_id);
$("#user-before").html(templete);
jQuery("time.timeago").timeago();
});
}else{
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
$("#user-before").html(templete);
jQuery("time.timeago").timeago();
});
}
}
//ふぁぼ一覧
function faved(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/favourited_by";
fetch(start, {
method: 'GET',
@@ -169,7 +341,8 @@ function faved(id, acct_id) {
//ブースト一覧
function rted(id, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses/" + id + "/reblogged_by";
fetch(start, {
method: 'GET',
@@ -195,10 +368,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("埋め込みHTMLをコピーしました", 1500);
Materialize.toast(lang.lang_details_embed, 1500);
}else{
if(execCopy(url)){
Materialize.toast("トゥートURLをコピーしました", 1500);
Materialize.toast(lang.lang_details_url, 1500);
}
}
@@ -206,26 +379,73 @@ function cbCopy(mode){
//本文のコピー
function staCopy(id){
var html=$("[toot-id="+id+"] .toot").html();
html = html.match(/^<p>(.+)<\/p>$/)[1];
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, "\n");
console.log(html);
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
html=$.strip_tags(html);
if(execCopy(html)){
Materialize.toast("トゥート本文をコピーしました", 1500);
Materialize.toast(lang.lang_details_txt, 1500);
}
}
//魚拓
function shot(){
var id=$("#tootmodal").attr("data-id");
var w=$("#toot-this").width();
var h=$("#toot-this").height()+150;
var text=$("#toot-this").html();
localStorage.setItem("sc-text",text)
var title=$("#tootmodal").attr("data-id");
var off = $('#toot-this').offset();
var w=$("#toot-this").width()+50;
var h=$("#toot-this").height()+50;
var electron = require("electron");
const fs = require("fs");
const os = require('os')
const shell = electron.shell;
const path = require('path')
var ipc = electron.ipcRenderer;
ipc.send('screen', [w,h,id]);
let options = {
types: ['screen'],
thumbnailSize: {
width: window.parent.screen.width,
height: window.parent.screen.height
}
}
const desktopCapturer = electron.desktopCapturer;
desktopCapturer.getSources(options, function(error, sources) {
if (error) return console.log(error)
sources.forEach(function(source) {
if (source.name === 'Screen 1' || source.name === 'TheDesk') {
var durl=source.thumbnail.toDataURL();
var b64 = durl.match(
/data:image\/png;base64,(.+)/
);
const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
const savePath = path.join(os.tmpdir(), 'screenshot.png');
var ipc = electron.ipcRenderer;
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title,off.top+50,off.left,save]);
if($("#toot-this .img-parsed").length>0){
for(i=0;i<$("#toot-this .img-parsed").length;i++){
var url=$("#toot-this .img-parsed").eq(i).attr("data-url");
if(localStorage.getItem("savefolder")){
var save=localStorage.getItem("savefolder");
}else{
var save="";
}
ipc.send('shot-img-dl', [url,title+"_img"+i+".png",save]);
}
}
return;
const message = `Saved screenshot to: ${screenshotPath}`
//screenshotMsg.textContent = message
}
})
})
}
//翻訳
function trans(tar){
@@ -262,8 +482,11 @@ function brws(){
}
//外部からトゥート開く
function detEx(url,acct_id){
if(acct_id=="main"){
acct_id=localStorage.getItem("main");
}
var domain = localStorage.getItem("domain_"+acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+url
fetch(start, {
method: 'GET',

View File

@@ -21,7 +21,7 @@ function date(str, datetype) {
var sec = date.getSeconds();
}
if (datetype == "full") {
var ret = date.getFullYear() + "" + month + "" + date.getDate() + " " +
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + "/ " +
date.getHours() + ":" + min + ":" + sec;
}
if (date.getFullYear() == now.getFullYear()) {
@@ -34,15 +34,15 @@ function date(str, datetype) {
}
} else {
var ret = month + "" + date.getDate() + " " + date.getHours() + ":" +
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" +
min + ":" + sec;
}
} else {
var ret = month + "" + date.getDate() + " " + date.getHours() + ":" + min +
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" + min +
":" + sec;
}
} else {
var ret = date.getFullYear() + "" + month + "" + date.getDate() + " " +
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + " " +
date.getHours() + ":" + min + ":" + sec;
}
if (datetype == "double") {
@@ -56,14 +56,38 @@ function date(str, datetype) {
//特殊フォーマット(インスタンス情報で利用)
function crat(str) {
var date = new Date(str);
if(date.getMonth()<9){
var mnt="0"+(date.getMonth()+1);
}else{
var mnt=date.getMonth()+1;
}
if(date.getDate()<10){
var dat="0"+date.getDate();
}else{
var dat=date.getDate();
}
if(date.getHours()<10){
var hrs="0"+date.getHours();
}else{
var hrs=date.getHours();
}
if(date.getMinutes()<10){
var mns="0"+date.getMinutes();
}else{
var mns=date.getMinutes();
}
if(date.getSeconds()<10){
var sec="0"+date.getSeconds();
}else{
var sec=date.getSeconds();
}
format_str = 'YYYY-MM-DD hh:mm:ss';
format_str = format_str.replace(/YYYY/g, date.getFullYear());
format_str = format_str.replace(/MM/g, date.getMonth()+1);
format_str = format_str.replace(/DD/g, date.getDate());
format_str = format_str.replace(/hh/g, date.getHours());
format_str = format_str.replace(/mm/g, date.getMinutes());
format_str = format_str.replace(/ss/g, date.getSeconds());
format_str = format_str.replace(/MM/g, mnt);
format_str = format_str.replace(/DD/g, dat);
format_str = format_str.replace(/hh/g, hrs);
format_str = format_str.replace(/mm/g, mns);
format_str = format_str.replace(/ss/g, sec);
return format_str;
}

543
app/js/tl/dm.js Normal file
View File

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

View File

@@ -1,3 +1,4 @@
/*メディアフィルター機能*/
//各TL上方のMedia[On/Off]
function mediaToggle(tlid) {
var media = localStorage.getItem("media_" + tlid);
@@ -13,6 +14,29 @@ function mediaToggle(tlid) {
$("#timeline_"+tlid).addClass("media-filter")
}
}
//各TL上方のBT[BTOnly/BTExc/Off]
function ebtToggle(tlid) {
var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt=="true") {
localStorage.setItem("ebt_" + tlid, "but");
$("#sta-bt-" + tlid).text("BT Only");
$("#sta-bt-" + tlid).css("color",'#ff9800');
$("#timeline_"+tlid).addClass("except-bt-filter")
$("#timeline_"+tlid).removeClass("bt-filter")
}else if (ebt=="but") {
localStorage.removeItem("ebt_" + tlid);
$("#sta-bt-" + tlid).text("Off");
$("#sta-bt-" + tlid).css("color",'red');
$("#timeline_"+tlid).removeClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
} else {
localStorage.setItem("ebt_" + tlid, "true");
$("#sta-bt-" + tlid).text("BT Ex");
$("#sta-bt-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
}
}
//各TL上方のMedia[On/Off]をチェック
function mediaCheck(tlid) {
var media = localStorage.getItem("media_" + tlid);
@@ -26,3 +50,396 @@ function mediaCheck(tlid) {
$("#timeline_"+tlid).removeClass("media-filter")
}
}
//各TL上方のBT[On/Off]をチェック
function ebtCheck(tlid) {
var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt=="true") {
$("#sta-bt-" + tlid).text("BT Ex");
$("#sta-bt-" + tlid).css("color",'#009688');
$("#timeline_"+tlid).addClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
} else if (ebt=="but") {
$("#sta-bt-" + tlid).text("BT Only");
$("#sta-bt-" + tlid).css("color",'#ff9800');
$("#timeline_"+tlid).addClass("except-bt-filter")
$("#timeline_"+tlid).removeClass("bt-filter")
} else{
$("#sta-bt-" + tlid).text("Off");
$("#sta-bt-" + tlid).css("color",'red');
$("#timeline_"+tlid).removeClass("bt-filter")
$("#timeline_"+tlid).removeClass("except-bt-filter")
}
}
/* 削除追跡*/
function catchToggle(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
localStorage.removeItem("catch_" + tlid);
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
parseColumn();
} else {
localStorage.setItem("catch_" + tlid, "true");
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
parseColumn();
}
}
function catchCheck(tlid) {
var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) {
$("#sta-del-" + tlid).text("On");
$("#sta-del-" + tlid).css("color",'#009688');
} else {
$("#sta-del-" + tlid).text("Off");
$("#sta-del-" + tlid).css("color",'red');
}
}
function delreset(tlid){
$("[tlid=" + tlid + "] .by_delcatch").hide();
$("[tlid=" + tlid + "] .by_delcatch").remove();
}
/*ワードフィルター機能*/
function filterToggle(){
if ($("#filter-box").hasClass("hide")) {
$("#filter-box").removeClass("hide");
$("#filter-box").addClass("show");
$("#filter-box").css("bottom","40px");
$("#filter-box").css("left",$('#filter-tgl').offset().left-$('#filter-box').width()/2+"px");
//フィルターロード
} else {
$("#filter-box").removeClass("show");
$("#filter-box").addClass("hide")
}
}
function filter(){
$("#filtered-words").html("");
$("#filter-edit-id").val("")
var acct_id = $("#filter-acct-sel").val();
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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json) {
var filters = "";
Object.keys(json).forEach(function(key) {
var filterword = json[key];
var context = filterword.context.join(',');
filters = filters + escapeHTML(filterword.phrase)+'<span class="sml">(for '+context+')</span>:<a onclick="filterEdit(\'' + filterword.id + '\',\'' + acct_id +
'\')" class="pointer">'+lang_edit[lang]+'</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">'+lang_del[lang]+'</a><br> ';
});
if(filters==""){
filters=lang_filter_nodata[lang]+"<br>";
}
$("#filtered-words").html(filters);
}else{
$("#filtered-words").html(lang_filter_nodata[lang]);
}
});
}
function makeNewFilter(){
var acct_id = $("#filter-acct-sel").val();
var phr=$("#filter-add-word").val();
var cont=[];
if($("#home_filter:checked").val()){
cont.push("home");
}
if($("#local_filter:checked").val()){
cont.push("public");
}
if($("#notf_filter:checked").val()){
cont.push("notifications");
}
if($("#conv_filter:checked").val()){
cont.push("thread");
}
console.log(cont);
if(!cont.length){
$("#filtered-words").html('Error:'+lang_filter_errordegree[lang]);
}
var exc=$("#except_filter:checked").val();
var who=$("#wholeword_filter:checked").val();
if(!who){
who=false;
}
var time=$("#days_filter").val()*24*60*60+$("#hours_filter").val()*60*60+$("#mins_filter").val()*60;
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if($("#filter-edit-id").val()){
var start = "https://" + domain + "/api/v1/filters/"+$("#filter-edit-id").val();
var method="PUT"
}else{
var start = "https://" + domain + "/api/v1/filters"
var method="POST"
}
var httpreq = new XMLHttpRequest();
httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
phrase: phr,
context: cont,
irreversible: exc,
whole_word:who,
expires_in:time
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
$("#filter-add-word").val("");
$("#home_filter").prop("checked",false);
$("#local_filter").prop("checked",false);
$("#notf_filter").prop("checked",false);
$("#conv_filter").prop("checked",false);
$("#except_filter").prop("checked",false);
$("#wholeword_filter").prop("checked",false);
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text(lang_add[lang]);
$("#filter-edit-id").val("")
}
}
}
function filterEdit(id,acct_id){
$("#filter-add-word").val("");
$("#home_filter").prop("checked",false);
$("#local_filter").prop("checked",false);
$("#notf_filter").prop("checked",false);
$("#conv_filter").prop("checked",false);
$("#except_filter").prop("checked",false);
$("#wholeword_filter").prop("checked",false);
$("#days_filter").val("0");
$("#hours_filter").val("0");
$("#mins_filter").val("0");
$("#add-filter-btn").text(lang_edit[lang]);
$("#filter-edit-id").val(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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
if (json) {
var now = new Date() ;
now = now.getTime() ;
var now = Math.floor(now / 1000 ) ;
$("#filter-add-word").val(json.phrase);
Object.keys(json.context).forEach(function(key) {
var context = json.context[key];
$("[value="+context+"]").prop("checked",true);
});
if(json.irreversible){
$("#except_filter").prop("checked",true);
}
if(json.whole_word){
$("#wholeword_filter").prop("checked",true);
}
var expires=date(json.expires_at, 'unix')-now;
var mins=Math.floor(expires/60)%60;
var hours=Math.floor(expires/3600)%24;
var days=Math.floor(expires/3600/24);
$("#days_filter").val(days);
$("#hours_filter").val(hours);
$("#mins_filter").val(mins);
}
});
}
function filterDel(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;
var httpreq = new XMLHttpRequest();
httpreq.open("DELETE", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send();
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
filter();
filterUpdate(acct_id)
}
}
}
function getFilter(acct_id){
var domain = localStorage.getItem("domain_" + 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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
});
}else{
localStorage.setItem("filter_"+ acct_id ,JSON.stringify({}));
}
}
function getFilterType(json,type){
if(!json){
return [];
}
if(type=="local"){
type="public";
}else if(type=="list"){
type="home";
}else if(type=="notf"){
type="notifi";
}
var mutedfilters=[];
Object.keys(json).forEach(function(key) {
var filterword = json[key];
var phrases = filterword.phrase;
if(filterword.context.join(",").indexOf(type)!== -1){
mutedfilters.push(phrases);
}
});
return mutedfilters;
}
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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
filterUpdateInternal(json,"home");
filterUpdateInternal(json,"local");
filterUpdateInternal(json,"notf");
filterUpdateInternal(json,"pub");
});
}
function filterUpdateInternal(json,type){
var home=getFilterType(json,type);
var wordmute = localStorage.getItem("word_mute");
if(wordmute){
var wordmute = JSON.parse(wordmute);
home = home.concat(wordmute);
}
if(home){
$("[data-acct="+acct_id+"] [data-type="+type+"] .cvo").each(function(i, elem) {
var id=$(elem).attr("toot-id");
$("[toot-id="+id+"]").removeClass("hide");
var text=$(elem).find('.toot').html();
Object.keys(home).forEach(function(key8) {
var word = home[key8];
var regExp = new RegExp( word, "g" );
if($.strip_tags(text).match(regExp)){
$("[toot-id="+id+"]").addClass("hide");
}
});
});
}
}
/*
<a onclick="catchToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
')" class="pointer">リセット</a><br>
*/
//通知フィルター
function exclude(key){
var excludetxt="";
if($('#exc-reply-'+key+':checked').val()){
excludetxt="?exclude_types[]=mention"
var reply=true
}else{
var reply=false;
}
if($('#exc-fav-'+key+':checked').val()){
if(reply){
excludetxt=excludetxt+"&exclude_types[]=favourite"
}else{
excludetxt="?exclude_types[]=favourite"
}
var fav=true
}else{
var fav=false;
}
if($('#exc-bt-'+key+':checked').val()){
if(reply || fav){
excludetxt=excludetxt+"&exclude_types[]=reblog"
}else{
excludetxt="?exclude_types[]=reblog"
}
var bt=true
}else{
var bt=false;
}
if($('#exc-follow-'+key+':checked').val()){
if(reply || bt || fav){
excludetxt=excludetxt+"&exclude_types[]=follow"
}else{
excludetxt="?exclude_types[]=follow"
}
}else{
}
localStorage.setItem("exclude-"+key,excludetxt)
parseColumn();
}
function excludeCk(key,target){
var exc=localStorage.getItem("exclude-"+key);
if(!exc){
return "";
}
if(~exc.indexOf(target)){
return "checked"
}else{
return "";
}
}

View File

@@ -2,20 +2,21 @@ function listToggle(){
if ($("#list-box").hasClass("hide")) {
$("#list-box").removeClass("hide");
$("#list-box").addClass("show");
$("#list-box").css("top",$('#list-tgl').offset().top+"px");
$("#list-box").css("left",$('#list-tgl').offset().left-410+"px");
$("#list-box").css("bottom","40px");
$("#list-box").css("left",$('#list-tgl').offset().left-$('#list-box').width()/2+"px");
//リストロード
} else {
$("#list-box").removeClass("show");
$("#list-box").addClass("hide")
}
}
}
function list(){
$("#lists-user").html("");
var acct_id = $("#list-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
@@ -35,12 +36,12 @@ function list(){
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + list.title+':<a onclick="listShow(' + list.id + ',\'' + list.title + '\',\'' + acct_id +
'\')" class="pointer">表示</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
')" class="pointer">ユーザー一覧</a><br> ';
'\')" class="pointer">'+lang.lang_list_show+'</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
')" class="pointer">'+lang.lang_list_users+'</a><br> ';
});
$("#lists").html(lists);
}else{
$("#lists").html("リストはありません");
$("#lists").html(lang.lang_list_nodata);
}
});
}
@@ -48,7 +49,7 @@ function makeNewList(){
var acct_id = $("#list-acct-sel").val();
var text=$("#list-add").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
var httpreq = new XMLHttpRequest();
@@ -73,7 +74,7 @@ function listShow(id,title,acct_id){
}
function listUser(id,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
console.log(start)
fetch(start, {
@@ -92,17 +93,17 @@ function listUser(id,acct_id){
var lists = "";
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="ユーザーはいません";
templete=lang.lang_list_nouser;
}
$("#lists-user").html(templete);
}else{
$("#lists-user").html("ユーザーはいません");
$("#lists-user").html(lang.lang_list_nouser);
}
});
}
function hisList(user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists"
console.log(start)
fetch(start, {
@@ -118,15 +119,15 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = "リストに追加<br>";
var lists = lang.lang_list_add+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listAdd(' + list.id + ',\'' + user + '\',\'' + acct_id +
'\')" class="pointer">'+list.title+'</a><br> ';
'\')" class="pointer">'+escapeHTML(list.title)+'</a><br> ';
});
$("#his-lists-a").html(lists);
}else{
$("#his-lists-a").html('リストはありません');
$("#his-lists-a").html(lang.lang_list_nodata);
}
});
var start = "https://" + domain + "/api/v1/accounts/"+user+"/lists"
@@ -144,7 +145,7 @@ function hisList(user,acct_id){
console.error(error);
}).then(function(json) {
if (json) {
var lists = "リストから削除<br>";
var lists = lang.lang_list_remove+"<br>";
Object.keys(json).forEach(function(key) {
var list = json[key];
lists = lists + '<a onclick="listRemove(' + list.id + ',\'' + user + '\',\'' + acct_id +
@@ -152,13 +153,13 @@ function hisList(user,acct_id){
});
$("#his-lists-b").html(lists);
}else{
$("#his-lists-b").html('リストはありません');
$("#his-lists-b").html(lang.lang_list_nodata);
}
});
}
function listAdd(id,user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
console.log(start)
var httpreq = new XMLHttpRequest();
@@ -178,7 +179,7 @@ function listAdd(id,user,acct_id){
}
function listRemove(id,user,acct_id){
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
console.log(start)
var httpreq = new XMLHttpRequest();

872
app/js/tl/misskeyparse.js Normal file
View File

@@ -0,0 +1,872 @@
function escapeHTMLtemp(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
$.strip_tagstemp = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
//オブジェクトパーサー(トゥート)
function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
var templete = '';
localStorage.setItem("lastunix_"+ tlid,date(obj[0].createdAt, 'unix'));
var actb = localStorage.getItem("action_btns");
var actb='re,rt,fav,qt,del,pin,red';
if(actb){
var actb = actb.split(',');
var disp={};
for(var k=0;k<actb.length;k++){
if(k<4){
var tp="type-a";
}else{
var tp="type-b";
}
disp[actb[k]]=tp;
}
}
var datetype = localStorage.getItem("datetype");
var nsfwtype = localStorage.getItem("nsfw");
var sent = localStorage.getItem("sentence");
var ltr = localStorage.getItem("letters");
var gif = localStorage.getItem("gif");
var imh = localStorage.getItem("img-height");
//ネイティブ通知
var native=localStorage.getItem("nativenotf");
if(!native){
native="yes";
}
//クライアント強調
var emp = localStorage.getItem("client_emp");
if(emp){
var emp = JSON.parse(emp);
}
//クライアントミュート
var mute = localStorage.getItem("client_mute");
if(mute){
var mute = JSON.parse(mute);
}
//ユーザー強調
var useremp = localStorage.getItem("user_emp");
if(useremp){
var useremp = JSON.parse(useremp);
}
//ワード強調
var wordemp = localStorage.getItem("word_emp");
if(wordemp){
var wordemp = JSON.parse(wordemp);
}
//ワードミュート
var wordmute = localStorage.getItem("word_mute");
if(wordmute){
var wordmute = JSON.parse(wordmute);
wordmute = wordmute.concat(mutefilter);
}else{
wordmute = mutefilter;
}
//Ticker
var tickerck = localStorage.getItem("ticker_ok");
if(tickerck){
var ticker=true;
}else{
var ticker=false;
}
if (!sent) {
var sent = 500;
}
if (!ltr) {
var ltr = 500;
}
if (!nsfwtype || nsfwtype == "yes") {
var nsfw = "ok";
} else {
var nsfw;
}
var cwtype = localStorage.getItem("cw");
if (!cwtype || cwtype == "yes") {
var cw = "ok";
} else {
var cw;
}
if (!datetype) {
datetype = "absolute";
}
if (!gif) {
var gif = "yes";
}
if (!imh) {
var imh = "200";
}
if(!emp){
var emp=[];
}
if(!mute){
var mute=[];
}
if(!useremp){
var useremp=[];
}
if(!wordemp){
var wordemp=[];
}
if(!wordmute){
var wordmute=[];
}
//via通知
var viashow=localStorage.getItem("viashow");
if(!viashow){
viashow="via-hide";
}
if(viashow=="hide"){
viashow="via-hide";
}
//認証なしTL
if(mix=="noauth"){
var noauth="hide";
var antinoauth="";
}else{
var noauth="";
var antinoauth="hide";
}
//マウスオーバーのみ
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
mouseover="";
}else if(mouseover=="yes" || mouseover=="click"){
mouseover="hide";
}else if(mouseover=="no"){
mouseover="";
}
var local = [];
var times=[];
Object.keys(obj).forEach(function(key) {
var toot = obj[key];
var dis_name=toot.user.name;
if(dis_name){
dis_name=escapeHTMLtemp(dis_name);
}else{
disname="";
}
if (mix == "notf") {
if (gif == "yes") {
noticeavatar = toot.user.avatarUrl;
} else {
noticeavatar = toot.user.avatarUrl;
}
noticeavatar='<a onclick="udg(\'' + toot.user.id +
'\',' + acct_id + ');" user="' + toot.user.username + '" class="udg">' +
'<img src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.user.username +
'"></a>';
if (toot.type == "reply") {
var what = lang.lang_parse_mentioned;
var icon = '<i class="big-text fa fa-share teal-text"></i>';
noticeavatar="";
} else if (toot.type == "renote") {
var what = lang.lang_misskeyparse_renoted;
var icon = '<i class="big-text fa fa-retweet light-blue-text"></i>';
} else if (toot.type == "quote") {
var what = lang.lang_misskeyparse_quoted;
var icon = '<i class="big-text fa fa-quote-right orange-text"></i>';
} else if (toot.type == "reaction") {
var what = lang.lang_misskeyparse_reacted;
var reactions={
"like":"👍",
"love":"💓",
"laugh":"😁",
"hmm":"🤔",
"surprise":"😮",
"congrats":"🎉",
"amgry":"💢",
"confused":"😥",
"pudding":"🍮"
}
var icon=reactions[toot.reaction];
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
for(var i=0;i<reactions.length;i++){
if(toot.note.reactionCounts[reactions[i]]){
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
}else{
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
}
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
}
}
}else{
var icon = '<i class="big-text material-icons indigo-text" style="font-size:17px">info</i>';
}
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
datetype) +
'</span>'+icon+'<a onclick="udg(\'' + toot.user.username +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
"(@" + toot.user.username +
")</a>";
var notice = noticetext;
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
if (toot.type == "reply") {
var replyct=localStorage.getItem("notf-reply_" + acct_id)
$(".notf-reply_" + acct_id).text(replyct*1-(-1));
localStorage.setItem("notf-reply_" + acct_id,replyct*1-(-1))
$(".notf-reply_" + acct_id).removeClass("hide")
}else if (toot.type == "renote" || toot.type=="quote") {
var btct=localStorage.getItem("notf-bt_" + acct_id)
$(".notf-bt_" + acct_id).text(btct*1+1);
localStorage.setItem("notf-bt_" + acct_id,btct*1-(-1))
$(".notf-bt_" + acct_id).removeClass("hide")
}else if (toot.type == "reaction") {
var favct=localStorage.getItem("notf-fav_" + acct_id)
$(".notf-fav_" + acct_id).text(favct*1-(-1));
localStorage.setItem("notf-fav_" + acct_id,favct*1-(-1))
$(".notf-fav_" + acct_id).removeClass("hide")
}
}
var domain = localStorage.getItem("domain_" + acct_id);
if(popup>0){
Materialize.toast("["+domain+"]"+escapeHTMLtemp(toot.user.name)+what, popup * 1000);
}
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
icon: toot.account.avatar
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
toot.account.avatar,
"toot",
acct_id,
toot.status.id
]);
}
}
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
$(".notf-icon_" + acct_id).addClass("red-text");
}
localStorage.setItem("notice-mem", noticetext);
noticetext = "";
}
var if_notf='data-notfIndv="'+acct_id+"_"+toot.id+'"';
var toot = toot.note;
var dis_name=escapeHTMLtemp(toot.user.name);
}else{
var if_notf="";
if (toot.renote) {
var rebtxt = lang.lang_parse_btedsimple;
var rticon = "fa-retweet light-blue-text";
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.user.username +
")<br>";
var boostback = "shared";
var uniqueid=toot.id;
var toot = toot.renote;
var dis_name=escapeHTMLtemp(toot.user.name);
var uniqueid=toot.id;
var actemojick=false
} else {
var uniqueid=toot.id;
var notice = "";
var boostback = "";
//ユーザー強調
if(toot.user.host){
var fullname=toot.user.username+"@"+toot.user.host;
}else{
var domain = localStorage.getItem("domain_" + acct_id);
var fullname=toot.user.username+"@"+domain;
}
if(useremp){
Object.keys(useremp).forEach(function(key10) {
var user = useremp[key10];
if(user==fullname){
boostback = "emphasized";
}
});
}
}
}
var id = toot.id;
if (mix == "home") {
var home = ""
var divider = '<div class="divider"></div>';
} else {
var home = "";
var divider = '<div class="divider"></div>';
}
/*
if (toot.account.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>';
} else {
var locked = "";
}
*/
if (!toot.app) {
if(toot.viaMobile){
var via = '<span style="font-style: italic;">Mobile</span>';
}else{
var via = '<span style="font-style: italic;">Unknown</span>';
}
} else {
var via = toot.app.name;
//強調チェック
Object.keys(emp).forEach(function(key6) {
var cli = emp[key6];
if(cli == via){
boostback = "emphasized";
}
});
//ミュートチェック
Object.keys(mute).forEach(function(key7) {
var cli = mute[key7];
if(cli == via){
boostback = "hide";
}
});
}
if ((toot.cw || toot.cw=="") && cw) {
var content = toot.text;
var spoil = escapeHTMLtemp(toot.cw);
var spoiler = "cw cw_hide_" + toot.id;
var api_spoil = "gray";
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
} else {
var ct1 = nl2br(toot.text).split('<br />').length -2;
var ct2 = nl2br(toot.text).split('<br>').length -2;
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
if ((sent < ct && $.mb_strlen($.strip_tagstemp(toot.text)) > 5) || ($.strip_tagstemp(toot.text).length > ltr && $.mb_strlen($.strip_tagstemp(toot.text)) > 5)) {
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + escapeHTMLtemp(toot.text)
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tagstemp(
toot.text), 0, 100) +
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
var spoiler = "cw cw_hide_" + toot.id;
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
} else {
var content = escapeHTMLtemp(toot.text);
if(toot.cw){
var spoil = escapeHTMLtemp(toot.cw);
}else{
var spoil="";
}
var spoiler = "";
var spoiler_show = "";
}
}
var analyze = '';
var urls = $.strip_tagstemp(content).replace(/\n/g, " ").match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
);
if (urls) {
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
} else {
var analyze = '';
}
var viewer = "<br>";
var hasmedia = "";
var youtube = "";
if(toot.emojis){
var emojick = toot.emojis[0];
}else{
var emojick=false;
}
//デフォ絵文字
if(content){
//MFM
content=content.replace(/^"([^"]+)"$/gmi, '<blockquote>$1</blockquote>')
content=content.replace(/`(.+)`/gi, '<code>$1</code>')
content=content.replace(/(http(s)?:\/\/[\x21-\x7e]+)/gi, '<a href="$1" target="_blank">$1</a>')
content=content.replace(/\(\(\((.+)\)\)\)/gi, '<span class="shake">$1</span>')
content=content.replace(/<motion>(.+)<\/motion>/gi, '<span class="shake">$1</span>')
content=content.replace(/\*\*\*([^*]+)\*\*\*/gi, '<span class="shake" style="font-size:200%">$1</span>')
content=content.replace(/\*\*([^*]+)\*\*/gi, '<b>$1</b>')
content=content.replace(/^(.+)\s(検索|search)$/gmi, '<div class="input-field"><i class="material-icons prefix">search</i><input type="text" style="width:calc( 60% - 80px);" name="q" value="$1" id="srcbox_'+toot.id+'"><label for="src" data-trans="src" class="">検索</label><button class="btn waves-effect indigo" style="width:40%;" data-trans-i="src" onclick="goGoogle(\''+toot.id+'\')">検索</button></div>')
content=content.replace(/\[(.+)\]\(<a href="(http(s)?:\/\/[\x21-\x7e]+)".+\)/gi,'<a href="$2" target="_blank">$1</a>');
content=twemoji.parse(content);
}else{
content="";
}
if(dis_name){
dis_name=twemoji.parse(dis_name);
}else{
dis_name="";
}
if(spoil){
spoil=twemoji.parse(spoil);
}
if(noticetext){
noticetext=twemoji.parse(noticetext);
}
if(notice){
notice=twemoji.parse(notice);
}
if(toot.files){
var mediack = toot.files[0];
var useparam="files";
}else{
if(toot.media){
var mediack = toot.media[0];
var useparam="media";
}else{
var mediack=false;
}
}
//メディアがあれば
var media_ids="";
if (mediack) {
hasmedia = "hasmedia";
var cwdt = 100 / toot[useparam].length;
Object.keys(toot[useparam]).forEach(function(key2) {
var media = toot[useparam][key2];
var purl = media.url;
media_ids=media_ids+media.id+",";
var url = media.url;
if (media.isSensitive && nsfw) {
var sense = "sensitive"
} else {
var sense = ""
}
if(media.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{
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="image" class="img-parsed"><img src="' +
purl + '" class="' + sense +
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
}
});
media_ids = media_ids.slice(0, -1) ;
} else {
viewer = "";
hasmedia = "nomedia";
}
var menck = toot.reply;
var mentions = "";
//メンションであれば
if (menck) {
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 tags = "";
//タグであれば
if (tagck) {
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
var tags = '<a onclick="tagShow(\'' + tag + '\')" class="pointer parsed">#' + tag + '</a><span class="hide" data-tag="' + tag + '">#' + tag + ':<a onclick="tl(\'tag\',\'' + tag + '\',' + acct_id +
',\'add\')" class="pointer parsed" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer parsed" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag + '\')" class="pointer parsed" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag)+ '">Pin</a></span> ';
content=content.replace("#"+tag,tags);
});
//tags = '<div style="float:right">' + tags + '</div>';
}
//公開範囲を取得
var vis = "";
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
var can_rt = "";
} else if (visen == "home") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_home+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
var can_rt = "";
} else if (visen == "followers") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_followers+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">people</i>';
var can_rt = "";
} else if (visen == "private") {
var vis =
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
var can_rt = "";
} else if (visen == "specified") {
var vis =
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_misskeyparse_specified+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
var can_rt = "hide";
}
if (toot.user.username == localStorage.getItem("user_" + acct_id)) {
var if_mine = "";
var mine_via="type-b";
} else {
var if_mine = "hide";
var mine_via="";
}
if (toot.myReaction) {
var if_fav = " yellow-text";
var fav_app = "faved";
} else {
var if_fav = "";
var fav_app = "";
}
var if_rt = "";
var rt_app = "";
/*
if (toot.reblogged) {
var if_rt = "teal-text";
var rt_app = "rted";
} else {
var if_rt = "";
var rt_app = "";
}
*/
//アバター
var avatar = toot.user.avatarUrl;
//ワードミュート
if(wordmute){
Object.keys(wordmute).forEach(function(key8) {
var worde = wordmute[key8];
if(worde){
if(worde.tag){
var word=worde.tag;
}else{
var word=worde
}
var regExp = new RegExp( word, "g" ) ;
if($.strip_tagstemp(content).match(regExp)){
boostback = "hide by_filter";
}
}
});
}
//ワード強調
if(wordemp){
Object.keys(wordemp).forEach(function(key9) {
var word = wordemp[key9];
if(word){
var word=word.tag;
var regExp = new RegExp( word, "g" ) ;
content=content.replace(regExp,'<span class="emp">'+word+"</span>");
}
});
}
//Ticker
var tickerdom="";
if(ticker){
var tickerdata=JSON.parse(localStorage.getItem("ticker"));
var thisdomain=toot.user.username.split("@");
if(thisdomain.length>1){
thisdomain=thisdomain[1];
}
for( var i=0; i<tickerdata.length; i++) {
var value=tickerdata[i];
if(value.domain==thisdomain){
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
break;
}
}
}
//Poll
var poll="";
if(toot.poll){
var choices=toot.poll.choices;
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(choice.isVoted){
var myvote=twemoji.parse("✅");
}else{
var myvote="";
}
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+toot.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>';
});
poll='<div class="vote_'+toot.id+'">'+poll+'</div>';
}
//Reactions
if(toot.reactionCounts){
if(toot.reactionCounts.like){
var like=toot.reactionCounts.like;
var likehide="";
}else{
var like=0;
var likehide="hide";
}
if(toot.reactionCounts.love){
var love=toot.reactionCounts.love;
var lovehide="";
}else{
var love=0;
var lovehide="hide";
}
if(toot.reactionCounts.laugh){
var laugh=toot.reactionCounts.laugh;
var laughhide="";
}else{
var laugh=0;
var laughhide="hide";
}
if(toot.reactionCounts.hmm){
var hmm=toot.reactionCounts.hmm;
var hmmhide="";
}else{
var hmm=0;
var hmmhide="hide";
}
if(toot.reactionCounts.surprise){
var surprise=toot.reactionCounts.surprise;
var suphide="";
}else{
var suphide="hide";
var surprise=0;
}
if(toot.reactionCounts.congrats){
var congrats=toot.reactionCounts.congrats;
var conghide="";
}else{
var congrats=0;
var conghide="hide";
}
if(toot.reactionCounts.angry){
var angry=toot.reactionCounts.angry;
var anghide="";
}else{
var angry=0;
var anghide="hide";
}
if(toot.reactionCounts.confused){
var confhide="";
var confused=toot.reactionCounts.confused;
}else{
var confused=0;
var confhide="hide";
}
if(toot.reactionCounts.pudding){
var pudding=toot.reactionCounts.pudding;
var pudhide="";
}else{
var pudding=0;
var pudhide="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 fullhide="hide";
}
if(toot.myReaction){
var reacted=toot.myReaction;
}else{
var reacted="";
}
content=nl2br(content);
if(!content || content==""){
content='<span class="gray">This post has no content. It may be media-only, private or deleted.</span>';
}
var trans="";
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')" reacted="'+reacted+'">' +
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
'</span></div>' +
'<div class="area-icon"><a onclick="udg(\'' + toot.user.id +
'\',' + acct_id + ');" user="' + toot.user.username + '" class="udg">' +
'<img src="' + avatar +
'" width="40" class="prof-img" user="' + toot.user.username +
'"></a></div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name +
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
toot.user.username + '</span></div>' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'https://' +domain+"/notes/"+
toot.id + '\');" title="' + date(toot.createdAt, 'absolute') +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
date(toot.createdAt, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot">'+tickerdom+'<span class="toot ' + spoiler + '">' + content +
'</span><span class="' +
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
'</span>' +
'' + viewer + '' +
'</div><div class="area-additional"><span class="additional">'+analyze+
'<div class="reactions '+fullhide+'" style="height: 25px;"><span class="'+likehide+' reaction re-like"><a onclick="reaction(\'like\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat" style="padding:0;margin-left:3px;">'+twemoji.parse("👍")+'</a><span class="re-likect">'+like+
'</span></span><span class="'+lovehide+' reaction re-love"><a onclick="reaction(\'love\',\'' + toot.id + '\',' + acct_id +
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("💓")+'</a><span class="re-lovect">'+love+
'</span></span><span class="'+laughhide+' reaction re-laugh"><a onclick="reaction(\'laugh\',\'' + 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-laughct">'+laugh+
'</span></span><span class="'+hmmhide+' reaction re-hmm"><a onclick="reaction(\'hmm\',\'' + 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-hmmct">'+hmm+
'</span></span><span class="'+suphide+' reaction re-surprise"><a onclick="reaction(\'surprise\',\'' + 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-surprisect">'+surprise+
'</span></span><span class="'+conghide+' reaction re-congrats"><a onclick="reaction(\'congrats\',\'' + 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-congratsct">'+congrats+
'</span></span><span class="'+anghide+' reaction re-angry"><a onclick="reaction(\'angry\',\'' + 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-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></div>'+poll + mentions + tags + '</div>' +
'<div class="area-vis"></div>'+
'<div class="area-actions '+mouseover+'">' +
'<div class="action">'+vis+'</div>'+
'<div class="action '+antinoauth+'"><a onclick="detEx(\'https://misskey.xyz/notes/'+toot.id+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="misskeyreply(\'' + toot.id +
'\',\'' + acct_id + '\',' +
acct_id + ',\''+visen+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="renote(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renote+'"><i class="text-darken-3 fa fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct"></span></a></div>' +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="renoteqt(\'' + toot.id + '\',' + acct_id +
',\'misskey.xyz\',\'misskey.xyz\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renoteqt+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="reactiontoggle(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_reaction+'"><i class="fa text-darken-3 fa-plus' +
if_fav + ' fav_' + toot.id + '"></i></div>' +
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + '"></i></a></div>'
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tagstemp(via)+'\')" title="via ' + $.strip_tagstemp(via) + '">via ' +
via +
'</span>'+
'</div><div class="area-side '+mouseover+'"><div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
'</div></div>' +
'</div></div>';
});
return templete;
}
//オブジェクトパーサー(ユーザーデータ)
function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
if(popup > 0 || popup==-1){
}else{
var obj = obj.users;
}
var templete = '';
var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function(key) {
var toot = obj[key];
var locked = "";
if (auth) {
var auth = '<i class="material-icons gray pointer" onclick="misskeyRequest(\'' +
toot.id + '\',\'accept\',' + acct_id + ')">person_add</i>';
} else {
var auth = "";
}
var ftxt=lang.lang_parse_followed;
if(popup > 0 || popup==-1){
var notftext='<span class="cbadge"title="' + date(toot.createdAt,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
datetype) +
'</span>'+ftxt+'<br>';
var toot = toot.user;
}else{
var notftext="";
}
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTMLtemp(toot.name)+":"+ftxt, popup * 1000);
$(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", notftext);
notftext = "";
var native=localStorage.getItem("nativenotf");
if(!native){
native="yes";
}
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.display_name+"(" + toot.acct +")"+ftxt,
icon: toot.avatar
};
var domain = localStorage.getItem("domain_" + acct_id);
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.display_name+"(" + toot.acct +")"+ftxt,
toot.avatar,
"userdata",
acct_id,
toot.id
]);
}
}
}
if(toot.name){
var dis_name=escapeHTMLtemp(toot.name);
dis_name=twemoji.parse(dis_name);
}else{
var dis_name=toot.name;
}
templete = templete +
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
notftext +
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
acct_id + ');" user="' + toot.username + '" class="udg">' +
'<img src="' + toot.avatarUrl + '" width="40" class="prof-img" user="' + toot
.username + '"></a></div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name + '</span>' +
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.username + auth +'</span>' +
'</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 +
'</div>' +
'</div>' +
'</div>' +
'</div>';
});
return templete;
}
function goGoogle(id){
var val=$("#srcbox_"+id).val();
var url="https://google.com/search?q="+val;
const {
shell
} = require('electron');
shell.openExternal(url);
}

View File

@@ -1,12 +1,12 @@
//Integrated TL
function mixtl(acct_id, tlid, type) {
console.log(type);
function mixtl(acct_id, tlid, type,delc,voice) {
console.log(delc);
localStorage.removeItem("morelock")
localStorage.setItem("now", type);
todo("Integrated TL Loading...(Local)");
//まずLocal
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/timelines/public?local=true";
fetch(start, {
method: 'GET',
@@ -36,7 +36,7 @@ function mixtl(acct_id, tlid, type) {
var homearr=[];
var timeline = jsonL.concat(jsonH);
timeline.sort(function(a,b){
if(date(a.created_at,"unix")>date(b.created_at,"unix")) return -1;
if(date(a.created_at,"unix")>=date(b.created_at,"unix")) return -1;
if(date(a.created_at,"unix")<date(b.created_at,"unix")) return 1;
return 0;
});
@@ -48,11 +48,16 @@ function mixtl(acct_id, tlid, type) {
var pkey=key*1+1;
if(pkey<timeline.length){
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
}else{
var mute=[];
}
if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid);
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
}else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid);
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute);
}
}
@@ -60,9 +65,9 @@ function mixtl(acct_id, tlid, type) {
}
});
$("#landing_" + tlid).hide();
$("#timeline_" + tlid).html(templete);
mixre(acct_id, tlid, type);
mixre(acct_id, tlid, type, mute,delc,voice);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
@@ -72,38 +77,54 @@ function mixtl(acct_id, tlid, type) {
//Streamingに接続
function mixre(acct_id, tlid, TLtype) {
function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var startHome = "wss://" + domain +
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
}else{
var wss="wss://"+domain
}
var startHome = wss+
"/api/v1/streaming/?stream=user&access_token=" + at;
var startLocal = "wss://" + domain +
var startLocal = wss+
"/api/v1/streaming/?stream=public:local&access_token=" + at;
var wshid = websocketHome.length;
var wslid = websocketLocal.length;
websocketHome[wshid] = new WebSocket(startHome);
websocketLocal[wslid] = new WebSocket(startLocal);
websocketHome[wshid].onopen = function(mess) {
console.log("Connect Streaming API(Home)");
localStorage.setItem("wssH_" + tlid, wshid);
console.log("Connect Streaming API(Integrated:Home)");
$("#notice_icon_" + tlid).removeClass("red-text");
}
websocketLocal[wslid].onopen = function(mess) {
console.log("Connect Streaming API(Local)");
localStorage.setItem("wssL_" + tlid, wslid);
console.log("Connect Streaming API(Integrated:Local)");
$("#notice_icon_" + tlid).removeClass("red-text");
}
websocketLocal[wslid].onmessage = function(mess) {
console.log("Receive Streaming API:");
console.log("Receive Streaming API:(Integrated:Local)");
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event;
if (type == "delete") {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
if(delc=="true"){
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (type == "update") {
var templete = parse([obj], '', acct_id, tlid);
if (!$("[toot-id="+obj.id+"]").length) {
var templete = parse([obj], '', acct_id, tlid,"",mute);
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
@@ -111,32 +132,52 @@ function mixre(acct_id, tlid, TLtype) {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
scrollck();
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
}}
}else{
todo("二重取得発生中");
}
}
}
websocketHome[wshid].onmessage = function(mess) {
console.log("Receive Streaming API:(Home)");
console.log("Receive Streaming API:(Integrated:Home)");
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event;
if (type == "delete") {
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
if(del>10){
reconnector(tlid,type,acct_id,data)
}else{
localStorage.setItem("delete",del*1+1)
}
if(delc=="true"){
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} else if (type == "update") {
localStorage.removeItem("delete");
if(TLtype=="integrated"){
var templete = parse([obj], '', acct_id, tlid);
}else if(TLtype=="plus"){
if(obj.account.acct==obj.account.username){
var templete = parse([obj], '', acct_id, tlid);
var templete = parse([obj], '', acct_id, tlid,"",mute);
}else{
var templete="";
}
}
if (!$("[toot-id="+obj.id+"]").length) {
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
if(voice){
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
@@ -144,18 +185,54 @@ function mixre(acct_id, tlid, TLtype) {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
scrollck();
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
}else{
todo("二重取得発生中");
}
}
}
websocketLocal[wslid].onerror = function(error) {
console.error('WebSocket Error ' + error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
websocketLocal[wslid].onclose = function() {
console.error('WebSocketLocal Closing by error:' + tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
websocketHome[wshid].onerror = function(error) {
console.error('WebSocket Error ' + error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
websocketHome[wshid].onclose = function() {
console.error('WebSocketHome Closing by error:' + tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
reconnector(tlid,TLtype,acct_id,"","error");
}
};
}
//ある程度のスクロールで発火
@@ -165,8 +242,8 @@ function mixmore(tlid,type) {
var acct_id = obj[tlid].domain;
todo("Integrated TL MoreLoading...(Local)");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
var start = "https://" + domain + "/api/v1/timelines/public?local=true&max_id="+sid;
@@ -208,11 +285,16 @@ function mixmore(tlid,type) {
var pkey=key*1+1;
if(pkey<20){
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
}else{
var mute=[];
}
if(type=="integrated"){
templete = templete+parse([timeline[key]], '', acct_id, tlid);
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
}else if(type=="plus"){
if(timeline[key].account.acct==timeline[key].account.username){
templete = templete+parse([timeline[key]], '', acct_id, tlid);
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute);
}
}
}

View File

@@ -1,27 +1,224 @@
//通知
//取得+Streaming接続
function notf(acct_id, tlid, sys) {
function notf(acct_id, tlid, sys){
if (sys == "direct") {
notfColumn(acct_id, tlid, sys)
} else {
notfCommon(acct_id, tlid, sys)
}
}
function notfColumn(acct_id, tlid, sys){
todo("Notifications Loading...");
var native=localStorage.getItem("nativenotf");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(!native){
native="yes";
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/notifications";
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
//body: JSON.stringify({})
}).then(function(response) {
console.log(start)
var httpreq = new XMLHttpRequest();
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
httpreq.open(POST, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
var body=JSON.stringify({
i:at
});
}else{
var misskey=false;
if(localStorage.getItem("exclude-"+tlid)){
var exc=localStorage.getItem("exclude-"+tlid);
}else{
var exc="";
}
var start = "https://" + domain + "/api/v1/notifications"+exc;
httpreq.open("GET", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
var body="";
}
httpreq.responseType = 'json';
httpreq.send(body);
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
var max_id = httpreq.getResponseHeader("link").match(/\?max_id=([0-9]+)/)[1];
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(lastnotf==obj.id && key>0 && native=="yes"){
var ct=key;
if(key>14){
ct="15+";
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
$("#timeline_" + tlid).html(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
}
}
if(!misskey){
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
}else{
var wss="wss://"+domain
}
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
at;
}else{
var start = "wss://" + domain + "/?i=" +
at;
}
console.log(start);
var wsid = websocketNotf.length;
websocketNotf[acct_id] = new WebSocket(start);
console.log(websocketNotf);
websocketNotf[acct_id].onopen = function(mess) {
console.log("Connect Streaming API(Notf):");
console.log(mess);
$("i[data-notf=" + acct_id +"]").removeClass("red-text");
}
websocketNotf[acct_id].onmessage = function(mess) {
console.log("Receive Streaming API(Notf):"+acct_id);
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
console.log(domain)
if(misskey){
console.log("misskey")
console.log(JSON.parse(mess.data));
if (JSON.parse(mess.data).type == "notification") {
var obj = JSON.parse(mess.data).body;
console.log(obj);
if(obj.type!="follow"){
templete = misskeyParse([obj], 'notf', acct_id, 'notf', popup);
}else{
templete = misskeyUserparse([obj], 'notf', acct_id, 'notf', popup);
}
if(obj.type=="reaction"){
console.log("refresh")
reactRefresh(acct_id,obj.note.id)
}
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
$("div[data-notf=" + acct_id +"]").prepend(templete);
}
jQuery("time.timeago").timeago();
}else if(JSON.parse(mess.data).type == "note-updated"){
var obj = JSON.parse(mess.data).body.note;
reactRefreshCore(obj)
}
}else{
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event;
if (type == "notification") {
var templete="";
localStorage.setItem("lastnotf_" + acct_id,obj.id);
if(obj.type!="follow"){
templete = parse([obj], 'notf', acct_id, 'notf', popup);
}else{
templete = userparse([obj], 'notf', acct_id, 'notf', popup);
}
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
$(".tl[data-notf=" + acct_id +"]").prepend(templete);
}
$(".notf-timeline[data-acct=" + acct_id +"]").prepend(templete);
jQuery("time.timeago").timeago();
} else if (type == "delete") {
$("[toot-id=" + obj + "]").hide();
$("[toot-id=" + obj + "]").remove();
}
}
}
websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ' + error);
};
}
function notfCommon(acct_id, tlid, sys) {
todo("Notifications Loading...");
var native=localStorage.getItem("nativenotf");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(!native){
native="yes";
}
var domain = localStorage.getItem("domain_" + acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify({
i:at
})
}
}else{
var misskey=false;
var start = "https://" + domain + "/api/v1/notifications";
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}
}
fetch(start, i).then(function(response) {
console.log(response.headers.get('link'));
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
@@ -34,49 +231,104 @@ function notf(acct_id, tlid, sys) {
}
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('native-notf', ['TheDesk:'+domain,ct+"件の新しい通知",localStorage.getItem("prof_"+acct_id)]);
var os = electron.remote.process.platform;
var options = {
body: ct+lang_notf_new[lang],
icon: localStorage.getItem("prof_"+acct_id)
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
}
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1);
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
if (sys == "direct") {
$("#timeline_" + tlid).html(templete);
} else {
$("div[data-notf=" + acct_id +"]").html(templete);
}
$("div[data-notf=" + acct_id +"]").html(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
});
var start = "wss://" + domain + "/api/v1/streaming/?stream=user&access_token=" +
if(!misskey){
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
}else{
var wss="wss://"+domain
}
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
at;
}else{
var start = "wss://" + domain + "/?i=" +
at;
}
console.log(start);
var wsid = websocketNotf.length;
websocketNotf[wsid] = new WebSocket(start);
websocketNotf[acct_id] = new WebSocket(start);
console.log(websocketNotf);
websocketNotf[wsid].onopen = function(mess) {
websocketNotf[acct_id].onopen = function(mess) {
console.log("Connect Streaming API(Notf):");
console.log(mess);
$("i[data-notf=" + acct_id +"]").removeClass("red-text");
}
websocketNotf[wsid].onmessage = function(mess) {
console.log("Receive Streaming API(Notf):"+acct_id);
}
websocketNotf[acct_id].onmessage = function(mess) {
console.log("Receive Streaming API(Notf):"+acct_id);
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
console.log(domain)
if(misskey){
console.log("misskey")
console.log(JSON.parse(mess.data));
if (JSON.parse(mess.data).type == "notification") {
var obj = JSON.parse(mess.data).body;
console.log(obj);
if(obj.type!="follow"){
templete = misskeyParse([obj], 'notf', acct_id, 'notf', popup);
}else{
templete = misskeyUserparse([obj], 'notf', acct_id, 'notf', popup);
}
if(obj.type=="reaction"){
console.log("refresh")
reactRefresh(acct_id,obj.note.id)
}
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
$("div[data-notf=" + acct_id +"]").prepend(templete);
}
jQuery("time.timeago").timeago();
}else if(JSON.parse(mess.data).type == "note-updated"){
var obj = JSON.parse(mess.data).body.note;
reactRefreshCore(obj)
}
}else{
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
var type = JSON.parse(mess.data).event;
if (type == "notification") {
var popup = localStorage.getItem("popup");
if (!popup) {
popup = 0;
}
var templete="";
localStorage.setItem("lastnotf_" + acct_id,obj.id);
if(obj.type!="follow"){
@@ -92,14 +344,16 @@ function notf(acct_id, tlid, sys) {
$("[toot-id=" + obj + "]").hide();
$("[toot-id=" + obj + "]").remove();
}
}
}
websocketNotf[wsid].onerror = function(error) {
websocketNotf[acct_id].onerror = function(error) {
console.error('WebSocket Error ' + error);
};
}
//一定のスクロールで発火
function notfmore(tlid) {
console.log(moreloading);
console.log("kicked");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain;
@@ -108,50 +362,143 @@ function notfmore(tlid) {
}else{
var data;
}
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
console.log(sid);
if (localStorage.getItem("morelock") != sid) {
localStorage.setItem("morelock", sid);
localStorage.setItem("now", type);
todo("Notfication TL MoreLoading");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/notifications"+
"max_id=" + sid;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete="";
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(obj.type!="follow"){
templete = templete+parse([obj], '', acct_id, tlid, -1);
}else{
templete = templete+userparse([obj.account], '', acct_id, tlid, -1);
}
});
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
localStorage.removeItem("morelock")
todc();
var sid = $("#timeline_" + tlid + " .notif-marker").last().attr("data-maxid");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var domain = localStorage.getItem("domain_" + acct_id);
if (sid && !moreloading) {
moreloading=true;
var httpreq = new XMLHttpRequest();
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var start = "https://" + domain + "/api/i/notifications";
httpreq.open(POST, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
var body=JSON.stringify({
i:at,
untilID:sid
});
}else{
var misskey=false;
if(localStorage.getItem("exclude-"+tlid)){
var exc=localStorage.getItem("exclude-"+tlid)+"&max_id="+sid;
}else{
var exc="?max_id="+sid;
}
var start = "https://" + domain + "/api/v1/notifications"+exc;
httpreq.open("GET", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
var body="";
}
httpreq.responseType = 'json';
httpreq.send(body);
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
var json = httpreq.response;
console.log(json);
var max_id = httpreq.getResponseHeader("link").match(/\?max_id=([0-9]+)/)[1];
if(json[0]){
var templete="";
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
Object.keys(json).forEach(function(key) {
var obj = json[key];
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
}else{
var mute=[];
}
if(obj.type!="follow"){
if(misskey){
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
}
}else{
if(misskey){
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
}else{
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
}
}
});
moreloading=false;
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
$("#timeline_" + tlid).append(templete);
$("#landing_" + tlid).hide();
jQuery("time.timeago").timeago();
}
$("#notf-box").addClass("fetched");
todc();
}
}
}
}
//通知トグルボタン
function notfToggle(acct, tlid) {
$("#notf-box_" + tlid).toggleClass("hide");
$("#notf-box_" + tlid).toggleClass("show");
if($("#notf-box_" + tlid).hasClass("column-hide")){
$("#notf-box_" + tlid).css("display","block")
$("#notf-box_" + tlid).animate({
'height': '400px'
},{
'duration': 300,
'complete': function(){
$("#notf-box_" + tlid).css("overflow-y","scroll")
$("#notf-box_" + tlid).removeClass("column-hide")
}
});
}else{
$("#notf-box_" + tlid).css("overflow-y","hidden")
$("#notf-box_" + tlid).animate({
'height': '0'
},{
'duration': 300,
'complete': function(){
$("#notf-box_" + tlid).addClass("column-hide")
$("#notf-box_" + tlid).css("display","none")
}
});
}
notfCanceler(acct)
}
function notfCanceler(acct){
$(".notf-reply_" + acct).text(0);
localStorage.removeItem("notf-reply_" + acct)
$(".notf-reply_" + acct).addClass("hide");
$(".notf-fav_" + acct).text(0);
localStorage.removeItem("notf-fav_" + acct)
$(".notf-fav_" + acct).addClass("hide");
$(".notf-bt_" + acct).text(0);
localStorage.removeItem("notf-bt_" + acct)
$(".notf-bt_" + acct).addClass("hide");
$(".notf-follow_" + acct).text(0);
localStorage.removeItem("notf-follow_" + acct)
$(".notf-follow_" + acct).addClass("hide");
$(".notf-icon_" + acct).removeClass("red-text");
}
function allNotfRead(){
console.log(localStorage.getItem("notf-fav_2"));
var multi = localStorage.getItem("multi");
if (!multi) {
var obj = [{
at: localStorage.getItem("acct_0_at"),
name: localStorage.getItem("name_0"),
domain: localStorage.getItem("domain_0"),
user: localStorage.getItem("user_0"),
prof: localStorage.getItem("prof_0"),
id: localStorage.getItem("user-id_0")
}];
var json = JSON.stringify(obj);
localStorage.setItem("multi", json);
} else {
var obj = JSON.parse(multi);
}
Object.keys(obj).forEach(function(key) {
console.log(key);
notfCanceler(key)
});
}
allNotfRead()

View File

@@ -5,7 +5,7 @@ function mixtl(acct_id, tlid) {
localStorage.setItem("now", type);
todo("Integrated TL Loading...(Local)");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
//まずLocal
var start = "https://" + domain + "/api/v1/timelines/public?local=true";
fetch(start, {
@@ -96,7 +96,7 @@ function mixtl(acct_id, tlid) {
//Streamingに接続
function mixre(acct_id, tlid) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var type = "mix";
localStorage.setItem("now", type);
var startHome = "wss://" + domain +
@@ -180,7 +180,7 @@ function mixmore(tlid) {
var acct_id = obj[tlid].domain;
todo("Integrated TL MoreLoading...(Local)");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
var len = $("#timeline_" + tlid + " .cvo").length
var start = "https://" + domain +

View File

@@ -1,8 +1,15 @@
//オブジェクトパーサー(トゥート)
function parse(obj, mix, acct_id, tlid, popup) {
function parse(obj, mix, acct_id, tlid, popup, mutefilter) {
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'));
}
var actb = localStorage.getItem("action_btns");
var actb='re,rt,fav,qt,del,pin';
var actb='re,rt,fav,qt,del,pin,red';
if(actb){
var actb = actb.split(',');
var disp={};
@@ -55,7 +62,27 @@ function parse(obj, mix, acct_id, tlid, popup) {
var wordmute = localStorage.getItem("word_mute");
if(wordmute){
var wordmute = JSON.parse(wordmute);
wordmute = wordmute.concat(mutefilter);
}else{
wordmute = mutefilter;
}
//Ticker
var tickerck = localStorage.getItem("ticker_ok");
if(tickerck){
var ticker=true;
}else{
var ticker=false;
}
//Animation
var anime = localStorage.getItem("animation");
if (anime=="yes" || !anime) {
var animecss="cvo-anime";
}else{
var animecss="";
}
//Cards
var card = localStorage.getItem("card_" + tlid);
if (!sent) {
var sent = 500;
}
@@ -100,86 +127,210 @@ function parse(obj, mix, acct_id, tlid, popup) {
//via通知
var viashow=localStorage.getItem("viashow");
if(!viashow){
viashow="hide";
viashow="via-hide";
}
if(viashow=="hide"){
viashow="via-hide";
}
//認証なしTL
if(mix=="noauth"){
var noauth="hide";
var antinoauth="";
}else{
var noauth="";
var antinoauth="hide";
}
//マウスオーバーのみ
var mouseover=localStorage.getItem("mouseover");
if(!mouseover){
mouseover="";
}else if(mouseover=="yes"){
}else if(mouseover=="yes" || mouseover=="click"){
mouseover="hide";
}else if(mouseover=="no"){
mouseover="";
}
//リプカウント
var replyct_view=localStorage.getItem("replyct");
if(!replyct_view){
replyct_view="hidden";
}
var local = [];
var times=[];
Object.keys(obj).forEach(function(key) {
var toot = obj[key];
var dis_name=escapeHTML(toot.account.display_name);
if(toot.account.emojis){
var actemojick = toot.account.emojis[0];
}else{
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
}
var noticeavatar="";
if (mix == "notf") {
if (gif == "yes") {
noticeavatar = toot.account.avatar;
} else {
noticeavatar = toot.account.avatar_static;
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
if (toot.type == "mention") {
var what = "が返信しました";
var what = lang.lang_parse_mentioned;
var icon = "fa-share teal-text";
noticeavatar="";
} else if (toot.type == "reblog") {
var what = "がブーストしました";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
what = ":「わかるわ」";
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
what = "がしばきました";
var what = lang.lang_parse_bted;
var icon = "fa-retweet light-blue-text";
if(!locale && localStorage.getItem("bt_" + acct_id)){
what = localStorage.getItem("bt_" + acct_id);
}
} else if (toot.type == "favourite") {
var what = "がお気に入り登録しました";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
what = "の頭にティンときたようです";
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
what = "がええやんと言いました";
var what = lang.lang_parse_faved;
var icon = "fa-star yellow-text";
if(!locale && localStorage.getItem("fav_" + acct_id)){
what = localStorage.getItem("fav_" + acct_id);
}
}
var noticetext = '<span class="cbadge"title="' + date(toot.created_at,
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.created_at,
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
datetype) +
'</span><a onclick="udg(\'' + toot.account.id +
'\',\'' + acct_id + '\')" class="pointer">' + escapeHTML(toot.account.display_name) +
"(" + toot.account.acct +
")</a>" + what;
'</span><i class="big-text fa '+icon+'"></i><a onclick="udg(\'' + toot.account.id +
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
"(@" + toot.account.acct +
")</a>";
var notice = noticetext;
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
if (toot.type == "mention") {
var replyct=localStorage.getItem("notf-reply_" + acct_id)
$(".notf-reply_" + acct_id).text(replyct*1-(-1));
localStorage.setItem("notf-reply_" + acct_id,replyct*1-(-1))
$(".notf-reply_" + acct_id).removeClass("hide")
}else if (toot.type == "reblog") {
var btct=localStorage.getItem("notf-bt_" + acct_id)
$(".notf-bt_" + acct_id).text(btct*1-(-1));
localStorage.setItem("notf-bt_" + acct_id,btct*1-(-1))
$(".notf-bt_" + acct_id).removeClass("hide")
}else if (toot.type == "favourite") {
var favct=localStorage.getItem("notf-fav_" + acct_id)
$(".notf-fav_" + acct_id).text(favct*1-(-1));
localStorage.setItem("notf-fav_" + acct_id,favct*1-(-1))
$(".notf-fav_" + acct_id).removeClass("hide")
}
}
var domain = localStorage.getItem("domain_" + acct_id);
if(popup>0){
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('native-notf', ['TheDesk:'+domain,toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),toot.account.avatar]);
}
Materialize.toast("["+domain+"より]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
Materialize.toast("["+domain+"]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
}
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
icon: toot.account.avatar
};
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
toot.account.avatar,
"toot",
acct_id,
toot.status.id
]);
}
}
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
$(".notf-icon_" + acct_id).addClass("red-text");
}
$(".notf-icon_" + acct_id).addClass("red-text");
localStorage.setItem("notice-mem", noticetext);
noticetext = "";
}
var if_notf='data-notfIndv="'+acct_id+"_"+toot.id+'"';
var toot = toot.status;
var dis_name=escapeHTML(toot.account.display_name);
if(toot.account.emojis){
var actemojick = toot.account.emojis[0];
}else{
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
}
}else{
var if_notf="";
if (toot.reblog) {
var rebtxt = "がブースト";
if (gif == "yes") {
noticeavatar = toot.account.avatar;
} else {
noticeavatar = toot.account.avatar_static;
}
noticeavatar='<a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + noticeavatar +
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
'"></a>';
var rebtxt = lang.lang_parse_btedsimple;
var rticon = "fa-retweet light-blue-text";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
rebtxt = ":「わかるわ」";
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
rebtxt = "がしばいた";
}
var notice = escapeHTML(toot.account.display_name) + "(" + toot.account.acct +
")"+rebtxt+"<br>";
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.account.acct +
")<br>";
var boostback = "shared";
var uniqueid=toot.id;
var toot = toot.reblog;
var dis_name=escapeHTML(toot.account.display_name);
if(toot.account.emojis){
var actemojick = toot.account.emojis[0];
}else{
var uniqueid=toot.id;
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(toot.account.emojis).forEach(function(key5) {
var emoji = toot.account.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
}
} else {
var uniqueid=toot.id;
var notice = "";
var boostback = "";
var boostback = "unshared";
//ユーザー強調
if(toot.account.username!=toot.account.acct){
var fullname=toot.account.acct;
@@ -211,7 +362,8 @@ function parse(obj, mix, acct_id, tlid, popup) {
var locked = "";
}
if (!toot.application) {
var via = '<span style="font-style: italic;">Unknown</span>';
var via = '';
viashow="hide";
} else {
var via = toot.application.name;
//強調チェック
@@ -229,25 +381,28 @@ function parse(obj, mix, acct_id, tlid, popup) {
}
});
}
if(mix=="pinned"){
boostback = "emphasized";
}
if (toot.spoiler_text && cw) {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
var spoiler = "cw cw_hide_" + toot.id;
var api_spoil = "gray";
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">見る</a><br>';
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
} else {
var ct1 = toot.content.split('</p>').length + toot.content.split('<br />').length -2;
var ct2 = toot.content.split('</p>').length + toot.content.split('<br>').length -2;
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
if ((sent < ct && $.mb_strlen($.strip_tags(toot.content)) > 5) || ($.strip_tags(toot.content).length > ltr && $.mb_strlen($.strip_tags(toot.content)) > 5)) {
var content = '<span class="gray">以下全文</span><br>' + toot.content
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + toot.content
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
toot.content), 0, 100) +
'</span><span class="gray">自動折りたたみ</span>';
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
var spoiler = "cw cw_hide_" + toot.id;
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
'\')" class="nex parsed">続き…</a><br>';
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
} else {
var content = toot.content;
var spoil = escapeHTML(toot.spoiler_text);
@@ -260,7 +415,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
);
if (urls) {
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
',\'' + id + '\')" class="add-show pointer">URL解析</a><br>';
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
} else {
var analyze = '';
}
@@ -278,47 +433,67 @@ function parse(obj, mix, acct_id, tlid, popup) {
var emoji = toot.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'">';
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url);
});
}
//ニコフレ絵文字
if(toot.profile_emojis){
var nicoemojick = toot.profile_emojis[0];
}else{
var nicoemojick=false;
}
//絵文字があれば
if (nicoemojick) {
Object.keys(toot.profile_emojis).forEach(function(keynico) {
var emoji = toot.profile_emojis[keynico];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
content = content.replace(regExp, emoji_url);
spoil = spoil.replace(regExp, emoji_url);
});
}
var dis_name=escapeHTML(toot.account.display_name);
//デフォ絵文字
content=emojione.unicodeToImage(content);
content=twemoji.parse(content);
if(dis_name){
dis_name=emojione.unicodeToImage(dis_name);
dis_name=twemoji.parse(dis_name);
}
if(spoil){
spoil=emojione.unicodeToImage(spoil);
spoil=twemoji.parse(spoil);
}
if(noticetext){
noticetext=emojione.unicodeToImage(noticetext);
noticetext=twemoji.parse(noticetext);
}
if(notice){
notice=emojione.unicodeToImage(notice);
notice=twemoji.parse(notice);
}
var mediack = toot.media_attachments[0];
//メディアがあれば
var media_ids="";
if (mediack) {
hasmedia = "hasmedia";
var cwdt = 100 / toot.media_attachments.length
var cwdt = 100 / toot.media_attachments.length;
Object.keys(toot.media_attachments).forEach(function(key2) {
var media = toot.media_attachments[key2];
var purl = media.preview_url;
media_ids=media_ids+media.id+",";
var url = media.url;
if (toot.sensitive && nsfw) {
var sense = "sensitive"
} else {
var sense = ""
}
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
'" data-type="' + media.type + '" class="img-parsed"><img src="' +
purl + '" class="' + sense +
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
});
media_ids = media_ids.slice(0, -1) ;
} else {
viewer = "";
hasmedia = "nomedia";
@@ -327,7 +502,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
var mentions = "";
//メンションであれば
if (menck) {
mentions = "Links: ";
mentions = "";
Object.keys(toot.mentions).forEach(function(key3) {
var mention = toot.mentions[key3];
mentions = mentions + '<a onclick="udg(\'' + mention.id + '\',' +
@@ -339,35 +514,41 @@ function parse(obj, mix, acct_id, tlid, popup) {
var tags = "";
//タグであれば
if (tagck) {
if (!menck) {
tags = "Links: ";
}
Object.keys(toot.tags).forEach(function(key4) {
var tag = toot.tags[key4];
tags = tags + '<a onclick="tagShow(\'' + tag.name + '\')" class="pointer">#' + tag.name + '</a><span class="hide" data-tag="' + tag.name + '"> <a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
',\'add\')" class="pointer" title="#' + tag.name + 'のタイムライン">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="#' + tag.name + 'でトゥート">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="#' + tag.name + 'をよく使うタグへ">Pin</a></span> ';
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
',\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
});
tags = '<div style="float:right">' + tags + '</div>';
}
//リプ数
if(toot.replies_count || toot.replies_count===0){
var replyct=toot.replies_count;
if(replyct_view=="hidden" && replyct>1){
replyct="1+";
}
}else{
var replyct="";
}
//公開範囲を取得
var vis = "";
var visen = toot.visibility;
if (visen == "public") {
var vis =
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="公開(クリックして本文コピー)" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
var can_rt = "";
} else if (visen == "unlisted") {
var vis =
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="未収載(クリックして本文コピー)" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_parse_unlisted+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
var can_rt = "";
} else if (visen == "private") {
var vis =
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="非公開(クリックして本文コピー)" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
var can_rt = "hide";
} else if (visen == "direct") {
var vis =
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="ダイレクト(クリックして本文コピー)" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_parse_direct+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
var can_rt = "hide";
}
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
@@ -409,10 +590,14 @@ function parse(obj, mix, acct_id, tlid, popup) {
Object.keys(wordmute).forEach(function(key8) {
var worde = wordmute[key8];
if(worde){
var word=worde.tag;
if(worde.tag){
var word=worde.tag;
}else{
var word=worde
}
var regExp = new RegExp( word, "g" ) ;
if(content.match(regExp)){
boostback = "hide";
if($.strip_tags(content).match(regExp)){
boostback = "hide by_filter";
}
}
});
@@ -430,70 +615,144 @@ function parse(obj, mix, acct_id, tlid, popup) {
}
//日本語じゃない
if(toot.language!="ja"){
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを日本語に翻訳"><i class="material-icons">g_translate</i></a></div>';
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
}else{
var trans="";
}
//Cards
if (!card && toot.card) {
var cards=toot.card;
if (cards.provider_name=="Twitter"){
if(cards.image){
var twiImg='<br><img src="'+cards.image+'">';
}else{
var twiImg='';
}
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
}
if (cards.title) {
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
escapeHTML(cards.description) + "</span>";
}
if (cards.html) {
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
}
}
//Ticker
var tickerdom="";
if(ticker){
var tickerdata=localStorage.getItem("ticker")
if(tickerdata){
var tickerdata=JSON.parse(tickerdata);
var thisdomain=toot.account.acct.split("@");
if(thisdomain.length>1){
thisdomain=thisdomain[1];
}
for( var i=0; i<tickerdata.length; i++) {
var value=tickerdata[i];
if(value.domain==thisdomain){
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
break;
}
}
}
}
//Poll
var poll="";
if(toot.poll){
var choices=toot.poll.options;
if(toot.poll.voted){
var myvote=lang.lang_parse_voted;
var result_hide="";
}else{
myvote='<a onclick="voteMastodon(\''+acct_id+'\',\''+toot.poll.id+'\')" class="votebtn">'+lang.lang_parse_vote+'</a><br>';
myvote=myvote+'<a onclick="showResult(\''+acct_id+'\',\''+toot.poll.id+'\')" class="pointer">'+lang.lang_parse_unvoted+"</a>";
var result_hide="hide";
}
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(!toot.poll.voted){
var votesel='voteSelMastodon(\''+acct_id+'\',\''+toot.poll.id+'\','+keyc+','+toot.poll.multiple+')';
var voteclass="pointer waves-effect waves-light";
}else{
var votesel="";
var voteclass="";
}
poll=poll+'<div class="'+voteclass+' vote vote_'+acct_id+'_'+toot.poll.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+toot.poll.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
});
poll='<div class="vote_'+acct_id+'_'+toot.poll.id+'">'+poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(toot.poll.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' +
date(toot.poll.expires_at, datetype) + '</span></div>';
}
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app +
' ' + hasmedia + '" toot-id="' + id + '" unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\')" onmouseout="resetmv()">' +
' ' + hasmedia + ' '+animecss+'" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')">' +
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
'</span></div>' +
'<div class="area-icon"><a onclick="udg(\'' + toot.account.id +
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
'<img src="' + avatar +
'" width="40" class="prof-img" user="' + toot.account.acct +
'"></a></div>' +
'<div class="area-display_name"><span class="user">' +
'"></a>'+noticeavatar+'</div>' +
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
dis_name +
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
toot.account.acct + locked + '</span></div>' +
'<div class="area-acct"><div><span class="cbadge pointer waves-effect" onclick="tootUriCopy(\'' +
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
'(クリックでトゥートURLをコピー)"><i class="fa fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span><span style="padding:0;">' +
vis + '</span></div></div>' +
'<div class="area-toot"><span class="toot ' + spoiler + '">' + content +
'</span><span class="' +
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
date(toot.created_at, datetype) + '</span>' +
'</div></div>' +
'<div class="area-toot">'+tickerdom+'<span class="' +
api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show +
'</span><span class="toot ' + spoiler + '">' + content +
'</span>' +
'' + viewer + '' +
'</div><div class="area-additional"><span class="additional">' + analyze +
'</span>' +
'' + mentions + tags + '</div>' +
'' +poll+ mentions + tags + '</div>' +
'<div class="area-vis"></div>'+
'<div class="area-actions '+noauth+' '+mouseover+'" style="padding:0; margin:0; top:-20px; display:flex; justify-content:space-around; max-width:100%; ">' +
'<div class="action '+disp["re"]+'"><a onclick="re(\'' + toot.id +
'<div class="area-actions '+mouseover+'">' +
'<div class="action">'+vis+'</div>'+
'<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id +
'\',\'' + toot.account.acct + '\',' +
acct_id + ',\''+visen+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートに返信"><i class="fa fa-share"></i></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i><span class="rep_ct">' + replyct +
'</a></span></a></div>' +
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをブースト"><i class="text-darken-3 fa fa-retweet ' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_bt+'"><i class="text-darken-3 fa fa-retweet ' +
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count +
'</span></a></div>' +
'<div class="action '+can_rt+' '+disp["qt"]+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
',\'' + toot.account.acct +'\',\''+toot.url+
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを引用"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_quote+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
',\'' + tlid +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをお気に入り登録"><i class="fa text-darken-3 fa-star' +
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_fav+'"><i class="fa text-darken-3 fa-star' +
if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count +
'</a></span></div>' +
'<div class="' + if_mine + ' action '+disp["del"]+'"><a onclick="del(\'' + toot.id + '\',' +
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを削除"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+'"><a onclick="pin(\'' + toot.id + '\',' +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをピン留め"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>' +trans+
'<div class="action ' + if_mine + '"><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"><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
'<span class="cbadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>'
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
acct_id +
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
via +
'</span></div></div>' +
'</div></div>' + divider;
'</span>'+
'</div><div class="area-side '+mouseover+'"><div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
'</div></div>' +
'</div></div>';
});
if (mix == "mix") {
return [templete, local, times]
@@ -513,6 +772,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
var datetype = localStorage.getItem("datetype");
Object.keys(obj).forEach(function(key) {
var toot = obj[key];
if(!toot.username){
var raw=toot;
toot=toot.account;
var notf=true;
}else{
var notf=false;
}
if (toot.locked) {
var locked = ' <i class="fa fa-lock red-text"></i>';
} else {
@@ -524,45 +790,98 @@ function userparse(obj, auth, acct_id, tlid, popup) {
} else {
var auth = "";
}
var ftxt="フォローされました";
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
ftxt = "名刺をいただきました";
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
ftxt = "ツルまれました";
var ftxt=lang.lang_parse_followed;
if(!locale && localStorage.getItem("followlocale_" + acct_id)){
ftxt = localStorage.getItem("followlocale_" + acct_id);
}
if(popup > 0 || popup==-1){
var notftext='<span class="cbadge"title="' + date(toot.created_at,
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
datetype) +
'</span>'+ftxt+'。<br>';
if(popup > 0 || popup==-1 || notf){
var notftext=ftxt+'<br>';
}else{
var notftext="";
}
var memory = localStorage.getItem("notice-mem");
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
Materialize.toast(escapeHTML(toot.display_name)+""+ftxt, popup * 1000);
if (popup >= 0 && obj.length < 5 && notftext != memory) {
Materialize.toast(escapeHTML(toot.display_name)+":"+ftxt, popup * 1000);
$(".notf-icon_" + tlid).addClass("red-text");
localStorage.setItem("notice-mem", noticetext);
noticetext = "";
localStorage.setItem("notice-mem", notftext);
notftext = "";
var native=localStorage.getItem("nativenotf");
if(!native){
native="yes";
}
if(native=="yes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: toot.display_name+"(" + toot.acct +")"+ftxt,
icon: toot.avatar
};
var domain = localStorage.getItem("domain_" + acct_id);
if(os=="darwin"){
var n = new Notification('TheDesk:'+domain, options);
}else{
ipc.send('native-notf', [
'TheDesk:'+domain,
toot.display_name+"(" + toot.acct +")"+ftxt,
toot.avatar,
"userdata",
acct_id,
toot.id
]);
}
}
}
if(toot.display_name){
var dis_name=escapeHTML(toot.display_name);
}else{
var dis_name=toot.username;
}
//ネイティブ通知
if(toot.emojis){
var actemojick = toot.emojis[0];
}else{
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(toot.emojis).forEach(function(key5) {
var emoji = toot.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
});
}
if(dis_name){
dis_name=twemoji.parse(dis_name);
}
if(toot.avatar){
var avatar=toot.avatar;
}else{
var avatar="../../img/missing.svg";
}
templete = templete +
'<div class="" style="padding-top:5px;" user-id="' + toot.id + '">' +
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
notftext +
'<div style="padding:0; margin:0; width:400px; max-width:100%; display:flex; align-items:flex-end;">' +
'<div style="flex-basis:40px;"><a onclick="udg(\'' + toot.id + '\',' +
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
acct_id + ');" user="' + toot.acct + '" class="udg">' +
'<img src="' + toot.avatar + '" width="40" class="prof-img" user="' + toot
'<img src="' + avatar + '" width="40" class="prof-img" user="' + toot
.acct + '"></a></div>' +
'<div style="flex-grow:3; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"><big>' +
escapeHTML(toot.display_name) + '</big></div>' +
'<div class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
toot.acct + locked + '</div>' +
'</div>' + auth +
'<div style="justify-content:space-around"> <div class="cbadge" style="width:100px;">Follows:' +
'<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>' +
'</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 class="divider"></div>' +
'</div>' +
'</div>' +
'</div>';
@@ -579,9 +898,9 @@ function client(name) {
var dialog=remote.dialog;
const options = {
type: 'info',
title: 'クライアント処理',
message: name+"に対する処理を選択してください。",
buttons: ['何もしない','強調表示/解除', 'ミュート']
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){
@@ -590,7 +909,7 @@ function client(name) {
if(!obj){
var obj=[];
obj.push(name);
Materialize.toast(name+"を強調表示します。", 2000);
Materialize.toast(name+lang.lang_status_emphas, 2000);
}else{
var can;
Object.keys(obj).forEach(function(key) {
@@ -600,12 +919,12 @@ function client(name) {
}else{
can=true;
obj.splice(key, 1);
Materialize.toast(name+"の強調表示を解除しました。", 2000);
Materialize.toast(name+lang.lang_status_unemphas, 2000);
}
});
if(!can){
obj.push(name);
Materialize.toast(name+"を強調表示します。", 2000);
Materialize.toast(name+lang.lang_status_emphas, 2000);
}else{
}
@@ -621,7 +940,7 @@ function client(name) {
obj.push(name);
var json = JSON.stringify(obj);
localStorage.setItem("client_mute", json);
Materialize.toast(name+"をミュートします。設定から削除できます。", 2000);
Materialize.toast(name+lang.lang_parse_mute, 2000);
}else{
return;
}

119
app/js/tl/poll.js Normal file
View File

@@ -0,0 +1,119 @@
//アンケートのトグル
function pollToggle() {
if ($("#poll").hasClass("hide")) {
$("#right-side").show()
$("#poll").removeClass("hide")
} else {
$("#right-side").hide()
$("#emoji").addClass("hide")
$("#poll").addClass("hide")
}
}
function pollProviderCk(){
$(".poll-provider").addClass("hide");
$("#"+$("#poll-sel").val()).removeClass("hide");
}
/*
function pollAddtime(num){
var last=$("#expires_in").val();
last=last*1-(num*-1);
$("#expires_in").val(last);
pollCalc();
}
*/
function pollCalc(){
var days=$("#days_poll").val();
var hrs=$("#hours_poll").val();
var mins=$("#mins_poll").val();
console.log(days*86400+hrs*3600+mins*60)
return days*86400+hrs*3600+mins*60;
}
//Vote
function voteSelMastodon(acct_id,id,to,mul){
console.log('.vote_'+acct_id+'_'+id+'_'+to);
if($('.vote_'+acct_id+'_'+id+'_'+to).hasClass("sel")){
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","transparent")
$('.vote_'+acct_id+'_'+id+'_'+to).removeClass("sel");
}else{
if(!mul){
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
if(i==to){
$(this).css("background-color","var(--emphasized)");
$(this).addClass("sel");
}else{
$(this).css("background-color","transparent")
$(this).removeClass("sel");
}
});
}else{
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","var(--emphasized)")
$('.vote_'+acct_id+'_'+id+'_'+to).addClass("sel");
}
}
}
function voteMastodon(acct_id,id){
var choice=[];
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
if($(this).hasClass("sel")){
choice.push(i+"");
}
});
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/polls/"+id+"/votes";
if(localStorage.getItem("mode_" + domain)=="misskey"){
return false;
}
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({choices:choice}));
httpreq.onreadystatechange = function() {
voteMastodonrefresh(acct_id,id)
}
}
function showResult(acct_id,id){
$('.vote_'+acct_id+'_'+id+'_result').toggleClass("hide")
}
function voteMastodonrefresh(acct_id,id){
var datetype = localStorage.getItem("datetype");
if (!datetype) {
datetype = "absolute";
}
var httpreqd = new XMLHttpRequest();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/polls/"+id;
httpreqd.open('GET', start, true);
httpreqd.setRequestHeader('Content-Type', 'application/json');
httpreqd.responseType = 'json';
httpreqd.send(JSON.stringify({i:at,noteId:id}));
httpreqd.onreadystatechange = function() {
if (httpreqd.readyState == 4) {
var json = httpreqd.response;
console.log(json);
if(!json){
return false;
}
var poll="";
var choices=json.options;
var myvote=lang.lang_parse_voted;
var result_hide="";
Object.keys(choices).forEach(function(keyc) {
var choice = choices[keyc];
if(!json.voted){
votesel='voteSelMastodon(\''+acct_id+'\',\''+json.id+'\','+keyc+','+json.multiple+')';
}
poll=poll+'<div class="pointer vote vote_'+acct_id+'_'+json.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+json.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
});
poll=poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(json.expires_at, 'absolute') +
'"><i class="fa fa-calendar-times-o"></i>' +
date(json.expires_at, datetype) + '</span>';
$('.vote_'+acct_id+'_'+json.id).html(poll)
}
}
}

109
app/js/tl/speech.js Normal file
View File

@@ -0,0 +1,109 @@
$voise = null;
$voiseName = lang.lang_speech;
$voices = speechSynthesis.getVoices();
$synthes = new SpeechSynthesisUtterance();
$voise = $.grep($voices, function(n, i){return n.name == $voiseName})[0];
$synthes.voice = $voise; // 音声の設定
localStorage.removeItem("voicebank");
speechSynthesis.cancel()
if(!localStorage.getItem("voice_vol")){
localStorage.setItem("voice_vol",1)
}
$synthes.rate=localStorage.getItem("voice_speed");
$synthes.pitch=localStorage.getItem("voice_pitch");
$synthes.volume=localStorage.getItem("voice_vol");
function say(msgr){
msg=voiceParse(msgr);
var voice=localStorage.getItem("voicebank");
var obj = JSON.parse(voice);
if(!obj){
var json = JSON.stringify([msg]);
localStorage.setItem("voicebank", json);
}else{
obj.push([msg]);
var json = JSON.stringify(obj);
localStorage.setItem("voicebank", json);
}
}
$repeat = setInterval(function() {
if(!speechSynthesis.speaking){
var voice=localStorage.getItem("voicebank");
if(voice){
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);
localStorage.setItem("voicebank", json);
}
}
}
}, 300);
function voiceParse(msg){
msg = $.strip_tags(msg);
msg = msg.replace(/#/g, "");
msg = msg.replace(/'/g, "");
msg = msg.replace(/"/g, "");
msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?%&-]+/g, "");
return msg;
}
function voiceToggle(tlid) {
var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) {
localStorage.removeItem("voice_" + tlid);
speechSynthesis.cancel()
$("#sta-voice-" + tlid).text("Off");
$("#sta-voice-" + tlid).css("color",'red');
parseColumn();
} else {
localStorage.setItem("voice_" + tlid, "true");
$("#sta-voice-" + tlid).text("On");
$("#sta-voice-" + tlid).css("color",'#009688');
parseColumn();
}
}
function voiceCheck(tlid) {
var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) {
$("#sta-voice-" + tlid).text("On");
$("#sta-voice-" + tlid).css("color",'#009688');
} else {
$("#sta-voice-" + tlid).text("Off");
$("#sta-voice-" + tlid).css("color",'red');
}
}
function voicePlay(){
if(speechSynthesis.speaking){
speechSynthesis.cancel()
}else{
$synthes.text = $("#voicetxt").val();
$synthes.rate = $("#voicespeed").val()/10;
$synthes.pitch = $("#voicepitch").val()/50;
$synthes.volume = $("#voicevol").val()/100;
speechSynthesis.speak($synthes);
}
}
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);
}
function voiceSettingLoad(){
var speed=localStorage.getItem("voice_speed");
var pitch=localStorage.getItem("voice_pitch");
var vol=localStorage.getItem("voice_vol");
if(speed){
$("#voicespeed").val(speed*10);
}
if(pitch){
$("#voicepitch").val(pitch*50);
}
if(vol){
$("#voicevol").val(vol*100);
}
}

View File

@@ -3,14 +3,15 @@
function srcToggle() {
$("#src-box").toggleClass("hide");
$("#src-box").toggleClass("show");
$("#src-box").css("top",$('#src-tgl').offset().top+"px");
$("#src-box").css("left",$('#src-tgl').offset().left-410+"px");
$("#src-box").css("bottom","40px");
$("#src-box").css("left",$('#src-tgl').offset().left-$('#src-box').width()/2+"px");
$('ul.tabs').tabs('select_tab', 'src-sta');
$("#src-contents").html("");
}
//検索取得
function src() {
function src(mode) {
$("#src-contents").html("");
var q = $("#src").val();
var acct_id = $("#src-acct-sel").val();
if(acct_id=="tootsearch"){
@@ -19,11 +20,17 @@ function src() {
}
localStorage.setItem("last-use", acct_id);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var m = q.match(/^#(.+)$/);
if(m){q=m[1];}
if (user == "--now") {
var user = $('#his-data').attr("user-id");
}
var start = "https://" + domain + "/api/v1/search?q=" + q
if(!mode){
var start = "https://" + domain + "/api/v2/search?q=" + q
}else{
var start = "https://" + domain + "/api/v1/search?q=" + q
}
console.log(start)
fetch(start, {
method: 'GET',
@@ -34,9 +41,25 @@ function src() {
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
src("v1")
return false;
}).then(function(json) {
console.log(json);
//ハッシュタグ
if (json.hashtags[0]) {
var tags = "";
Object.keys(json.hashtags).forEach(function(key4) {
var tag = json.hashtags[key4];
if(mode){
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag + '</a><br> ';
}else{
tags=tags+graphDraw(tag);
}
});
$("#src-contents").append("Tags<br>" + tags);
}
//トゥート
if (json.statuses[0]) {
var templete = parse(json.statuses,'',acct_id);
@@ -47,16 +70,6 @@ function src() {
var templete = userparse(json.accounts,'',acct_id);
$("#src-contents").append("Accounts<br>" + templete);
}
//ハッシュタグ
if (json.hashtags[0]) {
var tags = "";
Object.keys(json.hashtags).forEach(function(key4) {
var tag = json.hashtags[key4];
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag + '</a><br> ';
});
$("#src-contents").append("Tags<br>" + tags);
}
jQuery("time.timeago").timeago();
});
}
@@ -81,13 +94,43 @@ function tootsearch(q){
var toot = json[key5]["_source"];
console.log(toot);
if(toot && toot.account){
templete = templete+parse([toot],'');
templete = templete+parse([toot],'noauth');
}
});
if(!templete){
templete="データはありません。";
templete=lang.lang_details_nodata;
}
$("#src-contents").html("Tootsearch(時系列)<br>" + templete);
$("#src-contents").html("Tootsearch("+lang.lang_src_ts+")<br>" + templete);
jQuery("time.timeago").timeago();
});
}
}
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);
var four=50-(his[4].uses/max*50);
var three=50-(his[3].uses/max*50);
var two=50-(his[2].uses/max*50);
var one=50-(his[1].uses/max*50);
var zero=50-(his[0].uses/max*50);
if(max==0){
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people;
}else{
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
'<g><path d="M0,'+six+' L10,'+five+' 20,'+four+' 30,'+three+' 40,'+two+' 50,'+one+' 60,'+zero+'" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>'+
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots&nbsp;<a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
'\',\'add\')" class="pointer">#' + tag.name + '</a>&nbsp;'+his[0].accounts+lang.lang_src_people;
}
return tags;
}
/*
<svg version="1.1" viewbox="0 0 50 300" width="100%" height="50">
<path d="M0,0 L10,0 20,10 20,50" fill="#3F51B5"></path>
</svg>
*/

View File

@@ -4,12 +4,13 @@ if(location.search){
var mode=m[1];
var codex=m[2];
if(mode=="tag"){
tl('tag',decodeURI(codex),0,'add');
var acct_id=localStorage.getItem("main");
tl('tag',decodeURI(codex),acct_id,'add');
}
}
//よく使うタグ
function tagShow(tag){
$("[data-tag="+tag+"]").toggleClass("hide");
$("[data-tag="+decodeURI(tag)+"]").toggleClass("hide");
}
//タグ追加
function tagPin(tag){
@@ -45,6 +46,7 @@ function tagRemove(key) {
favTag();
}
function favTag(){
$("#taglist").html("");
var tagarr = localStorage.getItem("tag");
if(!tagarr){
var obj=[];
@@ -54,16 +56,56 @@ function favTag(){
var tags="";
Object.keys(obj).forEach(function(key) {
var tag = obj[key];
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a> '+
'<a onclick="tagRemove(\'' + key + '\')" class="pointer" title="#' + tag + 'をよく使うタグから削除">Unpin</a></span> ';
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
'<a onclick="autoToot(\'#' + tag + ' \');brInsert(\'#' + tag + ' \')" class="pointer" title="'+lang.lang_tags_always + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">'+lang.lang_tags_realtime+'</a> <a onclick="tagRemove(\'' + key + '\')" class="pointer" title="' +lang.lang_tags_tagunpin.replace("{{tag}}" ,'#'+tag)+ '">'+lang.lang_del+'</a></span> ';
});
if(obj.length>0){
$("#suggest").append("My Tags:" + tags);
$("#taglist").append("My Tags:" + tags);
}else{
$("#suggest").append("");
$("#taglist").append("");
}
}
function trendTag(){
$(".trendtag").remove();
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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var tags="";
json=json.score;
Object.keys(json).forEach(function(tag) {
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span> ';
});
$("#taglist").append('<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' + tags+'</div>');
trendintervalset()
}else{
$("#taglist").html("");
}
});
}
function trendintervalset(){
setTimeout(trendTag, 6000000);
}
function tagTL(a,b,c,d){
var acct_id = $("#post-acct-sel").val();
tl(a,b,acct_id,d);
}
function autoToot(tag){
localStorage.setItem("stable",tag);
Materialize.toast(lang.lang_tags_tagwarn +replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000);
}

View File

@@ -1,5 +1,6 @@
//TL取得
function tl(type, data, acct_id, tlid) {
moreloading=false;
function tl(type, data, acct_id, tlid, delc, voice, mode) {
scrollevent();
localStorage.removeItem("morelock");
localStorage.removeItem("pool");
@@ -31,23 +32,30 @@ function tl(type, data, acct_id, tlid) {
var type = "local";
}
}
if (type == "mix") {
if (type == "mix" && localStorage.getItem("mode_" + domain)!="misskey") {
//Integratedなら飛ばす
$("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("merge_type");
mixtl(acct_id, tlid, "integrated");
mixtl(acct_id, tlid, "integrated",delc,voice);
return;
}else if (type == "plus") {
//Local+なら飛ばす
$("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("people_outline");
mixtl(acct_id, tlid, "plus");
mixtl(acct_id, tlid, "plus",delc,voice);
return;
}else if (type == "notf") {
//通知なら飛ばす
//notf(acct_id, tlid, 'direct');
notf(acct_id, tlid, 'direct');
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("notifications");
return;
}else if (type == "dm") {
//DMなら飛ばす
dm(acct_id, tlid, "plus",delc,voice);
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
"user_" + acct_id) + "@" + domain + ")");
$("#notice_icon_" + tlid).text("notifications");
@@ -55,7 +63,7 @@ function tl(type, data, acct_id, tlid) {
}
localStorage.setItem("now", type);
todo(cap(type) + " TL Loading...");
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(type!="noauth"){
var hdr={
'content-type': 'application/json',
@@ -71,72 +79,159 @@ function tl(type, data, acct_id, tlid) {
$("#notice_" + tlid).text("Glance TL(" + domain + ")");
}
$("#notice_icon_" + tlid).text(icon(type));
var url=com(type, data);
if(type=="tag"){
var tag = localStorage.getItem("tag-range");
if(tag=="local"){
url=url+"local=true";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
var url=misskeycom(type, data);
var start = "https://" + domain + "/api/notes/"+url;
var method="POST";
var req={};
if(type!="noauth"){
req.i=at;
}
if(type=="local-media"||type=="pub-media"){
req.mediaOnly=true;
}
if(type=="tag"){
req.tag=data;
}
if(type=="list"){
req.listId=data;
}
req.limit=20;
var i={
method: method,
headers: hdr,
body: JSON.stringify(req),
}
}else{
var misskey=false;
var url=com(type, data);
if(type=="tag"){
var tag = localStorage.getItem("tag-range");
if(tag=="local"){
url=url+"local=true";
}
}
var start = "https://" + domain + "/api/v1/timelines/" + url;
var method="GET";
var i={
method: method,
headers: hdr
};
}
var start = "https://" + domain + "/api/v1/timelines/" + url;
console.log(start);
fetch(start, {
method: 'GET',
headers: hdr,
}).then(function(response) {
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, type, acct_id, tlid);
console.log(json)
$("#landing_" + tlid).hide();
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
}else{
var mute=[];
}
if(misskey){
var templete = misskeyParse(json, type, acct_id, tlid, "", mute);
}else{
var templete = parse(json, type, acct_id, tlid, "", mute);
localStorage.setItem("lastobj_"+ tlid,json[0].id)
}
$("#timeline_" + tlid).html(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
reload(type, '', acct_id, tlid, data);
reload(type, '', acct_id, tlid, data, mute, delc,voice);
$(window).scrollTop(0);
});
}
//Streaming接続
function reload(type, cc, acct_id, tlid, data) {
function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
if (!type) {
var type = localStorage.getItem("now");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
localStorage.setItem("now", type);
if (type == "home") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=user&access_token=" + at;
} else if (type == "pub") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=public&access_token=" + at;
} else if (type == "local") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=public:local&access_token=" + at;
} else if (type == "tag") {
if(type=="tag"){
var tag = localStorage.getItem("tag-range");
if(tag=="local"){
data=data+"&local=true";
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
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_misskeyparse_tagnostr[lang], 1000);
} else if (type == "noauth") {
var start = "wss://" + acct_id +
"/local-timeline?i=" + at;
} else if (type=="list"){
Materialize.toast(lang_misskeyparse_listnostr[lang], 1000);
}
}else{
var misskey=false;
if(localStorage.getItem("streaming_" + acct_id)){
var wss=localStorage.getItem("streaming_" + acct_id)
}else{
var wss="wss://"+domain
}
if (type == "home") {
var start = wss +
"/api/v1/streaming/?stream=user&access_token=" + at;
} else if (type == "pub") {
var start = wss +
"/api/v1/streaming/?stream=public&access_token=" + at;
} else if (type == "pub-media") {
var start = wss +
"/api/v1/streaming/?stream=public:media&access_token=" + at;
} else if (type == "local") {
var start = wss +
"/api/v1/streaming/?stream=public:local&access_token=" + at;
} else if (type == "local-media") {
var start = wss +
"/api/v1/streaming/?stream=public:local:media&only_media=true&access_token=" + at;
} else if (type == "tag") {
if(type=="tag"){
var tag = localStorage.getItem("tag-range");
if(tag=="local"){
data=data+"&local=true";
}
}
var start = wss +
"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at;
} else if (type == "noauth") {
var start = "wss://" + acct_id+
"/api/v1/streaming/?stream=public:local";
} else if (type=="list"){
var start = wss +
"/api/v1/streaming/?stream=list&list=" + data +"&access_token=" + at;
} else if (type=="dm"){
var start = wss +
"/api/v1/streaming/?stream=direct&access_token=" + at;
}
var start = "wss://" + domain +
"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at;
} else if (type == "noauth") {
var start = "wss://" + acct_id +
"/api/v1/streaming/?stream=public:local";
} else if (type=="list"){
var start = "wss://" + domain +
"/api/v1/streaming/?stream=list&list=" + data +"&access_token=" + at;
} else if (type=="dm"){
var start = "wss://" + domain +
"/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);
@@ -145,19 +240,18 @@ function reload(type, cc, acct_id, tlid, data) {
}
websocket[wsid].onmessage = function(mess) {
console.log(tlid + ":Receive Streaming API:");
console.log(mess);
var typeA = JSON.parse(mess.data).event;
if (typeA == "delete") {
var obj = JSON.parse(mess.data).payload;
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
} else if (typeA == "update") {
var obj = JSON.parse(JSON.parse(mess.data).payload);
console.log(obj);
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
var templete = parse([obj], type, acct_id, tlid);
console.log(JSON.parse(mess.data));
if(misskey){
if (JSON.parse(mess.data).type == "note") {
var obj = JSON.parse(mess.data).body;
if(voice){
say(obj.text)
}
websocketNotf[acct_id].send(JSON.stringify({
type: 'capture',
id: obj.id
}))
var templete = misskeyParse([obj], type, acct_id, tlid,"",mute);
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
@@ -165,24 +259,93 @@ function reload(type, cc, acct_id, tlid, data) {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
scrollck();
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
}else{
todo("二重取得発生中");
}
todc();
}
websocket[wsid].onclose = function(mess) {
console.log("Close Streaming API:" + type);
}else{
var typeA = JSON.parse(mess.data).event;
if (typeA == "delete") {
var del=localStorage.getItem("delete");
if(del>10){
reconnector(tlid,type,acct_id,data)
}else{
localStorage.setItem("delete",del*1+1)
}
var obj = JSON.parse(mess.data).payload;
if(delc=="true"){
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
}else{
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
}
} 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)
}
var templete = parse([obj], type, acct_id, tlid,"",mute);
if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() == 0) {
$("#timeline_" + tlid).prepend(templete);
}else{
var pool = localStorage.getItem("pool_" + tlid);
if (pool) {
pool = templete + pool;
} else {
pool = templete
}
localStorage.setItem("pool_" + tlid, pool);
}
scrollck();
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
}else{
todo("二重取得発生中");
}
todc();
}else if(typeA=="filters_changed"){
filterUpdate(acct_id);
}
}
}
websocket[wsid].onerror = function(error) {
console.error('WebSocket Error ' + error);
console.error("Error closing");
console.error(error);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Error ' + error);
}else{
var errorct=localStorage.getItem("wserror_" + tlid)*1+1;
localStorage.setItem("wserror_" + tlid,errorct);
if(errorct<3){
reconnector(tlid,type,acct_id,data,"error");
}
}
return false;
};
websocket[wsid].onclose = function() {
console.error("Closing");
console.error(tlid);
if(mode=="error"){
$("#notice_icon_" + tlid).addClass("red-text");
todo('WebSocket Closed');
}else{
var errorct=localStorage.getItem("wserror_" + tlid)*1+1;
localStorage.setItem("wserror_" + tlid,errorct);
if(errorct<3){
reconnector(tlid,type,acct_id,data,"error");
}
}
return false;
};
}
//一定のスクロールで発火
@@ -204,42 +367,89 @@ function moreload(type, tlid) {
}else if(type=="list"){
var data=obj[tlid].data;
}
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
if (localStorage.getItem("morelock") != sid) {
localStorage.setItem("morelock", sid);
if (type == "mix") {
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
if (sid && !moreloading) {
if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
mixmore(tlid,"integrated");
return;
}else if (type == "plus") {
}else if (type == "plus" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
mixmore(tlid,"plus");
return;
}else if (type == "notf") {
notfmore(tlid);
return;
}
moreloading=true;
localStorage.setItem("now", type);
todo(cap(type) + " TL MoreLoading");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
"max_id=" + sid;
fetch(start, {
method: 'GET',
headers: {
if(type!="noauth"){
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var hdr={
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
};
var domain = localStorage.getItem("domain_" + acct_id);
}else{
var hdr={
'content-type': 'application/json'
};
domain=acct_id;
}
if(localStorage.getItem("mode_" + domain)=="misskey"){
var misskey=true;
hdr={
'content-type': 'application/json'
};
var url=misskeycom(type, data);
var start = "https://" + domain + "/api/notes/"+url;
var method="POST";
var req={};
if(type!="noauth"){
req.i=at;
}
if(type=="local-media"||type=="pub-media"){
req.mediaOnly=true;
}
if(type=="tag"){
req.tag=data;
}
if(type=="list"){
req.listId=data;
}
req.untilId=sid;
req.limit=20;
var i={
method: method,
headers: hdr,
body: JSON.stringify(req),
}
}else{
var misskey=false;
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
"max_id=" + sid;
var method="GET";
var i={
method: method,
headers: hdr
};
}
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id, tlid);
if(misskey){
var templete = misskeyParse(json, '', acct_id, tlid,"",mute);
}else{
var templete = parse(json, '', acct_id, tlid,"",mute);
}
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
localStorage.removeItem("morelock")
moreloading=false;
todc();
});
}
@@ -283,7 +493,7 @@ function tlCloser() {
}
});
websocketLocal = [];
websocketNotf = [];
}
//TLのタイトル
@@ -305,12 +515,24 @@ function cap(type, data, acct_id) {
}else{
var response="Local TL";
}
} else if (type == "local-media") {
if(localStorage.getItem("local_" + acct_id) && !locale){
var response=localStorage.getItem("local_" + acct_id)+"("+lang.lang_tl_media +")";
}else{
var response="Local TL(Media)";
}
} else if (type == "pub") {
if(localStorage.getItem("public_" + acct_id) && !locale){
var response=localStorage.getItem("public_" + acct_id);
}else{
var response="Federated TL";
}
} else if (type == "pub-media") {
if(localStorage.getItem("public_" + acct_id) && !locale){
var response=localStorage.getItem("public_" + acct_id)+"("+lang.lang_tl_media +")";
}else{
var response="Federated TL(Media)";
}
} else if (type == "tag") {
var response= "#" + data
} else if (type == "list") {
@@ -326,6 +548,16 @@ function cap(type, data, acct_id) {
var response= "Glance TL"
} else if (type == "dm") {
var response= "DM"
} else if (type == "mix") {
if(localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))=="misskey"){
var response= "Social TL"
}else{
var response= "Integrated"
}
} else if (type == "plus") {
var response= "Local+"
}else if (type == "webview") {
var response="Twitter"
}
return response;
}
@@ -336,14 +568,37 @@ function com(type, data) {
return "home?"
} else if (type == "local" || type == "noauth") {
return "public?local=true&"
} else if (type == "local-media") {
return "public?local=true&only_media=true&"
} else if (type == "pub") {
return "public?"
} else if (type == "pub-media") {
return "public?only_media=true&"
} else if (type == "tag") {
return "tag/" + data + "?"
}else if (type == "list") {
return "list/" + data + "?"
}else if (type="dm") {
return "direct?"
return "/api/v1/conversations?"
}
}
function misskeycom(type, data) {
if (type == "home") {
return "timeline"
}else if (type == "mix") {
return "hybrid-timeline"
} else if (type == "local" || type == "noauth") {
return "local-timeline"
} else if (type == "local-media") {
return "local-timeline"
} else if (type == "pub") {
return "global-timeline"
} else if (type == "pub-media") {
return "global-timeline"
} else if (type == "tag") {
return "search_by_tag"
}else if (type == "list") {
return "user-list-timeline"
}
}
@@ -351,9 +606,9 @@ function com(type, data) {
function icon(type) {
if (type == "home") {
return "home"
} else if (type == "local" || type == "noauth") {
} else if (type == "local" || type == "noauth" || type == "local-media") {
return "people_outline"
} else if (type == "pub") {
} else if (type == "pub" || type == "pub-media") {
return "language"
} else if (type == "tag") {
return "search"
@@ -363,5 +618,67 @@ function icon(type) {
return "subject"
}else if (type == "dm") {
return "mail"
}else if (type == "mix") {
return "share"
}
}
}
function strAlive(){
var date = new Date() ;
var a = date.getTime() ;
var unix = Math.floor( a / 1000 ) ;
var col = localStorage.getItem("column");
if(col){
var obj = JSON.parse(col);
Object.keys(obj).forEach(function(key) {
if($("#notice_icon_" + key).hasClass("red-text")){
var type=obj[key].type;
var acct_id=obj[key].domain;
var data=obj[key].data;
localStorage.removeItem("wserror_" + tlid)
reconnector(key,type,acct_id,data,"error");
}
});
}
return;
}
function strAliveInt(){
setTimeout(strAlive, 10000);
}
function reconnector(tlid,type,acct_id,data,mode){
console.log("Reconnector:"+mode)
if(type=="mix" || type=="plus"){
if(localStorage.getItem("voice_" + tlid)){
var voice=true;
}else{
var voice=false;
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
}else{
var mute=[];
}
var wssh=localStorage.getItem("wssH_" + tlid);
websocketHome[wssh].close();
var wssh=localStorage.getItem("wssL_" + tlid);
websocketLocal[wssl].close();
mixre(acct_id, tlid, type, mute,"",voice,mode);
}else if(type=="notf"){
}else{
var wss=localStorage.getItem("wss_" + tlid);
websocket[wss].close();
if(localStorage.getItem("voice_" + tlid)){
var voice=true;
}else{
var voice=false;
}
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
}else{
var mute=[];
}
reload(type, '', acct_id, tlid, data, mute, "",voice,mode);
}
Materialize.toast(lang.lang_tl_reconnect, 2000);
}
strAliveInt()

View File

@@ -2,7 +2,8 @@
//postのimg.jsとは異なります。
function imgv(id, key, acct_id) {
$("#imgprog").text(0);
$('#imgmodal').attr('src', './img/loading.svg');
$('#imgmodal').hide();
$('#imgmodal').attr('src', '../../img/loading.svg');
var murl = $("#" + id + "-image-" + key).attr("data-url");
var type = $("#" + id + "-image-" + key).attr("data-type");
$("#imagemodal").attr("data-id",id);
@@ -16,24 +17,26 @@ function imgv(id, key, acct_id) {
var total=event.total;
var now=event.loaded;
var per=now/total*100;
$("#imgprog").text(per);
$("#imgprog").text(Math.floor(per));
}
}, false);
xhr.addEventListener('loadend', function (event) {
var total=event.total;
var now=event.loaded;
var per=now/total*100;
$("#imgprog").text(per);
$("#imgprog").text(Math.floor(per));
}, false);
xhr.send();
$('#imgmodal').attr('src', murl);
$('#imagewrap').dragScroll(); // ドラッグスクロール設定
$('#imagemodal').modal('open');
$('#imgmodal').show();
$('#imagemodal').attr('data-key', key);
$('#imagemodal').attr('data-id', id);
} else if (type == "video" || type == "gifv") {
$('#video').attr('src', murl);
$('#videomodal').modal('open');
$('#imgmodal').show();
}
var element = new Image();
var width;
@@ -125,25 +128,26 @@ function imgCont(type) {
}
var murl = $("#" + id + "-image-" + key).attr("data-url");
if(murl){
$('#imgmodal').attr('src', './img/loading.svg');
$('#imgmodal').attr('src', '../../img/loading.svg');
var type = $("#" + id + "-image-" + key).attr("data-type");
$(document).ready(function() {
if (type == "image") {
xhr = new XMLHttpRequest;
xhr.open('GET', murl, true);
xhr.responseType = "arraybuffer";
xhr.addEventListener('progress', function (event) {
if (event.lengthComputable) {
var total=event.total;
var now=event.loaded;
var per=now/total*100;
$("#imgprog").text(per);
$("#imgprog").text(Math.floor(per));
}
}, false);
xhr.addEventListener('loadend', function (event) {
var total=event.total;
var now=event.loaded;
var per=now/total*100;
$("#imgprog").text(per);
$("#imgprog").text(Math.floor(per));
}, false);
xhr.send();
$('#imgmodal').attr('src', murl);
@@ -333,7 +337,12 @@ function dlImg(){
var url=$("#imgmodal").attr("src");
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('general-dl', [url,false]);
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);
})

View File

@@ -10,12 +10,13 @@ var websocketNotf = [];
function addToggle() {
$("#add-box").toggleClass("hide");
addselCk()
$("#add-box").css("top",$('#add-tgl').offset().top+"px");
$("#add-box").css("left",$('#add-tgl').offset().left-410+"px");
$("#add-box").css("bottom","40px");
$("#add-box").css("left",$('#add-tgl').offset().left-$('#add-box').width()/2+"px");
$("#add-box").toggleClass("show");
}
//最初、カラム変更時に発火
function parseColumn() {
console.log("parse");
var size = localStorage.getItem("size");
if (size) {
$("#timeline-container").css("font-size", size + "px");
@@ -39,11 +40,15 @@ function parseColumn() {
localStorage.setItem("user-id_" + key, acct.id);
localStorage.setItem("prof_" + key, acct.prof);
localStorage.setItem("domain_" + key, acct.domain);
localStorage.setItem(acct.domain + "_at", acct.at);
localStorage.setItem("acct_"+ key + "_at", acct.at);
notf(key, 0);
ckdb(key);
//フィルターデータ読もう
getFilter(key);
});
}
var acctlist=obj;
console.log(obj);
var xed=localStorage.getItem("xed");
if(xed){
xpand();
@@ -54,7 +59,6 @@ function parseColumn() {
domain: 0,
type: 'local'
}];
localStorage.setItem("card_0","true");
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
} else {
@@ -67,13 +71,20 @@ function parseColumn() {
var acct = obj[key];
if(acct.type=="notf"){
var notf_attr=' data-notf='+acct.domain;
var if_notf="hide";
}else{
var notf_attr='';
var if_notf="";
}
if(localStorage.getItem("notification_" + acct.domain)){
var unique_notf=localStorage.getItem("notification_" + acct.domain);
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,localStorage.getItem("notification_" + acct.domain));
}else{
var unique_notf="通知";
if(lang.language=="ja"){
var notflocale="通知";
}else if(lang.language=="en"){
var notflocale="Notification";
}
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,notflocale);
}
var insert="";
var icnsert="";
@@ -88,30 +99,77 @@ function parseColumn() {
var txhex="ffffff";
var ichex="eeeeee"
}
insert=' style="background-color:#'+acct.background+'; color: #'+txhex+'" ';
insert='background-color:#'+acct.background+'; color: #'+txhex+'; ';
icnsert=' style="color: #'+ichex+'" ';
}
}
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
'"><div class="notice-box z-depth-2" id="menu_'+key+'"'+insert+'>'+
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。"></i></div>'+
console.log(acct.domain);
if(acctlist[acct.domain]){
if(acctlist[acct.domain].background!="def"){
insert=insert+" border-bottom:medium solid #"+acctlist[acct.domain].background+";";
}
}
if(acct.type=="notf" && localStorage.getItem("setasread")=="no"){
localStorage.setItem("hasNotfC_" + acct.domain,"true");
}else{
localStorage.removeItem("hasNotfC_" + acct.domain);
}
if(acct.type=="webview"){
if(localStorage.getItem("fixwidth")){
var fixwidth=localStorage.getItem("fixwidth");
var css=" min-width:"+fixwidth+"px;"
}else{
var css="";
}
var html =webview("https://tweetdeck.twitter.com",key,insert,icnsert,css);
$("#timeline-container").append(html);
}else{
var width = localStorage.getItem("width");
if (width) {
var css=" min-width:"+width+"px;"
}
var anime = localStorage.getItem("animation");
if (anime=="yes" || !anime) {
var animecss="box-anime";
}else{
var animecss="";
}
if(acct.type=="notf"){
var exclude=lang.lang_excluded+':<br><input type="checkbox" class="filled-in" id="exc-reply-'+key+'" '+excludeCk(key,"mention")+' /><label for="exc-reply-'+key+'" class="exc-chb"><i class="fa fa-share exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-fav-'+key+'" '+excludeCk(key,"favourite")+' /><label for="exc-fav-'+key+'" class="exc-chb"><i class="fa fa-star exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-bt-'+key+'" '+excludeCk(key,"reblog")+' /><label for="exc-bt-'+key+'" class="exc-chb" ><i class="fa fa-retweet exc-icons"></i></label> '+
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"follow")+' /><label for="exc-follow-'+key+'" class="exc-chb" ><i class="fa fa-users exc-icons"></i></label> '+
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('+key+')">Filter</button><br>';
}else if(acct.type=="home"){
var exclude='<a onclick="ebtToggle(' + key +
')" class="setting nex"><i class="fa fa-retweet waves-effect nex" title="'+lang.lang_layout_excludingbt +'" style="font-size:24px"></i><span id="sta-bt-' +
key + '">Off</span></a>'+lang.lang_layout_excludingbt+'<br>';
}else{
var exclude="";
}
var html = '<div style="'+css+'" class="box '+animecss+'" id="timeline_box_' + key + '_box" tlid="' + key +
'" data-acct="'+acct.domain+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+' ">'+
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="'+lang.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" title="このアカウントの'+unique_notf+'"'+icnsert+'><i class="material-icons waves-effect nex notf-icon_' +
acct.domain + '">notifications</i></a></div>'+
')" class="setting nex '+if_notf+'" title="'+unique_notf+'"'+icnsert+'><i class="material-icons waves-effect nex notf-icon_' +
acct.domain + '">notifications</i></div><div class="area-sta"><span class="new badge teal notf-reply_'+acct.domain+' hide" data-badge-caption="Reply">0</span><span class="new badge yellow black-text notf-fav_'+acct.domain+' hide" data-badge-caption="Fav">0</span><span class="new badge blue notf-bt_'+acct.domain+' hide" data-badge-caption="BT">0</span><span class="new badge orange notf-follow_'+acct.domain+' hide" data-badge-caption="Follow">0</span></a></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除"'+icnsert+'>cancel</i></a></div>'+
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
'<div class="area-a3"><a onclick="setToggle(' + key +
')" class="setting nex" title="このカラムの設定"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
'<div class="hide notf-indv-box z-depth-4" id="notf-box_' + key +
')" class="setting nex" title="'+lang.lang_layout_setthis +'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"><div id="notifications_' + key +
'" data-notf="' + acct.domain + '"></div></div><div class="hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;"><a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' +
key + '">On</span></a>メディアフィルター<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="リンクの解析を切り替え(OFFで制限を回避出来る場合があります)">link</i><span id="sta-card-' +
key + '">On</span></a>リンク解析<br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl" tlid="' + key + '"'+notf_attr+'><div style="text-align:center">[ここにトゥートはありません。]<br>F5で再読込できます。</div></div></div></div>';
'" data-notf="' + acct.domain + '" data-type="notf"></div></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">'+exclude+'<a onclick="mediaToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_mediafil +'">perm_media</i><span id="sta-media-' +
key + '">On</span></a>'+lang.lang_layout_mediafil +'<br><a onclick="cardToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_linkanades +'">link</i><span id="sta-card-' +
key + '">On</span></a>'+lang.lang_layout_linkana +'<br><a onclick="voiceToggle(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_tts +'">hearing</i><span id="sta-voice-' +
key + '">On</span></a>'+lang.lang_layout_tts +'TL<br><a onclick="reconnector(' + key +
',\''+acct.type+'\',\''+acct.domain+'\',\''+acct.data+'\')" class="setting nex '+if_notf+'"><i class="material-icons waves-effect nex '+if_notf+'" title="'+lang.lang_layout_reconnect+'">low_priority</i></a><span class="'+if_notf+'">'+lang.lang_layout_reconnect+'</span><br>'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
'" class="tl '+acct.type+'-timeline " tlid="' + key + '" data-type="' + acct.type + '" data-acct="'+acct.domain+'"><div id="landing_'+key+'" style="text-align:center">'+lang.lang_layout_nodata +'</div></div></div></div>';
$("#timeline-container").append(html);
localStorage.removeItem("pool_" + key);
if (acct.data) {
@@ -119,24 +177,72 @@ function parseColumn() {
} else {
var data = "";
}
tl(acct.type, data, acct.domain, key);
if(localStorage.getItem("catch_" + key)){
var delc="true";
}else{
var delc="false";
}
if(localStorage.getItem("voice_" + key)){
var voice=true;
}else{
var voice=false;
}
tl(acct.type, data, acct.domain, key, delc,voice,"");
cardCheck(key);
ebtCheck(key);
mediaCheck(key);
catchCheck(key);
voiceCheck(key);
}
});
var width = localStorage.getItem("width");
if (width) {
$(".box").css("min-width", width + "px");
}
var box = localStorage.getItem("box");
if (box == "yes") {
$("#post-box").addClass("hidenbox");
$("#post-box").fadeOut();
$("#menu-btn").fadeIn();
}else if (box == "hide"){
$("body").addClass("mini-post");
$(".mini-btn").text("expand_less");
if (box == "absolute") {
setTimeout(show, 1000);
}
if(localStorage.getItem("reverse")){
$("#bottom").removeClass("reverse");
$(".leftside").removeClass("reverse");
}
if(localStorage.getItem("sec") && localStorage.getItem("sec")!="nothing"){
secvis(localStorage.getItem("sec"));
}
favTag();
var cw = localStorage.getItem("always-cw");
if (cw == "yes") {
if(!$("#cw").hasClass("cw-avail")){
$("#cw-text").show();
$("#cw").addClass("yellow-text");
$("#cw").addClass("cw-avail");
var cwt=localStorage.getItem("cw-text");
if(cwt){
$("#cw-text").val(cwt);
}
}
}
}
//セカンダリートゥートボタン
function secvis(set){
if(set=="public"){
$("#toot-sec-icon").text("public");
$("#toot-sec-btn").addClass("purple");
}else if(set=="unlisted"){
$("#toot-sec-icon").text("lock_open");
$("#toot-sec-btn").addClass("blue");
}else if(set=="private"){
$("#toot-sec-icon").text("lock");
$("#toot-sec-btn").addClass("orange");
}else if(set=="direct"){
$("#toot-sec-icon").text("mail");
$("#toot-sec-btn").addClass("red");
}else if(set=="limited"){
$("#toot-sec-icon").text("group");
$("#toot-sec-btn").addClass("teal");
}else if(set=="local"){
$("#toot-sec-icon").text("visibility");
$("#toot-sec-btn").addClass("light-blue");
}
$("#toot-sec-btn").removeClass("hide");
}
//カラム追加
function addColumn() {
@@ -146,6 +252,9 @@ function addColumn() {
if(acct=="noauth"){
acct=$("#noauth-url").val();
type="noauth"
}else if(acct=="webview"){
acct="";
type="webview"
}
var add = {
domain: acct,
@@ -155,12 +264,10 @@ function addColumn() {
var obj = JSON.parse(multi);
if(!obj){
var leng=0;
localStorage.setItem("card_" + leng,"true");
var json = JSON.stringify([add]);
localStorage.setItem("column", json);
}else{
var leng=obj.length;
localStorage.setItem("card_" + leng,"true");
obj.push(add);
var json = JSON.stringify(obj);
localStorage.setItem("column", json);
@@ -171,15 +278,21 @@ function addColumn() {
function addselCk(){
var acct = $("#add-acct-sel").val();
var domain=localStorage.getItem("domain_" + acct);
if(acct=="noauth"){
if(acct=="webview"){
$("#auth").addClass("hide");
$("#noauth").addClass("hide");
$("#webview-add").removeClass("hide");
}else if(acct=="noauth"){
$("#auth").addClass("hide");
$("#noauth").removeClass("hide");
$("#webview-add").addClass("hide");
}else{
$("#auth").removeClass("hide");
$("#noauth").addClass("hide");
$("#webview-add").addClass("hide");
}
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">ダイレクトメッセージ</option>');
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">'+lang.layout_dm +'</option>');
$('#type-sel').material_select('update');
}else{
$("#direct-add").remove();
@@ -188,6 +301,8 @@ function addselCk(){
}
//カラム削除
function removeColumn(tlid) {
$("#sort-box").addClass("hide");
$("#sort-box").removeClass("show");
var multi = localStorage.getItem("column");
var obj = JSON.parse(multi);
//聞く
@@ -199,6 +314,10 @@ function removeColumn(tlid) {
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();
@@ -210,8 +329,29 @@ function removeColumn(tlid) {
//設定トグル
function setToggle(tlid) {
colorpicker(tlid);
$("#util-box_" + tlid).toggleClass("hide");
$("#util-box_" + tlid).toggleClass("show");
if($("#util-box_" + tlid).hasClass("column-hide")){
$("#util-box_" + tlid).css("display","block")
$("#util-box_" + tlid).animate({
'height': '200px'
},{
'duration': 300,
'complete': function(){
$("#util-box_" + tlid).css("overflow-y","scroll")
$("#util-box_" + tlid).removeClass("column-hide")
}
});
}else{
$("#util-box_" + tlid).css("overflow-y","hidden")
$("#util-box_" + tlid).animate({
'height': '0'
},{
'duration': 300,
'complete': function(){
$("#util-box_" + tlid).addClass("column-hide")
$("#util-box_" + tlid).css("display","none")
}
});
}
}
function colorpicker(key){
temp=
@@ -249,7 +389,8 @@ function coloradd(key,bg,txt){
var json = JSON.stringify(o);
localStorage.setItem("column", json);
if(txt=="def"){
$("#menu_"+key).attr("style","")
$("#menu_"+key).css("background-color","");
$("#menu_"+key).css("color","");
}else{
$("#menu_"+key).css('background-color','#'+bg);
if(txt=="black"){
@@ -262,4 +403,22 @@ function coloradd(key,bg,txt){
$("#menu_"+key+" .nex").css('color','#'+ichex);
$("#menu_"+key).css('color','#'+bghex);
}
}
//禁断のTwitter
function webview(url,key,insert,icnsert,css){
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
'" style="'+css+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+'">'+
'<div class="area-notice"><i class="fa fa-twitter waves-effect" id="notice_icon_' + key + '" style="font-size:40px; padding-top:25%;"></i></div>'+
'<div class="area-notice_name tl-title">WebView('+url+')</div>'+
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+
'<div class="area-a2"><a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
'<div class="area-a3"><a onclick="setToggle(' + key +
')" class="setting nex" title="'+lang.lang_layout_setthis +'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
'"></div><div class="column-hide notf-indv-box" id="util-box_' + key +
'" style="padding:5px;">'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:calc(100% - 110px);"><div id="timeline_' + key +
'" 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;
}

View File

@@ -1,21 +1,9 @@
/*ささやきボックス(Cr民並感)*/
//もっとボタン
function more() {
$(".more-show").show();
$(".more-hide").hide();
$("#post-box").addClass("post-more");
}
//閉じるボタン
function less() {
$(".more-show").hide();
$(".more-hide").show();
$("#post-box").removeClass("post-more");
}
//✕隠す
function hide() {
$("#post-box").addClass("hidenbox");
$("#post-box").fadeOut();
$("#menu-btn").fadeIn();
$('#post-box').fadeOut()
$("#post-box").removeClass("appear")
$("#emoji").addClass("hide")
}
//最小化
function mini() {
@@ -28,43 +16,23 @@ function mini() {
}
//最小化時に展開
function show() {
$("#post-box").removeClass("hidenbox");
$("#post-box").fadeIn();
$("#menu-btn").fadeOut();
}
//横幅
function zoomBox() {
if ($("#post-box").hasClass("bigbox")) {
$("#post-box").css('width', '350px');
$("#post-box").removeClass("bigbox")
} else {
$("#post-box").css('width', '50vw');
$("#post-box").addClass("bigbox")
}
}
//サイドバー開閉
function xpand() {
if ($("#sidebar").hasClass("xed")) {
$(".side-label").show();
$("#sidebar").css('width', '75px');
$("#post-box").css('right', '78px');
$("#sidebar").css('min-width', '75px');
$("#sidebar .big-menu i").addClass('big-icon');
$("#sidebar").removeClass("xed");
$("#x-btn").text("keyboard_arrow_right");
localStorage.removeItem("xed");
} else {
$("#sidebar").css('width', '24px');
$("#sidebar").css('min-width', '24px');
$("#post-box").css('right', '27px');
$("#sidebar").addClass("xed");
$("#sidebar .big-menu i").removeClass('big-icon');
$(".side-label").hide();
$("#x-btn").text("keyboard_arrow_left");
localStorage.setItem("xed","true");
}
$("#post-box").addClass("appear")
$("#textarea").focus();
console.log("show"+localStorage.getItem("postbox-left"));
$('#post-box').css("left",localStorage.getItem("postbox-left")+"px")
$('#post-box').css("top",localStorage.getItem("postbox-top")+"px")
$('#post-box').fadeIn();
}
$(function() {
$( "#post-box" ).draggable({handle: "#post-bar",
stop: function() {
console.log("stopped");
localStorage.setItem("postbox-left",$('#post-box').offset().left);
localStorage.setItem("postbox-top",$('#post-box').offset().top);
}
});
});
//コード受信
if(location.search){
@@ -79,4 +47,47 @@ if(location.search){
$("body").removeClass("mini-post");
$(".mini-btn").text("expand_less");
}
}
}
$('#posttgl').click(function(e) {
if(!$('#post-box').hasClass("appear")){
show();
}else{
hide();
}
});
$("#timeline-container,#group").click(function(e) {
if(localStorage.getItem("box")!="absolute"){
if($('#post-box').hasClass("appear") && !localStorage.getItem("nohide")){
hide();
}
}
localStorage.removeItem("nohide")
});
$('#textarea,#cw-text').focusout(function(e) {
localStorage.setItem("nohide",true)
var countup = function(){
localStorage.removeItem("nohide")
}
//setTimeout(remove, 100);
});
$("#timeline-container").click(function(e) {
if(!$('#list-box').hasClass("hide")){
$("#list-box").removeClass("show");
$("#list-box").addClass("hide")
}
if(!$('#src-box').hasClass("hide")){
$("#src-box").removeClass("show");
$("#src-box").addClass("hide")
}
if(!$('#filter-box').hasClass("hide")){
$("#filter-box").removeClass("show");
$("#filter-box").addClass("hide")
}
if(!$('#add-box').hasClass("hide")){
$("#add-box").removeClass("show");
$("#add-box").addClass("hide")
}
});

View File

@@ -18,8 +18,8 @@ function scrollck() {
localStorage.removeItem("pool_" + tlid);
}
//自動リフレッシュ
if( $("#timeline_" + tlid+" .cvo").length > 100 ){
for(var i=100;i<$("#timeline_" + tlid +" .cvo").length;i++){
if( $("#timeline_" + tlid+" .cvo").length > 30 ){
for(var i=30;i<$("#timeline_" + tlid +" .cvo").length;i++){
$("#timeline_" + tlid +" .cvo").eq(i).remove();
}
}
@@ -28,6 +28,7 @@ function scrollck() {
var scrt = $(this).find(".tl").height() - $(window).height();
var scr = $(this).scrollTop();
if (scr > scrt) {
console.log("kicked");
moreload('', tlid);
}
});
@@ -40,6 +41,8 @@ function goTop(id){
$("#timeline_box_"+id+"_box .tl-box").animate({scrollTop:0});
}
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

@@ -4,14 +4,14 @@ function settings() {
var dd = $("[name=time]:checked").val();
var dt = $("[for="+dd+"]").text();
if (dd != localStorage.getItem("datetype")) {
Materialize.toast("時間設定を" + dt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_time.replace("{{set}}" ,dt), 3000);
}
localStorage.setItem("datetype", dd);
var cd = $("[name=theme]:checked").val();
var ct = $("[for="+cd+"]").text();
var ct = $("[for="+cd+"]").html();
if (cd != localStorage.getItem("theme")) {
Materialize.toast("テーマ設定を" + ct + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
}
//テーマはこの場で設定
themes(cd);
@@ -20,134 +20,215 @@ function settings() {
var nd = $("[name=nsfw]:checked").val();
var nt = $("[for=n_"+nd+"]").text();
if (nd != localStorage.getItem("nsfw")) {
Materialize.toast("画像表示設定を" + nt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_nsfw.replace("{{set}}" ,nt), 3000);
}
localStorage.setItem("nsfw", nd);
var cwd = $("[name=cw]:checked").val();
var cwt = $("[for=c_"+cwd+"]").text();
if (cwd != localStorage.getItem("cw")) {
Materialize.toast("テキスト表示設定を" + cwt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_cw.replace("{{set}}" ,cwt), 3000);
}
localStorage.setItem("cw", cwd);
var cwtd = $("#cw-text").val();
if (cwtd != localStorage.getItem("cw-text")) {
Materialize.toast("デフォルトの警告文を「" + cwtd + "」に設定しました。", 3000);
Materialize.toast(lang.lang_setting_cwtext.replace("{{set}}" ,cwtd), 3000);
}
localStorage.setItem("cw-text", cwtd);
var cwsd = $("[name=cws]:checked").val();
var cwst = $("[for=cws_"+cwsd+"]").text();
if (cwsd != localStorage.getItem("always-cw")) {
Materialize.toast(lang.lang_setting_cws.replace("{{set}}" ,cwst), 3000);
}
localStorage.setItem("always-cw", cwsd);
var rpd = $("[name=rp]:checked").val();
var rpt = $("[for=c_"+cwd+"]").text();
if (rpd != localStorage.getItem("replyct")) {
Materialize.toast(lang.lang_setting_rp.replace("{{set}}" ,rpt), 3000);
}
localStorage.setItem("replyct", rpd);
var visd = $("[name=vis]:checked").val();
var vist = $("[for="+visd+"]").text();
if (visd != localStorage.getItem("vis")) {
Materialize.toast("デフォルトの公開設定を" + vist + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_vis.replace("{{set}}" ,vist), 3000);
}
localStorage.setItem("vis", visd);
var popd = $("#popup").val();
if (popd > 0 && popd != localStorage.getItem("popup")) {
Materialize.toast("ポップアップお知らせを" + popd + "秒に設定しました。", 3000);
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,popd+lang.lang_setting_s), 3000);
} else if (popd != localStorage.getItem("popup")) {
Materialize.toast("ポップアップお知らせをオフに設定しました。", 3000);
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,lang.lang_setting_off), 3000);
}
localStorage.setItem("popup", popd);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=b_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast("デフォルトでのボックスの挙動を" + boxt + "に設定しました。", 3000);
}
localStorage.setItem("box", boxd);
var gifd = $("[name=gif]:checked").val();
var gift = $("[for=g_"+gifd+"]").text();
if (gifd != localStorage.getItem("gif")) {
Materialize.toast("アイコンアニメーション再生を" + gift + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_gif.replace("{{set}}" ,gift), 3000);
}
localStorage.setItem("gif", gifd);
var sentd = $("#sentence").val();
var ltrd = $("#letters").val();
if (sentd != localStorage.getItem("sentence") || ltrd != localStorage.getItem("letters")) {
Materialize.toast(sentd + "行以上または"+ltrd+"文字以上でテキストを隠します。", 3000);
Materialize.toast(lang.lang_setting_selt.replace("{{set1}}" ,sentd).replace("{{set2}}" ,ltrd), 3000);
}
localStorage.setItem("sentence", sentd);
localStorage.setItem("letters", ltrd);
var csentd = $("#cw_sentence").val();
var cltrd = $("#cw_letters").val();
if (csentd != localStorage.getItem("cw_sentence") || cltrd != localStorage.getItem("cw_letters")) {
Materialize.toast(lang.lang_setting_autocw.replace("{{set1}}" ,csentd).replace("{{set2}}" ,cltrd), 3000);
}
localStorage.setItem("cw_sentence", csentd);
localStorage.setItem("cw_letters", cltrd);
var widthd = $("#width").val();
if (widthd != localStorage.getItem("width")) {
Materialize.toast("横幅最低を" + widthd + "pxに設定しました。", 3000);
Materialize.toast(lang.lang_setting_width.replace("{{set}}" ,widthd), 3000);
}
localStorage.setItem("width", widthd);
var fwidthd = $("#fixwidth").val();
if (fwidthd != localStorage.getItem("fixwidth")) {
Materialize.toast(lang.lang_setting_fixwidth.replace("{{set}}" ,fwidthd), 3000);
}
localStorage.setItem("fixwidth", fwidthd);
var imgd = $("[name=img]:checked").val();
var imgt = $("[for=i_"+imgd+"]").text();
if (imgd != localStorage.getItem("img")) {
Materialize.toast("画像投稿後の設定を「" + imgt + "」に設定しました。", 3000);
Materialize.toast(lang.lang_setting_img.replace("{{set}}" ,imgt), 3000);
}
localStorage.setItem("img", imgd);
var fontd = $("#font").val();
if(fontd){
if (fontd != localStorage.getItem("font")) {
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,fontd), 3000);
}
localStorage.setItem("font", fontd);
themes();
}else{
if(localStorage.getItem("font")){
localStorage.removeItem("font");
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,lang.lang_setting_default), 3000);
themes();
}
}
var sized = $("#size").val();
if (sized != localStorage.getItem("size")) {
Materialize.toast("フォントサイズを" + sized + "pxに設定しました。", 3000);
Materialize.toast(lang.lang_setting_size.replace("{{set}}" ,sized), 3000);
}
localStorage.setItem("size", sized);
var heid = $("#img-height").val();
if (heid != localStorage.getItem("img-height")) {
Materialize.toast("画像高さを" + heid + "pxに設定しました。", 3000);
Materialize.toast(lang.lang_setting_imgheight.replace("{{set}}" ,heid), 3000);
}
localStorage.setItem("img-height", heid);
var tckrd = $("[name=ticker]:checked").val();
var tckrt = $("[for=ticker_"+tckrd+"]").text();
if (tckrd != localStorage.getItem("ticker_ok")) {
Materialize.toast(lang.lang_setting_ticker.replace("{{set}}" ,tckrt), 3000);
}
localStorage.setItem("ticker_ok", tckrd);
var animed = $("[name=anime]:checked").val();
var animet = $("[for=anime_"+animed+"]").text();
if (animed != localStorage.getItem("animation")) {
Materialize.toast(lang.lang_setting_animation.replace("{{set}}" ,animet), 3000);
}
localStorage.setItem("animation", animed);
var boxd = $("[name=box]:checked").val();
var boxt = $("[for=bx_"+boxd+"]").text();
if (boxd != localStorage.getItem("box")) {
Materialize.toast(lang.lang_setting_boxConfirm.replace("{{set}}" ,boxt), 3000);
}
localStorage.setItem("box", boxd);
var tagd = $("[name=tag]:checked").val();
var tagt = $("[for=t_"+tagd+"]").text();
if (tagd != localStorage.getItem("tag-range")) {
Materialize.toast("タグの取得範囲を「" + tagt + "」に設定しました。", 3000);
Materialize.toast(lang.lang_setting_tag.replace("{{set}}" ,tagt), 3000);
}
localStorage.setItem("tag-range", tagd);
var uld = $("[name=ul]:checked").val();
var ult = $("[for=ul_"+uld+"]").text();
if (uld != localStorage.getItem("locale")) {
Materialize.toast("独自ロケール設定を" + ult + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_ul.replace("{{set}}" ,ult), 3000);
}
localStorage.setItem("locale", uld);
var ntd = $("[name=notf]:checked").val();
var ntt = $("[for=ntf_"+ntd+"]").text();
if (ntd != localStorage.getItem("nativenotf")) {
Materialize.toast("ネイティブ通知を" + ntt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_notf.replace("{{set}}" ,ntt), 3000);
}
localStorage.setItem("nativenotf", ntd);
var qtd = $("[name=quote]:checked").val();
var qtt = $("[for=q_"+qtd+"]").text();
if (qtd != localStorage.getItem("quote")) {
Materialize.toast("引用形式を" + qtt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_quote.replace("{{set}}" ,qtt), 3000);
}
localStorage.setItem("quote", qtd);
var viad = $("[name=via]:checked").val();
var viat = $("[for=via_"+viad+"]").text();
if (viad != localStorage.getItem("viashow")) {
Materialize.toast("via表示を" + viat + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_via.replace("{{set}}" ,viat), 3000);
}
localStorage.setItem("viashow", viad);
var notfmd = $("[name=notfm]:checked").val();
var notfmt = $("[for=notfm_"+notfmd+"]").text();
if (notfmd != localStorage.getItem("setasread")) {
Materialize.toast(lang.lang_setting_setasread.replace("{{set}}" ,notfmt), 3000);
}
localStorage.setItem("setasread", notfmd);
var movd = $("[name=mov]:checked").val();
var movt = $("[for=mov_"+movd+"]").text();
if (movd != localStorage.getItem("mouseover")) {
Materialize.toast("マウスオーバー・ヒディングを" + movt + "に設定しました。", 3000);
Materialize.toast(lang.lang_setting_mov.replace("{{set}}" ,movt), 3000);
}
localStorage.setItem("mouseover", movd);
var maind = $("[name=main]:checked").val();
var maint = $("[for=mn_"+maind+"]").text();
if (maind != localStorage.getItem("mainuse")) {
Materialize.toast(lang.lang_setting_main.replace("{{set}}" ,maint), 3000);
}
localStorage.setItem("mainuse", maind);
var secd = $("[name=sec]:checked").val();
var sect = $("[for=sec-"+secd+"]").text();
if (secd != localStorage.getItem("sec")) {
Materialize.toast(lang.lang_setting_sec.replace("{{set}}" ,sect), 3000);
}
localStorage.setItem("sec", secd);
}
//読み込み時の設定ロード
function load() {
if(localStorage.getItem("kirishima")){
if(localStorage.getItem("imas")){
$(".imas").removeClass("hide");
}
if(localStorage.getItem("kirishima")){
$(".kirishima").removeClass("hide");
}
var prof = localStorage.getItem("prof");
$("#my-prof").attr("src", prof);
var datetype = localStorage.getItem("datetype");
@@ -174,6 +255,12 @@ function load() {
}
$("#c_" + cw).prop("checked", true);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var popup = localStorage.getItem("popup");
if (!popup) {
var popup = "0";
@@ -184,7 +271,10 @@ function load() {
if (!box) {
var box = "no";
}
$("#b_" + box).prop("checked", true);
if(box=="absolute"){
var box = "abs";
}
$("#bx_" + box).prop("checked", true);
var gif = localStorage.getItem("gif");
if (!gif) {
@@ -203,18 +293,47 @@ function load() {
}
$("#letters").val(ltrs);
var csent = localStorage.getItem("cw_sentence");
if (!csent) {
var csent = "500";
}
$("#cw_sentence").val(csent);
var cltrs = localStorage.getItem("cw_letters");
if (!cltrs) {
var cltrs = "500";
}
$("#cw_letters").val(cltrs);
var width = localStorage.getItem("width");
if (!width) {
var width = "300";
}
$("#width").val(width);
var fwidth = localStorage.getItem("fixwidth");
if (!fwidth) {
var fwidth = "0";
}
$("#fixwidth").val(fwidth);
var cwt = localStorage.getItem("cw-text");
if (!cwt) {
var cwt = "";
}
$("#cw-text").val(cwt);
var cws = localStorage.getItem("always-cw");
if (!cws) {
var cws = "no";
}
$("#cws_" + cws).prop("checked", true);
var rps = localStorage.getItem("replyct");
if (!rps) {
var rps = "hidden";
}
$("#rp_" + rps).prop("checked", true);
var vis = localStorage.getItem("vis");
if (!vis) {
var vis = "public";
@@ -226,6 +345,12 @@ function load() {
var img = "no-act";
}
$("#i_" + img).prop("checked", true);
var font = localStorage.getItem("font");
if (!font) {
var font = "";
}
$("#font").val(font);
var size = localStorage.getItem("size");
if (!size) {
@@ -239,12 +364,30 @@ function load() {
}
$("#img-height").val(imh);
var ticker = localStorage.getItem("ticker_ok");
if (!ticker) {
var ticker = "no";
}
$("#ticker_" + ticker).prop("checked", true);
var animation = localStorage.getItem("animation");
if (!animation) {
var animation = "yes";
}
$("#anime_" + animation).prop("checked", true);
var tag = localStorage.getItem("tag-range");
if (!tag) {
var tag = "all";
}
$("#t_" + tag).prop("checked", true);
var box = localStorage.getItem("box");
if (!box) {
var box = "yes";
}
$("#bx_" + box).prop("checked", true);
var uld = localStorage.getItem("locale");
if (!uld) {
var uld = "yes";
@@ -274,6 +417,24 @@ function load() {
var movt = "no";
}
$("#mov_" + movt).prop("checked", true);
var notfmt = localStorage.getItem("setasread");
if (!notfmt) {
var notfmt = "yes";
}
$("#notfm_" + notfmt).prop("checked", true);
var maint = localStorage.getItem("mainuse");
if (!maint) {
var maint = "remain";
}
$("#mn_" + maint).prop("checked", true);
var sect = localStorage.getItem("sec");
if (!sect) {
var sect = "nothing";
}
$("#sec-" + sect).prop("checked", true);
}
//最初に読む
load();
@@ -281,15 +442,18 @@ climute();
wordmute();
wordemp();
checkSpotify();
voiceSettingLoad();
oksload();
npprovider();
function climute(){
//クライアントミュート
var cli = localStorage.getItem("client_mute");
var obj = JSON.parse(cli);
if(!obj){
$("#mute-cli").html("ミュートしているクライアントはありません。");
$("#mute-cli").html(lang.lang_setting_nomuting);
}else{
if(!obj[0]){
$("#mute-cli").html("ミュートしているクライアントはありません。");
$("#mute-cli").html(lang.lang_setting_nomuting);
return;
}
var templete;
@@ -299,7 +463,7 @@ function climute(){
templete = '<div class="acct" id="acct_' + key + '">' + list +
'.' +
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
key + ')">削除</button><br></div>';
key + ')">'+lang.lang_del+'</button><br></div>';
$("#mute-cli").append(templete);
});
}
@@ -337,4 +501,226 @@ function wordempSave(){
var word=$('#wordemp').material_chip('data');
var json = JSON.stringify(word);
localStorage.setItem("word_emp", json);
}
function notftest(){
var electron = require("electron");
var ipc = electron.ipcRenderer;
var os = electron.remote.process.platform;
var options = {
body: lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',
icon: localStorage.getItem("prof_0")
};
if(os=="darwin"){
var n = new Notification('TheDesk'+lang.lang_setting_notftest, options);
}else{
ipc.send('native-notf', ['TheDesk'+lang.lang_setting_notftest,lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',localStorage.getItem('prof_0'),"",""]);
}
}
function oks(no){
var txt=$("#oks-"+no).val();
localStorage.setItem("oks-"+no, txt);
Materialize.toast(lang.lang_setting_ksref, 3000);
}
function oksload(){
if(localStorage.getItem("oks-1")){$("#oks-1").val(localStorage.getItem("oks-1"))}
if(localStorage.getItem("oks-2")){$("#oks-2").val(localStorage.getItem("oks-2"))}
if(localStorage.getItem("oks-3")){$("#oks-3").val(localStorage.getItem("oks-3"))}
}
function changelang(lang){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('lang',lang);
ipc.on('langres', function (event, arg) {
location.href="../"+lang+"/setting.html"
});
}
function exportSettings(){
if(!confirm(lang.lang_setting_exportwarn)){
return false;
}
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
var ipc = electron.ipcRenderer;
dialog.showSaveDialog(null, {
title: 'Export',
properties: ['openFile', 'createDirectory'],
defaultPath: "export.thedeskconfig"
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
return false;
}
var exp={};
//Accounts
var multi = localStorage.getItem("multi");
var acct = JSON.parse(multi);
exp.accts=acct;
//Columns
var multi = localStorage.getItem("column");
var column = JSON.parse(multi);
exp.columns=column;
//Themes
exp.theme=localStorage.getItem("theme");
//Min width
exp.minwidth=localStorage.getItem("width");
//Font
exp.font=localStorage.getItem("font");
exp.size=localStorage.getItem("size");
//Img height
exp.imgheight=localStorage.getItem("img-height");
//Main
exp.mainuse=localStorage.getItem("mainuse");
//CW text
exp.cw=localStorage.getItem("cw-text");
//vis
exp.vis=localStorage.getItem("vis");
//keysc
exp.ksc=[
localStorage.getItem("oks-1"),
localStorage.getItem("oks-2"),
localStorage.getItem("oks-3")
];
//climu
var cli = localStorage.getItem("client_mute");
var climu = JSON.parse(cli);
exp.clientMute=climu;
//wordmu
var wdm = localStorage.getItem("word_mute");
var wordmu = JSON.parse(wdm);
exp.wordMute=wordmu;
//spotify
exp.spotifyArtwork=localStorage.getItem("artwork")
var content=localStorage.getItem("np-temp");
if(content || content=="" || content=="null"){
exp.spotifyTemplete=content;
}else{
exp.spotifyTemplete=null;
}
//tags
var tagarr = localStorage.getItem("tag");
var favtag = JSON.parse(tagarr);
exp.favoriteTags=favtag;
console.log(exp);
ipc.send('export', [savedFiles,JSON.stringify(exp)]);
alert("Done.")
//cards
//lang
});
}
function importSettings(){
if(!confirm(lang.lang_setting_importwarn)){
return false;
}
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
var ipc = electron.ipcRenderer;
dialog.showOpenDialog(null, {
title: 'Import',
properties: ['openFile'],
filters: [
{name: 'TheDesk Config', extensions: ['thedeskconfig']},
]
}, (fileNames) => {
console.log(fileNames);
if(!fileNames){
return false;
}
ipc.send('import', fileNames[0]);
ipc.on('config', function (event, arg) {
var obj = JSON.parse(arg);
if(obj){
localStorage.clear();
localStorage.setItem("multi",JSON.stringify(obj.accts));
for(var key=0;key<obj.accts.length;key++){
var acct=obj.accts[key];
localStorage.setItem("name_" + key, acct.name);
localStorage.setItem("user_" + key, acct.user);
localStorage.setItem("user-id_" + key, acct.id);
localStorage.setItem("prof_" + key, acct.prof);
localStorage.setItem("domain_" + key, acct.domain);
localStorage.setItem("acct_"+ key + "_at", acct.at);
}
localStorage.setItem("column",JSON.stringify(obj.columns));
localStorage.setItem("theme",obj.theme);
if(obj.width){
console.log(obj.width)
localStorage.setItem("width",obj.width);
}
if(obj.font){
localStorage.setItem("font",obj.font);
}
if(obj.size){
localStorage.setItem("size",obj.size);
}
themes(obj.theme);
if(obj.imgheight){
localStorage.setItem("img-height",obj.imgheight);
}
localStorage.setItem("mainuse",obj.mainuse);
if(obj.cw){
localStorage.setItem("cwtext",obj.cw);
}
localStorage.setItem("vis",obj.vis);
if(obj.ksc[0]){
localStorage.setItem("oks-1",obj.ksc[0]);
}
if(obj.ksc[1]){
localStorage.setItem("oks-2",obj.ksc[1]);
}
if(obj.ksc[2]){
localStorage.setItem("oks-3",obj.ksc[2]);
}
if(obj.clientMute){
localStorage.setItem("client_mute",JSON.stringify(obj.clientMute));
}
if(obj.wordMute){
localStorage.setItem("word_mute",JSON.stringify(obj.wordMute));
}
if(obj.favoriteTags){
localStorage.setItem("tag",JSON.stringify(obj.favoriteTags));
}
localStorage.setItem("np-temp",obj.spotifyTemplete);
for(var i=0;i<obj.columns.length;i++){
localStorage.setItem("card_" + i,"true");
localStorage.removeItem("catch_" + i);
}
location.href="language.html";
}else{
alert("Error.")
}
})
//cards
//lang
});
}
function savefolder(){
var electron = require("electron");
var remote=electron.remote;
var dialog=remote.dialog;
dialog.showOpenDialog(null, {
title: 'Save folder',
properties: ['openDirectory'],
}, (fileNames) => {
localStorage.setItem("savefolder",fileNames[0]);
});
}
function font(){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('fonts', []);
ipc.on('font-list', function (event, arg) {
$("#fonts").removeClass("hide");
for( var i=0; i<arg.length; i++) {
var font=arg[i];
$("#fonts").append('<div class="font pointer" style="font-family:'+font.family+'" onclick="insertFont(\''+font.family+'\')">'+font.family+"</div>")
}
});
}
function insertFont(name){
$("#font").val(name);
}

View File

@@ -24,16 +24,24 @@ function sortload(){
insert=' style="background-color:#'+acct.background+'; color: #'+txhex+'" ';
}
}
var user=localStorage.getItem("user_" + acct.domain);
var domain=localStorage.getItem("domain_" + acct.domain);
if(!user || !domain){
var acctdata="";
}else{
var acctdata=user+"@"+domain;
}
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><a onclick="goColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムへ">forward</i></a>'+localStorage.getItem("user_" + acct.domain)+"@"+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data)+' TL <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></li>';
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムへ">forward</i></a> <a onclick="removeColumn(' + key +
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a><br>'+acctdata+" "+cap(acct.type, acct.data,acct.domain)+'</li>';
$("#sort").append(html);
});
drag();
}
//TLのタイトル
function cap(type, data) {
function Scap(type, data) {
if (type == "home") {
return "Home"
} else if (type == "local") {
@@ -48,6 +56,10 @@ function cap(type, data) {
return "Notification"
} else if (type == "mix") {
return "Integrated"
}else if (type == "webview") {
return "Twitter"
}else{
console.log(type);
}
}
@@ -75,7 +87,9 @@ function sort(){
var add = {
domain: data.domain,
type: data.type,
data:data.data
data:data.data,
background:data.background,
text:data.text
};
newobj.push(add);
if(flags[i]=="true"){
@@ -90,6 +104,7 @@ function sort(){
Materialize.toast("並べ替え完了。", 3000);
sortload();
parseColumn();
sortToggle()
}
//ソートボタントグル
function sortToggle(){
@@ -97,8 +112,6 @@ function sortToggle(){
if ($("#sort-box").hasClass("hide")) {
$("#sort-box").removeClass("hide");
$("#sort-box").addClass("show");
$("#sort-box").css("top",$('#sort-tgl').offset().top+"px");
$("#sort-box").css("left",$('#sort-tgl').offset().left-410+"px");
//並べ替え
sortload();
} else {

View File

@@ -42,10 +42,26 @@ function checkSpotify(){
$("#spotify-disable").addClass("disabled");
}
var content=localStorage.getItem("np-temp");
if(!content || content==""){
if(!content || content=="" || content=="null"){
var content="#NowPlaying {song} / {album} / {artist}\n{url} #SpotifyWithTheDesk";
}
$("#np-temp").val(content);
var flag=localStorage.getItem("artwork");
if(flag){
$("#awk_yes").prop("checked", true);
}else{
$("#awk_no").prop("checked", true);
}
}
function spotifyFlagSave(){
var awk = $("[name=awk]:checked").val();
if(awk=="yes"){
localStorage.setItem("artwork","yes");
Materialize.toast(lang.lang_spotify_img, 3000);
}else{
localStorage.removeItem("artwork");
Materialize.toast(lang.lang_spotify_imgno, 3000);
}
}
function nowplaying(mode){
if(mode=="spotify"){
@@ -64,9 +80,19 @@ function nowplaying(mode){
console.error(error);
}).then(function(json) {
console.log(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]);
}
var content=localStorage.getItem("np-temp");
if(!content || content==""){
if(!content || content=="" || content=="null"){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var regExp = new RegExp("{song}", "g");
@@ -77,25 +103,37 @@ function nowplaying(mode){
content = content.replace(regExp, item.artists[0].name);
var regExp = new RegExp("{url}", "g");
content = content.replace(regExp, item.external_urls.spotify);
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{hz}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bitRate}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, "");
$("#textarea").val(content);
});
}else{
alert("アカウント連携設定をして下さい。");
alert(lang.lang_spotify_acct);
}
}else if(mode=="itunes"){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('itunes', "");
ipc.on('itunesRes', function (event, arg) {
ipc.on('itunes-np', function (event, arg) {
console.log(arg);
var content=localStorage.getItem("np-temp");
if(!content || content==""){
if(!content || content=="" || content=="null"){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var str_array=arg.artist.split('');//1文字ずつ配列に入れる
var utf8Array=Encoding.convert(str_array, 'SJIS', 'AUTO');//UTF-8に変換
console.log(utf8Array);
var convert=Encoding.codeToString( utf8Array );
console.log(convert);
var flag=localStorage.getItem("artwork");
if(flag && arg.path){
media(arg.path,"image/png","new");
}
var regExp = new RegExp("{song}", "g");
content = content.replace(regExp, arg.name);
var regExp = new RegExp("{album}", "g");
@@ -104,6 +142,18 @@ function nowplaying(mode){
content = content.replace(regExp, arg.artist);
var regExp = new RegExp("{url}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, arg.composer);
var regExp = new RegExp("{hz}", "g");
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, "");
content = content.replace(regExp, arg.sampleRate/1000+"kHz");
var regExp = new RegExp("{bitRate}", "g");
content = content.replace(regExp, arg.bitRate+"kbps");
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, arg.genre);
$("#textarea").val(content);
})
}
@@ -112,7 +162,26 @@ function nowplaying(mode){
function spotifySave(){
var temp=$("#np-temp").val();
localStorage.setItem("np-temp", temp);
Materialize.toast("NowPlaying文章を更新しました。", 3000);
Materialize.toast(lang.lang_spotify_np, 3000);
}
function npprovider(){
var provd = $("[name=npp]:checked").val();
if(!provd){
if (localStorage.getItem("np_provider")) {
$("[value="+localStorage.getItem("np_provider")+"]").prop("checked", true);
}else{
$("[value=AIMP]").prop("checked", true);
localStorage.setItem("np_provider", "AIMP");
}
}else{
if (provd != localStorage.getItem("np_provider")) {
Materialize.toast(lang.lang_setting_npprovide.replace("{{set}}" ,provd), 3000);
}
localStorage.setItem("np_provider", provd);
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('itunes', ["set",provd]);
}
}
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
@@ -126,4 +195,57 @@ if(location.search){
}
}
$("#npbtn").click(function() {
nowplaying('spotify');
});
$("#npbtn").bind('contextmenu', function() {
nowplaying('itunes');
return false;
});
/*cinderella NP*/
function cgNP(q){
suggest = "https://cg.toot.app/api/v1/?song=" + q
console.log(suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
var electron = require("electron");
var ipc = electron.ipcRenderer;
var flag=localStorage.getItem("artwork");
if(flag){
var img=json.album.artwork;
ipc.send('bmp-image', [img,0]);
}
var content=localStorage.getItem("np-temp");
if(!content || content==""){
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
}
var regExp = new RegExp("{song}", "g");
content = content.replace(regExp, json.name);
var regExp = new RegExp("{album}", "g");
content = content.replace(regExp, json.album.name);
var regExp = new RegExp("{artist}", "g");
content = content.replace(regExp, json.artist.text);
var regExp = new RegExp("{composer}", "g");
content = content.replace(regExp, json.composer);
var regExp = new RegExp("{lyricist}", "g");
content = content.replace(regExp, json.lyricist);
var regExp = new RegExp("{bpm}", "g");
content = content.replace(regExp, json.bpm);
var regExp = new RegExp("{genre}", "g");
content = content.replace(regExp, "");
var regExp = new RegExp("{url}", "g");
content = content.replace(regExp, "");
$("#textarea").val(content);
});
}

View File

@@ -7,32 +7,16 @@ function themes(theme) {
localStorage.setItem("theme","black");
}
}
if (theme == "black") {
$("html").removeClass("indigotheme");
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").addClass("blacktheme");
} else if (theme == "indigo") {
$("html").removeClass("blacktheme");
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").addClass("indigotheme");
} else if (theme == "green") {
$("html").removeClass("indigotheme");
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").removeClass("blacktheme");
$("html").addClass("greentheme");
} else if (theme == "brown") {
$("html").removeClass("indigotheme");
$("html").removeClass("greentheme");
$("html").removeClass("blacktheme");
$("html").addClass("browntheme");
} else{
$("html").removeClass("indigotheme");
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").removeClass("blacktheme");
$("html").removeClass("indigotheme");
$("html").removeClass("greentheme");
$("html").removeClass("browntheme");
$("html").removeClass("blacktheme");
$("html").addClass(theme+"theme");
var font = localStorage.getItem("font");
if(font){
$("html").css("font-family",font);
}else{
$("html").css("font-family","");
}
}
themes();

View File

@@ -1,8 +1,203 @@
//左下のメッセージ
var todcTrigger=null;
function todo(mes){
clearInterval(todcTrigger);
$('#message').text(mes);
$('#message').fadeIn();
todcTrigger=setTimeout(todc, 4000);
}
function todc(){
$('#message').fadeOut();
}
//reverse
function bottomReverse(){
$("#bottom").toggleClass("reverse");
$(".leftside").toggleClass("reverse");
if($("#bottom").hasClass("reverse")){
localStorage.removeItem("reverse")
}else{
localStorage.setItem("reverse","true")
}
}
function tips(mode){
var electron = require("electron");
var ipc = electron.ipcRenderer;
ipc.send('endmem', "");
clearInterval(clockint);
clearInterval(spotStart);
if(mode=="ver"){
tipsToggle()
$("#tips-text").html('<img src="../../img/desk.png" width="20" onclick="todo(\'!TheDesk! It\\\'s a nice client!\')"><span style="font-size:20px">TheDesk</span> '+localStorage.getItem("ver")+'[<i class="material-icons" style="font-size:1.2rem;top: 3px;position: relative;">supervisor_account</i><span id="persons">1+</span>]')
localStorage.setItem("tips","ver")
}else if(mode=="clock"){
tipsToggle()
localStorage.setItem("tips","clock")
clock()
}else if(mode=="memory"){
tipsToggle()
localStorage.setItem("tips","memory")
startmem();
}else if(mode=="trend"){
tipsToggle()
localStorage.setItem("tips","trend")
trendTagonTip()
}else if(mode=="spotify"){
tipsToggle()
localStorage.setItem("tips","spotify")
var json=nowplaying("spotifytips")
spotifytips(json)
}
}
//メモリ
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]
$("#tips-text").html(cpu+"<br>Memory:"+Math.floor(use/1024/1024/102.4)/10+"/"+Math.floor(total/1024/1024/102.4)/10+"GB("+Math.floor(use/total*100)+"%)")
})
}
//トレンドタグ
function trendTagonTip(){
$(".trendtag").remove();
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: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if (json) {
var tags="";
json=json.score;
Object.keys(json).forEach(function(tag) {
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span><br>';
});
$("#tips-text").html('<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' + tags+'</div>');
trendTagonTipInterval()
}else{
$("#tips-text").html("");
}
});
}
//Spotify
function spotifytips(){
var start = "https://thedesk.top/now-playing?at="+localStorage.getItem("spotify")+"&rt="+localStorage.getItem("spotify-refresh");
var at = localStorage.getItem("spotify");
if(at){
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json'
}
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
var ms=json.progress_ms;
var last=1000-ms%1000;
var item=json.item;
var img=item.album.images[0].url;
var artisttxt="";
for(i=0;i<item.artists.length;i++){
if(i>0){
artisttxt=artisttxt+","+item.artists[i].name;
}else{
artisttxt=item.artists[0].name;
}
}
artisttxt=escapeHTML(artisttxt);
sleep(last);
var tms=item.duration_ms;
var per=ms/item.duration_ms*100;
ms=ms/1000;
tms=tms/1000;
var s=Math.round(ms)%60;
if(s<10){
s="0"+s;
}
var m=(Math.round(ms)-Math.round(ms)%60)/60;
var ts=Math.round(tms)%60;
if(ts<10){
ts="0"+ts;
}
var tm=(Math.round(tms)-Math.round(tms)%60)/60;
$("#tips-text").html('<div id="spot-box"><i class="material-icons pointer" onclick="spotifytips()" style="font-size:12px">refresh</i><img src="'+img+'" width="20" id="spot-img">'+escapeHTML(item.name)+'<span class="gray sml" id="spot-art">'+artisttxt+'</span><span id="spot-m">'+m+'</span>:<span id="spot-s">'+s+'</span>/'+tm+":"+ts+'</span></div><div class="progress grey"><div class="determinate spotify-prog grey lighten-2" style="width: '+per+'%" data-s="'+Math.round(ms)+'" data-total="'+item.duration_ms+'"></div></div>');
spotint=setInterval(spotStart, 1000);
});
}else{
alert(lang.lang_spotify_acct);
}
}
function spotStart(){
var total=$(".spotify-prog").attr("data-total");
var s=$(".spotify-prog").attr("data-s");
var news=s*1+1;
var per=news*100000/total;
var ns=news%60;
var nm=(news-ns)/60;
if(ns<10){
ns="0"+ns;
}
if(per>=100){
clearInterval(spotStart);
spotifytips()
}else{
$("#spot-m").text(nm);
$("#spot-s").text(ns);
}
$(".spotify-prog").attr("data-s",news);
$(".spotify-prog").css("width",per+"%");
}
function trendTagonTipInterval(){
setTimeout(trendTagonTip, 6000000);
}
//時計
var clockint;
function clock(){
var now=new Date();
var last=1000-now.getTime()%1000;
sleep(last);
clockint=setInterval(clockStart, 1000);
}
function clockStart(){
var nowTime = new Date(); // 現在日時を得る
var nowHour = nowTime.getHours(); // 時を抜き出す
if(nowHour<10){nowHour="0"+nowHour }
var nowMin = nowTime.getMinutes(); // 分を抜き出す
if(nowMin<10){nowMin="0"+nowMin }
var nowSec = nowTime.getSeconds(); // 秒を抜き出す
if(nowSec<10){nowSec="0"+nowSec }
var msg = nowTime.getFullYear()+"/"+(nowTime.getMonth()+1)+"/"+nowTime.getDate()+'<span style="font-size:20px; font-family:Open Sans">'+nowHour + ":" + nowMin + ":" + nowSec+"</span>";
$("#tips-text").html(msg);
}
function sleep(waitMsec) {
var startMsec = new Date();
while (new Date() - startMsec < waitMsec);
}
function tipsToggle(){
$("#tips").toggleClass("hide");
$("#tips-menu").toggleClass("hide");
}
if(localStorage.getItem("tips")){
tips(localStorage.getItem("tips"));
}

View File

@@ -5,40 +5,64 @@ function utl(user, more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (user == "--now") {
var user = $('#his-data').attr("user-id");
}
if (more) {
var sid = $("#his-tl .cvo").last().attr("toot-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
if(localStorage.getItem("mode_" + domain)!="misskey"){
if (more) {
var sid = $("#his-tl .cvo").last().attr("toot-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses" +
plus;
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}else{
var req={i:at}
if (more) {
var sid = $("#his-tl .cvo").last().attr("toot-id");
req.maxId=sid;
}
req.userId=user;
var start = "https://" + domain + "/api/users/notes"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses" +
plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
if(!json[0]){
templete="データはありません<br>";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = misskeyParse(json, '', acct_id, 'user');
}else{
var templete = parse(json, '', acct_id, 'user');
}
if(!json[0]){
templete=lang.lang_details_nodata+"<br>";
}
var height = $("#his-data-content").height() - 245;
$(".tab-content").css('height', height);
if (more) {
$("#his-tl-contents").append(templete);
} else {
pinutl(templete,user, acct_id)
if(localStorage.getItem("mode_" + domain)!="misskey"){
pinutl(templete,user, acct_id)
}else{
$("#his-tl-contents").html(templete);
}
}
jQuery("time.timeago").timeago();
});
@@ -49,7 +73,7 @@ function pinutl(before,user, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (user == "--now") {
var user = $('#his-data').attr("user-id");
}
@@ -68,13 +92,11 @@ function pinutl(before,user, acct_id) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
var templete = parse(json, 'pinned', acct_id,'user');
if(!json[0]){
templete="データはありません<br>";
templete="";
}
var height = $("#his-data-content").height() - 245;
$(".tab-content").css('height', height);
$("#his-tl-contents").html(templete+before);
$("#his-tl-contents").html(templete+before);
jQuery("time.timeago").timeago();
});
}
@@ -85,33 +107,55 @@ function flw(user, more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (user == "--now") {
var user = $('#his-data').attr("user-id");
}
if (more) {
var sid = $("#his-follow-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var req={i:at}
if (more) {
var sid = $("#his-follow-list .cvo").last().attr("user-id");
req.maxId=sid;
}
req.userId=user;
var start = "https://" + domain + "/api/users/following"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}else{
if (more) {
var sid = $("#his-follow-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/following" +
plus
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/following" +
plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start,i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="データはありません<br>";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = misskeyUserparse(json,'',acct_id);
}else{
var templete = userparse(json,'',acct_id);
}
if(templete==""){
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-follow-list-contents").append(templete);
@@ -129,33 +173,55 @@ function fer(user, more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (user == "--now") {
var user = $('#his-data').attr("user-id");
}
if (more) {
var sid = $("#his-follower-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var req={i:at}
if (more) {
var sid = $("#his-follower-list .cvo").last().attr("user-id");
req.maxId=sid;
}
req.userId=user;
var start = "https://" + domain + "/api/users/followers"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}else{
if (more) {
var sid = $("#his-follower-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/followers" +
plus
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}
var start = "https://" + domain + "/api/v1/accounts/" + user + "/followers" +
plus;
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = userparse(json,'',acct_id);
if(!json[0]){
templete="データはありません<br>";
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = misskeyUserparse(json,'',acct_id);
}else{
var templete = userparse(json,'',acct_id);
}
if(templete==""){
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-follower-list-contents").append(templete);
@@ -173,29 +239,51 @@ function showFav(more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if (more) {
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)!="misskey"){
if (more) {
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/favourites" + plus
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}else{
var req={i:at}
if (more) {
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
req.maxId=sid;
}
var start = "https://" + domain + "/api/i/favorites"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}
var start = "https://" + domain + "/api/v1/favourites" + plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start, i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = parse(json, '', acct_id);
if(localStorage.getItem("mode_" + domain)!="misskey"){
var templete = parse(json, '', acct_id,'user');
}else{
var templete = misskeyParse(json, '', acct_id,'user');
}
if(!json[0]){
templete="データはありません<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-fav-list-contents").append(templete);
@@ -212,28 +300,46 @@ function showMut(more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if (more) {
var sid = $("#his-muting-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var req={i:at}
if (more) {
var sid = $("#his-muting-list .cvo").last().attr("user-id");
req.maxId=sid;
}
var start = "https://" + domain + "/api/mute/list"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}else{
if (more) {
var sid = $("#his-muting-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/mutes" + plus
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}
var start = "https://" + domain + "/api/v1/mutes" + plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start,i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
if(!json[0]){
templete="データはありません<br>";
templete=lang.lang_details_nodata+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@@ -251,7 +357,11 @@ function showBlo(more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-blocking-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (more) {
var sid = $("#his-blocking-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
@@ -272,7 +382,7 @@ function showBlo(more, acct_id) {
console.error(error);
}).then(function(json) {
if(!json[0]){
templete="データはありません<br>";
templete=lang.lang_details_nodata+"<br>";
}
var templete = userparse(json,'',acct_id);
if (more) {
@@ -286,33 +396,56 @@ function showBlo(more, acct_id) {
//フォロリクリスト
function showReq(more, acct_id) {
if (!acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if (more) {
var sid = $("#his-request-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
var req={i:at}
if (more) {
var sid = $("#his-request-list .cvo").last().attr("user-id");
req.maxId=sid;
}
var start = "https://" + domain + "/following/requests/list"
var i={
method: 'POST',
headers: {
'content-type': 'application/json',
},
body:JSON.stringify(req)
}
}else{
if (more) {
var sid = $("#his-request-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/follow_requests" + plus
var i={
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
}
}
}
var start = "https://" + domain + "/api/v1/follow_requests" + plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
fetch(start,i).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
var templete = userparse(json, 'true',acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
var templete = userparse(json, 'true',acct_id);
}else{
var templete = misskeyUserparse(json, 'true',acct_id);
}
if(!json[0]){
templete="データはありません<br>";
templete=lang.lang_details_nodata+"<br>";
}
if (more) {
$("#his-request-list-contents").append(templete);
@@ -329,7 +462,11 @@ function showDom(more, acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-domain-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (more) {
var sid = $("#his-domain-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
@@ -352,7 +489,7 @@ function showDom(more, acct_id) {
}).then(function(json) {
var templete = "";
if(!json[0]){
templete="データはありません<br>";
templete=lang.lang_details_nodata+"<br>";
}
Object.keys(json).forEach(function(key) {
var domain = json[key];
@@ -370,3 +507,94 @@ function showDom(more, acct_id) {
});
}
//フォローレコメンデーションリスト
function showFrl(more, acct_id) {
if (!acct_id) {
var acct_id = $('#his-data').attr("use-acct");
}
var domain = localStorage.getItem("domain_" + acct_id);
if(localStorage.getItem("mode_" + domain)=="misskey"){
$("#his-follow-recom-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
return false;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (more) {
var sid = $("#his-follow-recom-list .cvo").last().attr("user-id");
var plus = "?max_id=" + sid;
} else {
var plus = "";
}
var start = "https://" + domain + "/api/v1/suggestions" + plus
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function(response) {
return response.json();
}).catch(function(error) {
$("#his-follow-recom-contents").html(lang.lang_details_nodata+"("+lang.lang_hisdata_frcreq+")<br>");
console.error(error);
}).then(function(json) {
console.log(json);
if(!json[0]){
console.log("No data");
templete=lang.lang_details_nodata+"("+lang.lang_hisdata_frcwarn+")<br>";
}else{
var templete = userparse(json,'',acct_id);
}
if (more) {
$("#his-follow-recom-contents").append(templete);
} else {
$("#his-follow-recom-contents").html(templete);
}
});
}
//ユーザーマッチングリスト
function showMat() {
$("#his-matching-list-contents").html(lang.lang_hisdata_taketime);
var full=$("#his-acct").attr("fullname");
var acct_id=$("#his-data").attr("use-acct");
full=full.split("@");
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: {
'content-type': 'application/json'
},
//body: JSON.stringify({})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
var templete="";
Object.keys(json).forEach(function(key) {
var user = json[key];
templete = templete +
'<div class="" style="padding-top:5px;">' +
'<div style="padding:0; margin:0; width:400px; max-width:100%; display:flex; align-items:flex-end;">' +
'<div style="flex-basis:40px;"><a onclick="udgEx(\'' + user.user + '\',' +
acct_id + ');" user="' + user.user + '" class="udg">' +
'<img src="' + user.avatar + '" width="40" class="prof-img" user="' + user.user + '"></a></div>' +
'<div style="flex-grow:3; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"><big>' +
escapeHTML(user.screen_name) + '</big></div>' +
'<div class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
user.user + '@'+user.host+'</div>' +
'</div>' +
'<div class="divider"></div>' +
'</div>' +
'</div>';
});
$("#his-matching-list").css("height",$("#his-float-data").height()-$("#his-basic-prof").height()-$("#his-des").height()-$("#his-plus-action").height()+"px");
$("#his-matching-list-contents").html(templete);
});
}

View File

@@ -4,7 +4,7 @@ function profedit() {
var acct_id = $('#his-data').attr("use-acct");
todo("Updating...");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/update_credentials";
var name = $("#his-name-val").val();
var des = $("#his-des-val").val();
@@ -15,7 +15,7 @@ function profedit() {
httpreq.responseType = 'json';
httpreq.send(JSON.stringify({
display_name: name,
note: des
note: des,
}));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
@@ -41,7 +41,7 @@ function imgChange(imgfile, target) {
var fd = new FormData();
fd.append(target, blob);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/update_credentials";
var httpreq = new XMLHttpRequest();
httpreq.open('PATCH', start, true);

View File

@@ -6,7 +6,7 @@ if(location.search){
var mode=m[1];
var codex=m[2];
if(mode=="user"){
udgEx(codex,0);
udgEx(codex,'main');
}
}
function udgEx(user,acct_id){
@@ -16,9 +16,13 @@ function udgEx(user,acct_id){
if(acct_id=="selector"){
acct_id = $("#user-acct-sel").val();
}
if(acct_id=="main"){
acct_id = localStorage.getItem("main");
}
console.log(user);
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+user
fetch(start, {
method: 'GET',
@@ -32,8 +36,15 @@ function udgEx(user,acct_id){
todo(error);
console.error(error);
}).then(function(json) {
var id=json.accounts[0].id;
udg(id,acct_id);
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);
}
});
return;
}
@@ -45,7 +56,11 @@ function udg(user, acct_id) {
}
todo("User Data Loading...");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
if(localStorage.getItem("mode_" + domain)=="misskey"){
misskeyUdg(user, acct_id)
return;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/" + user;
console.log(start);
fetch(start, {
@@ -60,6 +75,7 @@ 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);
@@ -70,9 +86,9 @@ function udg(user, acct_id) {
//moved設定時
if (json.moved) {
Materialize.toast(
'このアカウントは移行します<button class="btn-flat toast-action" onclick="udg(\"' +
json.moved + ','+acct_id+'\")">移行先を見る</button>', 4000)
} else {
lang.lang_showontl_movetxt+'<button class="btn-flat toast-action" onclick="udg(\'' +
json.moved.id + '\',\''+acct_id+'\')">'+lang.lang_showontl_movebtn+'</button>', 4000)
}
$('#his-data').modal('open');
$('#his-data').attr("user-id", user);
$('#his-data').attr("use-acct", acct_id);
@@ -87,7 +103,27 @@ function udg(user, acct_id) {
utl(json.id, '', acct_id);
flw(json.id, '', acct_id);
fer(json.id, '', acct_id);
$("#his-name").text(json.display_name);
var dis_name=escapeHTML(json.display_name);
dis_name=twemoji.parse(dis_name);
var note=json.note;
if(json.emojis){
var actemojick = json.emojis[0];
}else{
var actemojick=false;
}
//絵文字があれば
if (actemojick) {
Object.keys(json.emojis).forEach(function(key5) {
var emoji = json.emojis[key5];
var shortcode = emoji.shortcode;
var emoji_url = '<img src="' + emoji.url +
'" class="emoji-img" data-emoji="'+shortcode+'">';
var regExp = new RegExp(":" + shortcode + ":", "g");
dis_name = dis_name.replace(regExp, emoji_url);
note = note.replace(regExp, emoji_url);
});
}
$("#his-name").html(dis_name);
$("#his-acct").text(json.acct);
$("#his-acct").attr("fullname",fullname);
$("#his-prof").attr("src", json.avatar);
@@ -96,23 +132,29 @@ function udg(user, acct_id) {
$("#his-follow").text(json.following_count);
$("#his-follower").text(json.followers_count);
$("#his-since").text(crat(json.created_at));
$("#his-openin").attr("data-href", json.url);
if(json.fields){
if(json.fields.length>0){
var note=json.note+'My Fields<br><table style="vertical-align: baseline; text-align:center; padding:0;">'
note=note+'<table id="his-field">'
for(var i=0;i<json.fields.length;i++){
var fname=json.fields[i].name;
var fval=json.fields[i].value;
note=note+'<tr style="height:1.5rem; padding:0;"><td style="height:1.5rem; padding:0; background-color:#757575; text-align:center; ">'+fname+'</td><td style="height:1.5rem; padding:0; padding-left:5px;">'+fval+'</td></tr>';
fval=twemoji.parse(fval);
note=note+'<tr><td class="his-field-title">'+fname+'</td><td class="his-field-content">'+fval+'</td></tr>';
}
note=note+'</table>'
$("#his-des").html(note);
$("#his-des").html(twemoji.parse(note));
}else{
$("#his-des").html(json.note);
$("#his-des").html(twemoji.parse(note));
}
}else{
$("#his-des").html(json.note);
$("#his-des").html(twemoji.parse(note));
}
if(json.bot){
$("#his-bot").html(lang.lang_showontl_botacct);
}
$('#his-data').css('background-size', 'cover');
$("#his-data .tab-content").css("height",$("#his-float-timeline").height()-70+"px")
localStorage.setItem("history" , user);
//自分の時
if (json.acct == localStorage.getItem("user_"+acct_id)) {
@@ -121,7 +163,14 @@ function udg(user, acct_id) {
showMut('', acct_id);
showDom('', acct_id);
showReq('', acct_id);
showFrl('', acct_id);
$("#his-name-val").val(json.display_name);
if(json.fields.length>0){
$("#his-f1-name").val(json.fields[0].name); $("#his-f1-val").val($.strip_tags(json.fields[0].value));
$("#his-f2-name").val(json.fields[1].name); $("#his-f2-val").val($.strip_tags(json.fields[1].value));
$("#his-f3-name").val(json.fields[2].name); $("#his-f3-val").val($.strip_tags(json.fields[2].value));
$("#his-f4-name").val(json.fields[3].name); $("#his-f4-val").val($.strip_tags(json.fields[3].value));
}
var des = json.note;
des = des.replace(/<br \/>/g, "\n")
des = $.strip_tags(des);
@@ -136,11 +185,128 @@ function udg(user, acct_id) {
$(".only-his-data").hide();
} else {
relations(user, acct_id);
hisList(user,acct_id);
$(".only-my-data").hide();
$(".only-his-data").show();
}
todc();
});
}
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);
if(localStorage.getItem("mode_" + domain)!="misskey"){
udg(user, acct_id)
return;
}
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/users/show";
console.log(user);
fetch(start, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
i:at,
userId:user
})
}).then(function(response) {
return response.json();
}).catch(function(error) {
todo(error);
console.error(error);
}).then(function(json) {
console.log(json);
//一つ前のユーザーデータ
if (!localStorage.getItem("history")){
$("#his-history-btn").prop("disabled",true);
}else{
$("#his-history-btn").prop("disabled",false);
$('#his-data').attr("history", localStorage.getItem("history"));
}
$('#his-data').modal('open');
$('#his-data').attr("user-id", user);
$('#his-data').attr("use-acct", acct_id);
if(json.host){
//Remote
$('#his-data').attr("remote", "false");
var fullname=json.username+"@"+json.host;
}else{
$('#his-data').attr("remote", "false");
var fullname=json.acct+"@"+domain;
}
utl(json.id, '', acct_id);
flw(json.id, '', acct_id);
fer(json.id, '', acct_id);
if(json.name){
var dis_name=escapeHTML(json.name);
dis_name=twemoji.parse(dis_name);
}else{
var dis_name=json.name
}
$("#his-name").html(dis_name);
$("#his-acct").text(json.username);
$("#his-acct").attr("fullname",fullname);
$("#his-prof").attr("src", json.avatarUrl);
$('#his-data').css('background-image', 'url(' + json.bannerUrl + ')');
$("#his-sta").text(json.notesCount);
$("#his-follow").text(json.followingCount);
$("#his-follower").text(json.followersCount);
$("#his-since").text(crat(json.createdAt));
var note=json.description;
$("#his-des").html(twemoji.parse(note));
if(json.isCat){
$("#his-bot").html("Cat"+twemoji.parse("😺"));
}
$('#his-data').css('background-size', 'cover');
localStorage.setItem("history" , user);
//自分の時
if (json.username == localStorage.getItem("user_"+acct_id) && !json.host) {
//showFav('', acct_id);
//showMut('', acct_id);
//showReq('', acct_id);
showFrl('', acct_id);
$("#his-name-val").val(json.name);
var des = json.note;
des = nl2br(des)
des = $.strip_tags(des);
$("#his-des-val").val(des);
$("#his-follow-btn").hide();
$("#his-block-btn").hide();
$("#his-mute-btn").hide();
$("#his-notf-btn").hide();
$("#his-domain-btn").hide();
$("#his-emp-btn").hide();
$(".only-my-data").show();
$(".only-his-data").hide();
} else {
if (json.isFollowing) {
//自分がフォローしている
$("#his-data").addClass("following");
$("#his-follow-btn").text(lang.lang_status_unfollow);
hisList(user,acct_id);
}else{
$("#his-follow-btn").text(lang.lang_status_follow);
}
if (json.isFollowed) {
//フォローされてる
$("#his-relation").text(lang.lang_showontl_followed);
}
$("#his-block-btn").hide();
if (json.isMuted) {
$("#his-data").addClass("muting");
$("#his-mute-btn").text(lang.lang_status_unmute);
}else{
$("#his-mute-btn").text(lang.lang_status_mute);
}
$(".only-my-data").hide();
$(".only-his-data").show();
}
todc();
});
}
@@ -156,12 +322,13 @@ function profShow(){
var user = localStorage.getItem("user-id_"+acct_id);
console.log("user-id_"+acct_id+":"+user);
udg(user, acct_id)
hide();
}
//FF関係取得
function relations(user, acct_id) {
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem(domain + "_at");
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/accounts/relationships?id=" + user;
fetch(start, {
method: 'GET',
@@ -180,42 +347,55 @@ function relations(user, acct_id) {
if (json.following) {
//自分がフォローしている
$("#his-data").addClass("following");
$("#his-follow-btn").text("フォロー解除");
$("#his-follow-btn").text(lang.lang_status_unfollow);
hisList(user,acct_id);
}else{
$("#his-follow-btn").text("フォロー");
$("#his-follow-btn").text(lang.lang_status_follow);
}
if (json.followed_by) {
//フォローされてる
$("#his-relation").text("フォローされています");
$("#his-relation").text(lang.lang_showontl_followed);
}
if (json.blocking) {
$("#his-data").addClass("blocking");
$("#his-block-btn").text("ブロック解除");
$("#his-block-btn").text(lang.lang_status_unblock);
}else{
$("#his-block-btn").text("ブロック");
$("#his-block-btn").text(lang.lang_status_block);
}
if (json.muting) {
$("#his-data").addClass("muting");
$("#his-mute-btn").text("ミュート解除");
$("#his-mute-btn").text(lang.lang_status_unmute);
}else{
$("#his-mute-btn").text("ミュート");
$("#his-mute-btn").text(lang.lang_status_mute);
}
if (json.muting_notifications) {
$("#his-data").addClass("mutingNotf");
$("#his-notf-btn").text("通知ミュート解除");
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_unmute);
}else{
$("#his-notf-btn").text("通知ミュート");
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
}
if (json.domain_blocking) {
$("#his-data").addClass("blockingDom");
$("#his-domain-btn").text("ドメインブロック解除");
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_unblock);
}else{
$("#his-domain-btn").text("ドメインブロック");
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
}
//Endorsed
if(json.endorsed){
$("#his-end-btn").addClass("endorsed");
$("#his-end-btn").text(lang.lang_status_unendorse)
}else{
$("#his-end-btn").removeClass("endorsed");
$("#his-end-btn").text(lang.lang_status_endorse)
}
});
}
function profbrws(){
const {shell} = require('electron');
var url=$("#his-openin").attr("data-href")
shell.openExternal(url);
}
//オールリセット
function hisclose() {
$('#his-data').modal('close');
@@ -226,10 +406,12 @@ function hisclose() {
function reset(){
$(".tab-content:eq(0)").show();
$(".tab-content:gt(0)").hide();
$(".active-back").removeClass("active-back");
$(".column-first").addClass("active-back");
$("#his-name").text("Loading");
$("#his-acct").text("");
$("#his-prof").attr("src", "./img/loading.svg");
$('#his-data').css('background-image', 'url(./img/loading.svg)');
$("#his-prof").attr("src", "../../img/loading.svg");
$('#his-data').css('background-image', 'url(../../img/loading.svg)');
$("#his-sta").text("");
$("#his-follow").text("");
$("#his-follower").text("");
@@ -241,20 +423,32 @@ function reset(){
$("#his-data").removeClass("blocking");
$("#his-data").removeClass("mutingNotf");
$("#his-data").removeClass("blockingDom");
$("#his-end-btn").removeClass("endorsed");
$("#his-bot").html("");
$("#his-follow-btn").show();
$("#his-block-btn").show();
$("#his-mute-btn").show();
$("#his-notf-btn").show();
$("#his-domain-btn").show();
$("#his-emp-btn").show();
$("#his-follow-btn").text("フォロー");
$("#his-mute-btn").text("ミュート");
$("#his-block-btn").text("ブロック");
$("#his-notf-btn").text("通知ミュート");
$("#his-domain-btn").text("ドメインブロック");
$("#his-follow-btn").text(lang.lang_status_follow);
$("#his-mute-btn").text(lang.lang_status_mute);
$("#his-block-btn").text(lang.lang_status_block);
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
$("#his-relation").text("");
$(".cont-series").html("");
$("#domainblock").val("");
$("#his-lists-a").html(lang.lang_showontl_listwarn);
$("#his-lists-b").html('');
$("#his-name-val").val("");
$("#his-des-val").val("");
$("#his-f1-name").val(""); $("#his-f1-val").val("");
$("#his-f2-name").val(""); $("#his-f2-val").val("");
$("#his-f3-name").val(""); $("#his-f3-val").val("");
$("#his-f4-name").val(""); $("#his-f4-val").val("");
$("#his-endorse").html("");
$("#his-openin").attr("data-href", "");
}
$('#my-data-nav .custom-tab').on('click',function(){
var target=$(this).find("a").attr("go");

75
app/language.html Normal file
View File

@@ -0,0 +1,75 @@
<!doctype html>
<html lang="ja">
<head>
<title>Languages - TheDesk</title>
<meta content="width=device-width,initial-scale=1.0" name="viewport">
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/master.css" type="text/css" rel="stylesheet">
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans" rel="stylesheet">
<meta charset="utf-8">
</head>
<body style="max-width:100vw; width:500px; padding:10px;">
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first.js"></script>
<script type="text/javascript" src="./js/common/materialize.js"></script>
<script type="text/javascript" src="./js/lang/lang.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<h3 id="language"></h3>
<select id="language-sel" style="color:black" onchange="btn();"></select>
<button class="btn waves-effect indigo nex" style="width:100%; max-width:200px;" onclick="sel()" id="sel"></button>
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;" id="back"></a><br>
<br>
<span id="notice"></span>
<script>
//コード受信
if(location.search){
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)/);
var mode=m[1];
if(mode=="redirect"){
if(localStorage.getItem("lang")){
changelang(localStorage.getItem("lang"))
}
}
}
var fstlang="";
var langtxt="";
var addit="";
Object.keys(lang_lang).forEach(function(i) {
if(langtxt==""){
langtxt=lang_lang[i];
$("#sel").text(lang_set[i]);
$("#back").text(lang_back[i]);
}else{
langtxt=langtxt+"/"+lang_lang[i];
}
addit=addit+"<br>"+lang_langadd[i];
var loc=lang_langlocale[i];
$("#language-sel").append('<option value="'+i+'">'+loc+'</option>');
});
$("#language").text(langtxt)
$("#notice").html(addit)
$('select').material_select('update');
function sel(){
var val=$("#language-sel").val();
changelang(val);
}
function changelang(val){
var electron = require("electron");
var ipc = electron.ipcRenderer;
localStorage.setItem("lang",val);
ipc.send('lang', val);
ipc.on('langres', function (event, arg) {
location.href="index.html";
})
}
function btn(){
var val=$("#language-sel").val();
$("#sel").text(lang_set[val]);
$("#back").text(lang_back[val]);
}
</script>
<script type="text/javascript" src="./js/platform/end.js"></script>

View File

@@ -8,28 +8,22 @@ var Jimp = require("jimp");
const shell = electron.shell;
const os = require('os')
const path = require('path')
const fm = require('font-manager');
const Menu=electron.Menu
var updatewin=null;
const join = require('path').join;
// アプリケーションをコントロールするモジュール
const app = electron.app;
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
const WindowsToaster = require('node-notifier').WindowsToaster;
var notifier = new WindowsToaster({
withFallback: false, // Fallback to Growl or Balloons?
customPath: void 0 // Relative path if you want to use your fork of toast.exe
});
}
// ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow;
const {
download
} = require('electron-dl');
const join = require('path').join;
// メインウィンドウはGCされないようにグローバル宣言
let mainWindow;
var info_path = join(app.getPath("userData"), "window-size.json");
var max_info_path = join(app.getPath("userData"), "max-window-size.json");
var lang_path=join(app.getPath("userData"), "language");
var tmp_img = join(app.getPath("userData"), "tmp.png");
var window_size;
try {
@@ -40,6 +34,18 @@ try {
height: 750
}; // デフォルトバリュー
}
var max_window_size;
try {
max_window_size = JSON.parse(fs.readFileSync(max_info_path, 'utf8'));
} catch (e) {
max_window_size = {
width: "string",
height: "string",
x: "string",
y: "string"
}; // デフォルトバリュー
}
// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
@@ -53,11 +59,22 @@ function createWindow() {
var platform=process.platform;
var bit=process.arch;
if(platform=="linux"){
var arg={width:window_size.width,height:window_size.height,icon: __dirname + '/thedesk.ico'}
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,icon: __dirname + '/desk.png'}
}else{
var arg=window_size
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
}
mainWindow = new BrowserWindow(arg);
try {
var lang = fs.readFileSync(lang_path, 'utf8');
} catch (e) {
var lang=app.getLocale();
if(~lang.indexOf("ja")){
lang="ja";
}else{
lang="en";
}
fs.writeFileSync(lang_path,lang);
}
electron.session.defaultSession.clearCache(() => {})
if(process.argv){
if(process.argv[1]){
@@ -65,24 +82,42 @@ function createWindow() {
if(m){
var mode=m[1];
var code=m[2];
mainWindow.loadURL('file://' + __dirname + '/index.html?mode='+mode+'&code='+code);
var plus='?mode='+mode+'&code='+code;
}else{
//mainWindow.loadURL('file://' + __dirname + '/index.html?mode=share&code=日本語');
mainWindow.loadURL('file://' + __dirname + '/index.html');
var plus="";
}
}else{
mainWindow.loadURL('file://' + __dirname + '/index.html');
var plus="";
}
}else{
mainWindow.loadURL('file://' + __dirname + '/index.html');
var plus="";
}
mainWindow.loadURL('file://' + __dirname + '/view/'+lang+'/index.html'+plus);
if(!window_size.x && !window_size.y){
mainWindow.center();
}
if(window_size.max){
mainWindow.maximize();
}
// ウィンドウが閉じられたらアプリも終了
mainWindow.on('closed', function() {
mainWindow = null;
});
mainWindow.on('close', function() {
fs.writeFileSync(info_path, JSON.stringify(mainWindow.getBounds()));
if(
max_window_size.width==mainWindow.getBounds().width &&
max_window_size.height==mainWindow.getBounds().height &&
max_window_size.x==mainWindow.getBounds().x &&
max_window_size.y==mainWindow.getBounds().y
){
var size={width:mainWindow.getBounds().width,height:mainWindow.getBounds().height,x:mainWindow.getBounds().x,y:mainWindow.getBounds().y,max:true}
}else{
var size={width:mainWindow.getBounds().width,height:mainWindow.getBounds().height,x:mainWindow.getBounds().x,y:mainWindow.getBounds().y}
}
fs.writeFileSync(info_path, JSON.stringify(size));
});
mainWindow.on('maximize', function() {
fs.writeFileSync(max_info_path, JSON.stringify(mainWindow.getBounds()));
});
// Create the Application's main menu
var template = [{
@@ -90,7 +125,8 @@ function createWindow() {
submenu: [
{ label: "TheDeskについて", click: function() { about(); } },
{ type: "separator" },
{ label: "終了", accelerator: "Command+Q", click: function() { app.quit(); }}
{ label: "終了", accelerator: "Command+Q", click: function() { app.quit(); }}
]}, {
label: "編集",
submenu: [
@@ -101,7 +137,37 @@ function createWindow() {
{ label: "コピー", accelerator: "CmdOrCtrl+C", selector: "copy:" },
{ label: "貼り付け", accelerator: "CmdOrCtrl+V", selector: "paste:" },
{ label: "すべて選択", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
]}
]},{
label: "表示",
submenu: [
{
label: 'Toggle Developer Tools',
accelerator: 'Alt+Command+I',
click: function() { mainWindow.toggleDevTools(); }
},
{
label: '再読み込み',
accelerator: 'CmdOrCtrl+R',
click: function() { mainWindow.webContents.send('reload', " "); }
}
]
},
{
label: 'ウィンドウ',
role: 'window',
submenu: [
{
label: '最小化',
accelerator: 'CmdOrCtrl+M',
role: 'minimize'
},
{
label: '閉じる',
accelerator: 'CmdOrCtrl+W',
role: 'close'
},
]
}
];
var platform=process.platform;
var bit=process.arch;
@@ -120,25 +186,39 @@ ipc.on('native-notf', function(e, args) {
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
const notifier = require('node-notifier')
var tmp_imge=tmp_img;
Jimp.read(args[2], function (err, lenna) {
if (err) throw err;
lenna.write(tmp_img);
if(!err && lenna){
lenna.write(tmp_img);
var tmp_imge=tmp_img;
}else{
var tmp_imge="";
}
notifier.notify({
appID: "top.thedesk",
message: args[1],
title: args[0],
sound: false,//"Bottle",
icon : tmp_img,
wait:false
}, function(error, response) {
});
icon : tmp_imge,
sound: false,
wait: true,
},
function(err, response) {
console.log(err, response)
});
});
}
});
//言語
ipc.on('lang', function(e, arg) {
fs.writeFileSync(lang_path,arg);
mainWindow.webContents.send('langres', "");
})
ipc.on('update', function(e, x, y) {
var platform=process.platform;
var bit=process.arch;
if(platform!="darwin"){
if(platform!="others"){
updatewin = new BrowserWindow({
width: 600,
height: 400,
@@ -146,102 +226,78 @@ ipc.on('update', function(e, x, y) {
"frame": false, // 枠の無いウィンドウ
"resizable": false
});
updatewin.loadURL('file://' + __dirname + '/update.html');
var lang = fs.readFileSync(lang_path, 'utf8');
updatewin.loadURL('file://' + __dirname + '/view/'+lang+'/update.html');
return "true"
}else{
return false;
}
})
ipc.on('screen', function(e, args) {
var window = new BrowserWindow({
width: args[0],
height: args[1],
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": true
});
window.loadURL('file://' + __dirname + '/screenshot.html?id='+args[2]);
window.setAlwaysOnTop(true);
window.setPosition(0, 0);
return "true"
})
//Web魚拓
ipc.on('shot', function(e, args) {
console.log(args[0]);
console.log("link:"+args[0]+" width:"+args[1]+" height:"+args[2]+" title:"+args[4]+" top:"+args[5]+" left:"+args[6]);
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\"+args[4]+"-toot.png";
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk/Screenshots/"+args[4]+"-toot.png";
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
if(args[7]==""){
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\"+args[4]+"-toot.png";
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk/Screenshots/"+args[4]+"-toot.png";
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
}
}else{
var folder=args[7];
var dir=folder+args[4]+"-toot.png";
}
Jimp.read(Buffer.from( args[3],'base64'), function (err, lenna) {
if (err) throw err;
lenna.crop( 0, 0, args[1], args[2] ).write(dir);
lenna.crop( args[6], args[5], args[1], args[2] ).write(dir);
});
shell.showItemInFolder(folder);
})
ipc.on('shot-img-dl', (e, args) => {
Jimp.read(args[0], function (err, lenna) {
if (err) throw err;
if(args[1]==""){
if(process.platform=="win32"){
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
}else if(process.platform=="linux" || process.platform=="darwin" ){
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
}
}else{
var folder=args[2];
}
lenna.write(folder+args[1]);
});
});
})
//アプデDL
ipc.on('download-btn', (e, args) => {
//console.log(args[1]);
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
if(bit=="x64"){
var zip="TheDesk-win32-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-win32-ia32.zip";
}
}else if(platform=="linux" || platform=="darwin" ){
const options = {
type: 'info',
title: 'Linux Supporting System',
message: "thedesk.topをブラウザで開きます。",
buttons: ['OK']
}
dialog.showMessageBox(options, function(index) {
shell.openExternal("https://thedesk.top");
})
return;
if(bit=="x64"){
var zip="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-linux-ia32.zip";
}
}
var ver=args[1];
if(args[0]=="true"){
dialog.showSaveDialog(null, {
title: '保存',
properties: ['openFile', 'createDirectory'],
defaultPath: zip
title: 'Save',
defaultPath: app.getPath('home')+"/"+args[1]
}, (savedFiles) => {
console.log(savedFiles);
if(!savedFiles){
return false;
}
var m = savedFiles.match(/(.+)\\(.+)$/);
if(platform=="win32"){
var m = savedFiles.match(/(.+)\\(.+)$/);
}else{
var m = savedFiles.match(/(.+)\/(.+)$/);
}
//console.log(m);
if(isExistFile(savedFiles)){
fs.statSync(savedFiles);
fs.unlink(savedFiles);
fs.unlinkSync(savedFiles);
}
console.log(m[1]+":"+savedFiles)
dl(ver,m[1],savedFiles);
dl(args[0],args[1],m[1]);
});
}else{
dl(ver);
}
});
function isExistFile(file) {
try {
@@ -251,38 +307,10 @@ function isExistFile(file) {
if(err.code === 'ENOENT') return false
}
}
function dl(ver,files,fullname){
console.log(files);
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
if(bit=="x64"){
var zip="TheDesk-win32-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-win32-ia32.zip";
}
}else if(platform=="linux"){
if(bit=="x64"){
var zip="TheDesk-linux-x64.zip";
}else if(bit=="ia32"){
var zip="TheDesk-linux-ia32.zip";
}
}
zip=zip+"?"+ver;
var l = 8;
// 生成する文字列に含める文字セット
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var cl = c.length;
var r = "";
for(var i=0; i<l; i++){
r += c[Math.floor(Math.random()*cl)];
}
zip=zip+r;
function dl(url,file,dir){
updatewin.webContents.send('mess', "ダウンロードを開始します。");
const opts = {
directory:files,
directory:dir,
openFolderWhenDone: true,
onProgress: function(e) {
updatewin.webContents.send('prog', e);
@@ -290,10 +318,11 @@ function dl(ver,files,fullname){
saveAs: false
};
download(BrowserWindow.getFocusedWindow(),
'https://dl.thedesk.top/'+zip, opts)
url, opts)
.then(dl => {
updatewin.webContents.send('mess', "ダウンロードが完了しました。");
app.quit();
})
.catch(console.error);
}
@@ -301,12 +330,15 @@ ipc.on('general-dl', (e, args) => {
var name="";
var platform=process.platform;
var bit=process.arch;
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk";
}
if(args[1]==""){
if(platform=="win32"){
var dir=app.getPath('home')+"\\Pictures\\TheDesk";
}else if(platform=="linux" || platform=="darwin" ){
var dir=app.getPath('home')+"/Pictures/TheDesk";
}
}else{
var dir=args[1];
}
mainWindow.webContents.send('general-dl-message', "ダウンロードを開始します。");
const opts = {
directory: dir,
@@ -333,13 +365,72 @@ ipc.on('about', (e, args) => {
function about(){
var ver=app.getVersion()
var window = new BrowserWindow({width: 300, height: 460,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
window.loadURL('file://' + __dirname + '/about.html?ver='+ver);
return "true"
}
//
ipc.on('itunes', (e, args) => {
console.log("Access");
if(args[0]=="set"){
var {NowPlaying,PlayerName} = require("nowplaying-node");
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = args[1];
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
fs.writeFileSync(nppath, npProvider);
}else{
var platform=process.platform;
var bit=process.arch;
if(platform=="darwin"){
const nowplaying = require("itunes-nowplaying-mac")
nowplaying.getRawData().then(function (value) {
mainWindow.webContents.send('itunes-np', value);
}).catch(function (error) {
// 非同期処理失敗。呼ばれない
console.log(error);
});
}else{
var {NowPlaying,PlayerName} = require("nowplaying-node");
var nppath=join(app.getPath("userData"), "nowplaying");
var npProvider;
try {
npProvider = fs.readFileSync(nppath, 'utf8');
} catch (e) {
npProvider="AIMP";
}
var myAIMP = new NowPlaying({
fetchCover: true,
player: PlayerName[npProvider],
});
myAIMP.update();
var path=myAIMP.getCoverPath();
if(path){
var bin = fs.readFileSync(path, 'base64');
}else{
var bin=false;
}
var value={
name:myAIMP.getTitle(),
artist:myAIMP.getArtist(),
album:myAIMP.getAlbum(),
path:bin
}
mainWindow.webContents.send('itunes-np', value);
}
}
});
ipc.on('file-select', (e, args) => {
dialog.showOpenDialog(null, {
properties: ['openFile', 'multiSelections'],
@@ -367,7 +458,7 @@ ipc.on('column-del', (e, args) => {
const options = {
type: 'info',
title: 'カラム削除',
message: "カラムを削除しますか?",
message: "カラムを削除しますか?(すべてのカラムのリンク解析がOFFになります。)",
buttons: ['いいえ', 'はい']
}
dialog.showMessageBox(options, function(index) {
@@ -385,21 +476,32 @@ ipc.on('bmp-image', (e, args) => {
});
ipc.on('nano', function (e, x, y) {
var window = new BrowserWindow({width: 300, height: 200,
var nano_info_path = join(app.getPath("userData"), "nano-window-position.json");
var window_pos;
try {
window_pos = JSON.parse(fs.readFileSync(nano_info_path, 'utf8'));
} catch (e) {
window_pos = [0,0]; // デフォルトバリュー
}
var nanowindow = new BrowserWindow({width: 350, height: 200,
"transparent": false, // ウィンドウの背景を透過
"frame": false, // 枠の無いウィンドウ
"resizable": false });
window.loadURL('file://' + __dirname + '/nano.html');
window.setAlwaysOnTop(true);
window.setPosition(0, 0);
return "true"
nanowindow.loadURL('file://' + __dirname + '/nano.html');
nanowindow.setAlwaysOnTop(true);
nanowindow.setPosition(window_pos[0], window_pos[1]);
nanowindow.on('close', function() {
fs.writeFileSync(nano_info_path, JSON.stringify(nanowindow.getPosition()));
});
return true;
})
ipc.on('adobe', (e, arg) => {
if(!arg){
const options = {
type: 'info',
title: 'Adobeフォトエディタ',
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。",
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
buttons: ['拒否', '許可','永続的に許可']
}
dialog.showMessageBox(options, function(index) {
@@ -421,6 +523,76 @@ function adobeWindow(){
});
window.loadURL('file://' + __dirname + '/adobe.html');
}
var cbTimer1;
ipc.on('startmem', (e, arg) => {
cbTimer1 = setInterval(mems, 1000);
});
ipc.on('endmem', (e, arg) => {
if(cbTimer1){
clearInterval(cbTimer1);
}
});
function mems(){
var mem=os.totalmem()-os.freemem();
if(mainWindow){
mainWindow.webContents.send('memory', [mem,os.cpus()[0].model,os.totalmem()]);
}
}
ipc.on('mkc', (e, arg) => {
var platform=process.platform;
if(platform=="linux" || platform=="win32" ){
var mkc = fs.readFileSync(__dirname + '/.tkn', 'utf8');
}else{
var mkc = "";
}
mainWindow.webContents.send('mkcr', mkc);
});
ipc.on('export', (e, args) => {
fs.writeFileSync(args[0], args[1]);
});
ipc.on('import', (e, arg) => {
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
});
//フォント
function object_array_sort(data,key,order,fn){
//デフォは降順(DESC)
var num_a = -1;
var num_b = 1;
if(order === 'asc'){//指定があれば昇順(ASC)
num_a = 1;
num_b = -1;
}
data = data.sort(function(a, b){
var x = a[key];
var y = b[key];
if (x > y) return num_a;
if (x < y) return num_b;
return 0;
});
//重複排除
var arrObj = {};
for (var i = 0; i < data.length; i++) {
arrObj[data[i]['family']] = data[i];
}
data = [];
for (var key in arrObj) {
data.push(arrObj[key]);
}
fn(data); // ソート後の配列を返す
}
ipc.on('fonts', (e, arg) => {
var fonts = fm.getAvailableFontsSync();
object_array_sort(fonts, 'family', 'asc', function(fonts_sorted){
mainWindow.webContents.send('font-list', fonts_sorted);
});
});
app.setAsDefaultProtocolClient('thedesk')
app.setAsDefaultProtocolClient('thedesk')

View File

@@ -2,17 +2,33 @@
<html>
<head>
<meta charset="utf-8">
<link href="./css/themes.css" type="text/css" rel="stylesheet">
<link href="./css/tl.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<title>TheDesk Nano</title>
<style>
body {
background-color: rgba(0, 0, 0, 0.1);
html{
-webkit-app-region: drag !important;
cursor: move !important;
width:100vw;
height:100vh;
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;}
select {
-webkit-app-region: no-drag;
}
#draghandle{
-webkit-app-region: drag;
cursor: move;
}
button {
-webkit-app-region: no-drag;
}
@@ -30,6 +46,7 @@ textarea {
}
.area-actions{display:none !important;}
.area-date_via{display:none !important;}
.area-side{display:none !important;}
/* Handle */
::-webkit-scrollbar-thumb {
-webkit-border-radius: 5px;
@@ -54,25 +71,56 @@ textarea {
</style>
</head>
<body>
<script type="text/javascript" src="./js/common/jquery.js"></script>
<script type="text/javascript" src="./js/platform/first.js"></script>
<div id="draghandle">+ここを持って移動+</div>
<span id="timeline_nano">
<select id="type-sel">
<option value="local">Local</option>
<option value="home">Home</option>
</select>
<button onclick="tl()">表示</button>
</span><br><button onclick="window.close()">終了</button><br>
<textarea id="textarea" style="width:100%; background-color:transparent"></textarea>
<input type="hidden" id="reply">
<input type="hidden" id="media">
<select id="post-acct-sel">
</select>
<button class="btn" onclick="post()">投稿</button>
<script>
//jQuery読む
window.jQuery = window.$ = require('./js/common/jquery.js');
var Hammer = require('./js/common/hammer.min.js');
$.strip_tags = function(str, allowed) {
if(!str){
return "";
}
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
.join('');
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
};
function escapeHTML(str) {
if(!str){
return "";
}
return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
</script>
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
<select id="post-acct-sel" style="max-width:150px">
</select>
<select id="type-sel" style="max-width:60px">
<option value="local">Local</option>
<option value="home">Home</option>
</select><button onclick="tl()">Show</button><button onclick="window.close()">x</button><br>
<div id="timeline_nano">
</div>
<br>
<textarea id="textarea" style="width:80%; background-color:transparent"></textarea>
<button class="btn" onclick="post()">Post</button>
<script>
if(localStorage.getItem("lang")){
var lang=localStorage.getItem("lang");
}else{
var lang="ja";
}
</script>
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
<script type="text/javascript" src="./js/post/post.js"></script>
<script type="text/javascript" src="./js/post/reply.js"></script>
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
<script type="text/javascript" src="./js/tl/parse.js"></script>
<script type="text/javascript" src="./js/ui/theme.js"></script>
<script type="text/javascript" src="./js/tl/date.js"></script>
@@ -109,4 +157,58 @@ var multi = localStorage.getItem("multi");
'</option>';
$("#post-acct-sel").append(templete);
});
function mov(){
return false;
}
function resetmv(){
return false;
}
function post(){
var acct_id=$("#post-acct-sel").val();
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = "https://" + domain + "/api/v1/statuses";
var str=$("#textarea").val();
var toot={
status: str
}
var vis = loadVis(acct_id)
toot.visibility=vis;
var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json';
httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function() {
if (httpreq.readyState == 4) {
$("#textarea").val("");
}
}
}
function loadVis(acct_id){
var vist = localStorage.getItem("vis");
console.log(vist);
if (!vist) {
return "public";
} else {
if (vist == "memory") {
var memory = localStorage.getItem("vis-memory-"+acct_id);
if (!memory) {
memory = "public";
}
return memory;
} else if(vist == "server") {
var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi);
var memory = obj[acct_id]["vis"];
if (!memory) {
memory = "public";
}
return memory;
} else {
return vist;
}
}
}
</script>

15
app/node_modules/.bin/mime generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../mime/cli.js" "$@"
ret=$?
else
node "$basedir/../mime/cli.js" "$@"
ret=$?
fi
exit $ret

7
app/node_modules/.bin/mime.cmd generated vendored
View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\mime\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\mime\cli.js" %*
)

15
app/node_modules/.bin/mkdirp generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@"
ret=$?
else
node "$basedir/../mkdirp/bin/cmd.js" "$@"
ret=$?
fi
exit $ret

7
app/node_modules/.bin/mkdirp.cmd generated vendored
View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\mkdirp\bin\cmd.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\mkdirp\bin\cmd.js" %*
)

15
app/node_modules/.bin/pixelmatch generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../pixelmatch/bin/pixelmatch" "$@"
ret=$?
else
node "$basedir/../pixelmatch/bin/pixelmatch" "$@"
ret=$?
fi
exit $ret

View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\pixelmatch\bin\pixelmatch" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\pixelmatch\bin\pixelmatch" %*
)

15
app/node_modules/.bin/semver generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../semver/bin/semver" "$@"
ret=$?
else
node "$basedir/../semver/bin/semver" "$@"
ret=$?
fi
exit $ret

7
app/node_modules/.bin/semver.cmd generated vendored
View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\semver\bin\semver" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\semver\bin\semver" %*
)

15
app/node_modules/.bin/sshpk-conv generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../sshpk/bin/sshpk-conv" "$@"
ret=$?
else
node "$basedir/../sshpk/bin/sshpk-conv" "$@"
ret=$?
fi
exit $ret

View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\sshpk\bin\sshpk-conv" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\sshpk\bin\sshpk-conv" %*
)

15
app/node_modules/.bin/sshpk-sign generated vendored
View File

@@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../sshpk/bin/sshpk-sign" "$@"
ret=$?
else
node "$basedir/../sshpk/bin/sshpk-sign" "$@"
ret=$?
fi
exit $ret

View File

@@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\sshpk\bin\sshpk-sign" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\sshpk\bin\sshpk-sign" %*
)

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