Compare commits

..

15 Commits

Author SHA1 Message Date
Cutls
74fe12c896 push 2019-09-13 21:54:11 +09:00
Cutls
f250d69af8 package.json 2019-09-12 23:43:10 +09:00
Cutls
25a1db84a4 Add: node_modules 2019-09-12 23:38:13 +09:00
Cutls
4769c83958 Merge branch 'master' into gh-pages 2019-09-12 23:35:42 +09:00
Cutls
a448924514 Change: PWA package.json 2019-09-12 23:30:43 +09:00
Cutls
467033a366 Merge branch 'master' into gh-pages 2019-09-12 23:28:02 +09:00
Cutls
e355d717c5 Merge: master 2019-09-12 21:21:52 +09:00
Cutls
4dcec3f240 Merge branch 'master' of https://github.com/cutls/TheDesk into gh-pages 2019-07-31 00:31:27 +09:00
Cutls
c325d4a8e7 gh-pages 2019-07-31 00:31:01 +09:00
Cutls
5f20f04c34 for pwa 2019-07-20 21:32:43 +09:00
Cutls
0e8a241bfa for pwa 2019-07-20 21:22:48 +09:00
Cutls
946862efde post message 2019-07-20 21:13:46 +09:00
Cutls
cda29e87e6 move 2019-07-20 21:11:17 +09:00
Cutls
601d4ac001 manifest 2019-07-20 21:09:24 +09:00
Cutls
c2dcd52da1 introduce PWA 2019-07-20 21:08:14 +09:00
8252 changed files with 973277 additions and 52322 deletions

2
.github/FUNDING.yml vendored
View File

@@ -5,4 +5,4 @@ patreon: cutls
open_collective: # Replace with a single Open Collective username open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: https://cutls.fanbox.cc custom: https://www.pixiv.net/fanbox/creator/28105985

9
.gitignore vendored
View File

@@ -10,19 +10,12 @@ app/.DS_Store
.vscode/* .vscode/*
enq.md enq.md
app/.tkn app/.tkn
app/node_modules
app/js/login/tkn.js app/js/login/tkn.js
app/package-lock.json
app/view/en app/view/en
app/view/ja app/view/ja
app/view/ja-KS
app/view/de app/view/de
app/view/bg app/view/bg
app/view/cs app/view/cs
app/view/ps app/view/ps
app/view/es-AR
app/view/it-IT
app/git app/git
*.code-workspace
releasenote.md
app/yarn-error.log
app/js/platform/aiscript.js

View File

@@ -3,34 +3,15 @@ os:
- linux - linux
- osx - osx
language: node_js language: node_js
env:
- YARN_GPG=no
node_js: node_js:
- '12.17.0' - '10.15.2'
cache:
yarn: true
script: node -v script: node -v
before_deploy: before_deploy:
- yarn global add electron-builder - npm install electron-builder -g
- yarn global add browserify
- cd app - cd app
- VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]') - VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
- yarn install --no-lockfile --prod - npm install
- yarn construct:store - npm run construct
- if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then mv *.dmg TheDesk-$VERSION-store.dmg;else :;fi
- if [ "$TRAVIS_OS_NAME" = "osx" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux snap:x64 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then mv *.snap TheDesk-$VERSION-store.snap;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then yarn add electron-builder;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win appx:x64 -p never ;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then mv *.appx TheDesk-$VERSION-store.appx;else :;fi
- if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
- yarn construct
- if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi - if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi
- if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi
@@ -64,5 +45,4 @@ deploy:
on: on:
repo: cutls/TheDesk repo: cutls/TheDesk
tags: true tags: true
branches: all_branches: true
only: "/^v?[0-9\\.]+/"

22
LATEST.md Normal file
View File

@@ -0,0 +1,22 @@
## For Astarte(kirishima.cloud), My Primary Instance
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
TheDesk :thedesk: Akane (16.0.1)
https://thedesk.top

8
LICENSE.md Normal file
View File

@@ -0,0 +1,8 @@
# プライバシーポリシー
* TheDeskは「開発者からのお知らせ」配信のためにサーバー(thedesk.top)に常時アクセスしています。
* 上記の接続によるユーザーの情報提供はありません。(IPアドレス等を含む)
* thedesk.topのページにおいては、Googleアナリティクスによる解析を採用しています。
* 配信についてAmazon Web Service CloudFrontを使用しています。CloudFrontにはアクセス解析機能がありますが、これの使用につきましては同プライバシーポリシーに則ります。
* 接続するインスタンスのプライバシーポリシーはAPIを通じた全てのアクションに対して有効ですので、TheDeskについてもそれらに則ります。

View File

@@ -11,10 +11,7 @@
Mastodon/Misskey client for PC(Windows/Linux/macOS) Mastodon/Misskey client for PC(Windows/Linux/macOS)
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md) オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com) Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge/?site=thedesk.top)](https://status.cutls.com)
On GitHub Releases, `-store.*` assets are made for some application store or manager(Snapcraft, Homebrew, Microsoft Store).
They do not check the latest version(Which you can get the latest ver or not depends on the store)
<a href="https://www.patreon.com/cutls"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160"></a> <a href="https://www.patreon.com/cutls"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160"></a>
<a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a> <a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
@@ -31,6 +28,7 @@ The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.o
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg) * [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico) * [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
* [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns) * [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns)
* [Illustrator .ai](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ai)
The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
@@ -49,6 +47,19 @@ The default sounds of notifications is provided [Creative Commons BY](https://cr
Crowdin project is available! Visit: https://translate.thedesk.top Crowdin project is available! Visit: https://translate.thedesk.top
## Requirement and development
* Electron 4.2 or above(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)
### Run on developer mode ### Run on developer mode
`npm run dev` on `app` folder. `npm run dev` on `app` folder.
@@ -69,10 +80,6 @@ Fellow coder
## Build ## Build
You have to use either **npm** or **yarn**. Whichever you use, it works well.
### npm
```sh ```sh
git clone https://github.com/cutls/TheDesk git clone https://github.com/cutls/TheDesk
cd TheDesk/app cd TheDesk/app
@@ -81,25 +88,8 @@ npm install --only=dev
npm run construct npm run construct
``` ```
### yarn
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
# Linux or macOS
yarn install --no-lockfile
# Windows
yarn install
yarn construct
```
run `npm run dev` or `yarn dev` to launch developer version with console(click `view`)
### electron-builder(Recommended) ### electron-builder(Recommended)
Use scripts(they can work well with npm, **yarn**). Use npm scripts.
#### npm
```sh ```sh
# Build for current platform # Build for current platform
@@ -113,21 +103,6 @@ npm run build:win
npm run build:all npm run build:all
``` ```
#### yarn
```sh
# Build for current platform
yarn build
# Select build target
## Windows
yarn build:win
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
yarn build:all
```
Config is all on package.json Config is all on package.json
### electron-packager ### electron-packager
@@ -148,17 +123,6 @@ Linux
macOS macOS
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite` `electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`
### PWA support
TheDesk is a web-based app, so you can run it on a browser. Of course, the main stream is as Electron. Some features won't work as well as Electron.
You can run `npm run build:pwa` to build as PWA, including `manifest.json` and the ServiceWorker.
**You have to rename `node_modules` to `dependencies` to run as a web application. (restricted by Netlify)**
Check the app on Chrome or Firefox: [Here](https://app.thedesk.top) (it follows the `master` branch, so not stable.)
[![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys)
## Pleroma support ## Pleroma support
Did you find a bug with Pleroma accounts? Did you find a bug with Pleroma accounts?
@@ -168,3 +132,4 @@ Please write issues to improve TheDesk affinity with Pleroma.
## Vulnerabilities when `npm i`??? ## Vulnerabilities when `npm i`???
No, if your npm says materialize-css has vulnerabilities(CVE-2019-11002/3/4), look at [here](https://github.com/Dogfalo/materialize/issues/6286) under discussion. No, if your npm says materialize-css has vulnerabilities(CVE-2019-11002/3/4), look at [here](https://github.com/Dogfalo/materialize/issues/6286) under discussion.

View File

@@ -14,8 +14,6 @@ Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge
[Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985) [Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985)
`-store.*`とあるアセットはストアやパッケージマネージャ向けのもので、アップデートの確認をソフト本体で行いません。
![Screenshots1](https://thedesk.top/img/scr1.png) ![Screenshots1](https://thedesk.top/img/scr1.png)
## ライセンス ## ライセンス
@@ -48,6 +46,19 @@ Download:[TheDesk](https://thedesk.top) [![check](https://status.cutls.com/badge
Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top Crowdinから翻訳に参加してみませんか: https://translate.thedesk.top
## 環境
* Electron 4.2以上(自分で入れて)
* electron-dl(in package.json)
* Jimp(in package.json)
* font-manager(in package.json)
* Python 2.x(自分で入れて)
* VisualC++(Windows)(自分で入れて)
* itunes-nowplaying-mac(macOS向け)(in package.json)
* node-notifier(in package.json)
* sumchecker(in package.json)
* Ability to read unformated files!(自分で入れて)
### デベロッパーモード ### デベロッパーモード
`npm run dev``app`フォルダ内で実行 `npm run dev``app`フォルダ内で実行
@@ -68,9 +79,6 @@ Linuxビルダー
## ビルド ## ビルド
npmでもyarnでも好きな方を選んでください。
### npm
```sh ```sh
git clone https://github.com/cutls/TheDesk git clone https://github.com/cutls/TheDesk
@@ -80,24 +88,8 @@ npm install --only=dev
npm run construct npm run construct
``` ```
### yarn
```sh
git clone https://github.com/cutls/TheDesk
cd TheDesk/app
# Linux or macOS
yarn install --no-lockfile
# Windows
yarn install
yarn construct
```
### electron-builder(推奨) ### electron-builder(推奨)
npm scriptsを利用します
scriptsを利用します
#### npm
```sh ```sh
# 実行している環境向けにビルド # 実行している環境向けにビルド
@@ -111,20 +103,6 @@ npm run build:win
npm run build:all npm run build:all
``` ```
#### yarn
```sh
# 実行している環境向けにビルド
yarn build
# ターゲットを指定してビルド
## Windows
yarn build:win
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
yarn build:all
```
ビルド設定はすべてpackage.jsonに記載しています。 ビルド設定はすべてpackage.jsonに記載しています。
### electron-packager(非推奨) ### electron-packager(非推奨)
@@ -147,17 +125,6 @@ Linux
macOS macOS
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite` `electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`
### PWAとして実行
TheDeskはウェブ技術を使用して作られているので、ブラウザで動かすこともできます。もちろん、Electron向けに設計されているので一部機能は動きません。
`npm run build:pwa`でビルドできます。PWAに必要な`manifest.json`やサービスワーカーなども要員されています。
**`node_modules``dependencies`にリネームしないと動きません。(Netlifyの制限です)**
ChromeまたはFirefoxでチェック: [こちら](https://app.thedesk.top) (`master`ブランチに追従しています。不安定です。)
[![Netlify Status](https://api.netlify.com/api/v1/badges/6916503b-2882-43f7-9681-ab814e6d28f9/deploy-status)](https://app.netlify.com/sites/thedesk/deploys)
## Pleromaのサポート ## Pleromaのサポート
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。 Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -1,91 +0,0 @@
.acct {
display: flex;
justify-content: space-around;
}
.card {
width: 400px;
background-color: #494949;
margin: 10px;
}
body,
html {
overflow-y: scroll;
}
#acct-list {
display: flex;
flex-wrap: wrap;
color: white;
align-items: flex-start;
}
#acct-list .btn-flat.white-text {
color: inherit !important;
}
#acct-list .btn-flat.red-text {
background-color: white !important;
}
.lts {
font-size: 150%;
}
.colorsel {
display: flex;
}
.card .colorsel div:not(.exc) {
width: 20px;
height: 20px;
}
.card .colorsel div.exc {
width: 40px;
height: 20px;
}
.first {
display: flex;
justify-content: center;
align-items: center;
}
.first .hide-first {
display: none;
}
.hide-second {
display: none;
}
.first .hide-second {
display: inline;
}
#compt {
margin-top: 20px;
margin-bottom: 50px;
border: 1px solid;
border: 1px solid;
padding: 5px;
}
#compt li {
list-style-type: disc;
margin-left: 20px;
}
#domain-list {
width: 500px;
max-width: 100%;
}
i.left {
margin-right: 5px;
}
#domain-list .title {
font-size: 1.3rem;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,149 +1,144 @@
/*トゥートボックス向けCSS*/ /*トゥートボックス向けCSS*/
#post-box { #post-box {
display: none; display: none;
position: fixed; position: fixed;
left: calc(50vw - 150px); left: calc(50vw - 150px);
top: 50vh; top: 50vh;
background-color: var(--postbox); background-color: var(--postbox);
border: thin solid gray; border: thin solid gray;
z-index: 501; z-index: 501;
max-width: 100%; max-width: 100%;
padding: 0.4rem; padding: 5px;
border-radius: 0.4rem; border-radius: 5px;
overflow: hidden; overflow: hidden;
} }
textarea { textarea {
min-height: 7.7rem !important; min-height: 100px !important;
font-family: inherit; font-family: inherit;
} }
#post-box .ui-resizable-s, #post-box .ui-resizable-s, #post-box .ui-resizable-se{
#post-box .ui-resizable-se { display: none !important;
display: none !important;
} }
.cancel { .cancel {
font-size: 0.5rem; font-size: 0.5rem;
color: gray; color: gray;
cursor: pointer; cursor: pointer;
position: absolute; position: absolute;
right: 2px; right: 2px;
top: 4px; top: 4px;
} }
.more-show { .more-show {
display: none; display: none;
} }
#drag { #drag {
width: 100%; width: 100%;
height: 100px; height: 100px;
} }
#post-btn { #post-btn {
display: none; display: none;
} }
#vis { #vis {
text-transform: capitalize; text-transform: capitalize;
} }
#cw-text { #cw-text {
display: none; display: none;
} }
#sch-box { #sch-box {
display: none; display: none;
} }
#sch-box input { #sch-box input {
width: auto; width: auto;
} }
.picker__close, .picker__close,
.picker__today, .picker__today,
.picker__clear { .picker__clear {
color: #26a69a !important; color: #26a69a !important;
} }
.cw { .cw {
display: none; display: none;
} }
.sensitive { .sensitive {
filter: blur(50px); filter: blur(50px);
} }
#emoji { #emoji {
} }
#suggest, #draft { #suggest {
max-height: 23rem; max-height: 300px;
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden;
} }
#emoji-list { #emoji-list {
width: 100%; width: 100%;
height: 15.4rem; height: 200px;
overflow-y: scroll; overflow-y: scroll;
} }
#preview-field { #preview-field {
display: none; display: none;
} }
.preview-img { .preview-img {
width: 4rem; width: 50px;
max-height: 7.6rem; max-height: 100px;
} }
.pi-wrap { .pi-wrap {
display: inline-block; display: inline-block;
width: 3.8rem; width: 50px;
max-height: 7.7rem; max-height: 100px;
} }
#default-emoji a { #default-emoji a {
color: var(--text); color: var(--color);
margin-right: 0.15rem; margin-right: 2px;
} }
.character-counter { .character-counter {
position: relative; position: relative;
top: -1.9rem; top: -25px;
} }
.trendtag { .trendtag {
overflow-y: scroll; overflow-y: scroll;
max-height: 7.7rem; max-height: 100px;
} }
#toot-btn-field { #toot-btn-field {
display: flex; display: flex;
} }
#toot-post-btn { #toot-post-btn {
width: calc(100% - 0.7rem); width: calc(100% - 10px);
padding: 0; padding: 0;
margin-top: 0.7rem; margin-top: 10px;
height: 2.7rem;
} }
#toot-sec-btn { #toot-sec-btn {
width: 2.3rem; width: 30px;
padding: 0; padding: 0;
margin-top: 0.7rem; margin-top: 10px;
} }
#left-side { #left-side {
float: left; float: left;
overflow-x: hidden; overflow-x: hidden;
height: calc(100% - 2.5rem); height: calc(100% - 32px);
} }
#right-side { #right-side {
display: none; display: none;
float: left; float: left;
width: 23rem; width: 300px;
padding: 0.4rem; padding: 5px;
overflow-x: hidden; overflow-x: hidden;
height: calc(100% - 2.5rem); height: calc(100% - 32px);
} }
#posttgl, #posttgl,#toot-post-btn {
#toot-post-btn { background-color: var(--accentbtn);
background-color: var(--active);
color: var(--text);
} }
/*mini*/ /*mini*/
.mini-post .mize { .mini-post .mize {
display: none !important; display: none !important;
} }
.mini-post #textarea { .mini-post #textarea {
padding: 0; padding: 0;
} }
.mini-post #post-box { .mini-post #post-box {
width: 15.4rem; width: 200px;
min-width: 7.7rem; min-width: 100px;
} }
.mini-post #toot-field { .mini-post #toot-field {
padding: 0; padding: 0;
} }
.mini-post #toot-btn-field { .mini-post #toot-btn-field {
padding: 0; padding: 0;
} }

View File

@@ -3,29 +3,29 @@
cursor: move; cursor: move;
user-select: none; user-select: none;
background-color: var(--modalfooter); background-color: var(--modalfooter);
margin: 0.4rem; margin: 5px;
border-radius: 0.4rem; border-radius: 5px;
color: var(--text); color: var(--color);
padding: 3px; padding: 3px;
display: grid; display: grid;
grid-template-columns: 3.3rem 1fr 4.6rem; grid-template-columns: 43px 1fr 60px;
grid-template-areas: "sorticon sorttitle sorttitle" "sorticon sortacct sortaction"; grid-template-areas: "sorticon sorttitle sorttitle" "sorticon sortacct sortaction";
} }
.sorticon { .sorticon {
grid-area: sorticon; grid-area: sorticon;
} }
.sorticon i { .sorticon i {
font-size: 3.3rem; font-size: 43px;
} }
.sorttitle { .sorttitle {
margin-left: 0.4rem; margin-left: 5px;
grid-area: sorttitle; grid-area: sorttitle;
} }
.sortacct { .sortacct {
margin-left: 0.4rem; margin-left: 5px;
grid-area: sortacct; grid-area: sortacct;
} }
.sortaction { .sortaction {
margin-left: 0.4rem; margin-left: 5px;
grid-area: sortaction; grid-area: sortaction;
} }

View File

@@ -1,22 +1,144 @@
:root { :root {
--bg: white;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: white;
--subcolor: #e0e0e0;
--box: white;
--sidebar: #eeeeee;
--shared: #cfd8dc;
--notfbox: white;
--emphasized: #81c784;
--his-data: rgba(255, 255, 255, 0.9);
--active: #e6ee9c;
--postbox: white;
--modalfooter: #fafafa;
--accentbtn: #009688;
--selected: #c0c0c0;
--selectedWithShare: #b2babd;
--gray: #757575;
}
#imagemodal {
background: url("../img/pixel.white.svg");
}
.blacktheme {
--bg: #212121; --bg: #212121;
--drag: rgba(0, 0, 0, 0.8); --drag: rgba(0, 0, 0, 0.8);
--text: white; --color: white;
--beforehover: #9e9e9e; --beforehover: #9e9e9e;
--modal: black; --modal: black;
--thirdColor: #212121; --subcolor: #212121;
--bottom: #424242; --box: #424242;
--accent: #004d40; --sidebar: #424242;
--subcolor: #333333; --shared: #004d40;
--notfbox: #333333;
--emphasized: #4e342e; --emphasized: #4e342e;
--his-data: rgba(0, 0, 0, 0.8); --his-data: rgba(0, 0, 0, 0.8);
--active: #757575;
--postbox: #424242; --postbox: #424242;
--modalfooter: #212121; --modalfooter: #212121;
--active: #3f51b5; --accentbtn: #3f51b5;
--selected: #3f3f3f; --selected: #3f3f3f;
--selectedWithShare: #003a30; --selectedWithShare: #003a30;
--gray: #cccccc; --gray: #cccccc;
} }
#imagemodal { .blacktheme #imagemodal {
background: url("../img/pixel.svg"); background: url("../img/pixel.svg");
} }
.indigotheme {
--bg: #031833;
--drag: rgba(0, 0, 0, 0.8);
--color: white;
--beforehover: #9e9e9e;
--modal: #0d1351;
--subcolor: #0d1351;
--shared: #004d40;
--box: #0d1351;
--sidebar: #0d1351;
--notfbox: #0d47a1;
--emphasized: #4e342e;
--his-data: rgba(13, 19, 81, 0.8);
--active: #757575;
--postbox: #1a237e;
--modalfooter: #031833;
--accentbtn: #00acc1;
--selected: #214f8a;
--selectedWithShare: #003a30;
--gray: #cccccc ;
}
.indigotheme #imagemodal {
background: url("../img/pixel.svg");
}
.browntheme {
--bg: #261411;
--drag: rgba(0, 0, 0, 0.8);
--color: white;
--beforehover: #9e9e9e;
--modal: #261411;
--subcolor: #4e342e;
--shared: #004d40;
--box: #4e342e;
--sidebar: #4e342e;
--notfbox: #4e342e;
--emphasized: #0d47a1;
--his-data: rgba(62, 39, 35, 0.8);
--active: #757575;
--postbox: #4e342e;
--modalfooter: #261411;
--accentbtn: #827717;
--selected: #6d352b;
--selectedWithShare: #003a30;
--gray: #cccccc;
}
.browntheme #imagemodal {
background: url("../img/pixel.svg");
}
.greentheme {
--bg: #c8e6c9;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: #81c784;
--subcolor: #a5d6a7;
--box: #81c784;
--sidebar: #c5e1a5;
--shared: #ffcc80;
--notfbox: #a5d6a7;
--emphasized: #9e9d24;
--his-data: rgba(255, 255, 255, 0.9);
--active: #e6ee9c;
--postbox: #a5d6a7;
--modalfooter: #81c784;
--accentbtn: #33691e;
--selected: #78c17a;
--selectedWithShare: #caa266;
--gray: #757575;
}
.greentheme #imagemodal {
background: url("../img/pixel.white.svg");
}
.bluetheme {
--bg: #c9e1ec;
--drag: rgba(255, 255, 255, 0.8);
--color: black;
--beforehover: #757575;
--modal: #b2ebf2;
--subcolor: #90caf9;
--box: #90caf9;
--sidebar: #b6e6f5;
--shared: #e0ffe4;
--notfbox: #90caf9;
--emphasized: #c5e1a5;
--his-data: rgba(255, 255, 255, 0.9);
--active: #b39ddb;
--postbox: #dff1ff;
--modalfooter: #2196f3;
--accentbtn: #2f7bb7;
--selected: #9dcade;
--selectedWithShare: #c1dac4;
--gray: #757575;
}
.bluetheme #imagemodal {
background: url("../img/pixel.white.svg");
}

File diff suppressed because it is too large Load Diff

View File

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

Binary file not shown.

View File

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

Before

Width:  |  Height:  |  Size: 7.8 KiB

View File

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

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 4096 4096" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g id="TheDesk">
<g id="back">
<g transform="matrix(1,0,0,1.53232,-11.8871,-1144.65)">
<rect x="1044.02" y="1686.36" width="2335.77" height="782.558" style="fill:rgba(255,255,255,0);">
<animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
</rect>
</g>
<rect x="1058.89" y="609.971" width="711.146" height="2885.69" style="fill:rgba(255,255,255,0);">
<animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
</rect>
<g transform="matrix(1.08582,0,0,1,-142.973,0)">
<rect x="1665.9" y="1021.89" width="776.607" height="2050.26" style="fill:rgba(255,255,255,0);">
<animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
</rect>
</g>
</g>
<g transform="matrix(1,0,0,0.998821,0,4.65666)" id="gray">
<rect x="678.5" y="128.48" width="450" height="3821.5" style="fill:rgb(84,82,81);"/>
</g>
<g transform="matrix(0.999978,-5.55112e-17,-2.20005e-08,0.996112,-1237.17,972.039)" id="orange">
<rect x="1915.71" y="-583.55" width="450" height="3117.62" style="fill:rgb(240,132,46);" r="3117.62">
<animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0,1915.71,-583.55" to="-60,1915.71,-583.55" dur="0.5s" repeatCount="1" fill="freeze" />
</rect>
</g>
<g transform="matrix(0.999978,5.55112e-17,-5.55112e-17,0.999978,-1236.96,-1164.58)" id="blue">
<rect x="1915.5" y="1775.41" width="450" height="3105.58" style="fill:rgb(54,76,159);" r="3117.62">
<animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0,1915.71,4881" to="60,1915.71,4881" dur="0.5s" repeatCount="1" fill="freeze" />
</rect>
</g>
<path id="cat" d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgba(0,0,0,0);">
<animate attributeName="fill" begin="0.6s" dur="0.5s" fill="freeze" values="rgba(0,0,0,0);rgba(0,0,0,1)" repeatCount="1" />
</path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,26 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg width="100%" height="100%" viewBox="0 0 4096 4096" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
<g id="TheDesk"> viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve">
<g> <style type="text/css">
<g transform="matrix(1,0,0,1.53232,-11.8871,-1144.65)"> .st0{display:none;}
<rect x="1044.02" y="1686.36" width="2335.77" height="782.558" style="fill:white;"/> .st1{fill:#FFFFFF;}
</g> .st2{fill:#545251;stroke:#040000;stroke-miterlimit:10;}
<rect x="1058.89" y="609.971" width="711.146" height="2885.69" style="fill:white;"/> .st3{fill:#F0842E;}
<g transform="matrix(1.08582,0,0,1,-142.973,0)"> .st4{fill:#364C9F;}
<rect x="1665.9" y="1021.89" width="776.607" height="2050.26" style="fill:white;"/> .st5{fill:#FFFFFF;stroke:#040000;stroke-miterlimit:10;}
</g> .st6{fill-rule:evenodd;clip-rule:evenodd;fill:#040000;}
</g> .st7{fill-rule:evenodd;clip-rule:evenodd;fill:none;}
<g transform="matrix(1,0,0,0.998821,0,4.65666)"> </style>
<rect x="678.5" y="128.48" width="450" height="3821.5" style="fill:rgb(84,82,81);"/> <g id="レイヤー_1" class="st0">
</g> </g>
<g transform="matrix(0.5,-0.866,0.862652,0.498067,224.046,2340.41)"> <g id="レイヤー_2">
<rect x="1915.71" y="-583.55" width="450" height="3117.62" style="fill:rgb(240,132,46);"/> <polyline class="st1" points="1128.5,650.67 3378,1950 3378,2137 1128.5,3432.67 "/>
</g> <rect x="678.5" y="128.48" class="st2" width="450" height="3821.5"/>
<g transform="matrix(0.5,0.866,-0.866,0.5,3757.17,-299.625)">
<rect x="1915.5" y="1555.41" width="450" height="3105.58" style="fill:rgb(54,76,159);"/> <rect x="1915.71" y="-583.55" transform="matrix(0.5 -0.866 0.866 0.5 225.753 2341.5386)" class="st3" width="450" height="3117.62"/>
</g>
<path id="cat" d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(4,0,0);"/> <rect x="1915.5" y="1555.41" transform="matrix(0.5 0.866 -0.866 0.5 3762.031 -299.6245)" class="st4" width="450" height="3105.58"/>
<rect x="0" y="0" width="4096" height="4096" style="fill:none;"/> <path class="st5" d="M714.5,2953.5"/>
</g> <path id="path1891" class="st6" d="M1592.47,2584h456.47c0-64.89-4.63-77.76-112.1-77.76c17.17-51.5,86.95-176.11,125.73-176.11
c34.31,0,75.24,1.89,75.24,80.17c0,88.87,149.56,232.16,185.82,173.7c54.04-87.12-92.91-60.55-92.91-270.65
c0-287.43,167.74-246.51,167.74-407.99c0-80.79-22.32-91.7-22.32-149.46c0-76.34,67.25-71.91,54.17-135.2
c-9.04-43.72-16.11-78.78-21.38-131.65c-3.74-37.51-4.93-77.5-43.9-75.89c-45.78,1.89-63.15,82.47-134.31,88.25
c-71.02,5.77-131.57-60.46-159.06-51c-27.25,9.38-18.68,83.32-2.52,135.83c25.4,82.54,80.79,189.86-20.2,206.02
c-100.99,16.16-274.69,32.32-399.92,197.94s-120.6,359.99-169.66,420.11C1314.72,2612.08,1146,2529.23,1146,2697.11
c0,75.16,127.35,129.27,147.55,105.03c20.2-24.24-171.62-96.46,43.01-181.78C1519.91,2547.46,1536.28,2532.58,1592.47,2584z"/>
<rect class="st7" width="4096" height="4096"/>
<path class="st1" d="M-58,1122"/>
</g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,9 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!--
TheDesk icon, Cutls P.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
-->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve"> viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve">
<style type="text/css"> <style type="text/css">

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,2 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>

Before

Width:  |  Height:  |  Size: 259 B

View File

@@ -1,8 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--
ThinkingDesk: Cutls P's icon, Cutls P.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
-->
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve"> viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve">

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@@ -1,7 +1,3 @@
<!doctype html> <script>
<html> location.href="./view/ja"
<head> </script>
<meta http-equiv=”refresh” content=”0;URL=./view/ja'” />
<script>location.href = './view/ja';</script>
</head>
</html>

View File

@@ -1,4 +1,3 @@
//@ts-check
//このソフトについて //このソフトについて
function about() { function about() {
postMessage(["sendSinmpleIpc", "about"], "*") postMessage(["sendSinmpleIpc", "about"], "*")

View File

@@ -1,204 +1,180 @@
selectedColumn = 0 selectedColumn = 0
selectedToot = 0 selectedToot = 0
$(function($) { $(function ($) {
//キーボードショートカット //キーボードショートカット
$(window).keydown(function(e) { $(window).keydown(function (e) {
var hasFocus = $('input').is(':focus') var hasFocus = $('input').is(':focus');
var hasFocus2 = $('textarea').is(':focus') var hasFocus2 = $('textarea').is(':focus');
if (document.getElementById('webview')) { if (document.getElementById("webview")) {
if ($('#webviewsel:checked').val()) { if ($("#webviewsel:checked").val()) {
var wv = false var wv = false;
} else { } else {
var wv = true var wv = true;
} }
} else { } else {
var wv = true var wv = true;
}
//Enter
if (e.keyCode === 13) {
if ($('#src').is(':focus')) {
src()
return false
}
if ($('#list-add').is(':focus')) {
makeNewList()
return false
}
} }
//Ctrl+Shift+Enter:Lgen //Ctrl+Shift+Enter:Lgen
if (event.metaKey || (event.ctrlKey && wv)) { if (event.metaKey || event.ctrlKey && wv) {
if (event.shiftKey) { if (event.shiftKey) {
if (e.keyCode === 13) { if (e.keyCode === 13) {
post('local') post('local');
return false return false;
} }
} }
} }
//Ctrl+Enter:投稿 //Ctrl+Enter:投稿
if (event.metaKey || (event.ctrlKey && wv)) { if (event.metaKey || event.ctrlKey && wv) {
if (e.keyCode === 13) { if (e.keyCode === 13) {
post() post();
return false return false;
} }
} }
//Alt+Enter:セカンダリー //Alt+Enter:セカンダリー
if (event.metaKey || (event.altKey && wv)) { if (event.metaKey || event.altKey && wv) {
if (e.keyCode === 13) { if (e.keyCode === 13) {
sec() sec();
return false return false;
} }
} }
//Esc:消す //Esc:消す
if (e.keyCode === 27 && wv) { if (e.keyCode === 27 && wv) {
hide() hide();
return false return false;
} }
//F5リロード //F5リロード
if (e.keyCode === 116 && wv) { if (e.keyCode === 116 && wv) {
location.href = 'index.html' location.href = "index.html";
return false return false;
} }
//Ctrl+Sift+C:全消し //Ctrl+Sift+C:全消し
if ((event.metaKey || event.ctrlKey) && event.shiftKey && wv) { if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
if (e.keyCode === 67) { if (e.keyCode === 67) {
clear() clear();
return false return false;
} }
} }
//Ctrl+Sift+N:NowPlaying //Ctrl+Sift+N:NowPlaying
if ((event.metaKey || event.ctrlKey) && event.shiftKey && wv) { if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
if (e.keyCode === 78) { if (e.keyCode === 78) {
show() show();
nowplaying() nowplaying()
return false return false;
} }
} }
//input/textareaにフォーカスなし時 //input/textareaにフォーカスなし時
if (!hasFocus && !hasFocus2 && wv) { if ((!hasFocus && !hasFocus2) && wv) {
if (!wv) { if (!wv) {
return true return true;
} }
//Ctrl+V:いつもの //Ctrl+V:いつもの
if (event.metaKey || event.ctrlKey) { if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 86) { if (e.keyCode === 86) {
show() show();
}
}
//Ctrl+F:検索
if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 70) {
srcBox()
} }
} }
//X:開閉 //X:開閉
if (e.keyCode === 88) { if (e.keyCode === 88) {
if (!$('#post-box').hasClass('appear')) { if (!$("#post-box").hasClass("appear")) {
show() show();
$('textarea').focus() $('textarea').focus();
} else { } else {
hide() hide();
} }
return false return false;
} }
//N:新トゥート //N:新トゥート
if (e.keyCode === 78) { if (e.keyCode === 78) {
if (!$('#post-box').hasClass('appear')) { if (!$("#post-box").hasClass("appear")) {
show() show();
} }
$('textarea').focus() $('textarea').focus();
return false return false;
} }
//Ctrl+E:全ての通知未読を既読にする //Ctrl+E:全ての通知未読を既読にする
if (event.metaKey || event.ctrlKey) { if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 69) { if (e.keyCode === 69) {
allNotfRead() allNotfRead();
return false return false;
}
}
//Ctrl+K:メニュー開閉
if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 75) {
menu()
return false
} }
} }
//Ctrl+Space:読み込み //Ctrl+Space:読み込み
if (event.metaKey || event.ctrlKey) { if (event.metaKey || event.ctrlKey) {
if (e.keyCode === 32) { if (e.keyCode === 32) {
parseColumn() parseColumn();
return false return false;
} }
} }
//Ctrl+Sift+S:設定 //Ctrl+Sift+S:設定
if ((event.metaKey || event.ctrlKey) && event.shiftKey) { if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 83) { if (e.keyCode === 83) {
location.href = 'setting.html' location.href = "setting.html";
return false return false;
} }
} }
//Ctrl+Sift+M:アカマネ //Ctrl+Sift+M:アカマネ
if ((event.metaKey || event.ctrlKey) && event.shiftKey) { if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 77) { if (e.keyCode === 77) {
location.href = 'acct.html' location.href = "acct.html";
return false return false;
} }
} }
//Ctrl+Sift+P:プロフ //Ctrl+Sift+P:プロフ
if ((event.metaKey || event.ctrlKey) && event.shiftKey) { if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode === 80) { if (e.keyCode === 80) {
profShow() profShow()
return false return false;
} }
} }
//数字:TL //数字:TL
if (event.metaKey || event.ctrlKey) { if (event.metaKey || event.ctrlKey) {
if (e.keyCode >= 49 && e.keyCode <= 57) { if (e.keyCode >= 49 && e.keyCode <= 57) {
var kz = e.keyCode - 49 var kz = e.keyCode - 49;
goColumn(kz) goColumn(kz);
return false return false;
} }
} }
//矢印:選択 //矢印:選択
if (e.code == 'ArrowLeft') { if (e.code == "ArrowLeft") {
//left //left
if ($('#imagemodal').hasClass('open')) { if ($("#imagemodal").hasClass("open")) {
imgCont('prev') imgCont('prev');
return false return false;
} }
if (selectedColumn > 0) { if (selectedColumn > 0) {
selectedColumn-- selectedColumn--
} }
tootSelector(selectedColumn, selectedToot) tootSelector(selectedColumn, selectedToot)
return false return false;
} else if (e.code == 'ArrowUp') { } else if (e.code == "ArrowUp") {
//up //up
if ($('#imagemodal').hasClass('open')) { if ($("#imagemodal").hasClass("open")) {
return false return false;
} }
if (selectedToot > 0) { if (selectedToot > 0) {
selectedToot-- selectedToot--
} }
tootSelector(selectedColumn, selectedToot) tootSelector(selectedColumn, selectedToot)
return false return false;
} else if (e.code == 'ArrowRight') { } else if (e.code == "ArrowRight") {
//right //right
if ($('#imagemodal').hasClass('open')) { if ($("#imagemodal").hasClass("open")) {
imgCont('next') imgCont('next');
return false return false;
} }
if (selectedColumn < $('.tl-box').length - 1) { if (selectedColumn < $(".tl-box").length - 1) {
selectedColumn++ selectedColumn++
} }
tootSelector(selectedColumn, selectedToot) tootSelector(selectedColumn, selectedToot)
return false return false;
} else if (e.code == 'ArrowDown') { } else if (e.code == "ArrowDown") {
//down //down
if ($('#imagemodal').hasClass('open')) { if ($("#imagemodal").hasClass("open")) {
return false return false;
} }
selectedToot++ selectedToot++
tootSelector(selectedColumn, selectedToot) tootSelector(selectedColumn, selectedToot)
return false return false;
} }
//Ctrl+U:0,0選択 //Ctrl+U:0,0選択
if (event.ctrlKey || event.metaKey) { if (event.ctrlKey || event.metaKey) {
@@ -206,30 +182,29 @@ $(function($) {
selectedToot = 0 selectedToot = 0
selectedColumn = 0 selectedColumn = 0
tootSelector(0, 0) tootSelector(0, 0)
return false return false;
} }
} }
//選択時 //選択時
if (e.keyCode == 70) { if (e.keyCode == 70) {
var id = $('.selectedToot').attr('unique-id') var id = $(".selectedToot").attr('unique-id')
var acct_id = $('#timeline_' + selectedColumn).attr('data-acct') var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
fav(id, acct_id, false) fav(id, acct_id, false)
return false return false;
} }
if (e.keyCode == 66) { if (e.keyCode == 66) {
var id = $('.selectedToot').attr('unique-id') var id = $(".selectedToot").attr('unique-id')
var acct_id = $('#timeline_' + selectedColumn).attr('data-acct') var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
rt(id, acct_id, false) rt(id, acct_id, false)
return false return false;
} }
if (e.keyCode == 82) { if (e.keyCode == 82) {
var id = $('.selectedToot').attr('unique-id') var id = $(".selectedToot").attr('unique-id')
var acct_id = $('#timeline_' + selectedColumn).attr('data-acct') var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
var ats_cm = $('.selectedToot .rep-btn').attr('data-men') var ats_cm = $('.selectedToot .rep-btn').attr("data-men")
var mode = $('.selectedToot .rep-btn').attr('data-visen') var mode = $('.selectedToot .rep-btn').attr("data-visen")
var cwTxt = $('#cw-text').val() re(id, ats_cm, acct_id, mode)
re(id, ats_cm, acct_id, mode, cwTxt) return false;
return false
} }
} }
//textareaフォーカス時 //textareaフォーカス時
@@ -238,27 +213,23 @@ $(function($) {
//C+S+(No):ワンクリ //C+S+(No):ワンクリ
if ((event.metaKey || event.ctrlKey) && event.shiftKey) { if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
if (e.keyCode >= 49 && e.keyCode <= 51) { if (e.keyCode >= 49 && e.keyCode <= 51) {
var no = e.keyCode - 48 var no = e.keyCode - 48;
if (localStorage.getItem('oks-' + no)) { if (localStorage.getItem("oks-" + no)) { $("#textarea").val($("#textarea").val() + localStorage.getItem("oks-" + no)) }
$('#textarea').val($('#textarea').val() + localStorage.getItem('oks-' + no)) return false;
}
return false
} }
} }
} }
} }
}) });
//クリアボタン //クリアボタン
$('#clear').click(function() { $("#clear").click(function () {
clear() clear();
}) });
}) });
//選択する //選択する
function tootSelector(column, toot) { function tootSelector(column, toot) {
$('.cvo').removeClass('selectedToot') $('.cvo').removeClass("selectedToot")
$('#timeline_' + column + ' .cvo') $('#timeline_' + column + ' .cvo').eq(toot).addClass("selectedToot")
.eq(toot)
.addClass('selectedToot')
var scr = $('.tl-box[tlid=' + column + ']').scrollTop() var scr = $('.tl-box[tlid=' + column + ']').scrollTop()
var elem = $('.selectedToot').offset().top var elem = $('.selectedToot').offset().top
var top = elem - $('.tl-box').height() + scr var top = elem - $('.tl-box').height() + scr
@@ -273,4 +244,4 @@ function tootSelector(column, toot) {
$('.tl-box[tlid=' + column + ']').animate({ scrollTop: to }) $('.tl-box[tlid=' + column + ']').animate({ scrollTop: to })
} }
} }
} }

View File

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

View File

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

View File

@@ -1,335 +1,320 @@
//バージョンチェッカー //バージョンチェッカー
function verck(ver, jp) { function verck(ver) {
if (store) return false localStorage.setItem("ver", ver);
console.log('%c Welcome😊 ' + ver, 'color: red;font-size:200%;') console.log("%c Welcome😊", "color: red;font-size:200%;")
$('body').addClass(localStorage.getItem('platform')) var date = new Date();
var date = new Date() var show = false
var showVer = false if (localStorage.getItem("ver") != ver && localStorage.getItem("winstore")) {
//Spotify //ちょっと削除とリンク解析の都合上アレ(s)
if (localStorage.getItem('spotify')) { //対象外のアプデ:storageが20の最初まで"Usamin (18.6.5)"
localStorage.removeItem('spotify') if (!localStorage.getItem("usamin_18_6_5_flag")) {
localStorage.removeItem('spotify-refresh') localStorage.setItem("usamin_18_6_5_flag", true)
var spDc = 'Spotify NowPlaying sysytem was changed, please re-login to Spotify' var multi = localStorage.getItem("column");
if(lang.language == 'ja') { var obj = JSON.parse(multi);
spDc = 'Spotify NowPlayingの機能が変更されたため、もう一度ログインしてください' for (var i = 0; i < obj.length; i++) {
localStorage.removeItem("card_" + i);
}
} }
Swal.fire({ //ちょっと削除とリンク解析の都合上アレ(e)
type: 'info', show = true
title: spDc, console.log("%c Thank you for your update🎉", "color: red;font-size:200%;");
}) $(document).ready(function () {
} if (localStorage.getItem("winstore")) {
//Spotify(e) $('#releasenote').modal('open');
if (localStorage.getItem('ver') != ver && localStorage.getItem('winstore')) {
showVer = true
console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
$(document).ready(function() {
if (localStorage.getItem('winstore') && !pwa) {
$('#releasenote').modal('open')
} }
verp = ver.replace('(', '') verp = ver.replace('(', '');
verp = verp.replace('.', '-') verp = verp.replace('.', '-');
verp = verp.replace('.', '-') verp = verp.replace('.', '-');
verp = verp.replace('[', '-') verp = verp.replace('[', '-');
verp = verp.replace(']', '') verp = verp.replace(']', '');
verp = verp.replace(')', '') verp = verp.replace(')', '');
verp = verp.replace(' ', '_') verp = verp.replace(' ', '_');
console.log('%c ' + verp, 'color: red;font-size:200%;') console.log("%c " + verp, "color: red;font-size:200%;");
if (lang.language == 'ja') { if (lang.language == "ja") {
$('#release-' + verp).show() $("#release-" + verp).show();
} else { } else {
$('#release-en').show() $("#release-en").show();
} }
}) });
} }
localStorage.setItem('ver', ver) if (!show) {
if (!showVer) { console.log(show)
console.log(showVer) if (date.getMonth() + 1 >= localStorage.getItem("showSupportMe") || !localStorage.getItem("showSupportMe")) {
if (
date.getFullYear() * 100 + date.getMonth() + 1 >= localStorage.getItem('showSupportMe') ||
!localStorage.getItem('showSupportMe')
) {
if (date.getMonth() == 11) { if (date.getMonth() == 11) {
var yrs = date.getFullYear() + 1 var nextmonth = 1
var nextmonth = yrs * 100 + 1
} else { } else {
var yrs = date.getFullYear() var nextmonth = date.getMonth() + 2
var nextmonth = yrs * 100 + date.getMonth() + 2
} }
if (lang.language != 'ja') { if (lang.language != "ja") {
$('#support-btm-ja').addClass('hide') $("#support-btm-ja").addClass("hide");
$('#support-btm-en').removeClass('hide') $("#support-btm-en").removeClass("hide");
} }
localStorage.setItem('showSupportMe', nextmonth) localStorage.setItem("showSupportMe", nextmonth)
$('#support-btm').removeClass('hide') $("#support-btm").removeClass("hide")
$('#support-btm').animate( $("#support-btm").animate({
{ 'bottom': '0'
bottom: '0' }, {
}, 'duration': 300
{ });
duration: 300
}
)
} }
} }
var platform = localStorage.getItem('platform') var platform = localStorage.getItem("platform");
console.log('Your platform:' + platform) console.log("Your platform:" + platform)
//if (!localStorage.getItem('winstore') && !pwa) { if (!localStorage.getItem("winstore")) {
// $('#start').css('display', 'flex') $("#start").css('display', 'flex');
//} }
if ( if (localStorage.getItem("winstore") == "brewcask" || localStorage.getItem("winstore") == "snapcraft" || localStorage.getItem("winstore") == "winstore") {
localStorage.getItem('winstore') == 'brewcask' || var winstore = true;
localStorage.getItem('winstore') == 'snapcraft' ||
localStorage.getItem('winstore') == 'winstore'
) {
var winstore = true
} else { } else {
var winstore = false var winstore = false;
} }
var l = 5 var l = 5;
// 生成する文字列に含める文字セット // 生成する文字列に含める文字セット
var c = 'abcdefghijklmnopqrstuvwxyz0123456789' var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var cl = c.length var cl = c.length;
var r = '' var r = "";
for (var i = 0; i < l; i++) { for (var i = 0; i < l; i++) {
r += c[Math.floor(Math.random() * cl)] r += c[Math.floor(Math.random() * cl)];
} }
var start = 'https://thedesk.top/ver.json' var start = "https://thedesk.top/ver.json";
fetch(start, { fetch(start, {
method: 'GET' method: 'GET'
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (mess) {
} console.table(mess);
return response.json() if (mess) {
}) var platform = localStorage.getItem("platform");
.catch(function(error) { if (platform == "darwin") {
todo(error) var newest = mess.desk_mac;
setLog(start, 'JSON', error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(mess) {
console.table(mess)
if (mess) {
//askjp_jp_ua: 2019年10月24日、mstdn.jpによるユーザーエージェントアクセス制限
if (jp && mess.jp_ua && !localStorage.getItem('askjp_jp_ua')) {
localStorage.setItem('askjp_jp_ua', true)
$('#askjp_jp_ua').removeClass('hide')
}
var platform = localStorage.getItem('platform')
if (platform == 'darwin') {
var newest = mess.desk_mac
} 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')
if (localStorage.getItem('new-ver-skip')) {
if (localStorage.getItem('next-ver') != newest) {
postMessage(['sendSinmpleIpc', 'update'], '*')
} else {
console.warn(lang.lang_version_skipver)
todo(lang.lang_version_skipver)
}
} else {
postMessage(['sendSinmpleIpc', 'update'], '*')
}
}
}
})
if (!localStorage.getItem('last-notice-id')) {
localStorage.setItem('last-notice-id', 0)
}
var start = 'https://thedesk.top/notice/index.php?since_id=' + localStorage.getItem('last-notice-id')
fetch(start, {
method: 'GET',
cors: true
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(mess) {
if (mess.length < 1) {
return false
} else { } else {
var last = localStorage.getItem('last-notice-id') var newest = mess.desk;
localStorage.setItem('last-notice-id', mess[0].ID) }
for (i = 0; i < mess.length; i++) { if (newest == ver) {
var obj = mess[i] todo(lang.lang_version_usever.replace("{{ver}}", mess.desk));
if (obj.ID * 1 <= last) { //betaかWinstoreならアプデチェックしない
break } else if (ver.indexOf("beta") != -1 || winstore) {
} else {
localStorage.removeItem("instance")
if (localStorage.getItem("new-ver-skip")) {
if (localStorage.getItem("next-ver") != newest) {
postMessage(["sendSinmpleIpc", "update"], "*")
} else { } else {
if (obj.type == 'textv2') { console.warn(lang.lang_version_skipver);
if (~obj.languages.indexOf(lang.language)) { todo(lang.lang_version_skipver);
var showVer = true }
if (obj.toot != '') { } else {
var toot = postMessage(["sendSinmpleIpc", "update"], "*")
'<button class="btn-flat toast-action" onclick="detEx(\'' + }
obj.toot + }
"','main')\">Show</button>" }
});
if (!localStorage.getItem("last-notice-id")) {
localStorage.setItem("last-notice-id", 0)
}
var start = "https://thedesk.top/notice?since_id=" + localStorage.getItem("last-notice-id");
fetch(start, {
method: 'GET'
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (mess) {
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 {
if (obj.type == "textv2") {
if (~obj.languages.indexOf(lang.language)) {
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 { } else {
var toot = '' show = false;
} }
if (obj.ver != '') { }
if (obj.ver == ver) { if (obj.domain != "") {
showVer = true var multi = localStorage.getItem("multi");
} else { if (multi) {
showVer = false show = false;
} var accts = JSON.parse(multi);
} Object.keys(accts).forEach(function (key) {
if (obj.domain != '') { var acct = accts[key];
var multi = localStorage.getItem('multi') if (acct.domain == obj.domain) {
if (multi) { show = true;
showVer = false }
var accts = JSON.parse(multi) });
Object.keys(accts).forEach(function(key) {
var acct = accts[key]
if (acct.domain == obj.domain) {
showVer = true
}
})
}
}
if (showVer) {
M.toast({
html:
escapeHTML(obj.text) +
toot +
'<span class="sml grey-text">(スライドして消去)</span>',
displayLength: 86400
})
} }
} }
if (show) {
M.toast({ html: escapeHTML(obj.text) + toot + '<span class="sml grey-text">(スライドして消去)</span>', displayLength: 86400 })
}
} }
} }
} }
} }
}) }
});
} }
var infostreaming = false var infostreaming = false;
function infowebsocket() { function infowebsocket() {
infows = new WebSocket('wss://thedesk.top/ws/') infows = new WebSocket("wss://thedesk.top/ws/");
infows.onopen = function(mess) { infows.onopen = function (mess) {
console.log([tlid, ':Connect Streaming Info:', mess]) console.log([tlid, ":Connect Streaming Info:", mess]);
infostreaming = true infostreaming = true;
} }
infows.onmessage = function(mess) { infows.onmessage = function (mess) {
console.log([tlid, ':Receive Streaming:', JSON.parse(mess.data)]) console.log([tlid, ":Receive Streaming:", JSON.parse(mess.data)]);
var obj = JSON.parse(mess.data) var obj = JSON.parse(mess.data);
if (obj.type != 'counter') { if (obj.type != "counter") {
if (obj.type == 'textv2') { if (obj.type == "textv2") {
if (~obj.languages.indexOf(lang.language)) { if (~obj.languages.indexOf(lang.language)) {
localStorage.setItem('last-notice-id', obj.id) localStorage.setItem("last-notice-id", obj.id)
var showVer = true var show = true;
if (obj.toot != '') { if (obj.toot != "") {
var toot = var toot = '<button class="btn-flat toast-action" onclick="detEx(\'' + obj.toot + '\',\'main\')">Show</button>';
'<button class="btn-flat toast-action" onclick="detEx(\'' +
obj.toot +
"','main')\">Show</button>"
} else { } else {
var toot = '' var toot = "";
} }
if (obj.ver != '') { if (obj.ver != "") {
if (obj.ver == ver) { if (obj.ver == ver) {
showVer = true show = true;
} else { } else {
showVer = false show = false;
} }
} }
if (obj.domain != '') { if (obj.domain != "") {
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
if (multi) { if (multi) {
showVer = false show = false;
var accts = JSON.parse(multi) var accts = JSON.parse(multi);
Object.keys(accts).forEach(function(key) { Object.keys(accts).forEach(function (key) {
var acct = accts[key] var acct = accts[key];
if (acct.domain == obj.domain) { if (acct.domain == obj.domain) {
showVer = true show = true;
} }
}) });
} }
} }
if (showVer) { if (show) {
console.log(obj.text) console.log(obj.text)
console.log(escapeHTML(obj.text)) console.log(escapeHTML(obj.text))
M.toast({ M.toast({ html: escapeHTML(obj.text) + toot + '<span class="sml grey-text">(スライドして消去)</span>', displayLength: 86400 })
html:
escapeHTML(obj.text) +
toot +
'<span class="sml grey-text">(スライドして消去)</span>',
displayLength: 86400
})
} }
} }
} }
} else { } else {
$('#persons').text(obj.text) $("#persons").text(obj.text);
} }
} }
infows.onerror = function(error) { infows.onerror = function (error) {
infostreaming = false infostreaming = false;
console.error('Error closing:info') console.error("Error closing:info");
console.error(error) console.error(error);
return false return false;
} };
infows.onclose = function() { infows.onclose = function () {
infostreaming = false infostreaming = false;
console.error('Closing:info') console.error("Closing:info");
} };
} }
setInterval(function() { setInterval(function () {
if (!infostreaming) { if (!infostreaming) {
console.log('try to connect to base-streaming') console.log("try to connect to base-streaming")
infowebsocket() infowebsocket();
} }
}, 10000) }, 10000);
function openRN() { function openRN() {
$('#releasenote').modal('open') $('#releasenote').modal('open');
if (lang.language == 'ja') { if (lang.language == "ja") {
verp = ver.replace('(', '') verp = ver.replace('(', '');
verp = verp.replace('.', '-') verp = verp.replace('.', '-');
verp = verp.replace('.', '-') verp = verp.replace('.', '-');
verp = verp.replace('[', '-') verp = verp.replace('[', '-');
verp = verp.replace(']', '') verp = verp.replace(']', '');
verp = verp.replace(')', '') verp = verp.replace(')', '');
verp = verp.replace(' ', '_') verp = verp.replace(' ', '_');
$('#release-' + verp).show() $("#release-" + verp).show();
} else { } else {
$('#release-en').show() $("#release-en").show();
} }
} }
function closeSupport() { function closeSupport() {
$('#support-btm').animate( $("#support-btm").animate({
{ 'bottom': '-300px'
bottom: '-300px' }, {
}, 'duration': 300,
{ 'complete': function () {
duration: 300, $("#support-btm").addClass("hide")
complete: function() {
$('#support-btm').addClass('hide')
} }
});
}
function storeDialog(platform, ver) {
if (platform == "win32") {
var mes = lang.lang_version_platform;
} else if (platform == "linux") {
var mes = lang.lang_version_platform_linux;
} else if (platform == "darwin") {
var mes = lang.lang_version_platform_mac;
}
Swal.fire({
title: "Select your platform",
text: mes,
type: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#3085d6',
confirmButtonText: lang.lang_no,
cancelButtonText: lang.lang_yesno
}).then((result) => {
//逆にしてる
if (!result.value) {
localStorage.setItem("winstore", "winstore")
} else {
localStorage.setItem("winstore", "localinstall")
} }
) localStorage.setItem("ver", ver);
show = true
console.log("%c Thank you for your update🎉", "color: red;font-size:200%;");
$(document).ready(function () {
$('#releasenote').modal('open');
verp = ver.replace('(', '');
verp = verp.replace('.', '-');
verp = verp.replace('.', '-');
verp = verp.replace('[', '-');
verp = verp.replace(']', '');
verp = verp.replace(')', '');
verp = verp.replace(' ', '_');
console.log("%c " + verp, "color: red;font-size:200%;");
if (lang.language == "ja") {
$("#release-" + verp).show();
} else {
$("#release-en").show();
}
});
})
} }
function closeStart() { function closeStart() {
$('#start').css('display', 'none') $("#start").css('display', 'none');
var platform = localStorage.getItem('platform') var platform = localStorage.getItem("platform");
var ver = localStorage.getItem('ver') var ver = localStorage.getItem("ver");
} storeDialog(platform, ver)
}

View File

@@ -1,105 +1,84 @@
var defaultemojiList = ['activity', 'flag', 'food', 'nature', 'object', 'people', 'place', 'symbol'] var defaultemojiList = ["activity", "flag", "food", "nature", "object", "people", "place", "symbol"];
var defaultemoji = { var defaultemoji = {
activity: activity, activity: activity,
flag: flag, flag: flag,
food: food, food: food,
nature: nature, nature: nature,
object: object, object: object,
people: people, people: people,
place: place, place: place,
symbol: symbol symbol: symbol
} };
if (lang == 'ja') { if (lang == "ja") {
var defaultemojiname = { var defaultemojiname = {
activity: '活動', activity: "活動",
flag: '国旗', flag: "国旗",
food: '食べ物', food: "食べ物",
nature: '自然', nature: "自然",
object: 'もの', object: "もの",
people: 'ひと', people: "ひと",
place: '場所', place: "場所",
symbol: '記号' symbol: "記号"
} };
} else { } else {
var defaultemojiname = { var defaultemojiname = {
activity: 'Activities', activity: "Activities",
flag: 'Flags', flag: "Flags",
food: 'Foods', food: "Foods",
nature: 'Nature', nature: "Nature",
object: 'Tools', object: "Tools",
people: 'People', people: "People",
place: 'Places', place: "Places",
symbol: 'Symbols' symbol: "Symbols"
} };
} }
function defaultEmoji(target) { function defaultEmoji(target) {
var announcement = false var json = defaultemoji[target];
if ($('#media').val() == 'announcement') { var emojis = "";
announcement = true Object.keys(json).forEach(function (key) {
} var emoji = json[key];
var json = defaultemoji[target] 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>';
var emojis = '' });
Object.keys(json).forEach(function(key) { $("#emoji-list").html(emojis);
var emoji = json[key] $("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}", defaultemojiname[target]));
if (announcement) { $(".emoji-control").addClass("hide");
var def = `<a onclick="emojiReactionDef('${emoji['shortcode']}')" class="pointer">`
} else {
var def = `<a onclick="defEmoji('${emoji['shortcode']}')" class="pointer">`
}
emojis =
emojis +
`${def}
<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(lang.lang_defaultemojis_text.replace('{{cat}}', defaultemojiname[target]))
$('.emoji-control').addClass('hide')
} }
function customEmoji() { function customEmoji() {
$('#emoji-suggest').val('') $("#emoji-suggest").val("");
$('.emoji-control').removeClass('hide') $(".emoji-control").removeClass("hide");
emojiList('home') emojiList('home')
} }
function defEmoji(target) { function defEmoji(target) {
var selin = $('#textarea').prop('selectionStart') var selin = $("#textarea").prop('selectionStart');
if (!selin) { if (!selin) {
selin = 0 selin = 0;
} }
var emojiraw = newpack.filter(function(item, index) { var emojiraw = newpack.filter(function (item, index) {
if (item.short_name == target) return true if (item.short_name == target) return true;
}) });
var hex = emojiraw[0].unified.split('-') var hex = emojiraw[0].unified.split("-");
if (hex.length === 2) { if (hex.length === 2) {
emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1]) emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1]);
} else { } else {
emoji = twemoji.convert.fromCodePoint(hex[0]) emoji = twemoji.convert.fromCodePoint(hex[0]);
} }
var now = $('#textarea').val() var now = $("#textarea").val();
var before = now.substr(0, selin) var before = now.substr(0, selin);
var after = now.substr(selin, now.length) var after = now.substr(selin, now.length);
newt = before + emoji + after newt = before + emoji + after;
$('#textarea').val(newt) $("#textarea").val(newt);
$('#textarea').focus() $("#textarea").focus();
} }
function faicon() { function faicon() {
var json = faicons var json = faicons;
var emojis = '' var emojis = "";
Object.keys(json).forEach(function(key) { Object.keys(json).forEach(function (key) {
var emoji = json[key] var emoji = json[key];
var eje = emoji.replace(/fa-/g, '') var eje = emoji.replace(/fa-/g, "");
emojis = emojis = emojis + '<a onclick="emojiInsert(\'[faicon]' + eje + '[/faicon]\')" class="pointer white-text" style="font-size:24px"><i class="fa ' + emoji + '"></i></a>';
emojis + });
'<a onclick="emojiInsert(\'[faicon]' + $("#emoji-list").html(emojis);
eje + $("#now-emoji").text("faicon");
'[/faicon]\')" class="pointer white-text" style="font-size:24px"><i class="fa ' + $(".emoji-control").addClass("hide");
emoji + }
'"></i></a>'
})
$('#emoji-list').html(emojis)
$('#now-emoji').text('faicon')
$('.emoji-control').addClass('hide')
}

View File

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

View File

@@ -0,0 +1,3 @@
const JSON5 = require('json5')
const fs = require("fs")
fs.writeFileSync("main.json", JSON.stringify(JSON5.parse(fs.readFileSync("lang." + process.argv[2] + ".js", 'utf8').replace("var lang = ", ""))))

247
app/js/lang/lang.bg.js Normal file
View File

@@ -0,0 +1,247 @@
var lang={
"language": "en",
"lang_toot": "Раздумай",
"lang_there": "Да",
"lang_nothing": "Няма",
"lang_yesno": "Да",
"lang_no": "Не",
"lang_progress": "Изчакайте...",
"lang_edit": "Редактиране",
"lang_del": "Изтрий",
"lang_add": "Добави",
"lang_fatalerroroccured": "Възникнаха някои грешки, моля рестартирайте Desk.",
"lang_speech": "Google US English",
"lang_lang": "Език",
"lang_langlocale": "Английски",
"lang_back": "Назад",
"lang_set": "Задай",
"lang_langadd": "Преведете TheDesk на други езици или проверете TheDesk на <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\"> GitHub </a>. TheDesk се нуждае от вашата помощ.",
"lang_time_prefixAgo": null,
"lang_time_prefixFromNow": null,
"lang_time_suffixAgo": null,
"lang_time_suffixFromNow": null,
"lang_time_inPast": null,
"lang_time_seconds": "%d s",
"lang_time_minute": "1 m",
"lang_time_minutes": "%d m",
"lang_time_hour": "1 h",
"lang_time_hours": "%d h",
"lang_time_day": "1 d",
"lang_time_days": "%d d",
"lang_time_month": "1 month",
"lang_time_months": "%d months",
"lang_time_year": "y",
"lang_time_years": "%d y",
"lang_version_usever": "Не е намерена актуализация({{ver}})",
"lang_version_skipver": "Актуализацията бе игнорирана.",
"lang_version_platform": "Искате ли автоматични актуализации? (За потребителите инсталирали от Microsoft Store, изберете „Не“)",
"lang_version_platform_linux": "Искате ли автоматични актуализации? (За потребителите инсталирали от Snapcraft, изберете „Не“)",
"lang_version_platform_mac": "Искате ли автоматични актуализации? (За потребителите на Homebrew Cask изберете „Не“)",
"lang_login_noauth": "Показване на TL на нерегистрирани профили",
"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": "Отворете DevCenter на Misskey. Ние показваме официални документи, на които се позоваваме.",
"lang_manager_logout": "Излизане",
"lang_bbmd_misskey": "TheDesk разглежда \"@\" като отговор, но поставя друг параметър. Ако не е включено в Mastodon това означава, че е в Home на Misskey.",
"lang_emoji_get": "Вземи емотикони",
"lang_emoji_custom": "Персонализирани емотикони",
"lang_defaultemojis_text": "Още емотикони {{cat}}",
"lang_postimg_previewdis": "не може да се визуализира",
"lang_postimg_aftupload": "Не можете да променяте профилите след качването.",
"lang_postimg_delete": "Изтрийте това изображение.",
"lang_post_tagTL": "Тази раздумка не съдържа маркер по подразбиране. Тази раздумка няма да се показва в локалния TL. Продължавате?",
"lang_post_tagVis": "Тази раздумка (не е \"публична\") не е показана с този етикет в ТЛ.",
"lang_post_cwtitle": "Авто CW Сигнал",
"lang_post_cwtxt": "На път сте да публикувате по-дълга раздумка, отколкото е зададена.\nТекст на предупреждението:",
"lang_post_btn1": "Отказ (няма да се публикува)",
"lang_post_btn2": "Текстът да се скрива автоматично",
"lang_post_btn3": "Продължете към публикуването",
"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_redraftTitle": "Изтрий & върни",
"lang_status_redraft": "Продължете да изтривате & преработвате? Ще изгубите статуса на тази раздумка. В тази функция може да се съдържат някои грешки. Снимките от тази раздумка ще бъдат изтрити на по-стари от 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",
"lang_status_followers": "Followers",
"lang_status_active": "Last status",
"lang_suggest_nodata": "Please get emojis list in order to show suggestion.",
"lang_usetxtbox_reply": "Reply Mode. Ctrl+Shift+C to clear.",
"lang_cards_check": " check",
"lang_cards_pip": "PiP mode",
"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.",
"lang_filter_nodata": "No data",
"lang_filter_errordegree": "Please check a context",
"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_add_misskey": "(perhaps this user has been listed)",
"lang_list_remove": "Remove from the list",
"lang_notf_new": " new notifications",
"lang_speech_refresh": "Save value about TTS config",
"lang_src_ts": "chronological order",
"lang_src_people": " people toot",
"lang_tags_always": "Always toots with ",
"lang_tags_realtime": "Tag-stream toot",
"lang_tags_tagunpin": "Unpin {{tag}}",
"lang_tags_unrealtime": "Disable TsT",
"lang_tags_tagwarn": "Автоматично попълване на {{tag}}, ако раздумката няма {{tag}}",
"lang_tl_media": "Media",
"lang_tl_reconnect": "Reconnect to streaming API",
"lang_img_DLDone": "Downloaded:",
"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_layout_unread": "Unread",
"lang_excluded": "Excluded type of notification",
"lang_layout_excludingbt": "Показване в BT режим (ИЗКЛ./Изключване BT/ Само в BT)",
"lang_layout_leftFold": "Стъпка наляво",
"lang_layout_leftUnfold": "Док отдясно",
"lang_layout_deleteColumn": "Премахване на тази колона",
"lang_layout_deleteColumnDesc": "Премахване на тази колона",
"lang_sort_gothis": "Отидете в тази колона",
"lang_sort_remthis": "Премахване на тази колона",
"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": "Готово:шаблон на NowPlaying",
"lang_setting_npprovide": "NowPlaying provider:{{set}}",
"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.",
"lang_hisdata_key": "This user is proofed by {{set}}",
"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.",
"lang_showontl_verified": "This website is verified by owner at ",
"lang_parse_mentioned": " replied to you",
"lang_parse_faved": " favourited your toot",
"lang_parse_bted": " boosted your toot",
"lang_parse_btedsimple": " boosted",
"lang_parse_polled": "'s poll",
"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": "Изтрийте тази раздумка",
"lang_parse_pin": "Pin this toot",
"lang_parse_det": "Details via your main account.",
"lang_parse_redraft": "Изтрий & върни",
"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": "Vote",
"lang_parse_unvoted": "Show the result without voting",
"lang_parse_endedvote": "Expired",
"lang_parse_thread": "Show thread",
"lang_parse_unknown": "Attached file",
"lang_parse_nsfw": "NSFW media",
"lang_parse_notffilter": "Show this user's notifications",
"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.",
"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": "Автоматично сгъване:{{set1}} линии по-нагоре,{{set2}} букви по-нагоре",
"lang_setting_autocw": "Автоматично CW:{{set1}} линии по-нагоре, {{set2}} букви по-нагоре",
"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": "Всички данни ще бъдат изтрити."
}

247
app/js/lang/lang.cs.js Normal file
View File

@@ -0,0 +1,247 @@
var lang={
"language": "cs",
"lang_toot": "Toot",
"lang_there": "Ano",
"lang_nothing": "Nic",
"lang_yesno": "Ano",
"lang_no": "Ne",
"lang_progress": "Čekejte...",
"lang_edit": "Upravit",
"lang_del": "Smazat",
"lang_add": "Přidat",
"lang_fatalerroroccured": "Vyskytly se nějaké chyby, prosím restartujte TheDesk.",
"lang_speech": "Google Čeština",
"lang_lang": "Jazyk",
"lang_langlocale": "Čeština",
"lang_back": "Zpět",
"lang_set": "Nastavit",
"lang_langadd": "Přeložte TheDesk do jiných jazyků nebo opravte existující překlad na <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHubu</a> nebo <a href=\"https://translate.thedesk.top/\" target=\"_blank\">Crowdinu</a>. TheDesk potřebuje vaši pomoc.",
"lang_time_prefixAgo": null,
"lang_time_prefixFromNow": null,
"lang_time_suffixAgo": null,
"lang_time_suffixFromNow": null,
"lang_time_inPast": null,
"lang_time_seconds": "%d s",
"lang_time_minute": "1 m",
"lang_time_minutes": "%d m",
"lang_time_hour": "1 h",
"lang_time_hours": "%d h",
"lang_time_day": "1 d",
"lang_time_days": "%d d",
"lang_time_month": "1 month",
"lang_time_months": "%d months",
"lang_time_year": "y",
"lang_time_years": "%d y",
"lang_version_usever": "Nebyla nalezena žádná aktualizace ({{ver}})",
"lang_version_skipver": "Aktualizace byla ignorována.",
"lang_version_platform": "Do you want auto-updates?(users installed on Microsoft Store select 'No')",
"lang_version_platform_linux": "Do you want auto-updates?(users installed on Snapcraft select 'No')",
"lang_version_platform_mac": "Do you want auto-updates?(Homebrew Cask users select 'No')",
"lang_login_noauth": "Zobrazit časové osy nepřihlášených účtů",
"lang_manager_info": "O tomto serveru",
"lang_manager_refresh": "Obnovit",
"lang_manager_delete": "Odhlásit",
"lang_manager_color": "Barva účtu",
"lang_manager_confirm": "se chce odhlásit. Pokračovat?",
"lang_manager_mainAcct": "Hotovo: vyberte hlavní účet",
"lang_manager_def": "Výchozí",
"lang_manager_none": "Žádný",
"lang_manager_godev": "Otevřené vývojářské centrum softwaru Misskey. Zobrazujeme také oficiální dokumentaci.",
"lang_manager_logout": "Logout",
"lang_bbmd_misskey": "TheDesk považuje „@“ za odpověď, ale vkládá ho do jiných parametrů. „Neuvedeno“ na Mastodonu znamená „Domů“ na Misskey.",
"lang_emoji_get": "Získat emoji",
"lang_emoji_custom": "Vlastní emoji",
"lang_defaultemojis_text": "Emojis about {{cat}}",
"lang_postimg_previewdis": "nelze vytvořit náhled",
"lang_postimg_aftupload": "Po nahrání nemůžete změnit účty.",
"lang_postimg_delete": "Delete this image.",
"lang_post_tagTL": "Tento toot neobsahuje výchozí hashtag. Tento toot nebude zobrazen na výchozí časové ose. Pokračovat?",
"lang_post_tagVis": "Tento toot (ne „veřejný“ toot) není zobrazen na časové ose tohoto hashtagu.",
"lang_post_cwtitle": "Automatické varování o obsahu",
"lang_post_cwtxt": "Chcete napsat delší toot, než jste nastavil/a.\nText varování:",
"lang_post_btn1": "Zrušit (příspěvek nebude publikován)",
"lang_post_btn2": "Skrýt text automaticky",
"lang_post_btn3": "Pokračovat k přispívání",
"lang_status_favWarn": "Oblíbení vzdáleného tootu bude chvíli trvat.",
"lang_status_btWarn": "Boostnutí vzdáleného tootu bude chvíli trvat.",
"lang_status_follow": "Sledovat",
"lang_status_unfollow": "Přestat sledovat",
"lang_status_block": "Blokovat",
"lang_status_unblock": "Odblokovat",
"lang_status_mute": "Ignorovat",
"lang_status_unmute": "Přestat ignorovat",
"lang_status_redraftTitle": "Delete & redraft",
"lang_status_redraft": "Chcete pokračovat k vymazání a přepsání? Ztratíte odpovědi na tento toot. Tato funkce může obashovat několik chyb. Obrázky v tomto tootu budou na verzi Mastodonu starší než 2.4.1 smazány.",
"lang_status_emphas": ": tooty tohoto uživatele jsou zdůrazněny. Po této akci prosím obnovte stránku.",
"lang_status_unemphas": ": tooty tohoto uživatele nejsou zdůrazněny. Po této akci prosím obnovte stránku.",
"lang_status_unendorse": "Nepředstavit na profilu",
"lang_status_endorse": "Představit na profilu",
"lang_status_followers": "Followers",
"lang_status_active": "Last status",
"lang_suggest_nodata": "Pro zobrazení návrhu prosím získejte seznam emoji.",
"lang_usetxtbox_reply": "Režim odpovězení. Pro vymazání stiskněte Ctrl+Shift+C.",
"lang_cards_check": " kontrolovat",
"lang_cards_pip": "Režim PiP",
"lang_details_nodata": "Žádná data",
"lang_details_filtered": "Filtrovaný toot",
"lang_details_embed": "HTML pro vložení je zkopírován.",
"lang_details_url": "URL adresa tohoto tootu je zkopírována.",
"lang_details_txt": "Obsah tohoto tootu je zkopírován.",
"lang_filter_nodata": "Žádná data",
"lang_filter_errordegree": "Prosím zkontrolujte kontext",
"lang_list_nodata": "Žádná data",
"lang_list_show": "Zobrazit",
"lang_list_users": "Seznam uživatelů",
"lang_list_nouser": "Žádní uživatelé na tomto seznamu.",
"lang_list_add": "Přidat na seznam",
"lang_list_add_misskey": "(perhaps this user has been listed)",
"lang_list_remove": "Odstranit ze seznamu",
"lang_notf_new": " nových oznámení",
"lang_speech_refresh": "Uložit hodnotu nastavení TTS",
"lang_src_ts": "chronologické pořadí",
"lang_src_people": " lidí tootují",
"lang_tags_always": "Vždy tootnout s ",
"lang_tags_realtime": "Tag-stream toot",
"lang_tags_tagunpin": "Odepnout {{tag}}",
"lang_tags_unrealtime": "Disable TsT",
"lang_tags_tagwarn": "Auto complete {{tag}}, if toot without {{tag}}",
"lang_tl_media": "Média",
"lang_tl_reconnect": "Reconnect to streaming API",
"lang_img_DLDone": "Downloaded:",
"lang_layout_gotop": "Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
"lang_layout_thisacct": "{{notf}} tohoto účtu",
"lang_layout_delthis": "Odstranit tento sloupec",
"lang_layout_setthis": "Nastavení tohoto sloupce",
"lang_layout_mediafil": "Filtrování médií",
"lang_layout_linkana": "Automatický analyzátor odkazů",
"lang_layout_linkanades": "Automatický analyzátor odkazů",
"lang_layout_tts": "Převod textu na řeč ",
"lang_layout_reconnect": "Reconnect to streaming API",
"lang_layout_headercolor": "Header color of this column",
"lang_layout_nodata": "[Žádná data]<br>Obnovte stránku klávesami F5/⌘+R",
"lang_layout_dm": "Přímá zpráva",
"lang_layout_webviewmode": "Preferovat WebView",
"lang_excluded": "Excluded type of notification",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)",
"lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right",
"lang_layout_deleteColumn": "Delete this column",
"lang_layout_deleteColumnDesc": "Delete this column",
"lang_layout_unread": "Unread",
"lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column",
"lang_spotify_img": "Attach an album artwork",
"lang_spotify_imgno": "Not attach an album artwork",
"lang_spotify_acct": "Spojit TheDesk se Spotify",
"lang_spotify_np": "Hotovo: šablona NowPlaying",
"lang_setting_npprovide": "NowPlaying provider:{{set}}",
"lang_hisdata_frcreq": "Vyžaduje Mastodon 2.4.3 nebo vyšší verzi",
"lang_hisdata_frcwarn": "Budou zobrazeny již nesledované účty.",
"lang_hisdata_taketime": "It will take 30s ~ several minutes",
"lang_hisdata_notonmisskey": "Misskey is unable to request.",
"lang_hisdata_key": "This user is proofed by {{set}}",
"lang_showontl_movetxt": "Tento účet byl přesunut",
"lang_showontl_movebtn": "Continue on the new account",
"lang_showontl_botacct": "[robot]",
"lang_showontl_followed": "Sledují vás",
"lang_showontl_notf": "Oznámení ",
"lang_showontl_domain": "Doména ",
"lang_showontl_listwarn": "Follow to add this user to lists.",
"lang_showontl_verified": "This website is verified by owner at ",
"lang_parse_mentioned": " vám odpověděl/a",
"lang_parse_faved": " si oblíbil/a váš toot",
"lang_parse_bted": " boostnul/a váš toot",
"lang_parse_btedsimple": " boostnul/a",
"lang_parse_polled": "'s poll",
"lang_parse_notftime": "Provedeno",
"lang_parse_cwshow": "Zobrazit",
"lang_parse_fulltext": "Celý text:",
"lang_parse_autofold": "Auto folded",
"lang_parse_more": "Více",
"lang_parse_url": "Analyzátor URL",
"lang_parse_tagTL": "Časová osa {{tag}}",
"lang_parse_tagtoot": "Tootnout s hashtagem {{tag}}",
"lang_parse_tagpin": "Připnout {{tag}}",
"lang_parse_public": "Veřejný",
"lang_parse_unlisted": "Neuvedený",
"lang_parse_private": "Soukromý",
"lang_parse_direct": "Přímý",
"lang_parse_clickcopy": "Klikněte pro zkopírování textu tohoto tootu",
"lang_parse_clickcopyurl": "Klikněte pro zkopírování URL adresy tohoto tootu",
"lang_parse_trans": "Přeložit do japonštiny",
"lang_parse_replyto": "Odpovědět na tento toot",
"lang_parse_bt": "Boostnout tento toot",
"lang_parse_fav": "Oblíbit si tento toot",
"lang_parse_quote": "Citovat tento toot",
"lang_parse_del": "Smazat tento toot",
"lang_parse_pin": "Připnout tento toot",
"lang_parse_det": "Details via your main account.",
"lang_parse_redraft": "Vymazat a přepsat",
"lang_parse_followed": "vás nyní sleduje",
"lang_parse_clientop": "Operace tohoto klienta",
"lang_parse_clienttxt": " bude",
"lang_parse_clientno": "nic nedělat",
"lang_parse_clientemp": "zdůrazněna (nebo nezdůrazněna)",
"lang_parse_clientmute": "ztlumena",
"lang_parse_mute": " bude ztlumena. To můžete odstranit v nastavení.",
"lang_parse_voted": "Voted",
"lang_parse_vote": "Vote",
"lang_parse_unvoted": "Show the result without voting",
"lang_parse_endedvote": "Expired",
"lang_parse_thread": "Show thread",
"lang_parse_unknown": "Attached file",
"lang_parse_nsfw": "NSFW media",
"lang_parse_notffilter": "Show this user's notifications",
"lang_misskeyparse_renote": "Znovusdílení",
"lang_misskeyparse_renoteqt": "Renotování",
"lang_misskeyparse_reaction": "Reakce",
"lang_misskeyparse_tagnostr": "Žádné streamovací API na časových osách hashtagů",
"lang_misskeyparse_listnostr": "Žádné streamovací API na časových osách seznamů",
"lang_misskeyparse_home": "Domů",
"lang_misskeyparse_followers": "Sledující",
"lang_misskeyparse_specified": "Určený uživatel",
"lang_misskeyparse_qt": "Režim renotování (citace) Misskey: pro vymazání stiskněte Ctrl+Shift+Enter",
"lang_misskeyparse_renoted": " renotoval/a váš následující příspěvek.",
"lang_misskeyparse_quoted": " citoval/a váš následující příspěvek.",
"lang_misskeyparse_reacted": " reagoval/a na váš následující příspěvek.",
"lang_setting_time": "Časový formát: {{set}}",
"lang_setting_theme": "Motiv: {{set}}",
"lang_setting_nsfw": "Citlivý obsah: {{set}}",
"lang_setting_cw": "Varování: {{set}}",
"lang_setting_cwtext": "Výchozí text varování: {{set}}",
"lang_setting_cws": "Vždy zapnout varování na: {{set}}",
"lang_setting_rp": "Počitadlo odpovědí: {{set}}",
"lang_setting_vis": "Výchozí viditelnost: {{set}}",
"lang_setting_popup": "Popupové oznámení: {{set}}",
"lang_setting_off": "Vyl",
"lang_setting_s": "s",
"lang_setting_box": "Výchozí akce tootového pole: {{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": "Písma: {{set}}",
"lang_setting_default": "výchozí písmo",
"lang_setting_size": "Velikost písma: {{set}} px",
"lang_setting_imgheight": "Výška obrázků: {{set}} px",
"lang_setting_ticker": "#InstanceTicker: {{set}} px",
"lang_setting_animation": "Animation: {{set}}",
"lang_setting_tag": "Časová osa hashtagu: {{set}}",
"lang_setting_boxConfirm": "Post box:{{set}}",
"lang_setting_ul": "Native locale:{{set}}",
"lang_setting_notf": "Native notification:{{set}}",
"lang_setting_quote": "Formát citace: {{set}}",
"lang_setting_via": "Přes: {{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": "Žádný klient není ztlumen.",
"lang_setting_notftest": " Test oznámení ",
"lang_setting_notftestprof": "Vaše ikona je zobrazena.",
"lang_setting_exportwarn": "Budou exportována pouze důležitá data. Tato data musíte udržet v bezpečí.",
"lang_setting_importwarn": "Všechna data budou smazána."
}

247
app/js/lang/lang.de.js Normal file
View File

@@ -0,0 +1,247 @@
var lang={
"language": "en",
"lang_toot": "Tröt",
"lang_there": "Ja",
"lang_nothing": "Ohne",
"lang_yesno": "Ja",
"lang_no": "Nein",
"lang_progress": "Warten...",
"lang_edit": "Bearbeiten",
"lang_del": "Löschen",
"lang_add": "Hinzufügen",
"lang_fatalerroroccured": "Ein Fehler ist aufgetreten, bitte starten Sie TheDesk neu.",
"lang_speech": "Google US Englisch",
"lang_lang": "Sprache",
"lang_langlocale": "Englisch",
"lang_back": "Zurück",
"lang_set": "Setzen",
"lang_langadd": "Übersetzen oder korrigieren Sie TheDesk in andere Sprachen auf <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk benötigt Ihre Hilfe.",
"lang_time_prefixAgo": null,
"lang_time_prefixFromNow": null,
"lang_time_suffixAgo": null,
"lang_time_suffixFromNow": null,
"lang_time_inPast": null,
"lang_time_seconds": "%d s",
"lang_time_minute": "1 m",
"lang_time_minutes": "%d m",
"lang_time_hour": "1 h",
"lang_time_hours": "%d h",
"lang_time_day": "1 d",
"lang_time_days": "%d d",
"lang_time_month": "1 month",
"lang_time_months": "%d months",
"lang_time_year": "y",
"lang_time_years": "%d y",
"lang_version_usever": "Keine Aktualisierung gefunden({{ver}})",
"lang_version_skipver": "Update wurde ignoriert.",
"lang_version_platform": "Möchten Sie automatische Updates?(Benutzer im Microsoft Store wählen 'Nein')",
"lang_version_platform_linux": "Möchten Sie automatische Updates?(Benutzer auf Snapcraft wählen 'Nein')",
"lang_version_platform_mac": "Möchten Sie automatische Updates?(Homebrew Cask Benutzer wählen 'Nein')",
"lang_login_noauth": "Verläufe von nicht angemeldeten Konten anzeigen",
"lang_manager_info": "Über diese Instanz",
"lang_manager_refresh": "Aktualisieren",
"lang_manager_delete": "Abmelden",
"lang_manager_color": "Kontofarbe",
"lang_manager_confirm": "ist im Begriff, sich auszuloggen. Fortfahren?",
"lang_manager_mainAcct": "Fertig:Hauptkonto wählen",
"lang_manager_def": "Standard",
"lang_manager_none": "Ohne",
"lang_manager_godev": "Öffnen Sie das DevCenter von Misskey. Wir zeigen auch ein offizielles Dokument als Referenz.",
"lang_manager_logout": "Abmelden",
"lang_bbmd_misskey": "TheDesk betrachtet \"@\" als Antwort, setzt aber einen anderen Parameter. Nicht auf Mastodon gelistet bedeutet Home on Misskey.",
"lang_emoji_get": "Hole Emojis",
"lang_emoji_custom": "Eigene Emojis",
"lang_defaultemojis_text": "Emojis über {{cat}}",
"lang_postimg_previewdis": "keine Vorschau",
"lang_postimg_aftupload": "Sie können die Konten nach dem Hochladen nicht mehr ändern.",
"lang_postimg_delete": "Dieses Bild löschen.",
"lang_post_tagTL": "Dieses Tröt enthält keinen Standard-Tag. Er wird in dem lokalen Verlauf nicht angezeigt. Fortfahren?",
"lang_post_tagVis": "Dieser Tröt (nicht 'öffentlicher' Tröt) wird nicht in diesem Tag-Verlauf angezeigt.",
"lang_post_cwtitle": "Auto CW Alert",
"lang_post_cwtxt": "Du bist dabei, länger zu posten, als du eingestellt hast.\nWarntext:",
"lang_post_btn1": "Abbrechen (wird nicht gesendet)",
"lang_post_btn2": "Text automatisch ausblenden",
"lang_post_btn3": "Weiter mit Senden",
"lang_status_favWarn": "Es braucht einen Moment, um ein entferntes Tröt zu favorisieren.",
"lang_status_btWarn": "Es braucht einen Moment, um ein entferntes Tröt zu verstärken.",
"lang_status_follow": "Folgen",
"lang_status_unfollow": "Nicht mehr folgen",
"lang_status_block": "Blockieren",
"lang_status_unblock": "Freigeben",
"lang_status_mute": "Stummschalten",
"lang_status_unmute": "Stummschalten aufheben",
"lang_status_redraftTitle": "Löschen & Neuentwerfen",
"lang_status_redraft": "Weiter mit löschen & neu entwerfen? Du verlierst den Status dieses Tröts. Diese Aktion kann einige Fehler enthalten. Bilder dieses Tröts werden auf älteren Versionen als Mastodon 2.4.1 gelöscht.",
"lang_status_emphas": "'s Tröts werden hervorgehoben. Bitte laden Sie nach dieser Aktion neu.",
"lang_status_unemphas": "'s Tröts werden nicht hervorgehoben. Bitte laden Sie nach dieser Aktion neu.",
"lang_status_unendorse": "Nicht auf dem Profil zeigen",
"lang_status_endorse": "Auf dem Profil zeigen",
"lang_status_followers": "Followers",
"lang_status_active": "Last status",
"lang_suggest_nodata": "Please get emojis list in order to show suggestion.",
"lang_usetxtbox_reply": "Antwortmodus. Strg+Umschalt+C zum Löschen.",
"lang_cards_check": " überprüfen",
"lang_cards_pip": "PiP mode",
"lang_details_nodata": "Keine Daten",
"lang_details_filtered": "Gefilterter Tröt",
"lang_details_embed": "Eingefügtes HTML wurde entfernt.",
"lang_details_url": "URL dieses Tröts wurde entfernt.",
"lang_details_txt": "Inhalt dieses Tröts wurde entfernt.",
"lang_filter_nodata": "Keine Daten",
"lang_filter_errordegree": "Bitte überprüfen Sie den Kontext",
"lang_list_nodata": "Keine Daten",
"lang_list_show": "Anzeigen",
"lang_list_users": "Benutzerliste",
"lang_list_nouser": "Keine Benutzer in dieser Liste.",
"lang_list_add": "Zur Liste hinzufügen",
"lang_list_add_misskey": "(vielleicht wurde dieser Benutzer aufgelistet)",
"lang_list_remove": "Aus Liste entfernen",
"lang_notf_new": " neue Benachrichtigungen",
"lang_speech_refresh": "Sichern der Vorlesefunktionseinstellungen",
"lang_src_ts": "chronologische Reihenfolge",
"lang_src_people": " Leute Tröt",
"lang_tags_always": "Immer Tröten mit ",
"lang_tags_realtime": "Tag-Stream Tröt",
"lang_tags_tagunpin": "{{tag}} entsperren",
"lang_tags_unrealtime": "Disable TsT",
"lang_tags_tagwarn": "Automatisch {{tag}} anfügen, wenn Tröt ohne {{tag}} ist",
"lang_tl_media": "Medien",
"lang_tl_reconnect": "Mit Streaming API erneut verbinden",
"lang_img_DLDone": "Heruntergeladen:",
"lang_layout_gotop": "Gehen Sie zum Anfang dieser Spalte. Wenn das Symbol rot ist, kann diese Spalte keine Verbindung zur Streaming-API herstellen. Bitte neu laden.",
"lang_layout_thisacct": "{{notf}} dieses Kontos",
"lang_layout_delthis": "Diese Spalte löschen",
"lang_layout_setthis": "Einstellungen dieser Spalte",
"lang_layout_mediafil": "Medien filtern",
"lang_layout_linkana": "Automatische Link-Analyse",
"lang_layout_linkanades": "Automatische Link-Analyse",
"lang_layout_tts": "Sprachausgabe ",
"lang_layout_reconnect": "Mit Streaming API erneut verbinden",
"lang_layout_headercolor": "Kopfzeilenfarbe dieser Spalte",
"lang_layout_nodata": "[Keine Daten]<br>F5/⌘+R zum Neu laden",
"lang_layout_dm": "Direkte Nachricht",
"lang_layout_webviewmode": "Web-Ansicht bevorzugen",
"lang_excluded": "Ausgeschlossene Benachrichtigungsart",
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)",
"lang_layout_leftFold": "Nach links Stapeln",
"lang_layout_leftUnfold": "Rechts Anheften",
"lang_layout_deleteColumn": "Diese Spalte löschen",
"lang_layout_deleteColumnDesc": "Diese Spalte löschen",
"lang_layout_unread": "Unread",
"lang_sort_gothis": "Gehe zu dieser Spalte",
"lang_sort_remthis": "Diese Spalte löschen",
"lang_spotify_img": "Albumcover anhängen",
"lang_spotify_imgno": "Kein Albumcover anhängen",
"lang_spotify_acct": "TheDesk mit Spotify verbinden",
"lang_spotify_np": "Done:Vorlage für NowPlaying",
"lang_setting_npprovide": "NowPlaying Provider:{{set}}",
"lang_hisdata_frcreq": "Benötigte Mastodon 2.4.3 und höher",
"lang_hisdata_frcwarn": "Unfollow accounts will be shown.",
"lang_hisdata_taketime": "Es dauert 30s bis mehrere Minuten",
"lang_hisdata_notonmisskey": "Misskey kann nicht angefordert werden.",
"lang_hisdata_key": "Dieser Benutzer ist von {{set}} überprüft",
"lang_showontl_movetxt": "Dieses Konto wurde verschoben",
"lang_showontl_movebtn": "Auf dem neuen Konto fortfahren",
"lang_showontl_botacct": "[bot]",
"lang_showontl_followed": "Folgt dir",
"lang_showontl_notf": "Benachrichtigung ",
"lang_showontl_domain": "Domain ",
"lang_showontl_listwarn": "Folgen, um diesen Benutzer zu Listen hinzuzufügen.",
"lang_showontl_verified": "This website is verified by owner at ",
"lang_parse_mentioned": " hat dir geantwortet",
"lang_parse_faved": " favorisierte deinen Tröt",
"lang_parse_bted": " hat deinen Tröt verstärkt",
"lang_parse_btedsimple": " verstärkt",
"lang_parse_polled": "'s Umfrage",
"lang_parse_notftime": "Bearbeitet am",
"lang_parse_cwshow": "Anzeigen",
"lang_parse_fulltext": "Full size text:",
"lang_parse_autofold": "Automatisches Zusammenfalten",
"lang_parse_more": "Mehr",
"lang_parse_url": "URL-Analyse",
"lang_parse_tagTL": "Verlauf von {{tag}}",
"lang_parse_tagtoot": "Tröt mit {{tag}}",
"lang_parse_tagpin": "Pin {{tag}}",
"lang_parse_public": "Öffentlich",
"lang_parse_unlisted": "Nicht aufgeführt",
"lang_parse_private": "Privat",
"lang_parse_direct": "Direkt",
"lang_parse_clickcopy": "Klicken, um den Text dieses Tröts zu kopieren",
"lang_parse_clickcopyurl": "Klicken, um die URL dieses Tröts zu kopieren",
"lang_parse_trans": "Übersetzen nach Japanisch",
"lang_parse_replyto": "Auf diesen Tröt antworten",
"lang_parse_bt": "Diesen Tröt verstärken",
"lang_parse_fav": "Diesen Tröt favorisieren",
"lang_parse_quote": "Diesen Tröt zitieren",
"lang_parse_del": "Diesen Tröt löschen",
"lang_parse_pin": "Dieses Tröt fixieren",
"lang_parse_det": "Details über Ihr Hauptkonto.",
"lang_parse_redraft": "Löschen & Neuentwerfen",
"lang_parse_followed": "Folgt dir",
"lang_parse_clientop": "Aktion dieses Clients",
"lang_parse_clienttxt": " wird",
"lang_parse_clientno": "Nichts unternehmen",
"lang_parse_clientemp": "Hervorgehoben(/nicht hervorgehoben)",
"lang_parse_clientmute": "Stumm",
"lang_parse_mute": " wird stumm gemacht. Kann in den Einstellungen wieder entfernt werden.",
"lang_parse_voted": "Abgestimmt",
"lang_parse_vote": "Abstimmen",
"lang_parse_unvoted": "Ergebnis ohne Abstimmung anzeigen",
"lang_parse_endedvote": "Abgelaufen",
"lang_parse_thread": "Konversation anzeigen",
"lang_parse_unknown": "Angehängte Datei",
"lang_parse_nsfw": "NSFW Medien",
"lang_parse_notffilter": "Benachrichtigungen dieses Benutzers anzeigen",
"lang_misskeyparse_renote": "Weiterleiten",
"lang_misskeyparse_renoteqt": "Renote",
"lang_misskeyparse_reaction": "Reaktion",
"lang_misskeyparse_tagnostr": "Keine Streaming-API für Tag-Verläufe",
"lang_misskeyparse_listnostr": "Keine Streaming-API fpr Listen-Verläufe",
"lang_misskeyparse_home": "Startseite",
"lang_misskeyparse_followers": "Abonnent",
"lang_misskeyparse_specified": "Ausgewählte Benutzer",
"lang_misskeyparse_qt": "Misskey renote(quote) mode:Ctrl+Shift+Enter to clear",
"lang_misskeyparse_renoted": " hat deinen folgenden Beitrag zurückgewiesen.",
"lang_misskeyparse_quoted": " zitierte deinen folgenden Beitrag.",
"lang_misskeyparse_reacted": " hat auf Ihren folgenden Beitrag reagiert.",
"lang_setting_time": "Zeitformat:{{set}}",
"lang_setting_theme": "Design:{{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": "Antwortzähler:{{set}}",
"lang_setting_vis": "Standardsichtbarkeit:{{set}}",
"lang_setting_popup": "Popup-Benachrichtigung:{{set}}",
"lang_setting_off": "Aus",
"lang_setting_s": "s",
"lang_setting_box": "Standard-Tröt-Box-Aktion:{{set}}",
"lang_setting_gif": "GIF:{{set}}",
"lang_setting_selt": "Auto-Falten:{{set1}} Zeilen und höher, {{set2}} Buchstaben und höher",
"lang_setting_autocw": "Auto CW:{{set1}} lines and above, {{set2}} letters and above",
"lang_setting_width": "Minimale Breite:{{set}}",
"lang_setting_fixwidth": "TweetDeck feste Breite:{{set}}px",
"lang_setting_img": "Nach dem Posten eines Bildes:{{set}}",
"lang_setting_font": "Schriftart:{{set}}",
"lang_setting_default": "Standard-Schriftart",
"lang_setting_size": "Schriftgröße:{{set}}px",
"lang_setting_imgheight": "Bildhöhe:{{set}}px",
"lang_setting_ticker": "#InstanceTicker:{{set}}px",
"lang_setting_animation": "Animation: {{set}}",
"lang_setting_tag": "Tag-Verlauf:{{set}}",
"lang_setting_boxConfirm": "Postfach:{{set}}",
"lang_setting_ul": "Muttersprache:{{set}}",
"lang_setting_notf": "System Benachrichtigungen:{{set}}",
"lang_setting_quote": "Zitierformat:{{set}}",
"lang_setting_via": "Via:{{set}}",
"lang_setting_mov": "Aktionstasten verstecken:{{set}}",
"lang_setting_setasread": "Benachrichtigungs-Markierungen:{{set}}",
"lang_setting_main": "Standard-Konto:{{set}}",
"lang_setting_sec": "Zweite Tröt-Taste:{{set}}",
"lang_setting_ksref": "Tastaturkürzel werden aktualisiert.",
"lang_setting_nomuting": "Kein Client ist stumm.",
"lang_setting_notftest": " Benachrichtigungen testen ",
"lang_setting_notftestprof": "Ihr Symbol wird angezeigt.",
"lang_setting_exportwarn": "Nur wichtige Daten werden exportiert. Sie müssen diese Daten sichern.",
"lang_setting_importwarn": "Alle Daten werden gelöscht."
}

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

@@ -0,0 +1,280 @@
//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/time.js
"lang_time_prefixAgo": null,
"lang_time_prefixFromNow": null,
"lang_time_suffixAgo": null,
"lang_time_suffixFromNow": null,
"lang_time_inPast": null,
"lang_time_seconds": "%d s",
"lang_time_minute": "1 m",
"lang_time_minutes": "%d m",
"lang_time_hour": "1 h",
"lang_time_hours": "%d h",
"lang_time_day": "1 d",
"lang_time_days": "%d d",
"lang_time_month": "1 month",
"lang_time_months": "%d months",
"lang_time_year": "y",
"lang_time_years": "%d y",
//common/version.js
"lang_version_usever": "No update is found({{ver}})",
"lang_version_skipver": "Update was ignored.",
"lang_version_platform": "Do you want auto-updates?(users installed on Microsoft Store select 'No')",
"lang_version_platform_linux": "Do you want auto-updates?(users installed on Snapcraft select 'No')",
"lang_version_platform_mac": "Do you want auto-updates?(Homebrew Cask users select 'No')",
//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.",
"lang_manager_logout": "Logout",
//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.",
"lang_postimg_failupload": "Failed",
"lang_postimg_delete": "Delete this image.",
//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_redraftTitle": "Delete & redraft",
"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",
"lang_status_followers": "Followers",
"lang_status_active": "Last status",
//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_add_misskey": "(perhaps this user has been listed)",
"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_unrealtime": "Disable TsT",
"lang_tags_tagwarn": "Auto complete {{tag}}, if toot without {{tag}}",
//tl/tl.js
"lang_tl_media": "Media",
"lang_tl_reconnect": "Reconnect to streaming API",
//ui/img.js
"lang_img_DLDone": "Downloaded:",
//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": "Reload this column",
"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)",
"lang_layout_leftFold": "Stack to the left",
"lang_layout_leftUnfold": "Dock on the right",
"lang_layout_deleteColumn": "Delete this column",
"lang_layout_deleteColumnDesc": "Delete this column",
"lang_layout_unread": "Unread",
//ui/sort.js
"lang_sort_gothis": "Go to this column",
"lang_sort_remthis": "Delete this column",
//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.",
"lang_hisdata_key": "This user is proofed by {{set}}",
//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.",
"lang_showontl_verified": "This website is verified by owner at ",
//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_polled": "'s poll",
"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": "Vote",
"lang_parse_unvoted": "Show the result without voting",
"lang_parse_endedvote": "Expired",
"lang_parse_thread": "Show thread",
"lang_parse_unknown": "Attached file",
"lang_parse_nsfw": "sensitive media",
"lang_parse_notffilter": "Show this user's notifications",
//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": "Sensitive media:{{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.",
}

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

@@ -0,0 +1,280 @@
//commonError
var lang = {
"language": "ja",
"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/time.js
"lang_time_prefixAgo": null,
"lang_time_prefixFromNow": "今から",
"lang_time_suffixAgo": "",
"lang_time_suffixFromNow": "",
"lang_time_inPast": '',
"lang_time_seconds": "%d秒前",
"lang_time_minute": "1分前",
"lang_time_minutes": "%d分前",
"lang_time_hour": "1時間前",
"lang_time_hours": "%d時間前",
"lang_time_day": "昨日",
"lang_time_days": "%d日前",
"lang_time_month": "昨月",
"lang_time_months": "%dヶ月前",
"lang_time_year": "去年",
"lang_time_years": "%d年前",
//common/version.js
"lang_version_usever": "お使いのバージョン{{ver}}は最新です。",
"lang_version_skipver": "アップデートはスキップされました。",
"lang_version_platform": "このソフトウェアはMicrosoft Storeからダウンロードされましたか通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとMicrosoft Storeからアップデートが提供され、アップデートの通知を出しません。",
"lang_version_platform_linux": "このソフトウェアはSnapcraft(snapd)からインストールしましたか通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとSnapcraftからアップデートが提供され、アップデートの通知を出しません。",
"lang_version_platform_mac": "このソフトウェアはHomebrew Caskからインストールしましたか通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとアップデートの通知を出しません。",
//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センターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
"lang_manager_logout": "ログアウト",
//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": "アップロード後はアカウントを切り替えられません。",
"lang_postimg_failupload": "アップロードに失敗しました。",
"lang_postimg_delete": "この画像を削除します",
//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_redraftTitle": "削除して再編集",
"lang_status_redraft": "削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
"lang_status_emphas": "を強調します。リロードしてください。",
"lang_status_unemphas": "を強調解除します。リロードしてください。",
"lang_status_unendorse": "紹介解除",
"lang_status_endorse": "プロフで紹介する",
"lang_status_followers": "フォロワー",
"lang_status_active": "最新トゥート",
//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_add_misskey": "(重複追加の可能性があります)",
"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_unrealtime": "実況解除",
"lang_tags_tagwarn": "{{tag}}がない場合自動で補完されます。",
//tl/tl.js
"lang_tl_media": "メディア",
"lang_tl_reconnect": "Streamingに再接続しました",
//ui/img.js
"lang_img_DLDone": "ダウンロード先:",
//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のみ)",
"lang_layout_leftFold": "左へ重ねる",
"lang_layout_leftUnfold": "右へ出す",
"lang_layout_deleteColumn": "カラム削除",
"lang_layout_deleteColumnDesc": "カラムを削除しますか?",
"lang_layout_unread": "未読",
//ui/sort.js
"lang_sort_gothis": "このカラムへ",
"lang_sort_remthis": "このカラムを削除",
//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にはありません。",
"lang_hisdata_key": "このユーザーの信頼性は{{set}}によって示されています",
//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": "リストに追加するためにはフォローが必要です。",
"lang_showontl_verified": "このユーザーの所持するWebサイトであると証明されています。",
//parse
"lang_parse_mentioned": "が返信しました",
"lang_parse_faved": "がお気に入り登録しました",
"lang_parse_bted": "がブーストしました",
"lang_parse_btedsimple": "がブースト",
"lang_parse_polled": "のアンケート",
"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": "結果だけ見る",
"lang_parse_endedvote": "終了済み",
"lang_parse_thread": "会話を表示",
"lang_parse_unknown": "添付ファイル",
"lang_parse_nsfw": "閲覧注意",
"lang_parse_notffilter": "このユーザーの通知のみを表示",
//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": "全てのデータがリセットされます。"
}

206
app/js/lang/lang.ps.js Normal file
View File

@@ -0,0 +1,206 @@
var lang = {
"language": "crwdns1960:0crwdne1960:0",
"lang_toot": "crwdns1962:0crwdne1962:0",
"lang_there": "crwdns1964:0crwdne1964:0",
"lang_nothing": "crwdns1966:0crwdne1966:0",
"lang_yesno": "crwdns1968:0crwdne1968:0",
"lang_no": "crwdns1970:0crwdne1970:0",
"lang_progress": "crwdns1972:0crwdne1972:0",
"lang_edit": "crwdns1974:0crwdne1974:0",
"lang_del": "crwdns1976:0crwdne1976:0",
"lang_add": "crwdns1978:0crwdne1978:0",
"lang_fatalerroroccured": "crwdns1980:0crwdne1980:0",
"lang_speech": "crwdns1982:0crwdne1982:0",
"lang_lang": "crwdns1984:0crwdne1984:0",
"lang_langlocale": "crwdns1986:0crwdne1986:0",
"lang_back": "crwdns1988:0crwdne1988:0",
"lang_set": "crwdns1990:0crwdne1990:0",
"lang_langadd": "crwdns2364:0crwdne2364:0",
"lang_version_usever": "crwdns1994:0{{ver}}crwdne1994:0",
"lang_version_skipver": "crwdns1996:0crwdne1996:0",
"lang_login_noauth": "crwdns1998:0crwdne1998:0",
"lang_manager_info": "crwdns2000:0crwdne2000:0",
"lang_manager_refresh": "crwdns2002:0crwdne2002:0",
"lang_manager_delete": "crwdns2004:0crwdne2004:0",
"lang_manager_color": "crwdns2006:0crwdne2006:0",
"lang_manager_confirm": "crwdns2008:0crwdne2008:0",
"lang_manager_mainAcct": "crwdns2010:0crwdne2010:0",
"lang_manager_def": "crwdns2012:0crwdne2012:0",
"lang_manager_none": "crwdns2014:0crwdne2014:0",
"lang_manager_godev": "crwdns2016:0crwdne2016:0",
"lang_bbmd_misskey": "crwdns2018:0crwdne2018:0",
"lang_emoji_get": "crwdns2020:0crwdne2020:0",
"lang_emoji_custom": "crwdns2022:0crwdne2022:0",
"lang_defaultemojis_text": "crwdns2388:0{{cat}}crwdne2388:0",
"lang_postimg_previewdis": "crwdns2024:0crwdne2024:0",
"lang_postimg_aftupload": "crwdns2026:0crwdne2026:0",
"lang_post_tagTL": "crwdns2028:0crwdne2028:0",
"lang_post_tagVis": "crwdns2030:0crwdne2030:0",
"lang_post_cwtitle": "crwdns2032:0crwdne2032:0",
"lang_post_cwtxt": "crwdns2034:0crwdne2034:0",
"lang_post_btn1": "crwdns2036:0crwdne2036:0",
"lang_post_btn2": "crwdns2038:0crwdne2038:0",
"lang_post_btn3": "crwdns2040:0crwdne2040:0",
"lang_status_favWarn": "crwdns2042:0crwdne2042:0",
"lang_status_btWarn": "crwdns2044:0crwdne2044:0",
"lang_status_follow": "crwdns2046:0crwdne2046:0",
"lang_status_unfollow": "crwdns2048:0crwdne2048:0",
"lang_status_block": "crwdns2050:0crwdne2050:0",
"lang_status_unblock": "crwdns2052:0crwdne2052:0",
"lang_status_mute": "crwdns2054:0crwdne2054:0",
"lang_status_unmute": "crwdns2056:0crwdne2056:0",
"lang_status_redraft": "crwdns2058:0crwdne2058:0",
"lang_status_emphas": "crwdns2060:0crwdne2060:0",
"lang_status_unemphas": "crwdns2062:0crwdne2062:0",
"lang_status_unendorse": "crwdns2064:0crwdne2064:0",
"lang_status_endorse": "crwdns2066:0crwdne2066:0",
"lang_suggest_nodata": "crwdns2068:0crwdne2068:0",
"lang_usetxtbox_reply": "crwdns2070:0crwdne2070:0",
"lang_cards_check": "crwdns2072:0crwdne2072:0",
"lang_cards_pip": "crwdns2074:0crwdne2074:0",
"lang_details_nodata": "crwdns2076:0crwdne2076:0",
"lang_details_filtered": "crwdns2078:0crwdne2078:0",
"lang_details_embed": "crwdns2080:0crwdne2080:0",
"lang_details_url": "crwdns2082:0crwdne2082:0",
"lang_details_txt": "crwdns2084:0crwdne2084:0",
"lang_filter_nodata": "crwdns2086:0crwdne2086:0",
"lang_filter_errordegree": "crwdns2088:0crwdne2088:0",
"lang_list_nodata": "crwdns2090:0crwdne2090:0",
"lang_list_show": "crwdns2092:0crwdne2092:0",
"lang_list_users": "crwdns2094:0crwdne2094:0",
"lang_list_nouser": "crwdns2096:0crwdne2096:0",
"lang_list_add": "crwdns2098:0crwdne2098:0",
"lang_list_remove": "crwdns2100:0crwdne2100:0",
"lang_notf_new": "crwdns2102:0crwdne2102:0",
"lang_speech_refresh": "crwdns2348:0crwdne2348:0",
"lang_src_ts": "crwdns2106:0crwdne2106:0",
"lang_src_people": "crwdns2108:0crwdne2108:0",
"lang_tags_always": "crwdns2110:0crwdne2110:0",
"lang_tags_realtime": "crwdns2112:0crwdne2112:0",
"lang_tags_tagunpin": "crwdns2114:0{{tag}}crwdne2114:0",
"lang_tags_tagwarn": "crwdns2116:0{{tag}}crwdne2116:0",
"lang_tl_media": "crwdns2118:0crwdne2118:0",
"lang_tl_reconnect": "crwdns2120:0crwdne2120:0",
"lang_layout_gotop": "crwdns2122:0crwdne2122:0",
"lang_layout_thisacct": "crwdns2124:0{{notf}}crwdne2124:0",
"lang_layout_delthis": "crwdns2126:0crwdne2126:0",
"lang_layout_setthis": "crwdns2128:0crwdne2128:0",
"lang_layout_mediafil": "crwdns2130:0crwdne2130:0",
"lang_layout_linkana": "crwdns2132:0crwdne2132:0",
"lang_layout_linkanades": "crwdns2134:0crwdne2134:0",
"lang_layout_tts": "crwdns2136:0crwdne2136:0",
"lang_layout_reconnect": "crwdns2138:0crwdne2138:0",
"lang_layout_headercolor": "crwdns2140:0crwdne2140:0",
"lang_layout_nodata": "crwdns2142:0crwdne2142:0",
"lang_layout_dm": "crwdns2144:0crwdne2144:0",
"lang_layout_webviewmode": "crwdns2146:0crwdne2146:0",
"lang_excluded": "crwdns2368:0crwdne2368:0",
"lang_layout_excludingbt": "crwdns2390:0crwdne2390:0",
"lang_spotify_img": "crwdns2148:0crwdne2148:0",
"lang_spotify_imgno": "crwdns2150:0crwdne2150:0",
"lang_spotify_acct": "crwdns2152:0crwdne2152:0",
"lang_spotify_np": "crwdns2154:0crwdne2154:0",
"lang_setting_npprovide": "crwdns2370:0{{set}}crwdne2370:0",
"lang_hisdata_frcreq": "crwdns2156:0crwdne2156:0",
"lang_hisdata_frcwarn": "crwdns2158:0crwdne2158:0",
"lang_hisdata_taketime": "crwdns2160:0crwdne2160:0",
"lang_hisdata_notonmisskey": "crwdns2162:0crwdne2162:0",
"lang_showontl_movetxt": "crwdns2164:0crwdne2164:0",
"lang_showontl_movebtn": "crwdns2166:0crwdne2166:0",
"lang_showontl_botacct": "crwdns2168:0[bot]crwdne2168:0",
"lang_showontl_followed": "crwdns2170:0crwdne2170:0",
"lang_showontl_notf": "crwdns2172:0crwdne2172:0",
"lang_showontl_domain": "crwdns2174:0crwdne2174:0",
"lang_showontl_listwarn": "crwdns2176:0crwdne2176:0",
"lang_parse_mentioned": "crwdns2178:0crwdne2178:0",
"lang_parse_faved": "crwdns2180:0crwdne2180:0",
"lang_parse_bted": "crwdns2182:0crwdne2182:0",
"lang_parse_btedsimple": "crwdns2184:0crwdne2184:0",
"lang_parse_notftime": "crwdns2186:0crwdne2186:0",
"lang_parse_cwshow": "crwdns2188:0crwdne2188:0",
"lang_parse_fulltext": "crwdns2190:0crwdne2190:0",
"lang_parse_autofold": "crwdns2192:0crwdne2192:0",
"lang_parse_more": "crwdns2194:0crwdne2194:0",
"lang_parse_url": "crwdns2196:0crwdne2196:0",
"lang_parse_tagTL": "crwdns2198:0{{tag}}crwdne2198:0",
"lang_parse_tagtoot": "crwdns2200:0{{tag}}crwdne2200:0",
"lang_parse_tagpin": "crwdns2202:0{{tag}}crwdne2202:0",
"lang_parse_public": "crwdns2204:0crwdne2204:0",
"lang_parse_unlisted": "crwdns2206:0crwdne2206:0",
"lang_parse_private": "crwdns2208:0crwdne2208:0",
"lang_parse_direct": "crwdns2210:0crwdne2210:0",
"lang_parse_clickcopy": "crwdns2212:0crwdne2212:0",
"lang_parse_clickcopyurl": "crwdns2214:0crwdne2214:0",
"lang_parse_trans": "crwdns2216:0crwdne2216:0",
"lang_parse_replyto": "crwdns2218:0crwdne2218:0",
"lang_parse_bt": "crwdns2220:0crwdne2220:0",
"lang_parse_fav": "crwdns2222:0crwdne2222:0",
"lang_parse_quote": "crwdns2224:0crwdne2224:0",
"lang_parse_del": "crwdns2226:0crwdne2226:0",
"lang_parse_pin": "crwdns2228:0crwdne2228:0",
"lang_parse_det": "crwdns2230:0crwdne2230:0",
"lang_parse_redraft": "crwdns2232:0crwdne2232:0",
"lang_parse_followed": "crwdns2234:0crwdne2234:0",
"lang_parse_clientop": "crwdns2236:0crwdne2236:0",
"lang_parse_clienttxt": "crwdns2238:0crwdne2238:0",
"lang_parse_clientno": "crwdns2240:0crwdne2240:0",
"lang_parse_clientemp": "crwdns2242:0crwdne2242:0",
"lang_parse_clientmute": "crwdns2244:0crwdne2244:0",
"lang_parse_mute": "crwdns2246:0crwdne2246:0",
"lang_parse_voted": "crwdns2392:0crwdne2392:0",
"lang_parse_vote": "crwdns2394:0crwdne2394:0",
"lang_parse_unvoted": "crwdns2396:0crwdne2396:0",
"lang_parse_endedvote": "crwdns2398:0crwdne2398:0",
"lang_misskeyparse_renote": "crwdns2248:0crwdne2248:0",
"lang_misskeyparse_renoteqt": "crwdns2250:0crwdne2250:0",
"lang_misskeyparse_reaction": "crwdns2252:0crwdne2252:0",
"lang_misskeyparse_tagnostr": "crwdns2254:0crwdne2254:0",
"lang_misskeyparse_listnostr": "crwdns2256:0crwdne2256:0",
"lang_misskeyparse_home": "crwdns2258:0crwdne2258:0",
"lang_misskeyparse_followers": "crwdns2260:0crwdne2260:0",
"lang_misskeyparse_specified": "crwdns2262:0crwdne2262:0",
"lang_misskeyparse_qt": "crwdns2264:0crwdne2264:0",
"lang_misskeyparse_renoted": "crwdns2266:0crwdne2266:0",
"lang_misskeyparse_quoted": "crwdns2268:0crwdne2268:0",
"lang_misskeyparse_reacted": "crwdns2372:0crwdne2372:0",
"lang_setting_time": "crwdns2272:0{{set}}crwdne2272:0",
"lang_setting_theme": "crwdns2274:0{{set}}crwdne2274:0",
"lang_setting_nsfw": "crwdns2276:0{{set}}crwdne2276:0",
"lang_setting_cw": "crwdns2278:0{{set}}crwdne2278:0",
"lang_setting_cwtext": "crwdns2280:0{{set}}crwdne2280:0",
"lang_setting_cws": "crwdns2282:0{{set}}crwdne2282:0",
"lang_setting_rp": "crwdns2284:0{{set}}crwdne2284:0",
"lang_setting_vis": "crwdns2286:0{{set}}crwdne2286:0",
"lang_setting_popup": "crwdns2288:0{{set}}crwdne2288:0",
"lang_setting_off": "crwdns2290:0crwdne2290:0",
"lang_setting_s": "crwdns2292:0crwdne2292:0",
"lang_setting_box": "crwdns2294:0{{set}}crwdne2294:0",
"lang_setting_gif": "crwdns2296:0{{set}}crwdne2296:0",
"lang_setting_selt": "crwdns2298:0{{set1}}crwdnd2298:0{{set2}}crwdne2298:0",
"lang_setting_autocw": "crwdns2300:0{{set1}}crwdnd2300:0{{set2}}crwdne2300:0",
"lang_setting_width": "crwdns2302:0{{set}}crwdne2302:0",
"lang_setting_fixwidth": "crwdns2386:0{{set}}crwdne2386:0",
"lang_setting_img": "crwdns2304:0{{set}}crwdne2304:0",
"lang_setting_font": "crwdns2306:0{{set}}crwdne2306:0",
"lang_setting_default": "crwdns2308:0crwdne2308:0",
"lang_setting_size": "crwdns2310:0{{set}}crwdne2310:0",
"lang_setting_imgheight": "crwdns2312:0{{set}}crwdne2312:0",
"lang_setting_ticker": "crwdns2314:0{{set}}crwdne2314:0",
"lang_setting_animation": "crwdns2400:0{{set}}crwdne2400:0",
"lang_setting_tag": "crwdns2316:0{{set}}crwdne2316:0",
"lang_setting_boxConfirm": "crwdns2318:0{{set}}crwdne2318:0",
"lang_setting_ul": "crwdns2320:0{{set}}crwdne2320:0",
"lang_setting_notf": "crwdns2322:0{{set}}crwdne2322:0",
"lang_setting_quote": "crwdns2324:0{{set}}crwdne2324:0",
"lang_setting_via": "crwdns2326:0{{set}}crwdne2326:0",
"lang_setting_mov": "crwdns2328:0{{set}}crwdne2328:0",
"lang_setting_setasread": "crwdns2330:0{{set}}crwdne2330:0",
"lang_setting_main": "crwdns2332:0{{set}}crwdne2332:0",
"lang_setting_sec": "crwdns2334:0{{set}}crwdne2334:0",
"lang_setting_ksref": "crwdns2336:0crwdne2336:0",
"lang_setting_nomuting": "crwdns2338:0crwdne2338:0",
"lang_setting_notftest": "crwdns2340:0crwdne2340:0",
"lang_setting_notftestprof": "crwdns2342:0crwdne2342:0",
"lang_setting_exportwarn": "crwdns2344:0crwdne2344:0",
"lang_setting_importwarn": "crwdns2346:0crwdne2346:0"
}

View File

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

View File

@@ -2,114 +2,90 @@
//最初に読むやつ //最初に読むやつ
//アスタルテ判定初期化 //アスタルテ判定初期化
localStorage.removeItem('kirishima') localStorage.removeItem("kirishima")
localStorage.removeItem('quoters') localStorage.removeItem("quoters")
localStorage.removeItem('imas') localStorage.removeItem("imas")
localStorage.removeItem('image') localStorage.removeItem("image");
localStorage.removeItem('stable') localStorage.removeItem("stable")
localStorage.setItem('mode_misskey.xyz', 'misskey') localStorage.setItem("mode_misskey.xyz", "misskey")
function ck() { function ck() {
var main = localStorage.getItem('main') var main = localStorage.getItem("main");
if (!main) { if (!main) {
localStorage.setItem('main', 0) localStorage.setItem("main", 0)
} }
var domainz = localStorage.getItem("domain_0");
var at = localStorage.getItem("acct_0_at");
//コード受信 //コード受信
if (location.search) { if (location.search) {
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/) var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
var mode = m[1] var mode = m[1];
var codex = m[2] var codex = m[2];
if (mode == 'manager' || mode == 'login') { if (mode == "manager" || mode == "login") {
code(codex, mode) code(codex, mode);
} else { } else {
} }
} }
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
if (!multi || multi == '[]') { if (!multi || multi == "[]") {
var date = new Date() var date = new Date();
localStorage.setItem('showSupportMe', date.getMonth() + 2) localStorage.setItem("showSupportMe", date.getMonth() + 2)
location.href = 'acct.html?mode=first&code=true' location.href = "acct.html?mode=first&code=true"
} else { } else {
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
var jp = false Object.keys(obj).forEach(function (key) {
Object.keys(obj).forEach(function(key) { var acct = obj[key];
var acct = obj[key]
if (acct.domain) { if (acct.domain) {
refresh(key, true) refresh(key, true)
} }
if (acct.domain == 'mstdn.jp') { });
jp = true
}
})
if (obj[0].domain) { if (obj[0].domain) {
$('#tl').show() $("#tl").show();
ticker() ticker();
multiSelector(false) multiSelector(false);
verck(ver, jp) verck(ver);
$('.stw').show() $(".stw").show()
let tipsName = localStorage.getItem('tips') $("#something-wrong img").attr("src", "../../img/thinking.svg")
const matchCID = /custom:([abcdef0-9]{8}-[abcdef0-9]{4}-4[abcdef0-9]{3}-[abcdef0-9]{4}-[abcdef0-9]{12})/
if (tipsName) {
if(tipsName.match(matchCID)) {
const id = tipsName.match(matchCID)[1]
tips('custom', id)
} else {
tips(tipsName)
}
}
$('#something-wrong img').attr('src', '../../img/thinking.svg')
} }
} }
} }
ck() ck();
//ログインポップアップ //ログインポップアップ
function login(url) { function login(url) {
if ($('#linux:checked').val() == 'on') { if ($('#linux:checked').val() == "on") {
var red = 'urn:ietf:wg:oauth:2.0:oob' var red = "urn:ietf:wg:oauth:2.0:oob"
} else { } else {
var red = 'thedesk://login' var red = 'thedesk://login';
} }
localStorage.setItem('redirect', red) localStorage.setItem("redirect", red);
var start = 'https://' + url + '/api/v1/apps' var start = "https://" + url + "/api/v1/apps";
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send( httpreq.send(JSON.stringify({
JSON.stringify({ scopes: 'read write follow',
scopes: 'read write follow', client_name: "TheDesk(PC)",
client_name: 'TheDesk(PC)', redirect_uris: red,
redirect_uris: red, website: "https://thedesk.top"
website: 'https://thedesk.top' }));
}) httpreq.onreadystatechange = function () {
)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
setLog(start, this.status, json) "client_id"] + "&client_secret=" + json["client_secret"] +
} "&response_type=code&redirect_uri=" + red + "&scope=read+write+follow";
var auth = localStorage.setItem("domain_" + acct_id, url);
'https://' + localStorage.setItem("client_id", json["client_id"]);
url + localStorage.setItem("client_secret", json["client_secret"]);
'/oauth/authorize?client_id=' + $("#auth").show();
json['client_id'] + $("#masara").hide();
'&client_secret=' + postMessage(["openUrl", auth], "*")
json['client_secret'] +
'&response_type=code&redirect_uri=' +
red +
'&scope=read+write+follow'
localStorage.setItem('domain_' + acct_id, url)
localStorage.setItem('client_id', json['client_id'])
localStorage.setItem('client_secret', json['client_secret'])
$('#auth').show()
$('#masara').hide()
postMessage(['openUrl', auth], '*')
if ($('#linux:checked').val() == 'on') { if ($('#linux:checked').val() == "on") {
} else { } else {
postMessage(['sendSinmpleIpc', 'quit'], '*') postMessage(["sendSinmpleIpc", "quit"], "*")
} }
} }
} }
@@ -117,509 +93,441 @@ function login(url) {
//テキストボックスにURL入れた //テキストボックスにURL入れた
function instance() { function instance() {
var url = $('#url').val() var url = $("#url").val();
login(url) login(url);
} }
//コードを入れた後認証 //コードを入れた後認証
function code(code, mode) { function code(code, mode) {
var red = localStorage.getItem('redirect') var red = localStorage.getItem("redirect");
localStorage.removeItem('redirect') localStorage.removeItem("redirect")
if (!code) { if (!code) {
var code = $('#code').val() var code = $("#code").val();
} }
if (localStorage.getItem('domain_tmp')) { if (localStorage.getItem("domain_tmp")) {
var url = localStorage.getItem('domain_tmp') var url = localStorage.getItem("domain_tmp");
} else { } else {
var url = localStorage.getItem('domain_' + acct_id) var url = localStorage.getItem("domain_" + acct_id);
} }
var start = 'https://' + url + '/oauth/token' var start = "https://" + url + "/oauth/token";
var id = localStorage.getItem('client_id') var id = localStorage.getItem("client_id");
var secret = localStorage.getItem('client_secret') var secret = localStorage.getItem("client_secret");
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
}, },
body: JSON.stringify({ body: JSON.stringify({
grant_type: 'authorization_code', grant_type: "authorization_code",
redirect_uri: red, redirect_uri: red,
client_id: id, client_id: id,
client_secret: secret, client_secret: secret,
code: code code: code
}) })
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
todo(json);
if (json["access_token"]) {
localStorage.setItem(url + "_at", json["access_token"]);
if (mode == "manager") {
getdataAdv(url, json["access_token"]);
} else {
getdata();
} }
return response.json()
}) }
.catch(function(error) { });
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
todo(json)
if (json['access_token']) {
localStorage.setItem(url + '_at', json['access_token'])
if (mode == 'manager') {
getdataAdv(url, json['access_token'])
} else {
getdata()
}
}
})
} }
//ユーザーデータ取得(最初) //ユーザーデータ取得(最初)
function getdata() { function getdata() {
var acct_id = 0 var acct_id = 0;
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/accounts/verify_credentials' var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.error) {
console.error("Error:" + json.error);
M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
return;
} }
}) var avatar = json["avatar"];
.then(function(response) { //missingがmissingなやつ
if (!response.ok) { if (avatar == "/avatars/original/missing.png") {
response.text().then(function(text) { avatar = "./img/missing.svg";
setLog(response.url, response.status, text) }
}) var obj = [{
} at: at,
return response.json() name: json["display_name"],
}) domain: domain,
.catch(function(error) { user: json["acct"],
todo(error) prof: avatar,
setLog(start, 'JSON', error) id: json["id"],
console.error(error) vis: json["source"]["privacy"]
}) }];
.then(function(json) { var json = JSON.stringify(obj);
if (json.error) { localStorage.setItem("multi", json);
console.error('Error:' + json.error) localStorage.setItem("name_" + acct_id, json["display_name"]);
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) localStorage.setItem("user_" + acct_id, json["acct"]);
return localStorage.setItem("user-id_" + acct_id, json["id"]);
} localStorage.setItem("prof_" + acct_id, avatar);
var avatar = json['avatar'] $("#masara").hide();
//missingがmissingなやつ $("#auth").hide();
if (avatar == '/avatars/original/missing.png') { $("#tl").show();
avatar = './img/missing.svg' parseColumn()
} ckdb();
var obj = [ });
{
at: at,
name: json['display_name'],
domain: domain,
user: json['acct'],
prof: avatar,
id: json['id'],
vis: json['source']['privacy']
}
]
var json = JSON.stringify(obj)
localStorage.setItem('multi', json)
localStorage.setItem('name_' + acct_id, json['display_name'])
localStorage.setItem('user_' + acct_id, json['acct'])
localStorage.setItem('user-id_' + acct_id, json['id'])
localStorage.setItem('prof_' + acct_id, avatar)
$('#masara').hide()
$('#auth').hide()
$('#tl').show()
parseColumn()
ckdb()
})
} }
//ユーザーデータ取得(追加) //ユーザーデータ取得(追加)
function getdataAdv(domain, at) { function getdataAdv(domain, at) {
var start = 'https://' + domain + '/api/v1/accounts/verify_credentials' var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.error) {
console.error("Error:" + json.error);
M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
return;
} }
}) var avatar = json["avatar"];
.then(function(response) { //missingがmissingなやつ
if (!response.ok) { if (avatar == "/avatars/original/missing.png") {
response.text().then(function(text) { avatar = "../../img/missing.svg";
setLog(response.url, response.status, text) }
}) if (json["source"]["privacy"]) {
} var priv = json["source"]["privacy"];
return response.json() } else {
}) var priv = "public";
.catch(function(error) { }
todo(error) var add = {
setLog(start, 'JSON', error) at: at,
console.error(error) name: json["display_name"],
}) domain: domain,
.then(function(json) { user: json["acct"],
if (json.error) { prof: avatar,
console.error('Error:' + json.error) id: json["id"],
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) vis: priv
return };
} var multi = localStorage.getItem("multi");
var avatar = json['avatar'] var obj = JSON.parse(multi);
//missingがmissingなやつ var target = obj.lengtth;
if (avatar == '/avatars/original/missing.png') { obj.push(add);
avatar = '../../img/missing.svg' localStorage.setItem("name_" + target, json["display_name"]);
} localStorage.setItem("user_" + target, json["acct"]);
if (json['source']['privacy']) { localStorage.setItem("user-id_" + target, json["id"]);
var priv = json['source']['privacy'] localStorage.setItem("prof_" + target, avatar);
} else { var json = JSON.stringify(obj);
var priv = 'public' localStorage.setItem("multi", json);
} location.href = "index.html";
var add = { });
at: at,
name: json['display_name'],
domain: domain,
user: json['acct'],
prof: avatar,
id: json['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['display_name'])
localStorage.setItem('user_' + target, json['acct'])
localStorage.setItem('user-id_' + target, json['id'])
localStorage.setItem('prof_' + target, avatar)
var json = JSON.stringify(obj)
localStorage.setItem('multi', json)
location.href = 'index.html'
})
} }
//ユーザーデータ更新 //ユーザーデータ更新
function refresh(target, loadskip) { function refresh(target, loadskip) {
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
if (obj[target].mode == 'misskey') { if (obj[target].mode == "misskey") {
return return
} }
var start = 'https://' + obj[target].domain + '/api/v1/accounts/verify_credentials' var start = "https://" + obj[target].domain +
"/api/v1/accounts/verify_credentials";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + obj[target].at 'Authorization': 'Bearer ' + obj[target].at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.error) {
console.error("Error:" + json.error);
M.toast({ html: lang.lang_fatalerroroccured + "Error:" + json.error, displayLength: 5000 })
return;
} }
}) var avatar = json["avatar"];
.then(function(response) { //missingがmissingなやつ
if (!response.ok) { if (avatar == "/avatars/original/missing.png" || !avatar) {
response.text().then(function(text) { avatar = "./img/missing.svg";
setLog(response.url, response.status, text) }
}) var ref = {
} at: obj[target].at,
return response.json() name: json["display_name"],
}) domain: obj[target].domain,
.catch(function(error) { user: json["acct"],
todo(error) prof: avatar,
setLog(start, 'JSON', error) id: json["id"],
console.error(error) vis: json["source"]["privacy"]
}) };
.then(function(json) { localStorage.setItem("name_" + target, json["display_name"]);
if (json.error) { localStorage.setItem("user_" + target, json["acct"]);
console.error('Error:' + json.error) localStorage.setItem("user-id_" + target, json["id"]);
M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 }) localStorage.setItem("prof_" + target, avatar);
return localStorage.setItem("follow_" + target, json["following_count"]);
} console.log(obj)
var avatar = json['avatar'] var json = JSON.stringify(obj);
//missingがmissingなやつ localStorage.setItem("multi", json);
if (avatar == '/avatars/original/missing.png' || !avatar) { if (!loadskip) {
avatar = './img/missing.svg' load();
} }
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']
}
if (obj[target].background) {
ref.background = obj[target].background
}
if (obj[target].text) {
ref.text = obj[target].text
}
localStorage.setItem('name_' + target, json['display_name'])
localStorage.setItem('user_' + target, json['acct'])
localStorage.setItem('user-id_' + target, json['id'])
localStorage.setItem('prof_' + target, avatar)
localStorage.setItem('follow_' + target, json['following_count'])
if (json['source']['sensitive']) {
localStorage.setItem('nsfw_' + target, 'true')
} else {
localStorage.removeItem('nsfw_' + target)
}
obj[target] = ref
var json = JSON.stringify(obj)
localStorage.setItem('multi', json)
if (!loadskip) {
load()
}
})
} }
//MarkdownやBBCodeの対応、文字数制限をチェック //MarkdownやBBCodeの対応、文字数制限をチェック
//絶対ストリーミングを閉じさせないマン //絶対ストリーミングを閉じさせないマン
function ckdb(acct_id) { function ckdb(acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
localStorage.removeItem('home_' + acct_id) localStorage.removeItem("home_" + acct_id);
localStorage.removeItem('bb_' + acct_id) localStorage.removeItem("bb_" + acct_id);
localStorage.removeItem('md_' + acct_id) localStorage.removeItem("md_" + acct_id);
localStorage.removeItem('local_' + acct_id) localStorage.removeItem("local_" + acct_id);
localStorage.removeItem('public_' + acct_id) localStorage.removeItem("public_" + acct_id);
localStorage.removeItem('notification_' + acct_id) localStorage.removeItem("notification_" + acct_id);
localStorage.removeItem('post_' + acct_id) localStorage.removeItem("post_" + acct_id);
localStorage.removeItem('fav_' + acct_id) localStorage.removeItem("fav_" + acct_id);
localStorage.removeItem('bt_' + acct_id) localStorage.removeItem("bt_" + acct_id);
localStorage.removeItem('followlocale_' + acct_id) localStorage.removeItem("followlocale_" + acct_id);
if (domain == 'kirishima.cloud') { if (domain == "kirishima.cloud") {
localStorage.setItem('kirishima', 'true') localStorage.setItem("kirishima", "true");
} else if (domain == 'imastodon.net') { } else if (domain == "imastodon.net") {
localStorage.setItem('imas', 'true') localStorage.setItem("imas", "true");
$('.imasonly').show() $(".imasonly").show();
} }
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var bbcode = domain + '_bbcode' var bbcode = domain + "_bbcode";
var letters = domain + '_letters' var letters = domain + "_letters";
var quoteMarker = domain + '_quote' var quoteMarker = domain + "_quote";
if (localStorage.getItem('instance')) { if (localStorage.getItem("instance")) {
var json = JSON.parse(localStorage.getItem('instance')) var json = JSON.parse(localStorage.getItem("instance"));
if (json[quoteMarker] == 'enabled') { if (json[quoteMarker] == "enabled") {
localStorage.setItem('quoters', 'true') localStorage.setItem("quoters", "true");
localStorage.setItem('quote_' + acct_id, 'true') localStorage.setItem("quote_" + acct_id, "true");
} }
if (json[bbcode]) { if (json[bbcode]) {
if (json[bbcode] == 'enabled') { if (json[bbcode] == "enabled") {
localStorage.setItem('bb_' + acct_id, 'true') localStorage.setItem("bb_" + acct_id, "true");
} else { } else {
localStorage.removeItem('bb_' + acct_id) localStorage.removeItem("bb_" + acct_id);
$("[data-activates='bbcode']").addClass('disabled') $("[data-activates='bbcode']").addClass("disabled");
$("[data-activates='bbcode']").prop('disabled', true) $("[data-activates='bbcode']").prop("disabled", true);
} }
} else { } else {
localStorage.removeItem('bb_' + acct_id) localStorage.removeItem("bb_" + acct_id);
$("[data-activates='bbcode']").addClass('disabled') $("[data-activates='bbcode']").addClass("disabled");
$("[data-activates='bbcode']").addClass('disabled', true) $("[data-activates='bbcode']").addClass("disabled", true);
} }
if (json[domain + '_markdown'] == 'enabled') { if (json[domain + "_markdown"] == "enabled") {
localStorage.setItem('md_' + acct_id, 'true') localStorage.setItem("md_" + acct_id, "true");
$('.markdown').show() $(".markdown").show();
} else { } else {
$('.anti-markdown').hide() $(".anti-markdown").hide();
$('.markdown').hide() $(".markdown").hide();
localStorage.removeItem('bb_' + acct_id) localStorage.removeItem("bb_" + acct_id);
} }
if (json[domain + '_home']) { if (json[domain + "_home"]) {
localStorage.setItem('home_' + acct_id, json[domain + '_home']) localStorage.setItem("home_" + acct_id, json[domain + "_home"]);
} }
if (json[domain + '_local']) { if (json[domain + "_local"]) {
localStorage.setItem('local_' + acct_id, json[domain + '_local']) localStorage.setItem("local_" + acct_id, json[domain + "_local"]);
} }
if (json[domain + '_public']) { if (json[domain + "_public"]) {
localStorage.setItem('public_' + acct_id, json[domain + '_public']) localStorage.setItem("public_" + acct_id, json[domain + "_public"]);
} }
if (json[domain + '_notification']) { if (json[domain + "_notification"]) {
localStorage.setItem('notification_' + acct_id, json[domain + '_notification']) localStorage.setItem("notification_" + acct_id, json[domain + "_notification"]);
} }
if (json[domain + '_post']) { if (json[domain + "_post"]) {
localStorage.setItem('post_' + acct_id, json[domain + '_post']) localStorage.setItem("post_" + acct_id, json[domain + "_post"]);
} }
if (json[domain + '_fav']) { if (json[domain + "_fav"]) {
localStorage.setItem('fav_' + acct_id, json[domain + '_fav']) localStorage.setItem("fav_" + acct_id, json[domain + "_fav"]);
} }
if (json[domain + '_bt']) { if (json[domain + "_bt"]) {
localStorage.setItem('bt_' + acct_id, json[domain + '_bt']) localStorage.setItem("bt_" + acct_id, json[domain + "_bt"]);
} }
if (json[domain + '_follow']) { if (json[domain + "_follow"]) {
localStorage.setItem('followlocale_' + acct_id, json[domain + '_follow']) localStorage.setItem("followlocale_" + acct_id, json[domain + "_follow"]);
} }
} }
if (localStorage.getItem('mode_' + domain) != 'misskey') { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = 'https://' + domain + '/api/v1/instance' var start = "https://" + domain + "/api/v1/instance";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
console.error(error);
}).then(function (json) {
if (json.error) {
console.error(json.error);
return;
} }
}) if (json) {
.then(function(response) { if (json["max_toot_chars"]) {
return response.json() localStorage.setItem("letters_" + acct_id, json["max_toot_chars"]);
})
.catch(function(error) {
console.error(error)
})
.then(function(json) {
if (json.error) {
console.error(json.error)
return
} }
if (json) { if (json["urls"]["streaming_api"]) {
if (json['max_toot_chars']) { localStorage.setItem("streaming_" + acct_id, json["urls"]["streaming_api"]);
localStorage.setItem('letters_' + acct_id, json['max_toot_chars'])
}
if (json['urls']['streaming_api']) {
localStorage.setItem('streaming_' + acct_id, json['urls']['streaming_api'])
} else {
localStorage.removeItem('streaming_' + acct_id)
}
} }
}) }
});
} else { } else {
} }
} }
//アカウントを選択…を実装 //アカウントを選択…を実装
function multiSelector(parseC) { function multiSelector(parseC) {
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
if (!multi) { if (!multi) {
var obj = [] var obj = [];
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('multi', json) localStorage.setItem("multi", json);
} else { } else {
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
} }
var templete var templete;
if (localStorage.getItem('mainuse') == 'main') { if (localStorage.getItem("mainuse") == "main") {
var last = localStorage.getItem('main') var last = localStorage.getItem("main");
} else if (localStorage.getItem('last-use')) { } else if (localStorage.getItem("last-use")) {
var last = localStorage.getItem('last-use') var last = localStorage.getItem("last-use");
if (last == 'webview' || last == 'noauth') { if (last == "webview" || last == "noauth") {
last = '0' last = "0";
} }
} else { } else {
var last = '0' var last = "0";
} }
last = last + '' last = last + "";
var sel var sel;
if (obj.length < 1) { if (obj.length < 1) {
$('#src-acct-sel').html('<option value="tootsearch">Tootsearch</option>') $("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
$('#add-acct-sel').html('<option value="noauth">' + lang.lang_login_noauth + '</option>') $("#add-acct-sel").html('<option value="noauth">' + lang.lang_login_noauth + '</option>');
} else { } else {
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function (key) {
var acct = obj[key] var acct = obj[key];
var list = key * 1 + 1 var list = key * 1 + 1;
if (key + '' === last) { if (key+"" === last) {
sel = 'selected' sel = "selected";
var domain = acct.domain var domain = acct.domain;
localStorage.setItem('domain_' + key, domain) localStorage.setItem("domain_" + key, domain);
if (idata[domain + '_letters']) { if (idata[domain + "_letters"]) {
$('#textarea').attr('data-length', idata[domain + '_letters']) $("#textarea").attr("data-length", idata[domain + "_letters"])
} else { } else {
var maxletters = localStorage.getItem('letters_' + key) var maxletters = localStorage.getItem("letters_" + key);
if (maxletters > 0) { if (maxletters > 0) {
$('#textarea').attr('data-length', maxletters) $("#textarea").attr("data-length", maxletters)
} else { } else {
$('#textarea').attr('data-length', 500) $("#textarea").attr("data-length", 500)
} }
} }
if (idata[domain + '_glitch']) { if (idata[domain + "_glitch"]) {
$('#local-button').removeClass('hide') $("#local-button").removeClass("hide")
} }
var profimg = acct.prof var profimg = acct.prof;
//localStorage.setItem("prof_" + key, profimg); //localStorage.setItem("prof_" + key, profimg);
if (!profimg) { if (!profimg) {
profimg = '../../img/missing.svg' profimg = "../../img/missing.svg";
} }
$('#acct-sel-prof').attr('src', profimg) $("#acct-sel-prof").attr("src", profimg);
if (domain) { if (domain) {
var cc = '(' + domain + ')' var cc = "(" + domain + ")";
} else { } else {
var cc = '' var cc = "";
} }
$('#toot-post-btn').text(lang.lang_toot + cc) $("#toot-post-btn").text(lang.lang_toot + cc);
if (acct.background && acct.background != 'def' && acct.text && acct.text != 'def') { if (acct.background && acct.background != "def" && acct.text && acct.text != "def") {
$('#toot-post-btn').removeClass('indigo') $("#toot-post-btn").removeClass("indigo");
$('#toot-post-btn').css('background-color', '#' + acct.background) $("#toot-post-btn").css("background-color", "#" + acct.background);
$('#toot-post-btn').css('color', acct.text) $("#toot-post-btn").css("color", acct.text);
} else { } else {
} }
if (domain == 'kirishima.cloud') { if (domain == "kirishima.cloud") {
$('#faicon-btn').show() $("#faicon-btn").show();
} else { } else {
$('#faicon-btn').hide() $("#faicon-btn").hide();
} }
if (domain == 'imastodon.net') { if (domain == "imastodon.net") {
trendTag() trendTag();
} else { } else {
$('#trendtag').html('') $("#trendtag").html("");
} }
} else { } else {
sel = '' sel = "";
} }
templete = templete = '<option value="' + key + '" data-icon="' + acct.prof +
'<option value="' + '" class="left circle" ' + sel + '>' + acct.user + '@' + acct.domain +
key + '</option>';
'" data-icon="' + $(".acct-sel").append(templete);
acct.prof +
'" class="left circle" ' + });
sel + $("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
'>' + $("#add-acct-sel").append('<option value="noauth">' + lang.lang_login_noauth + '</option><option value="webview">Twitter</option>');
acct.user + $("#dir-acct-sel").append('<option value="noauth">' + lang.lang_login_noauth + '</option>');
'@' +
acct.domain +
'</option>'
$('.acct-sel').append(templete)
})
$('#src-acct-sel').append('<option value="tootsearch">Tootsearch</option>')
$('#add-acct-sel').append(
'<option value="noauth">' +
lang.lang_login_noauth +
'</option><option value="webview">Twitter</option>'
)
$('#dir-acct-sel').append('<option value="noauth">' + lang.lang_login_noauth + '</option>')
} }
$('select').formSelect() $('select').formSelect();
if (!parseC) { if(!parseC){
parseColumn(null, true) parseColumn(null, true);
} }
} }
//バージョンエンコ //バージョンエンコ
function enc(ver) { function enc(ver) {
var ver = ver.replace(/\s/g, '') var ver = ver.replace(/\s/g, "");
var ver = ver.replace(/\(/g, '-') var ver = ver.replace(/\(/g, "-");
var ver = ver.replace(/\)/g, '') var ver = ver.replace(/\)/g, "");
var ver = ver.replace(/\[/g, '_') var ver = ver.replace(/\[/g, "_");
var ver = ver.replace(/\]/g, '') var ver = ver.replace(/\]/g, "");
return ver return ver;
} }
//インスタンスティッカー //インスタンスティッカー
function ticker() { function ticker() {
var start = 'https://s.0px.io/json' var start = "https://toot.app/toot/";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
cors: true,
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
console.error(error);
}).then(function (json) {
console.log(json)
if (json) {
localStorage.setItem("ticker", JSON.stringify(json));
} }
}) });
.then(function(response) { }
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
console.error(error)
})
.then(function(json) {
if (json) {
localStorage.removeItem('ticker')
localStorage.setItem('sticker', JSON.stringify(json))
}
})
}

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,232 +1,186 @@
//プラットフォーム別 最後に読むやつ //プラットフォーム別 最後に読むやつ
//リンクを外部で開くか内部で出すか //リンクを外部で開くか内部で出すか
$(document).on('click', 'a', e => { $(document).on('click', 'a', e => {
var $a = $(e.target) var $a = $(e.target);
var url = $a.attr('href') var url = $a.attr('href');
if (!url) { if (!url) {
var url = $a.parent().attr('href') var url = $a.parent().attr('href');
} }
var urls = [] var urls = [];
if (url) { if (url) {
urls = url.match(/https?:\/\/(.+)/) urls = url.match(/https?:\/\/(.+)/);
//トゥートのURLぽかったら //トゥートのURLぽかったら
toot = url.match(/https:\/\/([^+_]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/) toot = url.match(/https:\/\/([^+_]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
if (!toot) { if(!toot){
//Pleroma対策 //Pleroma対策
toot = url.match(/https:\/\/([^+_]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/) toot = url.match(/https:\/\/([^+_]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/);
} }
//タグのURLぽかったら //タグのURLぽかったら
var tags = [] var tags = [];
tags = url.match(/https:\/\/([^+_]+)\/tags\/([_a-zA-Z0-9\&=+\%]+)/) tags = url.match(
/https:\/\/([^+_]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
);
//メンションっぽかったら //メンションっぽかったら
var ats = [] var ats = [];
ats = url.match(/https:\/\/([^+_]+)\/@([_a-zA-Z0-9\&=+\%]+)/) ats = url.match(
/https:\/\/([^+_]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
);
if (toot) { if (toot) {
if (toot[1]) { if (toot[1]) {
var acct_id = $a.parent().attr('data-acct') var acct_id = $a.parent().attr("data-acct");
if (!acct_id) { if (!acct_id) {
acct_id = 0 acct_id = 0;
} }
$a.parent().addClass('loadp') $a.parent().addClass("loadp")
$a.parent().text('Loading...') $a.parent().text("Loading...")
detEx(url, acct_id) detEx(url, acct_id);
} }
} else if (tags) { } else if (tags) {
if (tags[2]) { if (tags[2]) {
var acct_id = $a.parent().attr('data-acct') var acct_id = $a.parent().attr("data-acct");
if (!acct_id) { if (!acct_id) {
acct_id = 0 acct_id = 0;
} }
tl('tag', decodeURI(tags[2]), acct_id, 'add') tl('tag', decodeURI(tags[2]), acct_id, 'add')
} }
} else if (ats) { } else if (ats) {
if (ats[2]) { if (ats[2]) {
//Quesdon判定 //Quesdon判定
if (!~ats[2].indexOf('@')) { if (!~ats[2].indexOf("@")) {
udgEx(url, 'main') udgEx(ats[2] + "@" + ats[1], "main");
return false return false
} else { } else {
if(pwa) { postMessage(["openUrl", url], "*")
return true
} else {
postMessage(['openUrl', url], '*')
}
} }
} }
} else { } else {
if(pwa) {
return true
}
//hrefがhttp/httpsならブラウザで //hrefがhttp/httpsならブラウザで
if (urls) { if (urls) {
if (urls[0]) { if (urls[0]) {
if (~url.indexOf('thedeks.top')) { if (~url.indexOf("thedeks.top")) {
//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot."); //alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
url = 'https://thedesk.top' url = "https://thedesk.top";
} }
postMessage(['openUrl', url], '*') postMessage(["openUrl", url], "*")
} else { } else {
location.href = url
location.href = url;
} }
} else { } else {
location.href = url location.href = url;
} }
} }
} }
return false return false;
}) });
//よく使うライブラリ //よく使うライブラリ
//コピー //コピー
function execCopy(string) { function execCopy(string) {
postMessage(['copy', string], '*') var temp = $("#copy");
return true temp.val(string);
temp.select();
var result = document.execCommand('copy');
return result;
} }
function progshow(e) { function progshow(e) {
if (e.lengthComputable) { if (e.lengthComputable) {
var percent = e.loaded / e.total var percent = e.loaded / e.total;
console.log('Progress: ' + percent * 100) console.log("Progress: " + percent * 100);
$('#imgsel').hide() $("#imgsel").hide();
if (percent < 1) { if (percent < 1) {
$('#imgup').text(Math.floor(percent * 100) + '%') $("#imgup").text(Math.floor(percent * 100) + "%");
} else { } else {
$('#imgup').text(lang.lang_progress) $("#imgup").text(lang.lang_progress);
} }
} }
} }
function opendev() { function opendev() {
var webview = document.getElementById('webview') var webview = document.getElementById("webview");
webview.openDevTools() webview.openDevTools();
/*webview.sendInputEvent({ /*webview.sendInputEvent({
type: "keyDown", type: "keyDown",
keyCode: '2' keyCode: '2'
}); });
*/ */
} }
var soundFile
function playSound() { function playSound() {
window.AudioContext = window.AudioContext || window.webkitAudioContext window.AudioContext = window.AudioContext || window.webkitAudioContext;
if (soundFile) { context = new AudioContext();
soundFile.stop() context.createBufferSource().start(0);
} context.decodeAudioData(request.response, function (buf) {
context = new AudioContext() console.log("Playing:" + source)
context.createBufferSource().start(0) source.buffer = buf;
context.decodeAudioData(request.response, function(buf) { source.loop = false;
//console.log("Playing:" , source) });
source.buffer = buf source = context.createBufferSource();
source.loop = false volumeControl = context.createGain();
}) source.connect(volumeControl);
source = context.createBufferSource() volumeControl.connect(context.destination);
volumeControl = context.createGain() volumeControl.gain.value = 0.8
source.connect(volumeControl) source.start(0);
volumeControl.connect(context.destination)
var cvol = localStorage.getItem('customVol')
if (cvol) {
vol = cvol
} else {
vol = 0.8
}
volumeControl.gain.value = vol
source.start(0)
soundFile = source
} }
function nano() { function nano() {
postMessage(['nano', null], '*') postMessage(["nano", null], "*")
} }
onmessage = function(e) { onmessage = function (e) {
if (e.data[0] == 'details') { if (e.data[0] == "details") {
details(e.data[1][0], e.data[1][1]) details(e.data[1][0], e.data[1][1])
} else if (e.data[0] == 'udg') { } else if (e.data[0] == "udg") {
udg(e.data[1][0], e.data[1][1]) udg(e.data[1][0], e.data[1][1])
} else if (e.data[0] == 'media') { } else if (e.data[0] == "media") {
media(e.data[1][0], e.data[1][1], e.data[1][2], e.data[1][3]) media(e.data[1][0], e.data[1][1], e.data[1][2])
} else if (e.data[0] == 'post') { } else if (e.data[0] == "post") {
post('pass') post("pass")
} else if (e.data[0] == 'toastSaved') { } else if (e.data[0] == "toastSaved") {
var showTxt = `${lang.lang_img_DLDone}${ M.toast({ html: lang.lang_img_DLDone + e.data[1][0] + '<button class="btn-flat toast-action" onclick="openFinder(\'' + e.data[1][1] + '\')">Show</button>', displayLength: 5000 })
e.data[1][0] } else if (e.data[0] == "parseColumn") {
}<button class="btn-flat toast-action" onclick="openFinder('${e.data[1][1]}')">Show</button>`
M.toast({ html: showTxt, displayLength: 5000 })
} else if (e.data[0] == 'parseColumn') {
parseColumn(e.data[1]) parseColumn(e.data[1])
} else if (e.data[0] == 'exportSettingsCore') { } else if (e.data[0] == "exportSettingsCore") {
var exp = exportSettingsCore() var exp = exportSettingsCore()
postMessage(['exportSettingsCoreComplete', [e.data[1], exp]], '*') postMessage(["exportSettingsCoreComplete", [e.data[1], exp]], "*")
} else if (e.data[0] == 'importSettingsCore') { } else if (e.data[0] == "importSettingsCore") {
importSettingsCore(e.data[1]) importSettingsCore(e.data[1])
} else if (e.data[0] == 'fontList') { }else if (e.data[0] == "fontList") {
fontList(e.data[1]) fontList(e.data[1])
} else if (e.data[0] == 'customSoundSave') { } else if (e.data[0] == "customSoundSave") {
customSoundSave(e.data[1][0], e.data[1][1]) customSoundSave(e.data[1][0], e.data[1][1])
} else if (e.data[0] == 'ctLoadCore') { } else if (e.data[0] == "ctLoadCore") {
ctLoadCore(e.data[1]) ctLoadCore(e.data[1])
} else if (e.data[0] == 'ctLoad') { } else if (e.data[0] == "ctLoad") {
ctLoad() ctLoad()
} else if (e.data[0] == 'customConnect') { } else if (e.data[0] == "customConnect") {
customConnect(e.data[1]) customConnect(e.data[1])
} else if (e.data[0] == 'clearCustomImport') { } else if (e.data[0] == "clearCustomImport") {
clearCustomImport() clearCustomImport()
} else if (e.data[0] == 'npCore') { } else if (e.data[0] == "npCore") {
npCore(e.data[1]) npCore(e.data[1]);
} else if (e.data[0] == 'renderMem') { } else if (e.data[0] == "renderMem") {
renderMem(e.data[1][0], e.data[1][1], e.data[1][2], e.data[1][3], e.data[1][4]) renderMem(e.data[1][0], e.data[1][1], e.data[1][2])
} else if (e.data[0] == 'updateProg') { } else if (e.data[0] == "updateProg") {
updateProg(e.data[1]) updateProg(e.data[1]);
} else if (e.data[0] == 'updateMess') { } else if (e.data[0] == "updateMess") {
updateMess(e.data[1]) updateMess(e.data[1]);
} else if (e.data[0] == 'renderAbout') { } else if (e.data[0] == "renderAbout") {
renderAbout(e.data[1]) renderAbout(e.data[1]);
} else if (e.data[0] == 'asRead') { } else if (e.data[0] == "alert") {
asRead()
} else if (e.data[0] == 'asReadEnd') {
asReadEnd()
} else if (e.data[0] == 'accessibility') {
console.log('atrue')
$('body').addClass('accessibility')
$('.window-title').before('<div class="accessMark">Screen Reader Optimized</div>')
} else if (e.data[0] == 'logData') {
$('#logs').val(e.data[1])
var obj = document.getElementById('logs')
obj.scrollTop = obj.scrollHeight
} else if (e.data[0] == 'alert') {
Swal.fire({ Swal.fire({
type: 'info', type: 'info',
title: e.data[1] title: e.data[1]
}) })
} }
} }
/* PWA */ window.addEventListener('load', function() {
if(pwa) { if ('serviceWorker' in navigator) {
function postMessage(e) { navigator.serviceWorker.register("/sw.js")
if (e[0] == 'openUrl') { .then(function(registration) {
urls = e[1].match(/https?:\/\/(.+)/) console.log("serviceWorker registed.");
if (urls) { }).catch(function(error) {
Swal.fire({ console.warn("serviceWorker error.", error);
title: 'Open URL', });
icon: 'info',
html:
`If you are OK, click: <a href="${urls[0]}" target="_blank" class="btn waves-effect">Here</a>`,
showCloseButton: false,
showCancelButton: true,
focusConfirm: false,
confirmButtonText: 'Close'
})
}
} }
} });
}
$('html').addClass(localStorage.getItem('scroll') ? localStorage.getItem('scroll') : '')
const connection = function (event) {
console.log(navigator.onLine, 'network state')
if(!navigator.onLine) {
$('#re-online').addClass('hide')
$('#offline').removeClass('hide')
} else if(!$('#offline').hasClass('hide')) {
$('#offline').addClass('hide')
$('#re-online').removeClass('hide')
}
}
window.onoffline = connection
window.ononline = connection

View File

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

View File

@@ -1,263 +1,136 @@
//TL取得 //TL取得
var websocket
function tl(data) { function tl(data) {
var tlid = 0 var tlid = 0;
if (websocket) { var acct_id = $("#post-acct-sel").val();
websocket.close() var type = $("#type-sel").val();
} var domain = localStorage.getItem("domain_" + acct_id);
var acct_id = $('#post-acct-sel').val()
var type = $('#type-sel').val()
var domain = localStorage.getItem('domain_' + acct_id)
//タグの場合はカラム追加して描画 //タグの場合はカラム追加して描画
if (!type) { if (!type) {
//デフォルト //デフォルト
var type = 'local' var type = "local";
} }
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
$('#notice_nano').text( $("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem(
cap(type, data) + ' TL(' + localStorage.getItem('user_' + acct_id) + '@' + domain + ')' "user_" + acct_id) + "@" + domain + ")");
) var start = "https://" + domain + "/api/v1/timelines/" + com(type, data);
var start = 'https://' + domain + '/api/v1/timelines/' + com(type, data)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { console.error(error);
setLog(response.url, response.status, text) }).then(function (json) {
}) var templete = parse([json[0]], '', acct_id, tlid);
} $("#timeline_nano").html(templete);
return response.json() jQuery("time.timeago").timeago();
}) });
.catch(function(error) {
console.error(error)
})
.then(function(json) {
var templete = parse([json[0]], '', acct_id, tlid)
$('#timeline_nano').html(templete)
jQuery('time.timeago').timeago()
$('#menu').addClass('hide')
})
//Streaming接続 //Streaming接続
var tlid = 0 var websocket = [];
if (type == 'home') { var tlid = 0;
var start = 'wss://' + domain + '/api/v1/streaming/?stream=user&access_token=' + at if (type == "home") {
} else if (type == 'pub') { var start = "wss://" + domain +
var start = 'wss://' + domain + '/api/v1/streaming/?stream=public&access_token=' + at "/api/v1/streaming/?stream=user&access_token=" + at;
} else if (type == 'local') { } else if (type == "pub") {
var start = 'wss://' + domain + '/api/v1/streaming/?stream=public:local&access_token=' + at var start = "wss://" + domain +
} else if (type == 'tag') { "/api/v1/streaming/?stream=public&access_token=" + at;
var start = } else if (type == "local") {
'wss://' + domain + '/api/v1/streaming/?stream=hashtag&tag=' + data + '&access_token=' + at var start = "wss://" + domain +
"/api/v1/streaming/?stream=public:local&access_token=" + at;
} else if (type == "tag") {
var start = "wss://" + domain +
"/api/v1/streaming/?stream=hashtag&tag=" + data + "&access_token=" + at;
} }
websocket = new WebSocket(start) var wsid = websocket.length;
websocket.onopen = function(mess) { websocket[wsid] = new WebSocket(start);
$('#notice_icon_' + tlid).removeClass('red-text') websocket[wsid].onopen = function (mess) {
$("#notice_icon_" + tlid).removeClass("red-text");
} }
websocket.onmessage = function(mess) { websocket[wsid].onmessage = function (mess) {
var typeA = JSON.parse(mess.data).event var typeA = JSON.parse(mess.data).event;
if (typeA == 'update') { if (typeA == "delete") {
var obj = JSON.parse(JSON.parse(mess.data).payload) var obj = JSON.parse(mess.data).payload;
var templete = parse([obj], '', acct_id, tlid) $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
jQuery('time.timeago').timeago() $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
$('#timeline_nano').html(templete) } else if (typeA == "update") {
var obj = JSON.parse(JSON.parse(mess.data).payload);
var templete = parse([obj], '', acct_id, tlid);
$("#timeline_nano").html(templete);
}
websocket[wsid].onclose = function (mess) {
console.error("Close Streaming API:" + type);
} }
} }
websocket.onerror = function(error) { websocket[wsid].onerror = function (error) {
console.error('WebSocket Error ' + error) console.error('WebSocket Error ' + error);
} };
websocket.onclose = function(mess) {
console.error('Close Streaming API:' + type)
}
} }
//TLのタイトル //TLのタイトル
function cap(type, data) { function cap(type, data) {
if (type == 'home') { if (type == "home") {
return 'Home' return "Home"
} else if (type == 'local') { } else if (type == "local") {
return 'Local' return "Local"
} else if (type == 'pub') { } else if (type == "pub") {
return 'Public' return "Public"
} else if (type == 'tag') { } else if (type == "tag") {
return '#' + data return "#" + data
} else if (type == 'list') { } else if (type == "list") {
return 'List(id:' + data + ')' return "List(id:" + data + ")"
} else if (type == 'notf') { } else if (type == "notf") {
return 'Notification' return "Notification"
} }
} }
//TLのURL //TLのURL
function com(type, data) { function com(type, data) {
if (type == 'home') { if (type == "home") {
return 'home?' return "home?"
} else if (type == 'local') { } else if (type == "local") {
return 'public?local=true&' return "public?local=true&"
} else if (type == 'pub') { } else if (type == "pub") {
return 'public?' return "public?"
} else if (type == 'tag') { } else if (type == "tag") {
return 'tag/' + data + '?' return "tag/" + data + "?"
} }
if (type == 'list') { if (type == "list") {
return 'list/' + data + '?' return "list/" + data + "?"
} }
} }
//TLのアイコン //TLのアイコン
function icon(type) { function icon(type) {
if (type == 'home') { if (type == "home") {
return 'home' return "home"
} else if (type == 'local') { } else if (type == "local") {
return 'people_outline' return "people_outline"
} else if (type == 'pub') { } else if (type == "pub") {
return 'language' return "language"
} else if (type == 'tag') { } else if (type == "tag") {
return 'search' return "search"
} }
if (type == 'list') { if (type == "list") {
return 'subject' return "subject"
} }
} }
function todo() {} function todo() { }
function todc() {} function todc() { }
function hide() {} function hide() { }
$(function($) { $(function ($) {
//キーボードショートカット //キーボードショートカット
$(window).keydown(function(e) { $(window).keydown(function (e) {
var hasFocus = $('input').is(':focus') var hasFocus = $('input').is(':focus');
var hasFocus2 = $('textarea').is(':focus') var hasFocus2 = $('textarea').is(':focus');
//Ctrl+Enter:投稿 //Ctrl+Enter:投稿
if (event.ctrlKey) { if (event.ctrlKey) {
if (e.keyCode === 13) { if (e.keyCode === 13) {
post() post();
return false return false;
} }
} }
}) });
}) });
function set() {
$('#menu').toggleClass('hide')
if ($('#menu').hasClass('hide')) {
$('#setting').text('Setting')
} else {
$('#setting').text('Close')
}
}
var multi = localStorage.getItem('multi')
if (!multi) {
var obj = [
{
at: localStorage.getItem(localStorage.getItem('domain_' + acct_id) + '_at'),
name: localStorage.getItem('name_' + acct_id),
domain: localStorage.getItem('domain_' + acct_id),
user: localStorage.getItem('user_' + acct_id),
prof: localStorage.getItem('prof_' + acct_id)
}
]
var json = JSON.stringify(obj)
localStorage.setItem('multi', json)
} else {
var obj = JSON.parse(multi)
}
var templete
var last = localStorage.getItem('last-use')
var sel
Object.keys(obj).forEach(function(key) {
var acct = obj[key]
var list = key * 1 + 1
if (key == last) {
sel = 'selected'
} else {
sel = ''
}
templete = `<option value="${key}" ${sel}>${acct.user}@${acct.domain}</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) {
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
$('#textarea').val('')
}
}
}
function loadVis(acct_id) {
var vist = localStorage.getItem('vis')
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' || vist == 'useapi') {
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
}
}
}
function loader() {
var acct_id = $('#post-acct-sel').val()
console.log(loadVis(acct_id))
$('#vis-sel').val(loadVis(acct_id))
}
loader()
$('textarea').height(15) //init
$('textarea').css('lineHeight', '1rem') //init
$('textarea').on('input', function(evt) {
if (evt.target.scrollHeight > evt.target.offsetHeight) {
$(evt.target).height(evt.target.scrollHeight)
} else {
var lineHeight = Number(
$(evt.target)
.css('lineHeight')
.split('px')[0]
)
while (true) {
$(evt.target).height($(evt.target).height() - lineHeight)
if (evt.target.scrollHeight > evt.target.offsetHeight) {
$(evt.target).height(evt.target.scrollHeight)
break
}
}
}
})

View File

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

View File

@@ -1,235 +1,172 @@
var electron = require('electron') var electron = require("electron");
const shell = electron.shell const shell = electron.shell;
var ipc = electron.ipcRenderer var ipc = electron.ipcRenderer;
//title bar onmessage = function (e) {
window.addEventListener('DOMContentLoaded', () => { if (e.data[0] == "openUrl") {
document.title = 'TheDesk' urls = e.data[1].match(/https?:\/\/(.+)/);
ipc.send('acsCheck', '') if (urls) {
}) shell.openExternal(e.data[1]);
}
onmessage = function(e) { } else if (e.data[0] == "sendSinmpleIpc") {
if (e.data[0] == 'openUrl') { ipc.send(e.data[1], "")
urls = e.data[1].match(/https?:\/\/(.+)/) } else if (e.data[0] == "dialogStore") {
if (urls) { ipc.send("dialogStore", e.data[1])
shell.openExternal(e.data[1]) } else if (e.data[0] == "bmpImage") {
} ipc.send('bmp-image', e.data[1]);
} else if (e.data[0] == 'sendSinmpleIpc') { } else if (e.data[0] == "dialogCW") {
ipc.send(e.data[1], '') ipc.send("dialogCW", e.data[1])
} else if (e.data[0] == 'dialogStore') { } else if (e.data[0] == "nativeNotf") {
ipc.send('dialogStore', e.data[1]) console.log(e.data[1])
} else if (e.data[0] == 'bmpImage') { ipc.send('native-notf', e.data[1]);
ipc.send('bmp-image', e.data[1]) } else if (e.data[0] == "dialogClient") {
} else if (e.data[0] == 'resizeImage') { ipc.send("dialogClient", e.data[1])
ipc.send('resize-image', e.data[1]) } else if (e.data[0] == "generalDL") {
} else if (e.data[0] == 'stampImage') { ipc.send('general-dl', e.data[1]);
ipc.send('stamp-image', e.data[1]) } else if (e.data[0] == "openFinder") {
} else if (e.data[0] == 'dialogCW') { ipc.send('open-finder', e.data[1]);
ipc.send('dialogCW', e.data[1]) } else if (e.data[0] == "columnDel") {
} else if (e.data[0] == 'nativeNotf') { ipc.send('column-del', e.data[1]);
console.log(e.data[1]) } else if (e.data[0] == "lang") {
ipc.send('native-notf', e.data[1]) ipc.send('lang', e.data[1]);
} else if (e.data[0] == 'dialogClient') { } else if (e.data[0] == "exportSettings") {
ipc.send('dialogClient', e.data[1]) ipc.send('exportSettings', e.data[1]);
} else if (e.data[0] == 'generalDL') { } else if (e.data[0] == "exportSettingsCoreComplete") {
ipc.send('general-dl', e.data[1]) ipc.send('export', e.data[1]);
} else if (e.data[0] == 'openFinder') { } else if (e.data[0] == "importSettings") {
ipc.send('openFinder', e.data[1]) ipc.send('importSettings', e.data[1]);
} else if (e.data[0] == 'columnDel') { } else if (e.data[0] == "customSound") {
ipc.send('column-del', e.data[1]) ipc.send('customSound', e.data[1]);
} else if (e.data[0] == 'lang') { } else if (e.data[0] == "themeJsonDelete") {
ipc.send('lang', e.data[1]) ipc.send('theme-json-delete', e.data[1]);
} else if (e.data[0] == 'exportSettings') { } else if (e.data[0] == "themeJsonCreate") {
ipc.send('exportSettings', e.data[1]) ipc.send('theme-json-create', e.data[1]);
} else if (e.data[0] == 'exportSettingsCoreComplete') { } else if (e.data[0] == "themeJsonRequest") {
ipc.send('export', e.data[1]) ipc.send('theme-json-request', e.data[1]);
} else if (e.data[0] == 'importSettings') { } else if (e.data[0] == "ha") {
ipc.send('importSettings', e.data[1]) ipc.send('ha', e.data[1]);
} else if (e.data[0] == 'customSound') { } else if (e.data[0] == "aboutData") {
ipc.send('customSound', e.data[1]) ipc.send('aboutData', "");
} else if (e.data[0] == 'themeJsonDelete') { } else if (e.data[0] == "itunes") {
ipc.send('theme-json-delete', e.data[1]) console.log("NowPlaying")
} else if (e.data[0] == 'themeJsonCreate') { ipc.send("itunes", e.data[1])
ipc.send('theme-json-create', e.data[1]) } else if (e.data[0] == "themeCSSRequest") {
} else if (e.data[0] == 'themeJsonRequest') { ipc.send('theme-css-request', e.data[1]);
ipc.send('theme-json-request', e.data[1]) } else if (e.data[0] == "customCSSRequest") {
} else if (e.data[0] == 'ha') { ipc.send('custom-css-request', e.data[1]);
ipc.send('ha', e.data[1]) } else if (e.data[0] == "downloadButton") {
} else if (e.data[0] == 'frameSet') { ipc.send('download-btn', e.data[1]);
ipc.send('frameSet', e.data[1]) } else if (e.data[0] == "nano") {
} else if (e.data[0] == 'ua') { ipc.send('nano', null);
ipc.send('ua', e.data[1]) }
} else if (e.data[0] == 'aboutData') {
ipc.send('aboutData', '')
} else if (e.data[0] == 'itunes') {
console.log('NowPlaying')
ipc.send('itunes', e.data[1])
} else if (e.data[0] == 'themeCSSRequest') {
ipc.send('theme-css-request', e.data[1])
} else if (e.data[0] == 'customCSSRequest') {
ipc.send('custom-css-request', e.data[1])
} else if (e.data[0] == 'downloadButton') {
ipc.send('download-btn', e.data[1])
} else if (e.data[0] == 'nano') {
ipc.send('nano', null)
} else if (e.data[0] == 'asReadComp') {
ipc.send('sendMarkersComplete', null)
} else if (e.data[0] == 'copy') {
ipc.send('copy', e.data[1])
} else if (e.data[0] == 'log') {
ipc.send('log', e.data[1])
}
} }
//version.js //version.js
ipc.send('getPlatform', '') ipc.send("getPlatform", "")
ipc.on('platform', function(event, args) { ipc.on('platform', function (event, args) {
localStorage.setItem('platform', args[0]) localStorage.setItem("platform", args[0])
localStorage.setItem('bit', args[1]) localStorage.setItem("bit", args[1])
localStorage.setItem('about', JSON.stringify([args[2], args[3], args[4], args[5]])) localStorage.setItem("about", JSON.stringify([args[2], args[3], args[4], args[5]]))
}) })
ipc.on('reload', function(event, arg) { ipc.on('reload', function (event, arg) {
location.reload() location.reload();
}) })
//Native Notf //Native Notf
ipc.on('shownotf', function(event, args) { ipc.on('shownotf', function (event, args) {
if (args['type'] == 'toot') { if (args["type"] == "toot") {
postMessage(['details', [id, acct_id]], '*') postMessage(["details", [id, acct_id]], "*")
} else if (args['type'] == 'userdata') { } else if (args["type"] == "userdata") {
postMessage(['udg', [user, acct_id]], '*') postMessage(["udg", [user, acct_id]], "*")
} }
}) })
//first.js //first.js
ipc.on('custom-css-response', function(event, arg) { ipc.on('custom-css-response', function (event, arg) {
if (arg == '') { if (arg == "") { return false; }
return false var styleNode = document.createElement("style");
} styleNode.setAttribute("type", "text/css")
var styleNode = document.createElement('style')
styleNode.setAttribute('type', 'text/css')
var content = document.createTextNode(arg) var content = document.createTextNode(arg)
styleNode.append(content) styleNode.append(content)
document.getElementsByTagName('head')[0].append(styleNode) document.getElementsByTagName("head")[0].append(styleNode)
}) })
ipc.on('theme-css-response', function(event, arg) { ipc.on('theme-css-response', function (event, arg) {
if (arg == '') { if (arg == "") { return false; }
return false var styleNode = document.createElement("style");
} styleNode.setAttribute("type", "text/css")
var styleNode = document.createElement('style')
styleNode.setAttribute('type', 'text/css')
var content = document.createTextNode(arg) var content = document.createTextNode(arg)
styleNode.append(content) styleNode.append(content)
document.getElementsByTagName('head')[0].append(styleNode) document.getElementsByTagName("head")[0].append(styleNode)
}) })
//img.js //img.js
ipc.on('bmp-img-comp', function(event, b64) { ipc.on('bmp-img-comp', function (event, b64) {
if (b64[2]) { postMessage(["media", [b64[0], "image/png", b64[1]]], "*")
var stamped = true });
} else {
var stamped = false
}
postMessage(['media', [b64[0], 'image/png', b64[1], stamped]], '*')
})
ipc.on('resizeJudgement', function(event, b64) {
var resize = localStorage.getItem('uploadCrop') * 1
if (resize > 0) {
var element = new Image()
var width
element.onload = function() {
var width = element.naturalWidth
var height = element.naturalHeight
if (width > resize || height > resize) {
ipc.send('resize-image', [b64[0], resize])
} else {
postMessage(['media', [b64[0], 'image/png', b64[1]]], '*')
}
}
element.src = 'data:image/png;base64,' + b64[0]
} else {
postMessage(['media', [b64[0], 'image/png', b64[1]]], '*')
}
})
//ui,img.js //ui,img.js
ipc.on('general-dl-prog', function(event, arg) { ipc.on('general-dl-prog', function (event, arg) {
console.log('Progress: ' + arg) console.log("Progress: " + arg);
}) })
ipc.on('general-dl-message', function(event, arg) { ipc.on('general-dl-message', function (event, arg) {
var argC = arg.replace(/\\/g, '\\\\') var argC = arg.replace(/\\/g, "\\\\") + "\\\\.";
console.log('saved') console.log("saved")
postMessage(['toastSaved', [arg, argC]], '*') postMessage(["toastSaved", [arg, argC]], "*")
}) })
//setting.js //setting.js
ipc.on('langres', function(event, arg) { ipc.on('langres', function (event, arg) {
location.href = '../' + arg + '/setting.html' location.href = "../" + arg + "/setting.html"
}) });
ipc.on('exportSettingsFile', function(event, arg) { ipc.on('exportSettingsFile', function (event, arg) {
postMessage(['exportSettingsCore', arg], '*') postMessage(["exportSettingsCore", arg], "*")
}) });
ipc.on('exportAllComplete', function(event, arg) { ipc.on('exportAllComplete', function (event, arg) {
postMessage(['alert', 'Complete'], '*') postMessage(["alert", "Complete"], "*")
}) });
ipc.on('config', function(event, arg) { ipc.on('config', function (event, arg) {
postMessage(['importSettingsCore', arg], '*') postMessage(["importSettingsCore", arg], "*")
}) });
ipc.on('savefolder', function(event, arg) { ipc.on('savefolder', function (event, arg) {
localStorage.setItem('savefolder', arg) localStorage.setItem("savefolder", arg);
}) });
ipc.on('font-list', function(event, arg) { ipc.on('font-list', function (event, arg) {
postMessage(['fontList', arg], '*') postMessage(["fontList", arg], "*")
}) });
ipc.on('customSoundRender', function(event, args) { ipc.on('customSoundRender', function (event, args) {
postMessage(['customSoundSave', [args[0], args[1]]], '*') postMessage(["customSoundSave", [args[0], args[1]]], "*")
}) });
ipc.on('theme-json-list-response', function(event, args) { ipc.on('theme-json-list-response', function (event, args) {
postMessage(['ctLoadCore', args], '*') postMessage(["ctLoadCore", args], "*")
}) });
ipc.on('theme-json-delete-complete', function(event, args) { ipc.on('theme-json-delete-complete', function (event, args) {
postMessage(['ctLoad', ''], '*') postMessage(["ctLoad", ""], "*")
}) });
ipc.on('theme-json-response', function(event, args) { ipc.on('theme-json-response', function (event, args) {
postMessage(['customConnect', args], '*') postMessage(["customConnect", args], "*")
}) });
ipc.on('theme-json-create-complete', function(event, args) { ipc.on('theme-json-create-complete', function (event, args) {
if(args != '') alert(args) postMessage(["clearCustomImport", ""], "*")
postMessage(['clearCustomImport', ''], '*') postMessage(["ctLoad", ""], "*")
postMessage(['ctLoad', ''], '*') });
})
//spotify.js //spotify.js
ipc.on('itunes-np', function(event, arg) { ipc.on('itunes-np', function (event, arg) {
postMessage(['npCore', arg], '*') postMessage(["npCore", arg], "*")
}) })
//tips.js //tips.js
ipc.on('memory', function(event, arg) { ipc.on('memory', function (event, arg) {
var use = arg[0] var use = arg[0];
var cpu = arg[1] var cpu = arg[1];
var total = arg[2] var total = arg[2]
postMessage(['renderMem', [use, cpu, total, arg[3], arg[4]]], '*') postMessage(["renderMem", [use, cpu, total]], "*")
})
//log
ipc.on('logData', function(event, args) {
postMessage(['logData', args], '*')
}) })
//update.html //update.html
ipc.on('prog', function(event, arg) { ipc.on('prog', function (event, arg) {
postMessage(['updateProg', arg], '*') postMessage(["updateProg", arg], "*")
}) })
ipc.on('mess', function(event, arg) { ipc.on('mess', function (event, arg) {
postMessage(['updateMess', arg], '*') postMessage(["updateMess", arg], "*")
}) })
//misc var webviewDom = document.getElementById('webview');
ipc.on('asRead', function(event, arg) {
postMessage(['asRead', ''], '*')
})
ipc.on('asReadEnd', function(event, arg) {
postMessage(['asReadEnd', ''], '*')
})
ipc.on('accessibility', function(event, arg) {
postMessage(['accessibility', 'true'], '*')
})
var webviewDom = document.getElementById('webview')
if (webviewDom) { if (webviewDom) {
webviewDom.addEventListener('new-window', function(e) { webviewDom.addEventListener('new-window', function (e) {
shell.openExternal(e.url) shell.openExternal(e.url);
}) });
} }

View File

@@ -1,15 +1,18 @@
/*! https://mths.be/punycode v1.4.1 by @mathias */ /*! https://mths.be/punycode v1.4.1 by @mathias */
;(function(root) { ;(function(root) {
/** Detect free variables */ /** Detect free variables */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports var freeExports = typeof exports == 'object' && exports &&
var freeModule = typeof module == 'object' && module && !module.nodeType && module !exports.nodeType && exports;
var freeGlobal = typeof global == 'object' && global var freeModule = typeof module == 'object' && module &&
!module.nodeType && module;
var freeGlobal = typeof global == 'object' && global;
if ( if (
freeGlobal.global === freeGlobal || freeGlobal.global === freeGlobal ||
freeGlobal.window === freeGlobal || freeGlobal.window === freeGlobal ||
freeGlobal.self === freeGlobal freeGlobal.self === freeGlobal
) { ) {
root = freeGlobal root = freeGlobal;
} }
/** /**
@@ -18,33 +21,39 @@
* @type Object * @type Object
*/ */
var punycode, var punycode,
/** Highest positive signed 32-bit float value */
maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 /** Highest positive signed 32-bit float value */
/** Bootstring parameters */ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
base = 36,
tMin = 1, /** Bootstring parameters */
tMax = 26, base = 36,
skew = 38, tMin = 1,
damp = 700, tMax = 26,
initialBias = 72, skew = 38,
initialN = 128, // 0x80 damp = 700,
delimiter = '-', // '\x2D' initialBias = 72,
/** Regular expressions */ initialN = 128, // 0x80
regexPunycode = /^xn--/, delimiter = '-', // '\x2D'
regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators /** Regular expressions */
/** Error messages */ regexPunycode = /^xn--/,
errors = { regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
overflow: 'Overflow: input needs wider integers to process', regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
'invalid-input': 'Invalid input' /** Error messages */
}, errors = {
/** Convenience shortcuts */ 'overflow': 'Overflow: input needs wider integers to process',
baseMinusTMin = base - tMin, 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
floor = Math.floor, 'invalid-input': 'Invalid input'
stringFromCharCode = String.fromCharCode, },
/** Temporary variable */
key /** Convenience shortcuts */
baseMinusTMin = base - tMin,
floor = Math.floor,
stringFromCharCode = String.fromCharCode,
/** Temporary variable */
key;
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
@@ -55,7 +64,7 @@
* @returns {Error} Throws a `RangeError` with the applicable error message. * @returns {Error} Throws a `RangeError` with the applicable error message.
*/ */
function error(type) { function error(type) {
throw new RangeError(errors[type]) throw new RangeError(errors[type]);
} }
/** /**
@@ -67,12 +76,12 @@
* @returns {Array} A new array of values returned by the callback function. * @returns {Array} A new array of values returned by the callback function.
*/ */
function map(array, fn) { function map(array, fn) {
var length = array.length var length = array.length;
var result = [] var result = [];
while (length--) { while (length--) {
result[length] = fn(array[length]) result[length] = fn(array[length]);
} }
return result return result;
} }
/** /**
@@ -86,19 +95,19 @@
* function. * function.
*/ */
function mapDomain(string, fn) { function mapDomain(string, fn) {
var parts = string.split('@') var parts = string.split('@');
var result = '' var result = '';
if (parts.length > 1) { if (parts.length > 1) {
// In email addresses, only the domain name should be punycoded. Leave // In email addresses, only the domain name should be punycoded. Leave
// the local part (i.e. everything up to `@`) intact. // the local part (i.e. everything up to `@`) intact.
result = parts[0] + '@' result = parts[0] + '@';
string = parts[1] string = parts[1];
} }
// Avoid `split(regex)` for IE8 compatibility. See #17. // Avoid `split(regex)` for IE8 compatibility. See #17.
string = string.replace(regexSeparators, '\x2E') string = string.replace(regexSeparators, '\x2E');
var labels = string.split('.') var labels = string.split('.');
var encoded = map(labels, fn).join('.') var encoded = map(labels, fn).join('.');
return result + encoded return result + encoded;
} }
/** /**
@@ -116,29 +125,28 @@
*/ */
function ucs2decode(string) { function ucs2decode(string) {
var output = [], var output = [],
counter = 0, counter = 0,
length = string.length, length = string.length,
value, value,
extra extra;
while (counter < length) { while (counter < length) {
value = string.charCodeAt(counter++) value = string.charCodeAt(counter++);
if (value >= 0xd800 && value <= 0xdbff && counter < length) { if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
// high surrogate, and there is a next character // high surrogate, and there is a next character
extra = string.charCodeAt(counter++) extra = string.charCodeAt(counter++);
if ((extra & 0xfc00) == 0xdc00) { if ((extra & 0xFC00) == 0xDC00) { // low surrogate
// low surrogate output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000)
} else { } else {
// unmatched surrogate; only append this code unit, in case the next // unmatched surrogate; only append this code unit, in case the next
// code unit is the high surrogate of a surrogate pair // code unit is the high surrogate of a surrogate pair
output.push(value) output.push(value);
counter-- counter--;
} }
} else { } else {
output.push(value) output.push(value);
} }
} }
return output return output;
} }
/** /**
@@ -151,15 +159,15 @@
*/ */
function ucs2encode(array) { function ucs2encode(array) {
return map(array, function(value) { return map(array, function(value) {
var output = '' var output = '';
if (value > 0xffff) { if (value > 0xFFFF) {
value -= 0x10000 value -= 0x10000;
output += stringFromCharCode(((value >>> 10) & 0x3ff) | 0xd800) output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
value = 0xdc00 | (value & 0x3ff) value = 0xDC00 | value & 0x3FF;
} }
output += stringFromCharCode(value) output += stringFromCharCode(value);
return output return output;
}).join('') }).join('');
} }
/** /**
@@ -173,15 +181,15 @@
*/ */
function basicToDigit(codePoint) { function basicToDigit(codePoint) {
if (codePoint - 48 < 10) { if (codePoint - 48 < 10) {
return codePoint - 22 return codePoint - 22;
} }
if (codePoint - 65 < 26) { if (codePoint - 65 < 26) {
return codePoint - 65 return codePoint - 65;
} }
if (codePoint - 97 < 26) { if (codePoint - 97 < 26) {
return codePoint - 97 return codePoint - 97;
} }
return base return base;
} }
/** /**
@@ -198,7 +206,7 @@
function digitToBasic(digit, flag) { function digitToBasic(digit, flag) {
// 0..25 map to ASCII a..z or A..Z // 0..25 map to ASCII a..z or A..Z
// 26..35 map to ASCII 0..9 // 26..35 map to ASCII 0..9
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5) return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
} }
/** /**
@@ -207,13 +215,13 @@
* @private * @private
*/ */
function adapt(delta, numPoints, firstTime) { function adapt(delta, numPoints, firstTime) {
var k = 0 var k = 0;
delta = firstTime ? floor(delta / damp) : delta >> 1 delta = firstTime ? floor(delta / damp) : delta >> 1;
delta += floor(delta / numPoints) delta += floor(delta / numPoints);
for (; /* no initialization */ delta > (baseMinusTMin * tMax) >> 1; k += base) { for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
delta = floor(delta / baseMinusTMin) delta = floor(delta / baseMinusTMin);
} }
return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew)) return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
} }
/** /**
@@ -226,91 +234,95 @@
function decode(input) { function decode(input) {
// Don't use UCS-2 // Don't use UCS-2
var output = [], var output = [],
inputLength = input.length, inputLength = input.length,
out, out,
i = 0, i = 0,
n = initialN, n = initialN,
bias = initialBias, bias = initialBias,
basic, basic,
j, j,
index, index,
oldi, oldi,
w, w,
k, k,
digit, digit,
t, t,
/** Cached calculation results */ /** Cached calculation results */
baseMinusT baseMinusT;
// Handle the basic code points: let `basic` be the number of input code // Handle the basic code points: let `basic` be the number of input code
// points before the last delimiter, or `0` if there is none, then copy // points before the last delimiter, or `0` if there is none, then copy
// the first basic code points to the output. // the first basic code points to the output.
basic = input.lastIndexOf(delimiter) basic = input.lastIndexOf(delimiter);
if (basic < 0) { if (basic < 0) {
basic = 0 basic = 0;
} }
for (j = 0; j < basic; ++j) { for (j = 0; j < basic; ++j) {
// if it's not a basic code point // if it's not a basic code point
if (input.charCodeAt(j) >= 0x80) { if (input.charCodeAt(j) >= 0x80) {
error('not-basic') error('not-basic');
} }
output.push(input.charCodeAt(j)) output.push(input.charCodeAt(j));
} }
// Main decoding loop: start just after the last delimiter if any basic code // Main decoding loop: start just after the last delimiter if any basic code
// points were copied; start at the beginning otherwise. // points were copied; start at the beginning otherwise.
for (index = basic > 0 ? basic + 1 : 0; index < inputLength /* no final expression */; ) { for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
// `index` is the index of the next character to be consumed. // `index` is the index of the next character to be consumed.
// Decode a generalized variable-length integer into `delta`, // Decode a generalized variable-length integer into `delta`,
// which gets added to `i`. The overflow checking is easier // which gets added to `i`. The overflow checking is easier
// if we increase `i` as we go, then subtract off its starting // if we increase `i` as we go, then subtract off its starting
// value at the end to obtain `delta`. // value at the end to obtain `delta`.
for (oldi = i, w = 1, k = base /* no condition */; ; k += base) { for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
if (index >= inputLength) { if (index >= inputLength) {
error('invalid-input') error('invalid-input');
} }
digit = basicToDigit(input.charCodeAt(index++)) digit = basicToDigit(input.charCodeAt(index++));
if (digit >= base || digit > floor((maxInt - i) / w)) { if (digit >= base || digit > floor((maxInt - i) / w)) {
error('overflow') error('overflow');
} }
i += digit * w i += digit * w;
t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
if (digit < t) { if (digit < t) {
break break;
} }
baseMinusT = base - t baseMinusT = base - t;
if (w > floor(maxInt / baseMinusT)) { if (w > floor(maxInt / baseMinusT)) {
error('overflow') error('overflow');
} }
w *= baseMinusT w *= baseMinusT;
} }
out = output.length + 1 out = output.length + 1;
bias = adapt(i - oldi, out, oldi == 0) bias = adapt(i - oldi, out, oldi == 0);
// `i` was supposed to wrap around from `out` to `0`, // `i` was supposed to wrap around from `out` to `0`,
// incrementing `n` each time, so we'll fix that now: // incrementing `n` each time, so we'll fix that now:
if (floor(i / out) > maxInt - n) { if (floor(i / out) > maxInt - n) {
error('overflow') error('overflow');
} }
n += floor(i / out) n += floor(i / out);
i %= out i %= out;
// Insert `n` at position `i` of the output // Insert `n` at position `i` of the output
output.splice(i++, 0, n) output.splice(i++, 0, n);
} }
return ucs2encode(output) return ucs2encode(output);
} }
/** /**
@@ -322,105 +334,109 @@
*/ */
function encode(input) { function encode(input) {
var n, var n,
delta, delta,
handledCPCount, handledCPCount,
basicLength, basicLength,
bias, bias,
j, j,
m, m,
q, q,
k, k,
t, t,
currentValue, currentValue,
output = [], output = [],
/** `inputLength` will hold the number of code points in `input`. */ /** `inputLength` will hold the number of code points in `input`. */
inputLength, inputLength,
/** Cached calculation results */ /** Cached calculation results */
handledCPCountPlusOne, handledCPCountPlusOne,
baseMinusT, baseMinusT,
qMinusT qMinusT;
// Convert the input in UCS-2 to Unicode // Convert the input in UCS-2 to Unicode
input = ucs2decode(input) input = ucs2decode(input);
// Cache the length // Cache the length
inputLength = input.length inputLength = input.length;
// Initialize the state // Initialize the state
n = initialN n = initialN;
delta = 0 delta = 0;
bias = initialBias bias = initialBias;
// Handle the basic code points // Handle the basic code points
for (j = 0; j < inputLength; ++j) { for (j = 0; j < inputLength; ++j) {
currentValue = input[j] currentValue = input[j];
if (currentValue < 0x80) { if (currentValue < 0x80) {
output.push(stringFromCharCode(currentValue)) output.push(stringFromCharCode(currentValue));
} }
} }
handledCPCount = basicLength = output.length handledCPCount = basicLength = output.length;
// `handledCPCount` is the number of code points that have been handled; // `handledCPCount` is the number of code points that have been handled;
// `basicLength` is the number of basic code points. // `basicLength` is the number of basic code points.
// Finish the basic string - if it is not empty - with a delimiter // Finish the basic string - if it is not empty - with a delimiter
if (basicLength) { if (basicLength) {
output.push(delimiter) output.push(delimiter);
} }
// Main encoding loop: // Main encoding loop:
while (handledCPCount < inputLength) { while (handledCPCount < inputLength) {
// All non-basic code points < n have been handled already. Find the next // All non-basic code points < n have been handled already. Find the next
// larger one: // larger one:
for (m = maxInt, j = 0; j < inputLength; ++j) { for (m = maxInt, j = 0; j < inputLength; ++j) {
currentValue = input[j] currentValue = input[j];
if (currentValue >= n && currentValue < m) { if (currentValue >= n && currentValue < m) {
m = currentValue m = currentValue;
} }
} }
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
// but guard against overflow // but guard against overflow
handledCPCountPlusOne = handledCPCount + 1 handledCPCountPlusOne = handledCPCount + 1;
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
error('overflow') error('overflow');
} }
delta += (m - n) * handledCPCountPlusOne delta += (m - n) * handledCPCountPlusOne;
n = m n = m;
for (j = 0; j < inputLength; ++j) { for (j = 0; j < inputLength; ++j) {
currentValue = input[j] currentValue = input[j];
if (currentValue < n && ++delta > maxInt) { if (currentValue < n && ++delta > maxInt) {
error('overflow') error('overflow');
} }
if (currentValue == n) { if (currentValue == n) {
// Represent delta as a generalized variable-length integer // Represent delta as a generalized variable-length integer
for (q = delta, k = base /* no condition */; ; k += base) { for (q = delta, k = base; /* no condition */; k += base) {
t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
if (q < t) { if (q < t) {
break break;
} }
qMinusT = q - t qMinusT = q - t;
baseMinusT = base - t baseMinusT = base - t;
output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0))) output.push(
q = floor(qMinusT / baseMinusT) stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
);
q = floor(qMinusT / baseMinusT);
} }
output.push(stringFromCharCode(digitToBasic(q, 0))) output.push(stringFromCharCode(digitToBasic(q, 0)));
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength) bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
delta = 0 delta = 0;
++handledCPCount ++handledCPCount;
} }
} }
++delta ++delta;
++n ++n;
} }
return output.join('') return output.join('');
} }
/** /**
@@ -436,8 +452,10 @@
*/ */
function toUnicode(input) { function toUnicode(input) {
return mapDomain(input, function(string) { return mapDomain(input, function(string) {
return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string return regexPunycode.test(string)
}) ? decode(string.slice(4).toLowerCase())
: string;
});
} }
/** /**
@@ -453,8 +471,10 @@
*/ */
function toASCII(input) { function toASCII(input) {
return mapDomain(input, function(string) { return mapDomain(input, function(string) {
return regexNonASCII.test(string) ? 'xn--' + encode(string) : string return regexNonASCII.test(string)
}) ? 'xn--' + encode(string)
: string;
});
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
@@ -466,7 +486,7 @@
* @memberOf punycode * @memberOf punycode
* @type String * @type String
*/ */
version: '1.4.1', 'version': '1.4.1',
/** /**
* An object of methods to convert from JavaScript's internal character * An object of methods to convert from JavaScript's internal character
* representation (UCS-2) to Unicode code points, and back. * representation (UCS-2) to Unicode code points, and back.
@@ -474,35 +494,40 @@
* @memberOf punycode * @memberOf punycode
* @type Object * @type Object
*/ */
ucs2: { 'ucs2': {
decode: ucs2decode, 'decode': ucs2decode,
encode: ucs2encode 'encode': ucs2encode
}, },
decode: decode, 'decode': decode,
encode: encode, 'encode': encode,
toASCII: toASCII, 'toASCII': toASCII,
toUnicode: toUnicode 'toUnicode': toUnicode
} };
/** Expose `punycode` */ /** Expose `punycode` */
// Some AMD build optimizers, like r.js, check for specific condition patterns // Some AMD build optimizers, like r.js, check for specific condition patterns
// like the following: // like the following:
if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { if (
typeof define == 'function' &&
typeof define.amd == 'object' &&
define.amd
) {
define('punycode', function() { define('punycode', function() {
return punycode return punycode;
}) });
} else if (freeExports && freeModule) { } else if (freeExports && freeModule) {
if (module.exports == freeExports) { if (module.exports == freeExports) {
// in Node.js, io.js, or RingoJS v0.8.0+ // in Node.js, io.js, or RingoJS v0.8.0+
freeModule.exports = punycode freeModule.exports = punycode;
} else { } else {
// in Narwhal or RingoJS v0.7.0- // in Narwhal or RingoJS v0.7.0-
for (key in punycode) { for (key in punycode) {
punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]) punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
} }
} }
} else { } else {
// in Rhino or a web browser // in Rhino or a web browser
root.punycode = punycode root.punycode = punycode;
} }
})(this)
}(this));

File diff suppressed because one or more lines are too long

View File

@@ -1,346 +1,316 @@
//BBCodeとMarkdownの入力・パーサー //BBCodeとMarkdownの入力・パーサー
//アカウント変えた時にBBとかMDとか //アカウント変えた時にBBとかMDとか
function mdCheck() { function mdCheck() {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var profimg = localStorage.getItem('prof_' + acct_id) var profimg = localStorage.getItem("prof_" + acct_id);
if (!profimg) { if (!profimg) {
profimg = '../../img/missing.svg' profimg = "../../img/missing.svg";
} }
$('#acct-sel-prof').attr('src', profimg) $("#acct-sel-prof").attr("src", profimg);
if (localStorage.getItem('post_' + acct_id)) { if (localStorage.getItem("post_" + acct_id)) {
$('#toot-post-btn').text( $("#toot-post-btn").text(localStorage.getItem("post_" + acct_id) + "(" + localStorage.getItem("domain_" + acct_id) + ")");
localStorage.getItem('post_' + acct_id) +
'(' +
localStorage.getItem('domain_' + acct_id) +
')'
)
} else { } else {
$('#toot-post-btn').text(lang.lang_toot + '(' + localStorage.getItem('domain_' + acct_id) + ')') $("#toot-post-btn").text(lang.lang_toot + "(" + localStorage.getItem("domain_" + acct_id) + ")");
} }
if (!localStorage.getItem('bb_' + acct_id) && !localStorage.getItem('md_' + acct_id)) { if (!localStorage.getItem("bb_" + acct_id) && !localStorage.getItem("md_" + acct_id)) {
$('.markdown').addClass('hide') $(".markdown").addClass("hide");
$('.anti-markdown').addClass('hide') $(".anti-markdown").addClass("hide");
} else { } else {
$('.anti-markdown').removeClass('hide') $(".anti-markdown").removeClass("hide");
} }
if ($('.markdown').hasClass('hide')) { if ($(".markdown").hasClass("hide")) {
localStorage.setItem('md', 'hide') localStorage.setItem("md", "hide");
} else { } else {
localStorage.removeItem('md') localStorage.removeItem("md");
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
if (domain == 'itabashi.0j0.jp') { if (domain == "itabashi.0j0.jp") {
$('#limited-button').removeClass('hide') $("#limited-button").removeClass("hide");
} else { } else {
$('#limited-button').addClass('hide') $("#limited-button").addClass("hide");
} }
if (domain == 'kirishima.cloud') { if (domain == "kirishima.cloud") {
$('#faicon-btn').show() $("#faicon-btn").show();
} else { } else {
$('#faicon-btn').hide() $("#faicon-btn").hide();
} }
if (domain == 'imastodon.net') { if (domain == "imastodon.net") {
trendTag() trendTag();
} else { } else {
$('#trendtag').html('') $("#trendtag").html("");
} }
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
M.toast({ html: lang.lang_bbmd_misskey, displayLength: 5000 }) M.toast({ html: lang.lang_bbmd_misskey, displayLength: 5000 })
} }
if (idata[domain + '_letters']) { if (idata[domain + "_letters"]) {
$('#textarea').attr('data-length', idata[domain + '_letters']) $("#textarea").attr("data-length", idata[domain + "_letters"])
} else { } else {
var maxletters = localStorage.getItem('letters_' + acct_id) $("#textarea").attr("data-length", 500)
if (maxletters > 0) {
$('#textarea').attr('data-length', maxletters)
} else {
$('#textarea').attr('data-length', 500)
}
} }
if (idata[domain + '_glitch'] === 'true') { if (idata[domain + "_glitch"] === "true") {
$('#local-button').removeClass('hide') $("#local-button").removeClass("hide");
} else { } else {
$('#local-button').addClass('hide') $("#local-button").addClass("hide");
} }
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
if (multi) { if (multi) {
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
if ( if (obj[acct_id].background && obj[acct_id].background != "def" && obj[acct_id].text && obj[acct_id].text != "def") {
obj[acct_id].background && $("#toot-post-btn").removeClass("indigo");
obj[acct_id].background != 'def' && $("#toot-post-btn").css("background-color", "#" + obj[acct_id].background);
obj[acct_id].text && $("#toot-post-btn").css("color", 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 { } else {
$('#toot-post-btn').css('background-color', '') $("#toot-post-btn").css("background-color", "");
$('#toot-post-btn').css('color', '') $("#toot-post-btn").css("color", "");
$('#toot-post-btn').addClass('indigo') $("#toot-post-btn").addClass("indigo");
} }
} }
loadVis() loadVis();
} }
//BOXのトグルボタン //BOXのトグルボタン
function mdToggle() { function mdToggle() {
$('.markdown').toggleClass('hide') $(".markdown").toggleClass("hide");
$('.anti-markdown').toggleClass('hide') $(".anti-markdown").toggleClass("hide");
if ($('.markdown').hasClass('hide')) { if ($(".markdown").hasClass("hide")) {
localStorage.setItem('md', 'hide') localStorage.setItem("md", "hide");
} else { } else {
localStorage.removeItem('md') localStorage.removeItem("md");
} }
} }
//最初に読み込みます(MD対応インスタンスかチェック) //最初に読み込みます(MD対応インスタンスかチェック)
if (localStorage.getItem('md') == 'hide') { if (localStorage.getItem("md") == "hide") {
$('.markdown').addClass('hide') $(".markdown").addClass("hide");
$('.anti-markdown').removeClass('hide') $(".anti-markdown").removeClass("hide");
} }
//タグを選んだ時に(BB版) //タグを選んだ時に(BB版)
function tagsel(tag) { function tagsel(tag) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if (!localStorage.getItem('bb_' + acct_id)) { if (!localStorage.getItem("bb_" + acct_id)) {
return false return false;
} }
if (tag == 'large' || tag == 'size' || tag == 'color' || tag == 'colorhex') { if (tag == "large" || tag == "size" || tag == "color" || tag == "colorhex") {
var sub = $('#' + tag).val() var sub = $("#" + tag).val();
var sub = sub.replace(/#/g, '') var sub = sub.replace(/#/g, "");
surroundHTML(tag + '=' + sub, tag) surroundHTML(tag + "=" + sub, tag);
} else if (tag == 'flip=vertical' || tag == 'flip=horizontal') { } else if (tag == "flip=vertical" || tag == "flip=horizontal") {
surroundHTML(tag, 'flip') surroundHTML(tag, "flip");
} else { } else {
surroundHTML(tag, tag) surroundHTML(tag, tag);
} }
$('#textarea').focus() $("#textarea").focus();
} }
//HTMLをエスケープしてXSSを防ぐ //HTMLをエスケープしてXSSを防ぐ
function escape_html(string) { function escape_html(string) {
if (typeof string !== 'string') { if (typeof string !== 'string') {
return string return string;
} }
return string.replace(/[&'`"<>]/g, function(match) { return string.replace(/[&'`"<>]/g, function (match) {
return { return {
'&': '&amp;', '&': '&amp;',
"'": '&#x27;', "'": '&#x27;',
'`': '&#x60;', '`': '&#x60;',
'"': '&quot;', '"': '&quot;',
'<': '&lt;', '<': '&lt;',
'>': '&gt;' '>': '&gt;',
}[match] }[match]
}) });
} }
//テキストボックスで選択したやつをタグで囲む(BB版) //テキストボックスで選択したやつをタグで囲む(BB版)
function surroundHTML(tagS, tagE) { function surroundHTML(tagS, tagE) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if (!localStorage.getItem('bb_' + acct_id)) { if (!localStorage.getItem("bb_" + acct_id)) {
return false return false;
} }
var target = document.getElementById('textarea') var target = document.getElementById("textarea");
var pos = getAreaRange(target) var pos = getAreaRange(target);
var val = target.value var val = target.value;
var range = val.slice(pos.start, pos.end) var range = val.slice(pos.start, pos.end);
var beforeNode = val.slice(0, pos.start) var beforeNode = val.slice(0, pos.start);
var afterNode = val.slice(pos.end) var afterNode = val.slice(pos.end);
var insertNode var insertNode;
if (range || pos.start != pos.end) { if (range || pos.start != pos.end) {
insertNode = '[' + tagS + ']' + range + '[/' + tagE + ']' insertNode = '[' + tagS + ']' + range + '[/' + tagE + ']';
target.value = beforeNode + insertNode + afterNode target.value = beforeNode + insertNode + afterNode;
} else if (pos.start == pos.end) { }
insertNode = '[' + tagS + ']' + '[/' + tagE + ']'
target.value = beforeNode + insertNode + afterNode else if (pos.start == pos.end) {
insertNode = '[' + tagS + ']' + '[/' + tagE + ']';
target.value = beforeNode + insertNode + afterNode;
} }
} }
function markdown(tag, ck, br, space) { function markdown(tag, ck, br, space) {
if (space == 'before') { if (space == "before") {
tagE = tag tagE = tag;
tag = ' ' + tag tag = " " + tag;
} else { } else {
tagE = tag tagE = tag;
} }
surroundMD(tag, tagE, ck, br) surroundMD(tag, tagE, ck, br);
$('#textarea').focus() $("#textarea").focus();
} }
function surroundMD(tagS, tagE, ck, br) { function surroundMD(tagS, tagE, ck, br) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if (!localStorage.getItem('md_' + acct_id)) { if (!localStorage.getItem("md_" + acct_id)) {
return false return false;
} }
var target = document.getElementById('textarea') var target = document.getElementById("textarea");
var pos = getAreaRange(target) var pos = getAreaRange(target);
var val = target.value var val = target.value;
var range = val.slice(pos.start, pos.end) var range = val.slice(pos.start, pos.end);
var beforeNode = val.slice(0, pos.start) var beforeNode = val.slice(0, pos.start);
var afterNode = val.slice(pos.end) var afterNode = val.slice(pos.end);
var insertNode var insertNode;
if (br == 'yes') { if (br == "yes") {
var br = '\n' var br = "\n";
} else { } else {
var br = '' var br = "";
} }
if ((range || pos.start != pos.end) && ck == 'yes') { if ((range || pos.start != pos.end) && ck == "yes") {
insertNode = tagS + range + tagE insertNode = tagS + range + tagE;
target.value = beforeNode + insertNode + br + afterNode target.value = beforeNode + insertNode + br + afterNode;
} else if (pos.start == pos.end || ck == 'no') { }
insertNode = tagS + range
target.value = beforeNode + insertNode + br + afterNode else if (pos.start == pos.end || ck == "no") {
insertNode = tagS + range;
target.value = beforeNode + insertNode + br + afterNode;
} }
} }
//テキストボックスの前後チェック //テキストボックスの前後チェック
function getAreaRange(obj) { function getAreaRange(obj) {
var pos = new Object() var pos = new Object();
if (window.getSelection()) { if (window.getSelection()) {
pos.start = obj.selectionStart pos.start = obj.selectionStart;
pos.end = obj.selectionEnd pos.end = obj.selectionEnd;
} }
return pos return pos;
} }
//Markdownのリンク挿入 //Markdownのリンク挿入
function markdownLink() { function markdownLink() {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if (!localStorage.getItem('md_' + acct_id)) { if (!localStorage.getItem("md_" + acct_id)) {
return false return false;
} }
var linkIns = '[' + $('#linkt').val() + ']' + '(' + $('#link2').val() + ')' var linkIns = "[" + $("#linkt").val() + "]" + "(" + $("#link2").val() + ")";
if (linkIns != '[]()') { if (linkIns != "[]()") {
$('#textarea').val($('#textarea').val() + linkIns) $("#textarea").val($("#textarea").val() + linkIns);
$('#linkt').val('') $("#linkt").val("");
$('#link2').val('') $("#link2").val("");
$('#textarea').focus() $("#textarea").focus();
} }
} }
//Markdownのimg挿入 //Markdownのimg挿入
function markdownImage() { function markdownImage() {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if (!localStorage.getItem('md_' + acct_id)) { if (!localStorage.getItem("md_" + acct_id)) {
return false return false;
} }
var imgIns = '![' + $('#image').val() + ']' + '(' + $('#image2').val() + ')' var imgIns = "![" + $("#image").val() + "]" + "(" + $("#image2").val() + ")";
if (imgIns != '![]()') { if (imgIns != "![]()") {
$('#textarea').val($('#textarea').val() + imgIns) $("#textarea").val($("#textarea").val() + imgIns);
$('#image').val('') $("#image").val("");
$('#image2').val('') $("#image2").val("");
$('#textarea').focus() $("#textarea").focus();
} }
} }
//文字数をチェック(hタグ用) //文字数をチェック(hタグ用)
function str_count(all, part) { function str_count(all, part) {
return (all.match(new RegExp(part, 'g')) || []).length return (all.match(new RegExp(part, "g")) || []).length;
} }
//プレビュー //プレビュー
function preview() { function preview() {
$('#preview-field').show() $("#preview-field").show();
$('#toot-field').hide() $("#toot-field").hide();
$('#preview-btn').hide() $("#preview-btn").hide();
var bb = escape_html($('#textarea').val()) var bb = escape_html($("#textarea").val());
//quote //quote
var bb = bb.replace(/>(.+)$/g, '<blockquote>$1</blockquote>') var bb = bb.replace(/>(.+)$/g, '<blockquote>$1<\/blockquote>');
//spin //spin
var bb = bb.replace(/\[spin\](.+)\[\/spin\]/g, '<span class="fa fa-spin">$1</span>') var bb = bb.replace(/\[spin\](.+)\[\/spin\]/g, '<span class="fa fa-spin">$1<\/span>');
//pulse //pulse
var bb = bb.replace(/\[pulse\](.+)\[\/pulse\]/g, '<span class="bbcode-pulse-loading">$1</span>') var bb = bb.replace(/\[pulse\](.+)\[\/pulse\]/g, '<span class="bbcode-pulse-loading">$1<\/span>');
//large //large
var bb = bb.replace( var bb = bb.replace(/\[large=([0-9]{1,2})x\](.+)\[\/large\]/g, '<span class="fa fa-$1x">$2<\/span>');
/\[large=([0-9]{1,2})x\](.+)\[\/large\]/g,
'<span class="fa fa-$1x">$2</span>'
)
//vertical //vertical
var bb = bb.replace( var bb = bb.replace(/\[flip=vertical\](.+)\[\/flip\]/g, '<span class="fa fa-flip-vertical">$1<\/span>');
/\[flip=vertical\](.+)\[\/flip\]/g,
'<span class="fa fa-flip-vertical">$1</span>'
)
//horizontal //horizontal
var bb = bb.replace( var bb = bb.replace(/\[flip=horizontal\](.+)\[\/flip\]/g, '<span class="fa fa-flip-horizontal">$1<\/span>');
/\[flip=horizontal\](.+)\[\/flip\]/g,
'<span class="fa fa-flip-horizontal">$1</span>'
)
//b //b
var bb = bb.replace(/\[b\](.+)\[\/b\]/g, '<b>$1</b>') var bb = bb.replace(/\[b\](.+)\[\/b\]/g, '<b>$1<\/b>');
//i //i
var bb = bb.replace(/\[i\](.+)\[\/i\]/g, '<i>$1</i>') var bb = bb.replace(/\[i\](.+)\[\/i\]/g, '<i>$1<\/i>');
//u //u
var bb = bb.replace(/\[u\](.+)\[\/u\]/g, '<u>$1</u>') var bb = bb.replace(/\[u\](.+)\[\/u\]/g, '<u>$1<\/u>');
//s //s
var bb = bb.replace(/\[s\](.+)\[\/s\]/g, '<s>$1</s>') var bb = bb.replace(/\[s\](.+)\[\/s\]/g, '<s>$1<\/s>');
//size //size
var bb = bb.replace( var bb = bb.replace(/\[size=([0-9]{1,2})\](.+)\[\/size\]/g, '<span style="font-size:$1px">$2<\/span>');
/\[size=([0-9]{1,2})\](.+)\[\/size\]/g,
'<span style="font-size:$1px">$2</span>'
)
//colorhex //colorhex
var bb = bb.replace( var bb = bb.replace(/\[colorhex=([A-Fa-f0-9]+)\](.+)\[\/colorhex\]/g, '<span style="color:#$1">$2<\/span>');
/\[colorhex=([A-Fa-f0-9]+)\](.+)\[\/colorhex\]/g,
'<span style="color:#$1">$2</span>'
)
//code //code
var bb = bb.replace(/`(.+)`/g, '<code>$1</code>') var bb = bb.replace(/`(.+)`/g, '<code>$1<\/code>');
//head //head
var m var m;
m = bb.match(/^#{1,6}(.+)$/gm) m = bb.match(/^#{1,6}(.+)$/gm);
if (m) { if (m) {
for (let i = 0; i < m.length; i++) { for (let i = 0; i < m.length; i++) {
var t = m[i].match(/^#{1,6}(.+)$/) var t = m[i].match(/^#{1,6}(.+)$/);
var indexct = '<h' + str_count(m[i], '#') + '>' + t[1] + '</h' + str_count(m[i], '#') + '>' var indexct = '<h' + str_count(m[i], "#") + '>' + t[1] + '</h' + str_count(m[i], "#") + '>';
var bb = bb.replace(new RegExp(m[i], ''), indexct) var bb = bb.replace(new RegExp(m[i], ""), indexct);
} }
} }
//list(ul) //list(ul)
var li var li;
li = bb.match(/^\- (.+)$/gm) li = bb.match(/^\- (.+)$/gm);
if (li) { if (li) {
for (let l = 0; l < li.length; l++) { for (let l = 0; l < li.length; l++) {
var u = li[l].match(/^\- (.+)$/) var u = li[l].match(/^\- (.+)$/);
var listUl = '<li>' + u[1] + '</li>' var listUl = '<li>' + u[1] + '</li>';
if (l == 0) { if (l == 0) {
listUl = '<ul>' + listUl listUl = '<ul>' + listUl;
} }
if (l == li.length - 1) { if (l == li.length - 1) {
listUl = listUl + '</ul>' listUl = listUl + '</ul>';
} }
var bb = bb.replace(new RegExp(li[l], ''), listUl) var bb = bb.replace(new RegExp(li[l], ""), listUl);
} }
} }
//list(ol) //list(ol)
var li var li;
li = bb.match(/^1\. (.+)$/gm) li = bb.match(/^1\. (.+)$/gm);
if (li) { if (li) {
for (let l = 0; l < li.length; l++) { for (let l = 0; l < li.length; l++) {
var u = li[l].match(/^1\. (.+)$/) var u = li[l].match(/^1\. (.+)$/);
var listUl = '<li>' + u[1] + '</li>' var listUl = '<li>' + u[1] + '</li>';
if (l === 0) { if (l === 0) {
listUl = '<ol>' + listUl listUl = '<ol>' + listUl;
} }
if (l === li.length - 1) { if (l === li.length - 1) {
listUl = listUl + '</ol>' listUl = listUl + '</ol>';
} }
var bb = bb.replace(new RegExp(li[l], ''), listUl) var bb = bb.replace(new RegExp(li[l], ""), listUl);
} }
} }
//img //img
var bb = bb.replace( var bb = bb.replace(/!\[(.+)\]\((https:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g, '<img src="$2" text="$1" style="width:100%">');
/!\[(.+)\]\((https:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g,
'<img src="$2" text="$1" style="width:100%">'
)
//link //link
var bb = bb.replace( var bb = bb.replace(/\[(.+)\]\((https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g, '<a href="$2" target="_blank">$1<\/a>');
/\[(.+)\]\((https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g, bb = nl2br(bb);
'<a href="$2" target="_blank">$1</a>' bb = bb.replace(new RegExp("</li><br />", "g"), "");
) $("#md-preview").html(bb);
bb = nl2br(bb)
bb = bb.replace(new RegExp('</li><br />', 'g'), '')
$('#md-preview').html(bb)
} }
//Editで戻る //Editで戻る
function previewEdit() { function previewEdit() {
$('#preview-field').hide() $("#preview-field").hide();
$('#toot-field').show() $("#toot-field").show();
$('#preview-btn').show() $("#preview-btn").show();
$('#md-preview').html('') $("#md-preview").html("");
} }

View File

@@ -1,354 +1,227 @@
//絵文字ピッカー //絵文字ピッカー
//最初に読み込む //最初に読み込む
$('#emoji-before').addClass('disabled') $("#emoji-before").addClass("disabled");
$('#emoji-next').addClass('disabled') $("#emoji-next").addClass("disabled");
//絵文字ボタンのトグル //絵文字ボタンのトグル
function emojiToggle(reaction) { function emojiToggle(reaction) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var selin = $('#textarea').prop('selectionStart') var selin = $("#textarea").prop('selectionStart');
if (!selin) { if (!selin) {
selin = 0 selin = 0;
} }
if ($('#emoji').hasClass('hide')) { if ($("#emoji").hasClass("hide")) {
$('#emoji').removeClass('hide') $("#emoji").removeClass("hide")
$('#right-side').show() $("#right-side").show()
$('#right-side').css('width', '300px') $("#right-side").css("width", "300px")
$('#left-side').css('width', 'calc(100% - 300px)') $("#left-side").css("width", "calc(100% - 300px)")
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem("postbox-width");
if (width) { if (width) {
width = width.replace('px', '') * 1 + 300 width = width.replace("px", "") * 1 + 300
} else { } else {
width = 600 width = 600
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
$('#suggest').html('') $("#suggest").html("");
$('#draft').html('') if (!localStorage.getItem("emoji_" + acct_id)) {
if (!localStorage.getItem('emojis_' + acct_id)) { var html =
var html = `<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet('true');">${lang.lang_emoji_get}</button>` '<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">' + lang.lang_emoji_get + '</button>';
$('#emoji-list').html(html) $("#emoji-list").html(html);
} else { } else {
emojiList('home', reaction) emojiList('home', reaction);
} }
} else { } else {
$('#poll').addClass('hide') $("#poll").addClass("hide")
$('#draft').addClass('hide') $("#right-side").hide()
$('#right-side').hide() $("#right-side").css("width", "300px")
$('#right-side').css('width', '300px') $("#emoji").addClass("hide")
$('#emoji').addClass('hide') $("#suggest").html("");
$('#suggest').html('') $("#left-side").css("width", "100%")
$('#draft').html('') var width = localStorage.getItem("postbox-width");
$('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width')
if (width) { if (width) {
width = width.replace('px', '') * 1 width = width.replace("px", "") * 1
} else { } else {
width = 300 width = 300
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
} }
} }
//絵文字リスト挿入 //絵文字リスト挿入
function emojiGet(parse, started) { function emojiGet(parse, started) {
$('#emoji-list').text('Loading...') $('#emoji-list').text('Loading...');
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
if (localStorage.getItem('mode_' + domain) != 'misskey') { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = 'https://' + domain + '/api/v1/custom_emojis' var start = "https://" + domain + "/api/v1/custom_emojis";
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (parse == "true") {
$('#emoji-list').text('Parsing...');
//絵文字をマストドン公式と同順にソート
json.sort(function (a, b) {
if (a.shortcode < b.shortcode) return -1;
if (a.shortcode > b.shortcode) return 1;
return 0;
});
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
} else {
localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
} }
}) localStorage.setItem("emojiseek", 0);
.then(function(response) { if (!started) {
if (!response.ok) { emojiList('home')
response.text().then(function(text) { }
setLog(response.url, response.status, text) });
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (parse == 'true') {
$('#emoji-list').text('Parsing...')
var md = {
categorized: {},
uncategorized: []
}
var if_categorized = false
Object.keys(json).forEach(function(key) {
var emoji = json[key]
if (emoji.visible_in_picker) {
var listed = true
} else {
var listed = false
}
if (emoji.category) {
var cat = emoji.category
if (!md['categorized'][cat]) {
md['categorized'][cat] = []
}
md['categorized'][cat].push({
shortcode: emoji.shortcode,
url: emoji.url,
listed: listed
})
if_categorized = true
} else {
md['uncategorized'].push({
shortcode: emoji.shortcode,
url: emoji.url,
listed: listed
})
}
})
console.log(md)
//絵文字をマストドン公式と同順にソート
md['uncategorized'].sort(function(a, b) {
if (a.shortcode < b.shortcode) return -1
if (a.shortcode > b.shortcode) return 1
return 0
})
Object.keys(md['categorized']).forEach(function(key) {
md['categorized'][key].sort(function(a, b) {
if (a.shortcode < b.shortcode) return -1
if (a.shortcode > b.shortcode) return 1
return 0
})
})
md['if_categorized'] = if_categorized
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
} else {
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
}
localStorage.setItem('emojiseek', 0)
if (!started) {
emojiList('home')
}
})
} else { } else {
var start = 'https://' + domain + '/api/meta' var start = "https://" + domain + "/api/meta";
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json.enableEmojiReaction) {
localStorage.setItem("emojiReaction_" + acct_id, "true");
} else {
localStorage.setItem("emojiReaction_" + acct_id, "disabled");
} }
}) var emojis = json.emojis;
.then(function(response) { var md = [];
if (!response.ok) { Object.keys(emojis).forEach(function (key) {
response.text().then(function(text) { var emoji = emojis[key];
setLog(response.url, response.status, text) md.push({
}) "shortcode": emoji.name,
} "url": emoji.url
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json.enableEmojiReaction) {
localStorage.setItem('emojiReaction_' + acct_id, 'true')
} else {
localStorage.setItem('emojiReaction_' + acct_id, 'disabled')
}
var emojis = json.emojis
var md = { uncategorized: [] }
Object.keys(emojis).forEach(function(key) {
var emoji = emojis[key]
md['uncategorized'].push({
shortcode: emoji.name,
url: emoji.url,
listed: true
})
}) })
md['if_categorized'] = false });
if (parse == 'true') { if (parse == "true") {
$('#emoji-list').text('Parsing...') $('#emoji-list').text('Parsing...');
//絵文字をマストドン公式と同順にソート //絵文字をマストドン公式と同順にソート
md['uncategorized'].sort(function(a, b) { md.sort(function (a, b) {
if (a.shortcode < b.shortcode) return -1 if (a.shortcode < b.shortcode) return -1;
if (a.shortcode > b.shortcode) return 1 if (a.shortcode > b.shortcode) return 1;
return 0 return 0;
}) });
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md)) localStorage.setItem("emoji_" + acct_id, JSON.stringify(md));
} else { } else {
localStorage.setItem('emojis_' + acct_id, JSON.stringify(md)) localStorage.setItem("emoji_" + acct_id, JSON.stringify(md));
} }
localStorage.setItem('emojiseek', 0) localStorage.setItem("emojiseek", 0);
if (!started) { if (!started) {
emojiList('home') emojiList('home')
} }
}) });
} }
} }
//リストの描画 //リストの描画
function emojiList(target, reaction) { function emojiList(target, reaction) {
$('#now-emoji').text(lang.lang_emoji_custom) $("#now-emoji").text(lang.lang_emoji_custom);
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
if(reaction && $('#media').val() == 'misskey') { if (reaction && localStorage.getItem("emojiReaction_" + acct_id) != "true") {
var misskeyReact = true console.error("Disabled")
} else {
var misskeyReact = false
}
if (
misskeyReact &&
localStorage.getItem('emojiReaction_' + acct_id) != 'true'
) {
console.error('Disabled')
clear() clear()
hide() hide();
return false return false;
} }
var start = localStorage.getItem('emojiseek') var start = localStorage.getItem("emojiseek");
if (target == 'next') { if (target == "next") {
var start = start * 1 + 127 var start = start * 1 + 127;
localStorage.setItem('emojiseek', start) localStorage.setItem("emojiseek", start);
} else if (target == 'before') { } else if (target == "before") {
var start = start - 127 var start = start - 127;
localStorage.setItem('emojiseek', start) localStorage.setItem("emojiseek", start);
} else { } else {
var start = 0 var start = 0;
localStorage.getItem('emojiseek', 0) localStorage.getItem("emojiseek", 0)
} }
var html = '' var html = '';
var raw = JSON.parse(localStorage.getItem('emojis_' + acct_id)) var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
console.log(raw) var num = obj.length;
if (raw.if_categorized) {
var obj = [
{
divider: true,
cat: lang.lang_emoji_uncat
}
]
var cats = raw['uncategorized']
obj = obj.concat(cats)
Object.keys(raw['categorized']).forEach(function(key) {
var cats = raw['categorized'][key]
obj = obj.concat([
{
divider: true,
cat: key
}
])
obj = obj.concat(cats)
})
} else {
var obj = raw['uncategorized']
}
console.log(obj)
var num = obj.length
if (num < start) { if (num < start) {
var start = 0 var start = 0;
localStorage.setItem('emojiseek', start) localStorage.setItem("emojiseek", start);
} }
var page = Math.ceil(num / 126) var page = Math.ceil(num / 126);
$('#emoji-sum').text(page) $("#emoji-sum").text(page);
var ct = Math.ceil(start / 126) var ct = Math.ceil(start / 126);
if (ct === 0) { if (ct === 0) {
if (num > 0) { var ct = 1;
var ct = 1 $("#emoji-before").addClass("disabled");
}
$('#emoji-before').addClass('disabled')
} else { } else {
$('#emoji-before').removeClass('disabled') $("#emoji-before").removeClass("disabled");
} }
if (page != 1) { $("#emoji-next").removeClass("disabled");
$('#emoji-next').removeClass('disabled') $("#emoji-count").text(ct);
} else {
$('#emoji-next').addClass('disabled')
}
$('#emoji-count').text(ct)
for (i = start; i < start + 126; i++) { for (i = start; i < start + 126; i++) {
var emoji = obj[i] var emoji = obj[i];
if (emoji) { if (emoji) {
if (reaction) { if (reaction) {
if (emoji.divider) { html = html + '<a onclick="emojiReaction(\':' + emoji.shortcode +
html = html + '<p style="margin-bottom:0">' + emoji.cat + '</p>' ':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
} else {
if (emoji.listed) {
if(misskeyReact) {
var shortcode = `:${emoji.shortcode}:`
} else {
var shortcode = emoji.shortcode
}
html =
html +
`<a onclick="emojiReaction('${shortcode}')" class="pointer"><img src="${emoji.url}" width="20" title="${emoji.shortcode}"></a>`
}
}
} else { } else {
if (emoji.divider) { html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
html = html + '<p style="margin-bottom:0">' + emoji.cat + '</p>' ':\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
} else {
if (emoji.listed) {
html =
html +
`<a onclick="emojiInsert(':${emoji.shortcode}:')" class="pointer"><img src="${emoji.url}" width="20" title="${emoji.shortcode}"></a>`
}
}
} }
} }
} }
$('#emoji-list').html(html) $("#emoji-list").html(html);
} }
//絵文字など様々なものをテキストボックスに挿入 //絵文字など様々なものをテキストボックスに挿入
function emojiInsert(code, del) { function emojiInsert(code, del) {
if (localStorage.getItem('emoji-zero-width') == 'yes') { var now = $("#textarea").val();
var blankBefore = '' var selin = $("#textarea").prop('selectionStart');
var blankAfter = '' if (localStorage.getItem("emoji-zero-width") == "yes") {
var blank = "";
} else { } else {
var blankBefore = ' ' var blank = " ";
var blankAfter = ' '
} }
var textarea = document.querySelector('#textarea') var before = now.substr(0, selin);
var sentence = textarea.value if (before.slice(-1) != " ") {
var len = sentence.length before = before + blank
var pos = textarea.selectionStart }
if (del) { var after = now.substr(selin, now.length);
var delLen = del.length if (after.slice(-1) != " ") {
after = blank + after
}
newt = before + code + after;
if (!del) {
$("#textarea").val(newt);
//emoji();
} else { } else {
var delLen = 0 var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, "");
$("#textarea").val(now + blank + code);
} }
var before = sentence.substr(0, pos - delLen)
var last = before.substr(-1, 1) $("#textarea").focus();
if (last == ' ') blankBefore = ''
var after = sentence.substr(pos, len)
var start = after.substr(0, 1)
if (start == ' ') blankAfter = ''
if (len == 0) {
var word = code
} else if (len == pos) {
var word = blankBefore + code
} else if (pos == 0) {
var word = code + blankAfter
} else {
var word = blankBefore + code + blankAfter
}
sentence = before + word + after
textarea.value = sentence
textarea.focus()
textarea.setSelectionRange(pos + word.length, pos + word.length)
} }
//改行挿入 //改行挿入
function brInsert(code) { function brInsert(code) {
if (!$('#post-box').hasClass('appear')) { if (!$('#post-box').hasClass("appear")) {
localStorage.setItem('nohide', true) localStorage.setItem("nohide", true);
show() show();
} }
var now = $('#textarea').val() var now = $("#textarea").val();
$('#textarea').val(now + code) $("#textarea").val(now + code);
$('#textarea').focus() $("#textarea").focus();
} }

View File

@@ -1,276 +1,219 @@
//ドラッグ・アンド・ドロップからアップロードまで。uiのimg.jsとは異なります。 //ドラッグ・アンド・ドロップからアップロードまで。uiのimg.jsとは異なります。
var obj = $('body') var obj = $("body");
var system var system;
//ドラッグスタート //ドラッグスタート
obj.on('dragstart', function(e) { obj.on('dragstart', function (e) {
system = 'locked' system = "locked"
}) });
//何もなくファイルが通過 //何もなくファイルが通過
obj.on('dragend', function(e) { obj.on('dragend', function (e) {
system = '' system = "";
}) });
//ドラッグファイルが画面上に //ドラッグファイルが画面上に
obj.on('dragenter', function(e) { obj.on('dragenter', function (e) {
if (system != 'locked') { if (system != "locked") {
$('#drag').css('display', 'flex') $("#drag").css('display', 'flex');
} }
})
$('body').on('dragover', function(e) { });
e.stopPropagation() $("body").on('dragover', function (e) {
e.preventDefault() e.stopPropagation();
}) e.preventDefault();
});
//ドロップした //ドロップした
$('body').on('drop', function(e) { $("body").on('drop', function (e) {
if (system != 'locked') { if (system != "locked") {
$('#drag').css('display', 'none') $("#drag").css('display', 'none');
e.preventDefault() e.preventDefault();
var files = e.originalEvent.dataTransfer.files var files = e.originalEvent.dataTransfer.files;
pimg(files) pimg(files);
} }
}) });
//何もなくファイルが通過 //何もなくファイルが通過
$('#drag').on('dragleave', function(e) { $("#drag").on('dragleave', function (e) {
$('#drag').css('display', 'none') $("#drag").css('display', 'none');
}) });
//複数アップ //複数アップ
function pimg(files) { function pimg(files) {
console.table(files) console.table(files);
for (i = 0; i < files.length; i++) { for (i = 0; i < files.length; i++) {
var dot = files[i].path.match(/\.(.+)$/)[1] var dot = files[i].path.match(/\.(.+)$/)[1];
if (dot == 'bmp' || dot == 'BMP') { if (dot == "bmp" || dot == "BMP") {
postMessage(['bmpImage', [files[i].path, i]], '*') postMessage(["bmpImage", [files[i].path, i]], "*")
todo(lang.lang_progress) todo(lang.lang_progress);
} else { } else {
handleFileUpload(files[i], obj, i) handleFileUpload(files[i], obj, i);
} }
} }
} }
//ドラッグ・アンド・ドロップを終了 //ドラッグ・アンド・ドロップを終了
function closedrop() { function closedrop() {
$('#drag').css('display', 'none') $("#drag").css('display', 'none');
} }
//ファイル選択 //ファイル選択
function fileselect() { function fileselect() {
postMessage(['sendSinmpleIpc', 'file-select'], '*') postMessage(["sendSinmpleIpc", "file-select"], "*")
} }
//ファイル読み込み //ファイル読み込み
function handleFileUpload(files, obj, no) { function handleFileUpload(files, obj, no) {
var fr = new FileReader() var fr = new FileReader();
fr.onload = function(evt) { fr.onload = function (evt) {
var b64 = evt.target.result var b64 = evt.target.result;
var resize = localStorage.getItem('uploadCrop') * 1 $('#b64-box').val(b64);
if (resize > 0) { var ret = media(b64, files["type"], no)
var element = new Image()
var width
element.onload = function() {
var width = element.naturalWidth
var height = element.naturalHeight
if (width > resize || height > resize) {
postMessage(['resizeImage', [b64, resize]], '*')
return false
} else {
$('#b64-box').val(b64)
var ret = media(b64, files['type'], no)
}
}
element.src = b64
return false
}
$('#b64-box').val(b64)
var ret = media(b64, files['type'], no)
} }
fr.readAsDataURL(files) fr.readAsDataURL(files);
$('#mec').append(files['name'] + '/') $("#mec").append(files["name"] + "/");
} }
//ファイルアップロード //ファイルアップロード
async function media(b64, type, no, stamped) { function media(b64, type, no) {
var acct_id = $('#post-acct-sel').val() var l = 4;
var domain = localStorage.getItem('domain_' + acct_id) var c = "abcdefghijklmnopqrstuvwxyz0123456789";
var user = localStorage.getItem('user_' + acct_id) var cl = c.length;
if ($('#stamp').hasClass('stamp-avail') && !stamped) { var r = "";
postMessage(['stampImage', [b64, user + '@' + domain]], '*')
return false
}
var l = 4
var c = 'abcdefghijklmnopqrstuvwxyz0123456789'
var cl = c.length
var r = ''
for (var i = 0; i < l; i++) { for (var i = 0; i < l; i++) {
r += c[Math.floor(Math.random() * cl)] r += c[Math.floor(Math.random() * cl)];
} }
if ($('#media').val()) { if ($("#media").val()) {
$('#media').val($('#media').val() + ',' + 'tmp_' + r) $("#media").val($("#media").val() + ',' + "tmp_" + r);
} else { } else {
$('#media').val('tmp_' + r) $("#media").val("tmp_" + r);
} }
$('.toot-btn-group').prop('disabled', true) $(".toot-btn-group").prop("disabled", true);
$('#post-acct-sel').prop('disabled', true) $("#post-acct-sel").prop("disabled", true);
localStorage.setItem('image', 'busy') localStorage.setItem("image", "busy");
todo('Image Upload...') todo("Image Upload...");
var media = toBlob(b64, type) var media = toBlob(b64, type);
var fd = new FormData() var fd = new FormData();
fd.append('file', media) fd.append('file', media);
var at = localStorage.getItem('acct_' + acct_id + '_at') var acct_id = $("#post-acct-sel").val();
var httpreq = new XMLHttpRequest() var domain = localStorage.getItem("domain_" + acct_id);
if (localStorage.getItem('mode_' + domain) == 'misskey') { var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/drive/files/create' var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) if (localStorage.getItem("mode_" + domain) == "misskey") {
httpreq.upload.addEventListener('progress', progshow, false) var start = "https://" + domain + "/api/drive/files/create";
httpreq.responseType = 'json' httpreq.open('POST', start, true);
if ($('#nsfw').hasClass('nsfw-avail')) { httpreq.upload.addEventListener("progress", progshow, false);
var nsfw = true httpreq.responseType = "json";
if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = true;
} else { } else {
var nsfw = false var nsfw = false;
} }
var previewer = 'url' var previewer = "url"
fd.append('i', at) fd.append('i', at);
httpreq.send(fd) //fd.append('isSensitive', nsfw);
httpreq.send(fd);
} else { } else {
var previewer = 'preview_url' var previewer = "preview_url"
//v2/media var start = "https://" + domain + "/api/v1/media";
try { httpreq.open('POST', start, true);
var id = await v2MediaUpload(domain, at, fd) httpreq.upload.addEventListener("progress", progshow, false);
if(!id) { httpreq.responseType = "json";
var start = 'https://' + domain + '/api/v1/media' httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.open('POST', start, true) httpreq.send(fd);
httpreq.upload.addEventListener('progress', progshow, false)
httpreq.responseType = 'json'
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.send(fd)
} else {
var mediav = $('#media').val()
var regExp = new RegExp('tmp_' + r, 'g')
mediav = mediav.replace(regExp, id)
$('#media').val(mediav)
var html = `<img src="../../img/picture.svg" class="preview-img pointer unknown" data-media="${id}" oncontextmenu="deleteImage('${id}')" onclick="altImage('${acct_id}','${id}')" title="${lang.lang_postimg_delete}">`
$('#preview').append(html)
todc()
if (localStorage.getItem('nsfw_' + acct_id)) {
$('#nsfw').addClass('yellow-text')
$('#nsfw').html('visibility')
$('#nsfw').addClass('nsfw-avail')
}
$('.toot-btn-group').prop('disabled', false)
$('select').formSelect()
$('#mec').text(lang.lang_there)
M.toast({ html: '<span>' + lang.lang_postimg_sync + '</span><button class="btn-flat toast-action" onclick="syncDetail()">Click</button>', displayLength: 3000 })
$('#imgup').text('')
$('#imgsel').show()
localStorage.removeItem('image')
}
} catch {
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() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) {
setLog(start, this.status, json)
$('.toot-btn-group').prop('disabled', false)
$('select').formSelect()
$('#mec').text(lang.lang_there)
M.toast({ html: this.status + ':' +json, displayLength: 2000 })
$('#imgup').text('')
$('#imgsel').show()
}
if (!json.id) { if (!json.id) {
todc() todc();
$('#imgup').text('') $("#imgup").text("");
$('.toot-btn-group').prop('disabled', false) $(".toot-btn-group").prop("disabled", false);
$('#post-acct-sel').prop('disabled', false) $("#post-acct-sel").prop("disabled", false);
$('select').formSelect() $('select').formSelect();
$('#imgsel').show() $("#imgsel").show();
M.toast({ html: lang.lang_postimg_failupload, displayLength: 5000 }) M.toast({ html: lang.lang_postimg_failupload, displayLength: 5000 })
return false return false
} }
$('#imgup').text('') var img = localStorage.getItem("img");
$('.toot-btn-group').prop('disabled', false) if (json.type.indexOf("image") != -1) {
$('select').formSelect() var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="' + json["id"] + '" onclick="deleteImage(\'' + json["id"] + '\')" title="' + lang.lang_postimg_delete + '">';
$('#imgsel').show() $('#preview').append(html);
var img = localStorage.getItem('img')
if (json.type.indexOf('image') != -1) {
var html = `<img src="${json[previewer]}" class="preview-img pointer" data-media="${json['id']}" oncontextmenu="deleteImage('${json['id']}')" onclick="altImage('${acct_id}','${json['id']}')" title="${lang.lang_postimg_delete}">`
$('#preview').append(html)
} else { } else {
$('#preview').append(lang.lang_postimg_previewdis) $('#preview').append(lang.lang_postimg_previewdis);
} }
if (!img) { if (!img) {
var img = 'no-act' var img = "no-act";
} }
if (img != 'inline') { if (img != "inline") {
var mediav = $('#media').val() var mediav = $("#media").val();
var regExp = new RegExp('tmp_' + r, 'g') var regExp = new RegExp("tmp_" + r, "g");
mediav = mediav.replace(regExp, json['id']) mediav = mediav.replace(regExp, json["id"]);
$('#media').val(mediav) $("#media").val(mediav);
} }
if (img == 'url' && json['text_url']) { if (img == "url") {
$('#textarea').val($('#textarea').val() + ' ' + json['text_url']) $("#textarea").val($("#textarea").val() + " " + json["text_url"])
} }
todc();
$(".toot-btn-group").prop("disabled", false);
$('select').formSelect();
$("#mec").text(lang.lang_there);
M.toast({ html: lang.lang_postimg_aftupload, displayLength: 1000 })
$("#imgup").text("");
$("#imgsel").show();
localStorage.removeItem("image");
} }
} }
} }
//Base64からBlobへ //Base64からBlobへ
function toBlob(base64, type) { function toBlob(base64, type) {
var bin = atob(base64.replace(/^.*,/, '')) var bin = atob(base64.replace(/^.*,/, ''));
var buffer = new Uint8Array(bin.length) var buffer = new Uint8Array(bin.length);
for (var i = 0; i < bin.length; i++) { for (var i = 0; i < bin.length; i++) {
buffer[i] = bin.charCodeAt(i) buffer[i] = bin.charCodeAt(i);
} }
// Blobを作成 // Blobを作成
try { try {
var blob = new Blob([new Uint8Array(buffer)], { var blob = new Blob([new Uint8Array(buffer)], {
type: type type: type
}) });
} catch (e) { } catch (e) {
return false return false;
} }
return blob return blob;
} }
//画像を貼り付けたら… //画像を貼り付けたら…
var element = document.querySelector('#textarea') var element = document.querySelector("#textarea");
element.addEventListener('paste', function(e) { element.addEventListener("paste", function (e) {
if (!e.clipboardData || !e.clipboardData.items) { if (!e.clipboardData || !e.clipboardData.items) {
return true return true;
} }
// DataTransferItemList に画像が含まれいない場合は終了する // DataTransferItemList に画像が含まれいない場合は終了する
var imageItems = [...e.clipboardData.items].filter(i => i.type.startsWith('image')) var imageItems = [...e.clipboardData.items].filter(i => i.type.startsWith('image'));
if (imageItems.length == 0) { if (imageItems.length == 0) {
console.warn('it is not image') console.warn("it is not image")
return true return true;
} }
// ファイルとして得る // ファイルとして得る
// DataTransferItem の kind は file なので getAsString ではなく getAsFile を呼ぶ // DataTransferItem の kind は file なので getAsString ではなく getAsFile を呼ぶ
var imageFile = imageItems[0].getAsFile() var imageFile = imageItems[0].getAsFile();
var imageType = imageItems[0].type var imageType = imageItems[0].type;
// FileReaderで読み込む // FileReaderで読み込む
var fr = new FileReader() var fr = new FileReader();
fr.onload = function(e) { fr.onload = function (e) {
// onload内ではe.target.resultにbase64が入っているのであとは煮るなり焼くなり // onload内ではe.target.resultにbase64が入っているのであとは煮るなり焼くなり
var base64 = e.target.result var base64 = e.target.result;
var mediav = $('#media').val() var mediav = $("#media").val();
if (mediav) { if (mediav) {
var i = mediav.split(',').length var i = mediav.split(",").length;
} }
// DataTransferItem の type に mime tipes があるのでそれを使う // DataTransferItem の type に mime tipes があるのでそれを使う
media(base64, imageType, i) media(base64, imageType, i)
} };
fr.readAsDataURL(imageFile) fr.readAsDataURL(imageFile);
// 画像以外がペーストされたときのために、元に戻しておく // 画像以外がペーストされたときのために、元に戻しておく
}) });
function deleteImage(key) { function deleteImage(key) {
Swal.fire({ Swal.fire({
title: lang.lang_postimg_delete, title: lang.lang_postimg_delete,
@@ -280,148 +223,19 @@ function deleteImage(key) {
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno, confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no cancelButtonText: lang.lang_no
}).then(result => { }).then((result) => {
if (result.value) { if (result.value) {
var media = $('#media').val() var media = $("#media").val();
var arr = media.split(',') var arr = media.split(",");
for (var i = 0; i < media.length; i++) { for (var i = 0; i < media.length; i++) {
if (arr[i] == key) { if (arr[i] == key) {
arr.splice(i, 1) arr.splice(i, 1);
break break;
} }
} }
$('#media').val(arr.join(',')) $("#media").val(arr.join(","));
$('#preview [data-media=' + key + ']').remove() $('#preview [data-media=' + key + ']').remove();
} }
}) })
}
function altImage(acct_id, id) {
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
var start = 'https://' + domain + '/api/v1/media/' + id
if($('[data-media=' + id + ']').hasClass('unknown')) {
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
console.log(json)
$('[data-media=' + id + ']').removeClass('unknown')
if(json.preview_url) {
$('[data-media=' + id + ']').attr('src', json.preview_url)
}
})
} else {
Swal.fire({
title: lang.lang_postimg_desc,
text: lang.lang_postimg_leadContext,
input: 'text',
inputAttributes: {
autocapitalize: 'off'
},
showCancelButton: true,
confirmButtonText: 'Post',
showLoaderOnConfirm: true,
preConfirm: data => {
return fetch(start, {
method: 'PUT',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
},
body: JSON.stringify({
description: data
})
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
console.log(json)
$('[data-media=' + id + ']').attr('title', data)
})
},
allowOutsideClick: () => !Swal.isLoading()
}).then(result => {
if (result.value) {
Swal.fire({
title: 'Complete'
})
}
})
}
}
function stamp() {
if ($('#stamp').hasClass('stamp-avail')) {
$('#stamp').html('Off')
$('#stamp').removeClass('stamp-avail')
} else {
$('#stamp').html('On')
$('#stamp').addClass('stamp-avail')
}
}
//v2/media対応
async function v2MediaUpload(domain, at, fd) {
var start = 'https://' + domain + '/api/v2/media'
let promise = await fetch(start, {
method: 'POST',
headers: {
Authorization:
'Bearer ' + at
},
body: fd
})
var json = await promise.json()
if(json.id) {
return json.id
} else {
return false
}
}
function alertProcessUnfinished() {
Swal.fire({
title: lang.lang_post_unfinishedMedia,
type: 'error',
showCancelButton: true,
confirmButtonText: lang.lang_post_retry,
cancelButtonText: lang.lang_no
}).then(result => {
if (result.value) {
post()
}
})
}
function syncDetail() {
Swal.fire({
title: lang.lang_post_syncDetail,
text: lang.lang_post_syncDetailText,
type: 'info'
})
} }

View File

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

View File

@@ -1,55 +1,35 @@
/*投稿系*/ /*投稿系*/
//投稿 //投稿
function sec() { function sec() {
var mode = localStorage.getItem('sec') var mode = localStorage.getItem("sec");
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
if (~domain.indexOf('kirishima.cloud') >= 0 && mode == 'local') { if (~domain.indexOf("kirishima.cloud") >= 0 && mode == "local") {
mode = 'unlisted' mode = "unlisted";
} }
post(null, mode) post(null, mode);
} }
function post(mode, postvis, dry) { function post(mode, postvis) {
if(!navigator.onLine && !dry) { if ($("#toot-post-btn").prop("disabled")) {
draftToggle(true) return false;
addToDraft()
M.toast({
html: lang.lang_post_offline,
displayLength: 3000
})
return false
} }
if ($('#toot-post-btn').prop('disabled')) { var str = $("#textarea").val();
return false var acct_id = $("#post-acct-sel").val();
} localStorage.setItem("last-use", acct_id);
var str = $('#textarea').val() var domain = localStorage.getItem("domain_" + acct_id);
var acct_id = $('#post-acct-sel').val() if (!localStorage.getItem("cw_sentence")) {
localStorage.setItem('last-use', acct_id) var cw_sent = 500;
var domain = localStorage.getItem('domain_' + acct_id)
if ($('#ideKey').val() != '') {
var ideKey = $('#ideKey').val()
} else { } else {
var user = localStorage.getItem('user_' + acct_id) var cw_sent = localStorage.getItem("cw_sentence");
var ideKey = Math.floor(Date.now() / 1000) + '/TheDesk/' + user + '@' + domain
$('#ideKey').val(ideKey)
} }
if (!localStorage.getItem('cw_sentence')) { if (!localStorage.getItem("cw_letters")) {
var cw_sent = 500 var cw_ltres = 7000;
} else { } else {
var cw_sent = localStorage.getItem('cw_sentence') var cw_ltres = localStorage.getItem("cw_letters");
} }
if (!localStorage.getItem('cw_letters')) { if (domain != "kirishima.cloud") {
var cw_ltres = 7000 if (mode != "pass" && !$("#cw").hasClass("cw-avail") && (str.length > cw_sent || (str.split("\n").length - 1) > cw_ltres)) {
} else { var plus = str.replace(/\n/g, "").slice(0, 10) + "...";
var cw_ltres = localStorage.getItem('cw_letters')
}
if (domain != 'kirishima.cloud') {
if (
mode != 'pass' &&
!$('#cw').hasClass('cw-avail') &&
(str.length > cw_sent || str.split('\n').length - 1 > cw_ltres)
) {
var plus = str.replace(/\n/g, '').slice(0, 10) + '...'
Swal.fire({ Swal.fire({
title: lang.lang_post_cwtitle, title: lang.lang_post_cwtitle,
text: lang.lang_post_cwtxt + plus, text: lang.lang_post_cwtxt + plus,
@@ -60,34 +40,34 @@ function post(mode, postvis, dry) {
confirmButtonText: lang.lang_post_btn2, confirmButtonText: lang.lang_post_btn2,
cancelButtonText: lang.lang_post_btn3, cancelButtonText: lang.lang_post_btn3,
showCloseButton: true, showCloseButton: true,
focusConfirm: false focusConfirm: false,
}).then(result => { }).then((result) => {
if (result.dismiss == 'cancel') { if (result.dismiss == "cancel") {
//btn3:sonomama //btn3:sonomama
post('pass') post("pass")
} else if (result.value) { } else if (result.value) {
//btn2:auto-CW //btn2:auto-CW
$('#cw-text').show() $("#cw-text").show();
$('#cw').addClass('yellow-text') $("#cw").addClass("yellow-text");
$('#cw').addClass('cw-avail') $("#cw").addClass("cw-avail");
$('#cw-text').val(plus) $("#cw-text").val(plus);
post('pass') post("pass")
} }
}) })
return false return false;
} }
} }
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
misskeyPost() misskeyPost();
return return;
} }
$('.toot-btn-group').prop('disabled', true) $(".toot-btn-group").prop("disabled", true);
todo('Posting') todo("Posting");
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/statuses' var start = "https://" + domain + "/api/v1/statuses";
var reply = $('#reply').val() var reply = $("#reply").val();
if (str.indexOf(localStorage.getItem('stable')) == -1) { if (str.indexOf(localStorage.getItem("stable")) == -1) {
str + ' #' + localStorage.getItem('stable') str + " #" + localStorage.getItem("stable");
} }
var toot = { var toot = {
status: str status: str
@@ -95,70 +75,66 @@ function post(mode, postvis, dry) {
if (reply) { if (reply) {
toot.in_reply_to_id = reply toot.in_reply_to_id = reply
} }
var media = $('#media').val() var media = $("#media").val();
if (media) { if (media) {
toot.media_ids = media.split(',') toot.media_ids = media.split(",");
} }
var quote = $('#quote').val() var quote = $("#quote").val();
if (quote) { if (quote) {
toot.quote_id = quote toot.quote_id = quote;
} }
if ($('#nsfw').hasClass('nsfw-avail')) { if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = 'true' var nsfw = "true";
toot.sensitive = nsfw toot.sensitive = nsfw;
} else { } else {
var nsfw = 'false' var nsfw = "false";
} }
if (postvis) { if (postvis) {
var vis = postvis var vis = postvis;
} else { } else {
var vis = $('#vis').text() var vis = $("#vis").text();
} }
if (vis != 'inherit' && vis != 'local') { if (vis != "inherit" && vis != "local") {
toot.visibility = vis toot.visibility = vis;
} else if (vis == 'local') { } else if (vis == "local") {
toot.status = str + '👁️' toot.status = str + "👁️";
} }
if ($('#cw').hasClass('cw-avail')) { if ($("#cw").hasClass("cw-avail")) {
var spo = $('#cw-text').val() var spo = $("#cw-text").val();
cw() cw();
toot.spoiler_text = spo toot.spoiler_text = spo;
} else { } else {
var spo = '' var spo = "";
} }
if ($('#sch-box').hasClass('sch-avail')) { if ($("#sch-box").hasClass("sch-avail")) {
var scheduled = formattimeutc(new Date(Date.parse($('#sch-date').val()))) var scheduled = formattimeutc(new Date(Date.parse($("#sch-date").val())))
console.log('This toot will be posted at:' + scheduled) console.log("This toot will be posted at:" + scheduled)
schedule() schedule();
toot.scheduled_at = scheduled toot.scheduled_at = scheduled;
if ($('#sch-box').hasClass('expire')) {
toot.scheduled_at = null
toot.expires_at = scheduled
}
} else { } else {
var scheduled = '' var scheduled = "";
} }
if (!$('#poll').hasClass('hide')) { if (!$("#poll").hasClass("hide")) {
var options = [] var options = [];
$('.mastodon-choice').map(function () { $(".mastodon-choice").map(function () {
var choice = $(this).val() var choice = $(this).val();
if (choice != '') { if (choice != "") {
options.push(choice) options.push(choice);
} }
}) });
if ($('#poll-multiple:checked').val() == '1') { if ($("#poll-multiple:checked").val() == "1") {
var mul = true var mul = true;
} else { } else {
var mul = false var mul = false;
} }
if ($('#poll-until:checked').val() == '1') { if ($("#poll-until:checked").val() == "1") {
var htt = true var htt = true;
} else { } else {
var htt = false var htt = false;
} }
var exin = pollCalc() var exin = pollCalc();
if (!exin) { if (!exin) {
todc('Error: Poll expires_in param') todc("Error: Poll expires_in param")
} }
toot.poll = { toot.poll = {
options: options, options: options,
@@ -167,215 +143,154 @@ function post(mode, postvis, dry) {
hide_totals: htt hide_totals: htt
} }
} }
console.table(toot) console.table(toot);
if (dry) { var httpreq = new XMLHttpRequest();
$('#ideKey').val('') httpreq.open('POST', start, true);
$('.toot-btn-group').prop('disabled', false) httpreq.setRequestHeader('Content-Type', 'application/json');
todc() httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
toot['TheDeskAcctId'] = acct_id httpreq.responseType = "json";
return toot httpreq.send(JSON.stringify(toot));
}
var httpreq = new XMLHttpRequest()
httpreq.open('POST', start, true)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.setRequestHeader('Idempotency-Key', ideKey)
httpreq.responseType = 'json'
httpreq.send(JSON.stringify(toot))
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { var box = localStorage.getItem("box");
if (media && this.status == 422) { if (box == "yes" || !box) {
$('#ideKey').val('') $("#textarea").blur();
$('.toot-btn-group').prop('disabled', false) hide();
alertProcessUnfinished()
} else {
setLog(start, this.status, json)
var box = localStorage.getItem('box')
if (box == 'yes' || !box) {
$('#textarea').blur()
hide()
}
$('.toot-btn-group').prop('disabled', false)
todc()
clear()
}
} else {
$('#ideKey').val('')
var box = localStorage.getItem('box')
if (box == 'yes' || !box) {
$('#textarea').blur()
hide()
}
$('.toot-btn-group').prop('disabled', false)
todc()
clear()
} }
$(".toot-btn-group").prop("disabled", false);
todc();
clear();
} }
} }
} }
function expPostMode() {
$('#sch-box').toggleClass('expire')
if ($('#sch-box').hasClass('expire')) {
Swal.fire({
type: 'info',
title: 'Expiring toot On'
})
} else {
Swal.fire({
type: 'info',
title: 'Expireing toot Off'
})
}
}
function misskeyPost() { function misskeyPost() {
var str = $('#textarea').val() var str = $("#textarea").val();
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
localStorage.setItem('last-use', acct_id) localStorage.setItem("last-use", acct_id);
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
$('.toot-btn-group').prop('disabled', true) $(".toot-btn-group").prop("disabled", true);
todo('Posting') todo("Posting");
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/notes/create' var start = "https://" + domain + "/api/notes/create";
var reply = $('#reply').val() var reply = $("#reply").val();
var toot = { var toot = {
text: str text: str
} }
if (reply) { if (reply) {
if (reply.indexOf('renote') !== -1) { if (reply.indexOf("renote") !== -1) {
toot.renoteId = reply.replace('renote_', '') toot.renoteId = reply.replace("renote_", "")
} else { } else {
toot.replyId = reply toot.replyId = reply
} }
} }
var media = $('#media').val() var media = $("#media").val();
if (media) { if (media) {
toot.mediaIds = media.split(',') toot.mediaIds = media.split(",");
} }
if ($('#nsfw').hasClass('nsfw-avail')) { if ($("#nsfw").hasClass("nsfw-avail")) {
var nsfw = 'true' var nsfw = "true";
toot.sensitive = nsfw toot.sensitive = nsfw;
} else { } else {
var nsfw = 'false' var nsfw = "false";
} }
var vis = $('#vis').text() var vis = $("#vis").text();
if (vis == 'unlisted') { if (vis == "unlisted") {
vis = 'home' vis = "home"
} else if (vis == 'direct') { } else if (vis == "direct") {
vis = 'specified' vis = "specified";
toot.visibleUserIds = str toot.visibleUserIds = str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@");
.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g)
.join('')
.split('@')
} }
if (vis != 'inherit') { if (vis != "inherit") {
toot.visibility = vis toot.visibility = vis;
} }
if ($('#cw').hasClass('cw-avail')) { if ($("#cw").hasClass("cw-avail")) {
var spo = $('#cw-text').val() var spo = $("#cw-text").val();
cw() cw();
toot.cw = spo toot.cw = spo;
} else { } else {
var spo = '' var spo = "";
} }
toot.i = at toot.i = at;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify(toot)) httpreq.send(JSON.stringify(toot));
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (str.indexOf(localStorage.getItem('stable')) == -1) { if (str.indexOf(localStorage.getItem("stable")) == -1) {
localStorage.removeItem('stable') localStorage.removeItem("stable")
} }
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: toot", json]);
setLog(start, this.status, json) var box = localStorage.getItem("box");
if (box == "yes") {
hide();
} else if (box == "hide") {
$("body").addClass("mini-post");
$(".mini-btn").text("expand_less");
} }
console.log(['Success: toot', json]) $(".toot-btn-group").prop("disabled", false);
var box = localStorage.getItem('box') todc();
if (box == 'yes') { clear();
hide()
} else if (box == 'hide') {
$('body').addClass('mini-post')
$('.mini-btn').text('expand_less')
}
$('.toot-btn-group').prop('disabled', false)
todc()
clear()
} }
} }
} }
//クリア(Shift+C) //クリア(Shift+C)
function clear() { function clear() {
$('#textarea').val('') $("#textarea").val("");
$('#ideKey').val('') if (localStorage.getItem("stable")) {
if (localStorage.getItem('stable')) { $("#textarea").val("#" + localStorage.getItem("stable") + " ")
$('#textarea').val('#' + localStorage.getItem('stable') + ' ')
} }
$('#textarea').attr('placeholder', lang.lang_toot) $("#textarea").attr("placeholder", lang.lang_toot);
$('#reply').val('') $("#reply").val("");
$('#quote').val('') $("#quote").val("");
$('#media').val('') $("#media").val("");
var cwt = localStorage.getItem('cw-text') var cwt = localStorage.getItem("cw-text");
if (cwt) { if (cwt) {
$('#cw-text').val(cwt) $("#cw-text").val(cwt);
} else { } else {
$('#cw-text').val('') $("#cw-text").val("");
} }
var acw = localStorage.getItem('always-cw') var acw = localStorage.getItem("always-cw");
if (acw != 'yes') { if (acw != "yes") {
$('#cw').removeClass('yellow-text') $("#cw").removeClass("yellow-text");
$('#cw').removeClass('cw-avail') $("#cw").removeClass("cw-avail");
$('#cw-text').hide() $("#cw-text").hide();
} else { } else {
$('#cw').addClass('yellow-text') $("#cw").addClass("yellow-text");
$('#cw').addClass('cw-avail') $("#cw").addClass("cw-avail");
$('#cw-text').show() $("#cw-text").show();
} }
$('#rec').text(lang.lang_no) $("#rec").text(lang.lang_no);
$('#mec').text(lang.lang_nothing) $("#mec").text(lang.lang_nothing);
loadVis() loadVis();
$('#nsfw').removeClass('yellow-text') $("#nsfw").removeClass("yellow-text");
$('#nsfw').html('visibility_off') $("#nsfw").html("visibility_off");
$('#nsfw').removeClass('nsfw-avail') $("#nsfw").removeClass("nsfw-avail");
$('#stamp').html('Off') $("#nsc").text(lang.lang_nothing);
$('#stamp').removeClass('stamp-avail') $("#drag").css("background-color", "#e0e0e0");
$('#nsc').text(lang.lang_nothing) $("#preview").html("");
$('#drag').css('background-color', '#e0e0e0') $(".toot-btn-group").prop("disabled", false);
$('#preview').html('') $("#post-acct-sel").prop("disabled", false);
$('.toot-btn-group').prop('disabled', false) $("#days_poll").val(0);
$('#post-acct-sel').prop('disabled', false) $("#hours_poll").val(0);
$('#days_poll').val(0) $("#mins_poll").val(6);
$('#hours_poll').val(0) $("#poll").addClass("hide")
$('#mins_poll').val(6) $("#pollsta").text(lang.lang_no)
$('#poll').addClass('hide') $(".mastodon-choice").map(function () {
$('#pollsta').text(lang.lang_no) $(this).val("");
$('.mastodon-choice').map(function () { });
$(this).val('') localStorage.removeItem("image");
}) if (localStorage.getItem("mainuse") == "main") {
localStorage.removeItem('image') $("#post-acct-sel").val(localStorage.getItem("main"));
if (localStorage.getItem('mainuse') == 'main') {
$('#post-acct-sel').val(localStorage.getItem('main'))
} }
$('#emoji').addClass('hide') $('select').formSelect();
$('select').formSelect() $("#left-side").show();
$('#default-emoji').show() $("#default-emoji").show();
$('#unreact').show() $("#unreact").show();
$('#addreact').addClass('hide') $("#addreact").addClass("hide");
$('#right-side').hide() }
$('#right-side').css('width', '300px')
$('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1
} else {
width = 300
}
$('#post-box').css('width', width)
mdCheck()
}

View File

@@ -1,204 +1,130 @@
/*保護系*/ /*保護系*/
//画像保護 //画像保護
function nsfw(force) { function nsfw() {
if (force || !$('#nsfw').hasClass('nsfw-avail')) { if ($("#nsfw").hasClass("nsfw-avail")) {
$('#nsfw').addClass('yellow-text') $("#nsfw").removeClass("yellow-text");
$('#nsfw').html('visibility') $("#nsfw").html("visibility_off");
$('#nsfw').addClass('nsfw-avail') $("#nsfw").removeClass("nsfw-avail");
} else { } else {
$('#nsfw').removeClass('yellow-text') $("#nsfw").addClass("yellow-text");
$('#nsfw').html('visibility_off') $("#nsfw").html("visibility");
$('#nsfw').removeClass('nsfw-avail') $("#nsfw").addClass("nsfw-avail");
} }
} }
//投稿公開範囲 //投稿公開範囲
function vis(set) { function vis(set) {
$('#vis').text(set) $("#vis").text(set);
$('#vis-icon').removeClass('red-text') $("#vis-icon").removeClass("red-text");
$('#vis-icon').removeClass('orange-text') $("#vis-icon").removeClass("orange-text");
$('#vis-icon').removeClass('blue-text') $("#vis-icon").removeClass("blue-text");
$('#vis-icon').removeClass('purple-text') $("#vis-icon").removeClass("purple-text");
$('#vis-icon').removeClass('light-blue-text') $("#vis-icon").removeClass("light-blue-text");
$('#vis-icon').removeClass('teal-text') $("#vis-icon").removeClass("teal-text");
if (set == 'public') { if (set == "public") {
$('#vis-icon').text('public') $("#vis-icon").text("public");
$('#vis-icon').addClass('purple-text') $("#vis-icon").addClass("purple-text");
} else if (set == 'unlisted') { } else if (set == "unlisted") {
$('#vis-icon').text('lock_open') $("#vis-icon").text("lock_open");
$('#vis-icon').addClass('blue-text') $("#vis-icon").addClass("blue-text");
} else if (set == 'private') { } else if (set == "private") {
$('#vis-icon').text('lock') $("#vis-icon").text("lock");
$('#vis-icon').addClass('orange-text') $("#vis-icon").addClass("orange-text");
} else if (set == 'direct') { } else if (set == "direct") {
$('#vis-icon').text('mail') $("#vis-icon").text("mail");
$('#vis-icon').addClass('red-text') $("#vis-icon").addClass("red-text");
} else if (set == 'limited') { } else if (set == "limited") {
$('#vis-icon').text('group') $("#vis-icon").text("group");
$('#vis-icon').addClass('teal-text') $("#vis-icon").addClass("teal-text");
} else if (set == 'local') { } else if (set == "local") {
$('#vis-icon').text('visibility') $("#vis-icon").text("visibility");
$('#vis-icon').addClass('light-blue-text') $("#vis-icon").addClass("light-blue-text");
} }
var vis = localStorage.getItem('vis') var vis = localStorage.getItem("vis");
if (vis == 'memory') { if (vis == "memory") {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
localStorage.setItem('vis-memory-' + acct_id, set) localStorage.setItem("vis-memory-" + acct_id, set);
} }
var ins = M.Dropdown.getInstance($('#dropdown1')) var ins = M.Dropdown.getInstance($('#dropdown1'))
if (ins) { if(ins){
ins.close() ins.close();
} }
} }
function loadVis() { function loadVis() {
var vist = localStorage.getItem('vis') var vist = localStorage.getItem("vis");
if (!vist) { if (!vist) {
vis('public') vis("public");
} else { } else {
if (vist == 'memory') { if (vist == "memory") {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var memory = localStorage.getItem('vis-memory-' + acct_id) var memory = localStorage.getItem("vis-memory-" + acct_id);
if (!memory) { if (!memory) {
memory = 'public' memory = "public";
} }
vis(memory) vis(memory);
} else if (vist == 'useapi') { } else if (vist == "useapi") {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var multi = localStorage.getItem('multi') var multi = localStorage.getItem("multi");
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
var memory = obj[acct_id]['vis'] var memory = obj[acct_id]["vis"];
if (!memory) { if (!memory) {
memory = 'public' memory = "public";
} }
vis(memory) vis(memory);
} else { } else {
vis(vist) vis(vist);
} }
} }
} }
loadVis() loadVis();
//コンテントワーニング //コンテントワーニング
function cw(force) { function cw() {
if (force || !$('#cw').hasClass('cw-avail')) { if ($("#cw").hasClass("cw-avail")) {
$('#cw-text').show() $("#cw-text").val();
$('#cw').addClass('yellow-text') $("#cw-text").hide();
$('#cw').addClass('cw-avail') $("#cw").removeClass("yellow-text");
var cwt = localStorage.getItem('cw-text') $("#cw").removeClass("cw-avail");
if (cwt) {
$('#cw-text').val(cwt)
}
} else { } else {
$('#cw-text').val() $("#cw-text").show();
$('#cw-text').hide() $("#cw").addClass("yellow-text");
$('#cw').removeClass('yellow-text') $("#cw").addClass("cw-avail");
$('#cw').removeClass('cw-avail') var cwt = localStorage.getItem("cw-text");
if (cwt) {
$("#cw-text").val(cwt);
}
} }
} }
//TLでコンテントワーニングを表示トグル //TLでコンテントワーニングを表示トグル
function cw_show(e) { function cw_show(id) {
$(e).parent().parent().find('.cw_hide').toggleClass('cw') $(".cw_hide_" + id).toggleClass("cw");
$(e).parent().find('.cw_long').toggleClass('hide') $(".cw-long-" + id).toggleClass("hide");
} }
$(function () { $(function () {
$('#cw-text').on('change', function (event) { $('#cw-text').on('change', function (event) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var cwlen = $('#cw-text').val().length var cwlen = $('#cw-text').val().length;
if (idata[domain + '_letters']) { if (idata[domain + "_letters"]) {
$('#textarea').attr('data-length', idata[domain + '_letters'] - cwlen) $("#textarea").attr("data-length", idata[domain + "_letters"] - cwlen)
} else { } else {
$('#textarea').attr('data-length', 500 - cwlen) $("#textarea").attr("data-length", 500 - cwlen)
} }
})
})
});
});
//スケジュール //スケジュール
function schedule() { function schedule() {
if ($('#sch-box').hasClass('sch-avail')) { if ($("#sch-box").hasClass("sch-avail")) {
$('#sch-box').hide() $("#sch-box").hide();
$('#sch-box').removeClass('sch-avail') $("#sch-box").removeClass("sch-avail");
} else { } else {
var date = new Date() var date = new Date();
$('#sch-box').show() $("#sch-box").show();
$('#sch-date').val(formattime(date)) $("#sch-date").val(formattime(date));
$('#sch-box').addClass('sch-avail') $("#sch-box").addClass("sch-avail");
} }
} }
//下書き機能
function draftToggle(force) {
if ($('#draft').hasClass('hide') || force) {
$('#draft').removeClass('hide')
$('#right-side').show()
$('#right-side').css('width', '300px')
$('#left-side').css('width', 'calc(100% - 300px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 300
} else {
width = 600
}
$('#post-box').css('width', width + 'px')
$('#suggest').html('')
$('#draft').html('')
draftDraw()
} else {
$('#poll').addClass('hide')
$('#draft').addClass('hide')
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#emoji').addClass('hide')
$('#suggest').html('')
$('#draft').html('')
$('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1
} else {
width = 300
}
$('#post-box').css('width', width + 'px')
}
}
function draftDraw() {
var draft = localStorage.getItem('draft')
var html = `<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="addToDraft();">${lang.lang_secure_draft}</button>`
if (draft) {
var draftObj = JSON.parse(draft)
for (let i = 0; i < draftObj.length; i++) {
var toot = draftObj[i]
html = html + `<div class="tootInDraft">
<i class="waves-effect gray material-icons" onclick="useThisDraft(${i})" title="${lang.lang_secure_userThis}">reply</i>
<i class="waves-effect gray material-icons" onclick="deleteThisDraft(${i})" title="${lang.lang_secure_deleteThis}">cancel</i>
${escapeHTML(toot.status).replace(/\n/, '').substr(0, 10)}
</div>`
}
}
$('#draft').html(html)
}
function addToDraft() {
var json = post(null, null, true)
var draft = localStorage.getItem('draft')
var draftObj = []
if (draft) draftObj = JSON.parse(draft)
draftObj.push(json)
draft = JSON.stringify(draftObj)
localStorage.setItem('draft', draft)
draftDraw()
}
function useThisDraft(i) {
var draft = localStorage.getItem('draft')
var draftObj = JSON.parse(draft)
draftToPost(draftObj[i], draftObj[i]['TheDeskAcctId'], 0)
draftToggle()
}
function deleteThisDraft(i) {
var draft = localStorage.getItem('draft')
var draftObj = JSON.parse(draft)
draftObj.splice(i, 1)
draft = JSON.stringify(draftObj)
localStorage.setItem('draft', draft)
draftDraw()
}

View File

@@ -1,52 +1,46 @@
//お気に入り登録やブースト等、フォローやブロック等 //お気に入り登録やブースト等、フォローやブロック等
//お気に入り登録 //お気に入り登録
function fav(id, acct_id, remote) { function fav(id, acct_id, remote) {
if ($(`.cvo[unique-id=${id}]`).hasClass('faved')) { if ($("#pub_" + id).hasClass("faved")) {
var flag = 'unfavourite' var flag = "unfavourite";
} else { } else {
var flag = 'favourite' var flag = "favourite";
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/statuses/' + id + '/' + flag var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { if (remote != "remote") {
setLog(start, this.status, json)
}
if (json.reblog) {
json = json.reblog
}
if (remote != 'remote') {
//APIのふぁぼカウントがおかしい //APIのふぁぼカウントがおかしい
if ($('[unique-id=' + id + '] .fav_ct').text() == json.favourites_count) { if ($("[toot-id=" + id + "] .fav_ct").text() == json.favourites_count) {
if (flag == 'unfavourite') { if (flag == "unfavourite") {
var fav = json.favourites_count - 1 var fav = json.favourites_count - 1;
if (fav * 1 < 0) {
fav = 0
}
} else { } else {
var fav = json.favourites_count var fav = json.favourites_count + 1;
//var fav = json.favourites_count; //var fav = json.favourites_count;
} }
} else { } else {
var fav = json.favourites_count var fav = json.favourites_count;
} }
$('[unique-id=' + id + '] .fav_ct').text(fav) $("[toot-id=" + id + "] .fav_ct").text(fav);
$('[unique-id=' + id + '] .rt_ct').text(json.reblogs_count) if (!json.reblog) {
if ($('[unique-id=' + id + ']').hasClass('faved')) {
$('[unique-id=' + id + ']').removeClass('faved')
$('.fav_' + id).removeClass('yellow-text')
} else { } else {
$('[unique-id=' + id + ']').addClass('faved') $("[toot-id=" + id + "] .rt_ct").text(fav);
$('.fav_' + id).addClass('yellow-text') }
if ($("[toot-id=" + id + "]").hasClass("faved")) {
$("[toot-id=" + id + "]").removeClass("faved");
$(".fav_" + id).removeClass("yellow-text");
} else {
$("[toot-id=" + id + "]").addClass("faved");
$(".fav_" + id).addClass("yellow-text");
} }
} else { } else {
M.toast({ html: lang.lang_status_favWarn, displayLength: 1000 }) M.toast({ html: lang.lang_status_favWarn, displayLength: 1000 })
@@ -56,333 +50,232 @@ function fav(id, acct_id, remote) {
} }
//ブースト //ブースト
function rt(id, acct_id, remote, vis) { function rt(id, acct_id, remote) {
if ($(`.cvo[toot-id=${id}]`).hasClass('rted')) { if ($("#pub_" + id).hasClass("rted")) {
var flag = 'unreblog' var flag = "unreblog";
} else { } else {
var flag = 'reblog' var flag = "reblog";
}
var domain = localStorage.getItem('domain_' + acct_id)
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)
httpreq.setRequestHeader('Content-Type', 'application/json')
httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
httpreq.responseType = 'json'
if (vis) {
httpreq.send(JSON.stringify({ visibility: vis }))
} else {
httpreq.send()
} }
var domain = localStorage.getItem("domain_" + acct_id);
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);
httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = "json";
httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: boost", json]);
setLog(start, this.status, json) if (remote != "remote") {
} $("[toot-id=" + id + "] .fav_ct").text(json.favourites_count);
if (json.reblog) { if (!json.reblog) {
json = json.reblog if (flag == "unreblog") {
} var rt = json.reblogs_count - 1;
console.log(['Success: boost', json]) } else {
$('[toot-id=' + id + '] .fav_ct').text(json.favourites_count) var rt = json.reblogs_count + 1;
if (!json.reblog) {
if (flag == 'unreblog') {
var rt = json.reblogs_count - 1
if (rt * 1 < 0) {
rt = 0
} }
$("[toot-id=" + id + "] .rt_ct").text(rt);
} else { } else {
var rt = json.reblogs_count $("[toot-id=" + id + "] .rt_ct").text(json.reblog.reblogs_count);
} }
$('[toot-id=' + id + '] .rt_ct').text(rt)
} else {
$('[toot-id=' + id + '] .rt_ct').text(json.reblogs_count)
}
if ($('[toot-id=' + id + ']').hasClass('rted')) { if ($("[toot-id=" + id + "]").hasClass("rted")) {
$('[toot-id=' + id + ']').removeClass('rted') $("[toot-id=" + id + "]").removeClass("rted");
$('.rt_' + id).removeClass('light-blue-text') $(".rt_" + id).removeClass("light-blue-text");
} else {
$("[toot-id=" + id + "]").addClass("rted");
$(".rt_" + id).addClass("light-blue-text");
}
} else { } else {
$('[toot-id=' + id + ']').addClass('rted') M.toast({ html: lang.lang_status_btWarn, displayLength: 1000 })
$('.rt_' + id).addClass('light-blue-text')
} }
} }
} }
} }
function boostWith(vis) {
var id = $('#tootmodal').attr('data-id')
var acct_id = $('#tootmodal').attr('data-acct')
rt(id, acct_id, false, vis)
}
//ブックマーク
function bkm(id, acct_id, tlid) {
if ($(`.cvo[unique-id=${id}]`).hasClass('bkmed')) {
var flag = 'unbookmark'
} else {
var flag = 'bookmark'
}
var domain = localStorage.getItem('domain_' + acct_id)
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)
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
if (this.status !== 200) {
setLog(start, this.status, json)
}
if (json.reblog) {
json = json.reblog
}
var fav = json.favourites_count
$('[toot-id=' + id + '] .fav_ct').text(fav)
$('[toot-id=' + id + '] .rt_ct').text(json.reblogs_count)
if (flag == 'unbookmark') {
$('.bkmStr_' + id).text(lang.lang_parse_bookmark)
$('.bkm_' + id).removeClass('red-text')
$('[toot-id=' + id + ']').removeClass('bkmed')
} else {
$('.bkmStr_' + id).text(lang.lang_parse_unbookmark)
$('.bkm_' + id).addClass('red-text')
$('[toot-id=' + id + ']').addClass('bkmed')
}
var tlidTar = $(`.bookmark-timeline[data-acct=${acct_id}]`).attr('tlid')
columnReload(tlidTar, 'bookmark')
}
}
}
//フォロー //フォロー
async function follow(acct_id, resolve) { function follow(acct_id, remote) {
if ($('#his-data').hasClass('locked')) { if (!acct_id && acct_id != "selector") {
locked = true var acct_id = $('#his-data').attr("use-acct");
} else if (acct_id == "selector") {
var acct_id = $("#user-acct-sel").val();
}
if (!remote && $("#his-data").hasClass("following")) {
var flag = "unfollow";
var flagm = "delete";
} else { } else {
locked = false var flag = "follow";
var flagm = "create";
} }
if (!acct_id && acct_id != 'selector') { var id = $("#his-data").attr("user-id");
var acct_id = $('#his-data').attr('use-acct') if (!remote) {
var remote = $("#his-data").attr("remote");
} else if (acct_id == 'selector') {
var acct_id = $('#user-acct-sel').val()
} }
if (!resolve && $('#his-data').hasClass('following')) { var domain = localStorage.getItem("domain_" + acct_id);
var flag = 'unfollow' var at = localStorage.getItem("acct_" + acct_id + "_at");
var flagm = 'delete' var user = $("#his-acct").text();
} else { var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var flag = 'follow' if (localStorage.getItem("mode_" + domain) == "misskey") {
var flagm = 'create' var start = "https://" + domain + "/api/following/" + flagm;
} var ent = { "i": at, "userId": id }
} else if (remote == "true" && flag == "follow") {
var id = $('#his-data').attr('user-id')
if (resolve == 'selector') {
var fullacct = $('#his-acct').attr('fullname')
var id = await acctResolve(acct_id, fullacct)
console.log(id)
}
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
var start = 'https://' + domain + '/api/v1/accounts/' + id + '/' + flag
if (localStorage.getItem('mode_' + domain) == 'misskey') {
var start = 'https://' + domain + '/api/following/' + flagm
var ent = { i: at, userId: id }
} else if (flag == 'follow') {
var ent = {} var ent = {}
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify(ent)) httpreq.send(JSON.stringify(ent));
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: folllow", json]);
setLog(start, this.status, json) if ($("#his-data").hasClass("following")) {
} $("#his-data").removeClass("following");
console.log(['Success: folllow', json]) $("#his-follow-btn").text(lang.lang_status_follow);
if ($('#his-data').hasClass('following')) {
$('#his-data').removeClass('following')
$('#his-follow-btn-text').text(lang.lang_status_follow)
} else { } else {
$('#his-data').addClass('following') $("#his-data").addClass("following");
if (locked) { $("#his-follow-btn").text(lang.lang_status_unfollow);
$('#his-follow-btn-text').text(lang.lang_status_requesting)
} else {
$('#his-follow-btn-text').text(lang.lang_status_unfollow)
}
} }
} }
} }
} }
async function acctResolve(acct_id, user) {
console.log('Get user data of ' + user)
var domain = localStorage.getItem('domain_' + acct_id)
if (localStorage.getItem('mode_' + domain) == 'misskey') {
return false
}
var at = localStorage.getItem('acct_' + acct_id + '_at')
var start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + user
let promise = await fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
})
var idJson = await promise.json()
if (idJson.accounts[0]) {
var id = idJson.accounts[0].id
} else {
M.toast({ html: lang.lang_fatalerroroccured, displayLength: 2000 })
}
return id
}
//ブロック //ブロック
function block(acct_id) { function block(acct_id) {
if ($('#his-data').hasClass('blocking')) { if ($("#his-data").hasClass("blocking")) {
var flag = 'unblock' var flag = "unblock";
var txt = lang.lang_status_unmute var txt = lang.lang_status_unmute
} else { } else {
var flag = 'block' var flag = "block";
var txt = lang.lang_status_block var txt = lang.lang_status_block
} }
Swal.fire({ Swal.fire({
title: txt, title: txt,
text: '', text: "",
type: 'warning', type: 'warning',
showCancelButton: true, showCancelButton: true,
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno, confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no cancelButtonText: lang.lang_no
}).then(result => { }).then((result) => {
if (result.value) { if (result.value) {
if (!acct_id) { if (!acct_id) {
var acct_id = $('#his-data').attr('use-acct') var acct_id = $('#his-data').attr("use-acct");
} }
var id = $('#his-data').attr('user-id') var id = $("#his-data").attr("user-id");
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/accounts/' + id + '/' + flag var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if ($("#his-data").hasClass("blocking")) {
setLog(start, this.status, this.response) $("#his-data").removeClass("blocking");
} $("#his-block-btn").text(lang.lang_status_block);
if ($('#his-data').hasClass('blocking')) {
$('#his-data').removeClass('blocking')
$('#his-block-btn-text').text(lang.lang_status_block)
} else { } else {
$('#his-data').addClass('blocking') $("#his-data").addClass("blocking");
$('#his-block-btn-text').text(lang.lang_status_unblock) $("#his-block-btn").text(lang.lang_status_unblock);
} }
} }
} }
} }
}) });
} }
//ミュート //ミュート
function muteDo(acct_id) { function muteDo(acct_id) {
if ($('#his-data').hasClass('muting')) { if ($("#his-data").hasClass("muting")) {
var flag = 'unmute' var flag = "unmute";
var flagm = 'delete' var flagm = "delete";
var txt = lang.lang_status_unmute var txt = lang.lang_status_unmute
} else { } else {
var flag = 'mute' var flag = "mute";
var flagm = 'create' var flagm = "create";
var txt = lang.lang_status_mute var txt = lang.lang_status_mute
} }
Swal.fire({ Swal.fire({
title: txt, title: txt,
text: '', text: "",
type: 'warning', type: 'warning',
showCancelButton: true, showCancelButton: true,
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno, confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no cancelButtonText: lang.lang_no
}).then(result => { }).then((result) => {
if (result.value) { if (result.value) {
if (!acct_id) { if (!acct_id) {
var acct_id = $('#his-data').attr('use-acct') var acct_id = $('#his-data').attr("use-acct");
} }
var id = $('#his-data').attr('user-id') var id = $("#his-data").attr("user-id");
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/api/mute/' + flagm var start = "https://" + domain + "/api/mute/" + flagm;
var ent = { i: at, userId: id } var ent = { "i": at, "userId": id }
var rq = JSON.stringify(ent) var rq = JSON.stringify(ent);
} else { } else {
var start = 'https://' + domain + '/api/v1/accounts/' + id + '/' + flag var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var rq = '' var rq = "";
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(rq) httpreq.send(rq);
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) { if ($("#his-data").hasClass("muting")) {
setLog(start, this.status, this.response) $("#his-data").removeClass("muting");
} $("#his-mute-btn").text(lang.lang_status_mute);
if ($('#his-data').hasClass('muting')) {
$('#his-data').removeClass('muting')
$('#his-mute-btn-text').text(lang.lang_status_mute)
} else { } else {
$('#his-data').addClass('muting') $("#his-data").addClass("muting");
$('#his-mute-btn-text').text(lang.lang_status_unmute) $("#his-mute-btn").text(lang.lang_status_unmute);
} }
} }
} }
} }
}) });
} }
//投稿削除 //投稿削除
function del(id, acct_id) { function del(id, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/api/notes/delete' var start = "https://" + domain + "/api/notes/delete";
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify({ i: at, noteId: id })) httpreq.send(JSON.stringify({ i: at, noteId: id }));
$('[toot-id=' + id + ']').hide() $("[toot-id=" + id + "]").hide();
$('[toot-id=' + id + ']').remove() $("[toot-id=" + id + "]").remove();
} else { } else {
var start = 'https://' + domain + '/api/v1/statuses/' + id var start = "https://" + domain + "/api/v1/statuses/" + id;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true) httpreq.open('DELETE', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
} }
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
} }
} }
} }
@@ -397,126 +290,68 @@ function redraft(id, acct_id) {
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: lang.lang_yesno, confirmButtonText: lang.lang_yesno,
cancelButtonText: lang.lang_no cancelButtonText: lang.lang_no
}).then(result => { }).then((result) => {
if (result.value) { if (result.value) {
show() show();
var domain = localStorage.getItem('domain_' + acct_id) del(id, acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') $("#post-acct-sel").prop("disabled", true);
if (localStorage.getItem('mode_' + domain) == 'misskey') { var medias = $("[toot-id=" + id + "]").attr("data-medias");
var start = 'https://' + domain + '/api/notes/delete' var vismode = $("[toot-id=" + id + "] .vis-data").attr("data-vis");
var httpreq = new XMLHttpRequest() vis(vismode);
httpreq.open('POST', start, true) $("#media").val(medias);
httpreq.setRequestHeader('Content-Type', 'application/json') var ct = medias.split(",").length;
httpreq.responseType = 'json' $("[toot-id=" + id + "] img.toot-img").each(function (i, elem) {
httpreq.send(JSON.stringify({ i: at, noteId: id })) if (i < ct) {
$('[toot-id=' + id + ']').hide() var url = $(elem).attr("src");
$('[toot-id=' + id + ']').remove() console.log("Play back image data:" + url);
} else { $('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">');
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) {
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
var json = httpreq.response
draftToPost(json, acct_id, id)
} }
});
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 draftToPost(json, acct_id, id) {
$('#post-acct-sel').prop('disabled', true)
$('#post-acct-sel').val(acct_id)
$('select').formSelect()
mdCheck()
mediack = null
if(json.media_attachments) mediack = json.media_attachments[0]
//メディアがあれば
var media_ids = []
if (mediack) {
for (var i = 0; i <= 4; i++) {
if (json.media_attachments[i]) {
media_ids.push(json.media_attachments[i].id)
$('#preview').append(
'<img src="' +
json.media_attachments[i].preview_url +
'" style="width:50px; max-height:100px;">'
)
} else {
break
}
}
}
var vismode = json.visibility
vis(vismode)
var medias = media_ids.join(',')
$('#media').val(medias)
localStorage.setItem('nohide', true)
show()
if (json.text) {
var html = json.text
} else {
var html = json.status
html = html.replace(/^<p>(.+)<\/p>$/, '$1')
html = html.replace(/<br\s?\/?>/, '\n')
html = html.replace(/<p>/, '\n')
html = html.replace(/<\/p>/, '\n')
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, '$1')
html = $.strip_tags(html)
}
$('#textarea').val(html)
if (json.spoiler_text) {
cw(true)
$('#cw-text').val(json.spoiler_text)
}
if (json.sensitive) {
$('#nsfw').addClass('yellow-text')
$('#nsfw').html('visibility')
$('#nsfw').addClass('nsfw-avail')
}
if (json.in_reply_to_id) {
$('#reply').val(json.in_reply_to_id)
}
}
//ピン留め //ピン留め
function pin(id, acct_id) { function pin(id, acct_id) {
if ($(`.cvo[unique-id=${id}]`).hasClass('pined')) { if ($("#pub_" + id).hasClass("pined")) {
var flag = 'unpin' var flag = "unpin";
} else { } else {
var flag = 'pin' var flag = "pin";
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/statuses/' + id + '/' + flag var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: pinned", json]);
setLog(start, this.status, this.response) if ($("[toot-id=" + id + "]").hasClass("pined")) {
} $("[toot-id=" + id + "]").removeClass("pined");
console.log(['Success: pinned', json]) $(".pin_" + id).removeClass("blue-text");
if (flag == 'unpin') {
$('[toot-id=' + id + ']').removeClass('pined')
$('.pin_' + id).removeClass('blue-text')
$('.pinStr_' + id).text(lang.lang_parse_pin)
} else { } else {
$('[toot-id=' + id + ']').addClass('pined') $("[toot-id=" + id + "]").addClass("pined");
$('.pin_' + id).addClass('blue-text') $(".pin_" + id).addClass("blue-text");
$('.pinStr_' + id).text(lang.lang_parse_unpin)
} }
} }
} }
@@ -524,23 +359,20 @@ function pin(id, acct_id) {
//フォロリク //フォロリク
function request(id, flag, acct_id) { function request(id, flag, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/follow_requests/' + id + '/' + flag var start = "https://" + domain + "/api/v1/follow_requests/" + id + "/" + flag;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: request", "type:" + flag, json]);
setLog(start, this.status, this.response) showReq();
}
console.log(['Success: request', 'type:' + flag, json])
showReq()
} }
} }
} }
@@ -548,144 +380,141 @@ function request(id, flag, acct_id) {
//ドメインブロック(未実装) //ドメインブロック(未実装)
function domainblock(add, flag, acct_id) { function domainblock(add, flag, acct_id) {
if (!acct_id) { if (!acct_id) {
var acct_id = $('#his-data').attr('use-acct') var acct_id = $('#his-data').attr("use-acct");
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/domain_blocks' var start = "https://" + domain + "/api/v1/domain_blocks"
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { console.log(["Success: domain block", json]);
setLog(start, this.status, this.response) showDom();
}
console.log(['Success: domain block', json])
showDom()
} }
} }
} }
function addDomainblock() { function addDomainblock() {
var domain = $('#domainblock').val() var domain = $("#domainblock").val();
domainblock(domain, 'POST') domainblock(domain, 'POST');
} }
//ユーザー強調 //ユーザー強調
function empUser() { function empUser() {
var usr = localStorage.getItem('user_emp') var usr = localStorage.getItem("user_emp");
var obj = JSON.parse(usr) var obj = JSON.parse(usr);
var id = $('#his-acct').attr('fullname') var id = $("#his-acct").attr("fullname");
if (!obj) { if (!obj) {
var obj = [] var obj = [];
obj.push(id) obj.push(id);
M.toast({ html: id + lang.lang_status_emphas, displayLength: 4000 }) M.toast({ html: id + lang.lang_status_emphas, displayLength: 4000 })
} else { } else {
var can var can;
Object.keys(obj).forEach(function (key) { Object.keys(obj).forEach(function (key) {
var usT = obj[key] var usT = obj[key];
if (usT != id && !can) { if (usT != id && !can) {
can = false can = false;
} else { } else {
can = true can = true;
obj.splice(key, 1) obj.splice(key, 1);
M.toast({ html: id + lang.lang_status_unemphas, displayLength: 4000 }) M.toast({ html: id + lang.lang_status_unemphas, displayLength: 4000 })
} }
}) });
} }
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('user_emp', json) localStorage.setItem("user_emp", json);
} }
//Endorse //Endorse
function pinUser() { function pinUser() {
var id = $('#his-data').attr('user-id') var id = $("#his-data").attr("user-id");
var acct_id = $('#his-data').attr('use-acct') var acct_id = $("#his-data").attr("use-acct");
if ($('#his-end-btn').hasClass('endorsed')) { if ($("#his-end-btn").hasClass("endorsed")) {
var flag = 'unpin' var flag = "unpin";
} else { } else {
var flag = 'pin' var flag = "pin";
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/accounts/' + id + '/' + flag var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { if ($("#his-end-btn").hasClass("endorsed")) {
setLog(start, this.status, this.response) $("#his-end-btn").removeClass("endorsed")
} $("#his-end-btn").text(lang.lang_status_endorse)
if ($('#his-end-btn').hasClass('endorsed')) {
$('#his-end-btn').removeClass('endorsed')
$('#his-end-btn').text(lang.lang_status_endorse)
} else { } else {
$('#his-end-btn').addClass('endorsed') $("#his-end-btn").addClass("endorsed")
$('#his-end-btn').text(lang.lang_status_unendorse) $("#his-end-btn").text(lang.lang_status_unendorse)
} }
} }
} }
} }
//URLコピー //URLコピー
function tootUriCopy(url) { function tootUriCopy(url) {
execCopy(url) execCopy(url);
M.toast({ html: lang.lang_details_url, displayLength: 1500 }) M.toast({ html: lang.lang_details_url, displayLength: 1500 })
} }
//他のアカウントで… //他のアカウントで…
function staEx(mode) { function staEx(mode) {
var url = $('#tootmodal').attr('data-url') var url = $("#tootmodal").attr("data-url");
var acct_id = $('#status-acct-sel').val() var acct_id = $("#status-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + url var start = "https://" + domain + "/api/v1/search?resolve=true&q=" + url
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} }
}) }).then(function (response) {
.then(function (response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function (text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} var id = json.statuses[0].id;
return response.json() if (mode == "rt") {
}) rt(id, acct_id, 'remote')
.catch(function (error) { } else if (mode == "fav") {
todo(error) fav(id, acct_id, 'remote')
setLog(start, 'JSON', error) } else if (mode == "reply") {
console.error(error) reEx(id)
}) }
.then(function (json) { });
if (json.statuses) { return;
if (json.statuses[0]) {
var id = json.statuses[0].id
if (mode == 'rt') {
rt(id, acct_id, 'remote')
} else if (mode == 'fav') {
fav(id, acct_id, 'remote')
} else if (mode == 'reply') {
reEx(id)
}
}
}
})
return
}
function toggleAction(elm) {
console.log(elm)
const instance = M.Dropdown.init(elm)
console.log(instance.isOpen)
instance.open()
} }
function toggleAction(id, tlid, acct_id) {
if (tlid == "notf") {
var tlide = "[data-acct=" + acct_id + "] .notf-timeline";
} else if (tlid == "user") {
var tlide = "#his-tl-contents";
} else {
var tlide = "[tlid=" + tlid + "]";
}
if (!$(tlide + " [toot-id=" + id + "]").hasClass("ext-mode")) {
$(tlide + " [toot-id=" + id + "] .type-a").hide();
$(tlide + " [toot-id=" + id + "] .type-b").show();
$(tlide + " [toot-id=" + id + "]").addClass("ext-mode")
$(tlide + " [toot-id=" + id + "] .act-icon").text("expand_less");
} else {
$(tlide + " [toot-id=" + id + "] .type-b").hide();
$(tlide + " [toot-id=" + id + "] .type-a").show();
$(tlide + " [toot-id=" + id + "]").removeClass("ext-mode")
$(tlide + " [toot-id=" + id + "] .act-icon").text("expand_more");
}
}

View File

@@ -1,281 +1,278 @@
//入力時にハッシュタグと@をサジェスト //入力時にハッシュタグと@をサジェスト
var timer = null var timer = null;
var input = document.getElementById('textarea') var input = document.getElementById("textarea");
var prev_val = input.value var prev_val = input.value;
var oldSuggest var oldSuggest;
var suggest var suggest;
input.addEventListener( input.addEventListener("focus", function () {
'focus', localStorage.removeItem("cursor");
function() { var acct_id = $("#post-acct-sel").val();
localStorage.removeItem('cursor') $("#suggest").html("");
var acct_id = $('#post-acct-sel').val() window.clearInterval(timer);
$('#suggest').html('') timer = window.setInterval(function () {
window.clearInterval(timer) var new_val = input.value;
timer = window.setInterval(function() { if (new_val == "") {
var new_val = input.value $("#suggest").html("");
if (new_val == '') { if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) {
$('#suggest').html('') $("#right-side").hide()
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) { $("#right-side").css("width", "300px")
$('#right-side').hide() $("#left-side").css("width", "100%")
$('#right-side').css('width', '300px') var width = localStorage.getItem("postbox-width");
$('#left-side').css('width', '100%') if (width) {
var width = localStorage.getItem('postbox-width') width = width.replace("px", "") * 1
if (width) {
width = width.replace('px', '') * 1
} else {
width = 300
}
$('#post-box').css('width', width + 'px')
}
return
}
if (prev_val != new_val) {
var tag = new_val.match(/#(\S{3,})/)
var acct = new_val.match(/@(\S{3,})/)
if (tag && tag[1]) {
var q = tag[1]
} else if (acct && acct[1]) {
var q = acct[1]
} else { } else {
$('#suggest').html('') width = 300
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) { }
$('#right-side').hide() $("#post-box").css("width", width + "px")
$('#right-side').css('width', '300px') }
$('#left-side').css('width', '100%') return;
var width = localStorage.getItem('postbox-width') }
if (prev_val != new_val) {
var semoji = new_val.match(/:(\S{3,})/);
if (semoji) {
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
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>';
}
}
}
}
if (ehtml != "") {
$("#right-side").show()
$("#right-side").css("width", "200px")
$("#left-side").css("width", "calc(100% - 200px)")
var width = localStorage.getItem("postbox-width");
if (width) {
width = width.replace("px", "") * 1 + 200
} else {
width = 600
}
$("#post-box").css("width", width + "px")
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
} else {
if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) {
$("#right-side").hide()
$("#right-side").css("width", "300px")
$("#left-side").css("width", "100%")
var width = localStorage.getItem("postbox-width");
if (width) { if (width) {
width = width.replace('px', '') * 1 width = width.replace("px", "") * 1
} else { } else {
width = 300 width = 300
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
} }
return
}
var domain = localStorage.getItem('domain_' + acct_id)
var at = localStorage.getItem('acct_' + acct_id + '_at')
suggest = 'https://' + domain + '/api/v2/search?q=' + q
if (suggest != oldSuggest) {
console.log('Try to get suggest at ' + suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
console.log(['Search', json])
//ハッシュタグ
if (json.hashtags[0] && tag) {
if (tag[1]) {
var tags = []
Object.keys(json.hashtags).forEach(function(key4) {
var tag = json.hashtags[key4]
var his = tag.history
var uses =
his[0].uses * 1 +
his[1].uses * 1 +
his[2].uses * 1 +
his[3].uses * 1 +
his[4].uses * 1 +
his[5].uses * 1 +
his[6].uses * 1
tagHTML = `<br><a onclick="tagInsert('#${escapeHTML(
tag.name
)}','#${q}')" class="pointer">#${escapeHTML(tag.name)}</a>&nbsp;${uses}toot(s)`
var item = {
uses: uses,
html: tagHTML
}
tags.push(item)
})
var num_a = -1
var num_b = 1
tags = tags.sort(function(a, b) {
var x = a['uses']
var y = b['uses']
if (x > y) return num_a
if (x < y) return num_b
return 0
})
var ins = ''
var nev = false
Object.keys(tags).forEach(function(key7) {
ins = ins + tags[key7].html
if (key7 <= 0 && !nev) {
ins = ins + '<br>'
nev = true
}
})
$('#suggest').html(ins)
$('#right-side').show()
$('#right-side').css('width', '200px')
$('#left-side').css('width', 'calc(100% - 200px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 200
} else {
width = 500
}
$('#post-box').css('width', width + 'px')
$('#poll').addClass('hide')
$('#emoji').addClass('hide')
$('#draft').addClass('hide')
}
} else if (json.accounts[0] && acct[1]) {
var accts = ''
Object.keys(json.accounts).forEach(function(key3) {
var acct = json.accounts[key3]
if (acct.acct != q) {
//Instance Actorって…
if (acct.username.indexOf('.') < 0) {
accts =
accts +
`<a onclick="tagInsert('@${acct.acct}','@${q}')" class="pointer">@${acct.acct}</a><br>`
}
}
})
$('#right-side').show()
$('#right-side').css('width', '200px')
$('#left-side').css('width', 'calc(100% - 200px)')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1 + 200
} else {
width = 500
}
$('#post-box').css('width', width + 'px')
$('#suggest').html(accts)
$('#poll').addClass('hide')
$('#emoji').addClass('hide')
$('#draft').addClass('hide')
} else {
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) {
$('#right-side').hide()
$('#right-side').css('width', '300px')
$('#left-side').css('width', '100%')
var width = localStorage.getItem('postbox-width')
if (width) {
width = width.replace('px', '') * 1
} else {
width = 300
}
$('#post-box').css('width', width + 'px')
}
}
})
} }
$("#suggest").html(ehtml);
} }
oldSuggest = suggest
prev_value = new_val
}, 1000)
},
false
)
input.addEventListener( var tag = new_val.match(/#(\S{3,})/);
'blur', var acct = new_val.match(/@(\S{3,})/);
function() { if (tag && tag[1]) {
window.clearInterval(timer) var q = tag[1];
favTag() } else if (acct && acct[1]) {
}, var q = acct[1];
false } else {
) $("#suggest").html("");
if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) {
$("#right-side").hide()
$("#right-side").css("width", "300px")
$("#left-side").css("width", "100%")
var width = localStorage.getItem("postbox-width");
if (width) {
width = width.replace("px", "") * 1
} else {
width = 300
}
$("#post-box").css("width", width + "px")
}
return;
}
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
suggest = "https://" + domain + "/api/v2/search?q=" + q
if (suggest != oldSuggest) {
console.log("Try to get suggest at " + suggest)
fetch(suggest, {
method: 'GET',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
console.log(["Search", json]);
//ハッシュタグ
if (json.hashtags[0] && tag) {
if (tag[1]) {
var tags = [];
Object.keys(json.hashtags).forEach(function (key4) {
var tag = json.hashtags[key4];
var his = tag.history;
var uses = his[0].uses * 1 + his[1].uses * 1 + his[2].uses * 1 + his[3].uses * 1 + his[4].uses * 1 + his[5].uses * 1 + his[6].uses * 1;
tagHTML = '<br><a onclick="tagInsert(\'#' + escapeHTML(tag.name) + '\',\'#' + q + '\')" class="pointer">#' +
escapeHTML(tag.name) + '</a>&nbsp;' + uses + 'toot(s)'
var item = {
"uses": uses,
"html": tagHTML
}
tags.push(item)
});
var num_a = -1;
var num_b = 1;
tags = tags.sort(function (a, b) {
var x = a["uses"];
var y = b["uses"];
if (x > y) return num_a;
if (x < y) return num_b;
return 0;
});
var ins = ""
var nev = false
Object.keys(tags).forEach(function (key7) {
ins = ins + tags[key7].html
if (key7 <= 0 && !nev) {
ins = ins + '<br>'
nev = true
}
});
$("#suggest").html(ins);
$("#right-side").show()
$("#right-side").css("width", "200px")
$("#left-side").css("width", "calc(100% - 200px)")
var width = localStorage.getItem("postbox-width");
if (width) {
width = width.replace("px", "") * 1 + 200
} else {
width = 600
}
$("#post-box").css("width", width + "px")
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
}
} else if (json.accounts[0] && acct[1]) {
var accts = "";
Object.keys(json.accounts).forEach(function (key3) {
var acct = json.accounts[key3];
if (acct.acct != q) {
//Instance Actorって…
if (acct.username.indexOf(".") < 0) {
accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a><br>';
}
}
});
$("#right-side").show()
$("#right-side").css("width", "200px")
$("#left-side").css("width", "calc(100% - 200px)")
var width = localStorage.getItem("postbox-width");
if (width) {
width = width.replace("px", "") * 1 + 200
} else {
width = 600
}
$("#post-box").css("width", width + "px")
$("#suggest").html(accts);
$("#poll").addClass("hide")
$("#emoji").addClass("hide")
} else {
if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) {
$("#right-side").hide()
$("#right-side").css("width", "300px")
$("#left-side").css("width", "100%")
var width = localStorage.getItem("postbox-width");
if (width) {
width = width.replace("px", "") * 1
} else {
width = 300
}
$("#post-box").css("width", width + "px")
}
}
});
}
};
oldSuggest = suggest;
prev_value = new_val;
}, 1000);
}, false);
input.addEventListener("blur", function () {
window.clearInterval(timer);
favTag();
}, false);
function tagInsert(code, del) { function tagInsert(code, del) {
var blankBefore = ' ' var now = $("#textarea").val();
var blankAfter = ' ' var selin = $("#textarea").prop('selectionStart');
var textarea = document.querySelector('#textarea') if (!del) {
var sentence = textarea.value
var len = sentence.length
var pos = textarea.selectionStart
if (del) {
var delLen = del.length
} else { } else {
var delLen = 0 var regExp = new RegExp(del.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
var now = now.replace(regExp, "");
selin = selin - del.length;
} }
var before = sentence.substr(0, pos - delLen) if (selin > 0) {
var last = before.substr(-1, 1) var before = now.substr(0, selin);
if (last == ' ') blankBefore = '' var after = now.substr(selin, now.length);
var after = sentence.substr(pos, len) newt = before + " " + code + " " + after;
var start = after.substr(0, 1)
if (start == ' ') blankAfter = ''
if (len == 0) {
var word = code
} else if (len == pos) {
var word = blankBefore + code
} else if (pos == 0) {
var word = code + blankAfter
} else { } else {
var word = blankBefore + code + blankAfter newt = code + " " + now;
} }
sentence = before + word + after $("#textarea").val(newt);
textarea.value = sentence $("#textarea").focus();
if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide') && $('#draft').hasClass('hide')) { if ($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")) {
$('#right-side').hide() $("#right-side").hide()
$('#right-side').css('width', '300px') $("#right-side").css("width", "300px")
$('#left-side').css('width', '50%') $("#left-side").css("width", "50%")
var width = localStorage.getItem('postbox-width').replace('px', '') * 1 var width = localStorage.getItem("postbox-width").replace("px", "") * 1;
if (!width) { if (!width) {
width = 300 width = 300
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
} }
$('#suggest').html('') $("#suggest").html("");
} }
function cgNPs(q) { function cgNPs(q) {
suggest = 'https://cg.toot.app/api/v1/search/light?q=' + q suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
if (suggest != oldSuggest) { if (suggest != oldSuggest) {
console.log('Try to get suggest at ' + suggest) console.log("Try to get suggest at " + suggest)
fetch(suggest, { fetch(suggest, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (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">' + escapeHTML(json[key4]) + '</a> ';
});
$("#suggest").html("Cinderella NowPlaying:" + tags);
} else {
$("#suggest").html("Cinderella NowPlaying:Not Found");
} }
}) });
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json[0]) {
var tags = ''
Object.keys(json).forEach(function(key4) {
var tag = json[key4]
tags =
tags +
`<a onclick="cgNp('${json[key4]}')" class="pointer">${escapeHTML(json[key4])}</a>`
})
$('#suggest').html('Cinderella NowPlaying:' + tags)
} else {
$('#suggest').html('Cinderella NowPlaying:Not Found')
}
})
} }
} }

View File

@@ -1,86 +1,79 @@
/*リプライ*/ /*リプライ*/
function re(id, ats_cm, acct_id, mode, cwTxt) { function re(id, ats_cm, acct_id, mode) {
clear() clear();
var ats = ats_cm.split(',') var ats = ats_cm.split(',');
localStorage.setItem('nohide', true) localStorage.setItem("nohide", true);
show() show();
$('#reply').val(id) $("#reply").val(id);
for (var i = 0; i < ats.length; i++) { for (var i = 0; i < ats.length; i++) {
var at = ats[i] var at = ats[i];
var te = $('#textarea').val() var te = $("#textarea").val();
if (at != localStorage.getItem('user_' + acct_id)) { if (at != localStorage.getItem("user_" + acct_id)) {
$('#textarea').val('@' + at + ' ' + te) $("#textarea").val("@" + at + " " + te);
} }
} }
$('#rec').text(lang.lang_yesno) $("#rec").text(lang.lang_yesno);
$('#post-acct-sel').val(acct_id) $("#post-acct-sel").val(acct_id);
$('#post-acct-sel').prop('disabled', true) $("#post-acct-sel").prop("disabled", true);
$('select').formSelect() $('select').formSelect();
mdCheck() $("#textarea").attr("placeholder", lang.lang_usetxtbox_reply);
$('#textarea').attr('placeholder', lang.lang_usetxtbox_reply) $("#textarea").focus();
$('#textarea').focus() var profimg = localStorage.getItem("prof_" + acct_id);
var profimg = localStorage.getItem('prof_' + acct_id)
if (!profimg) { if (!profimg) {
profimg = '../../img/missing.svg' profimg = "../../img/missing.svg";
}
$('#acct-sel-prof').attr('src', profimg)
vis(mode)
if(localStorage.getItem('cw-continue') == 'yes') {
cw(true)
$('#cw-text').val(cwTxt)
} }
$("#acct-sel-prof").attr("src", profimg);
vis(mode);
} }
function reEx(id) { function reEx(id) {
$('#tootmodal').modal('close') $('#tootmodal').modal('close');
var at = $('#tootmodal').attr('data-user') var at = $("#tootmodal").attr("data-user");
var acct_id = $('#status-acct-sel').val() var acct_id = $("#status-acct-sel").val();
var mode = $('#tootmodal .vis-data').attr('data-vis') var mode = $("#tootmodal .vis-data").attr("data-vis");
var cwTxt = $('#cw-text').val() re(id, at, acct_id, mode);
re(id, at, acct_id, mode, cwTxt)
} }
//引用 //引用
function qt(id, acct_id, at, url) { function qt(id, acct_id, at, url) {
localStorage.setItem('nohide', true) localStorage.setItem("nohide", true);
var qt = localStorage.getItem('quote') var qt = localStorage.getItem("quote");
if (!qt) { if (!qt) {
var qt = 'simple' var qt = "simple";
} }
if (qt == 'nothing') { if (qt == "nothing") {
return false return false;
} }
if (qt == 'simple') { if (qt == "simple") {
show() show();
$('#textarea').val('\n' + url) $("#textarea").val("\n" + url);
} else if (qt == 'mention') { } else if (qt == "mention") {
show() show();
$('#textarea').val('\n' + url + ' From:@' + at) $("#textarea").val("\n" + url + " From:@" + at);
} else if (qt == 'full') { } else if (qt == "full") {
show() show();
var html = $('[toot-id=' + id + '] .toot').html() var html = $("[toot-id=" + id + "] .toot").html();
html = html.match(/^<p>(.+)<\/p>$/)[1] html = html.match(/^<p>(.+)<\/p>$/)[1];
html = html.replace(/<br\s?\/?>/, '\n') html = html.replace(/<br\s?\/?>/, "\n");
html = html.replace(/<p>/, '\n') html = html.replace(/<p>/, "\n");
html = html.replace(/<\/p>/, '\n') html = html.replace(/<\/p>/, "\n");
html = $.strip_tags(html) html = $.strip_tags(html);
$('#textarea').val('\n' + '@' + at + ' ' + html + '\n' + url) $("#textarea").val("\n" + "@" + at + " " + html + "\n" + url);
} else if (qt == 'apiQuote') { } else if (qt == "apiQuote") {
clear() clear();
localStorage.setItem('nohide', true) localStorage.setItem("nohide", true);
show() show();
$('#quote').val(id) $("#quote").val(id);
$('#post-acct-sel').val(acct_id) $("#post-acct-sel").val(acct_id);
$('#post-acct-sel').prop('disabled', true) $("#post-acct-sel").prop("disabled", true);
$('select').formSelect() $('select').formSelect();
$('#textarea').attr('placeholder', lang.lang_usetxtbox_reply) $("#textarea").attr("placeholder", lang.lang_usetxtbox_reply);
$('#textarea').focus() $("#textarea").focus();
var profimg = localStorage.getItem('prof_' + acct_id) var profimg = localStorage.getItem("prof_" + acct_id);
if (!profimg) { if (!profimg) {
profimg = '../../img/missing.svg' profimg = "../../img/missing.svg";
} }
$('#acct-sel-prof').attr('src', profimg) $("#acct-sel-prof").attr("src", profimg);
} }
$('#post-acct-sel').val(acct_id) $("#post-acct-sel").val(acct_id);
$('select').formSelect() $('select').formSelect();
mdCheck() $("#textarea").focus();
$('#textarea').focus() }
}

View File

@@ -1,145 +0,0 @@
function announParse(obj, acct_id, tlid) {
var template = ''
var datetype = localStorage.getItem('datetype')
var gif = localStorage.getItem('gif')
//Ticker
var tickerck = localStorage.getItem('ticker_ok')
if (tickerck == 'yes') {
var ticker = true
} else if (!ticker || ticker == 'no') {
var ticker = false
}
if (!datetype) {
datetype = 'absolute'
}
if (!gif) {
var gif = 'yes'
}
Object.keys(obj).forEach(function(key) {
var toot = obj[key]
var content = toot.content
if (toot.emojis) {
Object.keys(toot.emojis).forEach(function(key1) {
var emoji = toot.emojis[key1]
var shortcode = emoji.shortcode
if (gif == 'yes') {
var emoSource = emoji.url
} else {
var emoSource = emoji.static_url
}
var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');">
`
var regExp = new RegExp(':' + shortcode + ':', 'g')
content = content.replace(regExp, emoji_url)
})
}
content = twemoji.parse(content)
var reactions = ''
//既存のリアクション
if (toot.reactions) {
Object.keys(toot.reactions).forEach(function(key2) {
var reaction = toot.reactions[key2]
//普通の絵文字 or カスタム絵文字 は文字数判断。ただしスコットランド国旗みたいなやべぇやつに注意
var splitter = new GraphemeSplitter()
if (splitter.splitGraphemes(reaction.name).length > 1) {
//カスタム絵文字
var shortcode = reaction.shortcode
if (gif == 'yes') {
var emoSource = reaction.url
} else {
var emoSource = reaction.static_url
}
var emoji_url = `
<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}"
alt=" :${shortcode}: " title="${shortcode}">`
} else {
emoji_url = twemoji.parse(reaction.name)
}
var addClass = ''
if (reaction.me) {
addClass = 'reactioned'
}
reactions =
reactions +
`<div class="announReaction ${addClass}" onclick="announReaction('${toot.id}', '${acct_id}', '${tlid}', ${reaction.me},'${reaction.name}')">
${emoji_url} ${reaction.count}
</div>`
})
}
if (toot.ends_at) {
var ended = `<div class="announReaction" title="${date(toot.ends_at, 'absolute')}" style="width: auto; cursor: default;">
<i class="fas fa-arrow-right"></i>
${date(toot.ends_at, datetype)}
</div>`
} else {
var ended = ''
}
template =
template +
`<div class="announcement" data-id="${toot.id}">
${content}
<div class="reactionsPack">
${reactions}
<div class="announReaction add" onclick="announReactionNew('${toot.id}', '${acct_id}', '${tlid}')"><i class="fas fa-plus"></i></div>
${ended}
</div>
</div>`
})
return template
}
function announReaction(id, acct_id, tlid, del, name) {
var at = localStorage.getItem('acct_' + acct_id + '_at')
var domain = localStorage.getItem('domain_' + acct_id)
var start = 'https://' + domain + '/api/v1/announcements/' + id + '/reactions/' + encodeURIComponent(name)
var httpreq = new XMLHttpRequest()
if(del) {
var method = 'DELETE'
} else {
var method = 'PUT'
}
httpreq.open(method, 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
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
announ(acct_id, tlid)
}
}
}
function announReactionNew(id, acct_id, tlid) {
$('#reply').val(id)
$('#media').val('announcement')
$('#unreact').hide()
$('#addreact').removeClass('hide')
$('#post-acct-sel').val(acct_id)
$('select').formSelect()
localStorage.setItem('nohide', true)
show()
emojiToggle(true)
$('#left-side').hide()
}
function emojiReactionDef(target) {
var emojiraw = newpack.filter(function(item, index) {
if (item.short_name == target) return true
})
var hex = emojiraw[0].unified.split('-')
if (hex.length === 2) {
emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1])
} else {
emoji = twemoji.convert.fromCodePoint(hex[0])
}
var acct_id = $('#post-acct-sel').val()
var id = $('#reply').val()
announReaction(id, acct_id, 0, false, emoji)
clear()
hide()
}

View File

@@ -4,401 +4,278 @@ function additional(acct_id, tlid) {
//メンション系 //メンション系
//$(".mention").attr("href", ""); //$(".mention").attr("href", "");
$('#timeline-container .mention').addClass('parsed') $("#timeline-container .mention").addClass("parsed");
$('#timeline-container .hashtag, #timeline-container [rel=tag]').each(function(i, elem) { $("#timeline-container .hashtag").each(function (i, elem) {
var tags = $(this) var tags = $(this).attr("href").match(
.attr('href') /https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
.match(/https?:\/\/([-a-zA-Z0-9@.]+)\/tags?\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/) );
$(this).attr("href", "#");
if (tags) { if (tags) {
var tagThis = tags[2] if (tags[2]) {
} else { $(this).attr("onclick", 'tagShow(\'' + tags[2] + '\')');
var tagThis = $(this).attr('data-regTag') }
}
if (tagThis) {
$(this).attr('href', "javascript:tagShow('" + tagThis + "')")
} }
}) });
//トゥートサムネ //トゥートサムネ
$('#timeline_' + tlid + ' .toot a:not(.parsed)').each(function(i, elem) { $("#timeline_" + tlid + " .toot a:not(.parsed)").each(function (i, elem) {
var text = $(this).attr('href') var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_" + acct_id + "_at");
var card = localStorage.getItem("card_" + tlid);
var text = $(this).attr('href');
if (text) { if (text) {
if (text.indexOf('twimg.com') === -1) { if (text.indexOf("twimg.com") === -1) {
var urls = text.match( var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/ /https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
) );
} }
} else { } else {
text = '' text = ""
var urls = [] var urls = []
} }
//トゥートのURLぽかったら //トゥートのURLぽかったら
toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/) toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
if (toot) { if (toot) {
if (toot[1]) { if (toot[1]) {
$(this).attr('data-acct', acct_id) $(this).attr("data-acct", acct_id);
} }
} }
if (urls) { if (urls) {
$(this).remove() $(this).remove();
} else if (!card) {
var id = $(this).parents('.cvo').attr("toot-id");
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:" + escapeHTML(json.title) + "<br>" +
escapeHTML(json.description) + "</span>");
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
$("[toot-id=" + id + "]").addClass("parsed");
}
});
}
} else { } else {
$(this).attr('title', text) $(this).attr("title", text);
} }
}) });
$('i.unparsed').each(function(i, elem) { $("i.unparsed").each(function (i, elem) {
var dem = $(this).text() var dem = $(this).text();
var dom = $(this) var dom = $(this);
var start = './js/emoji/emoji-map.json' var start = "./js/emoji/emoji-map.json";
var xmlHttpRequest = new XMLHttpRequest() var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function() { xmlHttpRequest.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) { if (this.readyState === 4 && this.status === 200) {
if (this.response) { if (this.response) {
var json = this.response var json = this.response;
if (this.status !== 200) { var emojis = json.emojis;
setLog(start, this.status, this.response)
}
var emojis = json.emojis
for (i = 0; i < emojis.length; i++) { for (i = 0; i < emojis.length; i++) {
var emojie = emojis[i] var emojie = emojis[i];
var regExp = new RegExp(dem, 'g') var regExp = new RegExp(dem, "g");
if (emojie.emoji.match(regExp)) { if (emojie.emoji.match(regExp)) {
var sc = emojie.name var sc = emojie.name;
var sc = 'twa-' + sc.replace(/_/g, '-') var sc = "twa-" + sc.replace(/_/g, "-");
dom.addClass(sc) dom.addClass(sc);
dom.text('') dom.text("");
dom.removeClass('unparsed') dom.removeClass("unparsed");
break break;
} }
} }
} }
} }
} }
xmlHttpRequest.open('GET', start, true) xmlHttpRequest.open('GET', start, true);
xmlHttpRequest.responseType = 'json' xmlHttpRequest.responseType = 'json';
xmlHttpRequest.send(null) xmlHttpRequest.send(null);
}) });
$('#timeline_' + tlid + ' .toot:not(:has(a:not(.add-show,.parsed)))').each(function(i, elem) { $("#timeline_" + tlid + " .toot:not(:has(a:not(.add-show,.parsed)))").each(function (i, elem) {
$(this) $(this).parent().find(".add-show").hide();
.parent() });
.find('.add-show')
.hide()
})
//Markdownイメージビューワー //Markdownイメージビューワー
$('#timeline_' + tlid + ' .toot a:not(.img-parsed):has(img)').each(function(i, elem) { $("#timeline_" + tlid + " .toot a:not(.img-parsed):has(img)").each(function (i, elem) {
var ilink = $(this).attr('href') var ilink = $(this).attr("href");
var id = $(this) var id = $(this).parents('.cvo').attr("toot-id");
.parents('.cvo') $(this).attr("href", "#");
.attr('toot-id') $(this).attr("onclick", "imgv('" + id + "','" + i + "')");
$(this).attr('href', `javascript:imgv('${id}','${i}')`) $(this).attr("data-type", "image");
$(this).attr('data-type', 'image') $(this).attr("id", id + "-image-" + i);
$(this).attr('id', id + '-image-' + i) $(this).attr("data-url", ilink);
$(this).attr('data-url', ilink) $(this).addClass("img-parsed");
$(this).addClass('img-parsed') });
})
} }
function additionalIndv(tlid, acct_id, id) { function additionalIndv(tlid, acct_id, id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var text = $('[toot-id=' + id + '] .toot a').attr('href') var text = $("[toot-id=" + id + "] .toot a").attr('href');
var urls = text.match( var urls = text.match(
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/ /https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
) );
if (urls) { if (urls) {
$('[toot-id=' + id + '] .toot a').remove() $("[toot-id=" + id + "] .toot a").remove();
} else { } else {
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/url?url=' + text var start = "https://" + domain + "/url?url=" + text;
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
} },
//body: JSON.stringify({}) //body: JSON.stringify({})
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} if (json.title) {
return response.json() $("[toot-id=" + id + "] .additional").html(
}) "<span class=\"gray\">URL" + lang.lang_cards_check + ":<br>Title:" + escapeHTML(json.title) + "<br>" +
.catch(function(error) { escapeHTML(json.description) + "</span>");
todo(error) $("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
setLog(start, 'JSON', error) $("[toot-id=" + id + "]").addClass("parsed");
console.error(error) }
}) });
.then(function(json) {
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>`
)
$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
$('[toot-id=' + id + ']').addClass('parsed')
}
})
} else { } else {
var id = $('[toot-id=' + id + '] .toot a') var id = $("[toot-id=" + id + "] .toot a").parents('.cvo').attr("toot-id");
.parents('.cvo') var start = "https://" + domain + "/api/v1/statuses/" + id;
.attr('toot-id')
var start = 'https://' + domain + '/api/v1/statuses/' + id
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
//body: JSON.stringify({}) //body: JSON.stringify({})
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
json = json.card;
//このリンク鳥やんけ、ってとき
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 = '';
} }
return response.json() $("[toot-id=" + id + "] .additional").html(
}) '<div class="twitter-tweet"><b>' + escapeHTML(json.author_name) + '</b><br>' + escapeHTML(json.description) + twiImg + '</div>');
.catch(function(error) { } else if (json.provider_name == "pixiv") {
todo(error) if (json.image) {
setLog(start, 'JSON', error) 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">';
console.error(error) } else {
}) var pxvImg = '';
.then(function(json) { }
cards = json.card $("[toot-id=" + id + "] .additional").html(
var analyze = cardHtml(cards, acct_id, id) '<div class="pixiv-post"><b><a href="' + json.author_url + '" target="_blank">' + escapeHTML(json.author_name) + '</a></b><br>' + escapeHTML(json.title) + pxvImg + '</div>');
$('[toot-id=' + id + '] .additional').html(analyze) } else {
if (json.title) { if (json.title) {
$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed') $("[toot-id=" + id + "] .additional").html(
$('[toot-id=' + id + ']').addClass('parsed') "<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>');
}
} }
function cardHtml(json, acct_id, id) { }
var analyze = '' if (json.title) {
var domain = json.url.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1]; $("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
var ok = [ $("[toot-id=" + id + "]").addClass("parsed");
"pixiv.net", }
"twitter.com", });
"mobile.twitter.com",
"open.spotify.com",
"youtube.com",
"youtu.be",
"m.youtube.com",
"www.youtube.com",
"nicovideo.jp",
"twitcasting.tv"
]
var isHad = _.includes(ok, domain);
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 = ''
}
analyze = `<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) {
analyze = `<span class="gray">URL
${lang.lang_cards_check}
:<br>Title:
${escapeHTML(json.title)}
<br>
${escapeHTML(json.description)}
</span>`
} }
if (json.html || json.provider_name == 'Twitter') {
if(isHad) {
var prved = `<img class="emoji" draggable="false" alt="✅"
src="https://twemoji.maxcdn.com/v/12.1.3/72x72/2705.png">`
var title = lang.lang_cards_trusted
}else{
var prved = '<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/v/12.1.4/72x72/26a0.png">'
var title = lang.lang_cards_untrusted
}
analyze =`<a onclick="cardHtmlShow('${acct_id}','${id}')" class="add-show pointer" title="${title}">
${lang.lang_parse_html}(${domain})${prved}
</a>${analyze}<br>`
}
} }
return analyze
}
function cardHtmlShow(acct_id, id) {
var domain = localStorage.getItem('domain_' + acct_id)
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;\/?:\@&=+\$,%#]+)/
)
var id = $('[toot-id=' + id + '] .toot a')
.parents('.cvo')
.attr('toot-id')
var start = 'https://' + domain + '/api/v1/statuses/' + id
fetch(start, {
method: 'GET',
headers: {
'content-type': 'application/json',
Authorization: 'Bearer ' + at
}
//body: JSON.stringify({})
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
json = json.card
if (json.html) {
analyze =
json.html +
`<i class="material-icons sml pointer" onclick="pip('
${id}
')" title="
${lang.lang_cards_pip}
">picture_in_picture_alt</i>`
}
if (json.provider_name == 'Twitter') {
var url = json.author_url
var status = json.url.match(/^https:\/\/twitter.com\/[_a-zA-Z0-9-]+\/status\/([0-9]+)/);
var statusId = false
if(status){
if(status.length > 0){
var statusId = status[1]
}
}
console.log(statusId)
if(statusId){
url = json.url
analyze = `
<blockquote class="twitter-tweet" data-dnt="true"><strong>${json.author_name}</strong><br>${json.description}<a href="${url}">${json.url}</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
`
}
}
$('[toot-id=' + id + '] .additional').html(analyze)
})
} }
//各TL上方のLink[On/Off] //各TL上方のLink[On/Off]
function cardToggle(tlid) { function cardToggle(tlid) {
var card = localStorage.getItem('card_' + tlid) var card = localStorage.getItem("card_" + tlid);
if (!card) { if (!card) {
localStorage.setItem('card_' + tlid, 'true') localStorage.setItem("card_" + tlid, "true");
$('#sta-card-' + tlid).text('Off') $("#sta-card-" + tlid).text("Off");
$('#sta-card-' + tlid).css('color', 'red') $("#sta-card-" + tlid).css("color", 'red');
} else { } else {
localStorage.removeItem('card_' + tlid) localStorage.removeItem("card_" + tlid);
$('#sta-card-' + tlid).text('On') $("#sta-card-" + tlid).text("On");
$('#sta-card-' + tlid).css('color', '#009688') $("#sta-card-" + tlid).css("color", '#009688');
} }
} }
//各TL上方のLink[On/Off]をチェック //各TL上方のLink[On/Off]をチェック
function cardCheck(tlid) { function cardCheck(tlid) {
var card = localStorage.getItem('card_' + tlid) var card = localStorage.getItem("card_" + tlid);
if (!card) { if (!card) {
$('#sta-card-' + tlid).text('On') $("#sta-card-" + tlid).text("On");
$('#sta-card-' + tlid).css('color', '#009688') $("#sta-card-" + tlid).css("color", '#009688');
} else { } else {
$('#sta-card-' + tlid).text('Off') $("#sta-card-" + tlid).text("Off");
$('#sta-card-' + tlid).css('color', 'red') $("#sta-card-" + tlid).css("color", 'red');
} }
} }
function mov(id, tlid, type, rand, target) { function mov(id, tlid, type) {
const dropdownTrigger = `dropdown_${rand}` if (tlid == "notf") {
let elm = document.querySelector(`#timeline_${tlid} #${dropdownTrigger}`) var tlide = "[data-notf=" + acct_id + "]";
if(tlid == 'notf') { } else if (tlid == "user") {
const timeline = $(target).parents('.notf-indv-box').attr('id') var tlide = "#his-data";
elm = document.querySelector(`#${timeline} #${dropdownTrigger}`)
console.log(`#${timeline} #${dropdownTrigger}`)
}
const instance = M.Dropdown.getInstance(elm)
if(instance) {
if(instance.isOpen) return false
}
var click = false
if (tlid == 'notf') {
var tlide = '[data-notf=' + acct_id + ']'
} else if (tlid == 'user') {
var tlide = '#his-data'
} else { } else {
var tlide = '[tlid=' + tlid + ']' var tlide = "[tlid=" + tlid + "]";
} }
var mouseover = localStorage.getItem('mouseover') var mouseover = localStorage.getItem("mouseover");
if (!mouseover) { if (!mouseover) {
mouseover = '' mouseover = "";
} }
if (mouseover == 'yes') { if (mouseover == "yes") {
mouseover = 'hide' mouseover = "hide";
} else if (mouseover == 'click') { } else if (mouseover == "click") {
if (type == 'mv') { if (type == "mv") {
mouseover = '' mouseover = "";
} else { } else {
mouseover = 'hide' mouseover = "hide";
} }
click = true } else if (mouseover == "no") {
} else if (mouseover == 'no') { mouseover = "";
mouseover = ''
} }
if (mouseover == 'hide') { if (mouseover == "hide") {
if (click) { $(tlide + " [toot-id=" + id + "] .area-actions").toggleClass("hide")
$(tlide + ' [unique-id=' + id + ']').toggleClass('hide-actions') $(tlide + " [toot-id=" + id + "] .area-side").toggleClass("hide")
} else {
$(tlide + ' [unique-id=' + id + ']').removeClass('hide-actions')
}
//$(tlide + " [toot-id=" + id + "] .area-vis").toggleClass("hide")
//$(tlide + " [toot-id=" + id + "] .area-actions").toggleClass("hide")
//$(tlide + " [toot-id=" + id + "] .area-side").toggleClass("hide")
} }
} }
function resetmv(type) { function resetmv(type) {
var mouseover = localStorage.getItem('mouseover') var mouseover = localStorage.getItem("mouseover");
if (!mouseover) { if (!mouseover) {
mouseover = '' mouseover = "";
} else if (mouseover == 'yes') { } else if (mouseover == "yes") {
mouseover = 'hide' mouseover = "hide";
} else if (mouseover == 'no') { } else if (mouseover == "no") {
mouseover = '' mouseover = "";
} else if (mouseover == 'click' && type != 'mv') { } else if (mouseover == "click" && type != "mv") {
mouseover = 'hide' mouseover = "hide";
} }
if (mouseover == 'hide') { if (mouseover == "hide") {
$('.cvo').addClass('hide-actions') $(".area-actions").addClass("hide");
//$(".area-vis").addClass("hide"); $(".area-side").addClass("hide");
//$(".area-actions").addClass("hide");
//$(".area-side").addClass("hide");
} }
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

@@ -1,486 +1,381 @@
/*メディアフィルター機能*/ /*メディアフィルター機能*/
//各TL上方のMedia[On/Off] //各TL上方のMedia[On/Off]
function mediaToggle(tlid) { function mediaToggle(tlid) {
var media = localStorage.getItem('media_' + tlid) var media = localStorage.getItem("media_" + tlid);
if (media) { if (media) {
localStorage.removeItem('media_' + tlid) localStorage.removeItem("media_" + tlid);
$('#sta-media-' + tlid).text('Off') $("#sta-media-" + tlid).text("Off");
$('#sta-media-' + tlid).css('color', 'red') $("#sta-media-" + tlid).css("color", 'red');
$('#timeline_' + tlid).removeClass('media-filter') $("#timeline_" + tlid).removeClass("media-filter")
} else { } else {
localStorage.setItem('media_' + tlid, 'true') localStorage.setItem("media_" + tlid, "true");
$('#sta-media-' + tlid).text('On') $("#sta-media-" + tlid).text("On");
$('#sta-media-' + tlid).css('color', '#009688') $("#sta-media-" + tlid).css("color", '#009688');
$('#timeline_' + tlid).addClass('media-filter') $("#timeline_" + tlid).addClass("media-filter")
} }
} }
/* Remote only */
function remoteOnly(tlid, type) {
var multi = localStorage.getItem('column')
var obj = JSON.parse(multi)
if (obj[tlid].data) {
if (obj[tlid].data.remote) {
obj[tlid].data.remote = false
var json = JSON.stringify(obj)
localStorage.setItem('column', json)
$('#sta-remote-' + tlid).text('Off')
$('#sta-remote-' + tlid).css('color', '#009688')
} else {
obj[tlid].data.remote = true
var json = JSON.stringify(obj)
localStorage.setItem('column', json)
$('#sta-remote-' + tlid).text('On')
$('#sta-remote-' + tlid).css('color', 'red')
}
} else {
obj[tlid].data = {}
obj[tlid].data.remote = true
var json = JSON.stringify(obj)
localStorage.setItem('column', json)
$('#sta-remote-' + tlid).text('On')
$('#sta-remote-' + tlid).css('color', 'red')
}
columnReload(tlid, type)
}
function remoteOnlyCk(tlid) {
var multi = localStorage.getItem('column')
var obj = JSON.parse(multi)
if (obj[tlid].data) {
if (obj[tlid].data.remote) {
$('#sta-remote-' + tlid).text('On')
$('#sta-remote-' + tlid).css('color', 'red')
return true
}
}
return false
}
//各TL上方のBT[BTOnly/BTExc/Off] //各TL上方のBT[BTOnly/BTExc/Off]
function ebtToggle(tlid) { function ebtToggle(tlid) {
var ebt = localStorage.getItem('ebt_' + tlid) var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt == 'true') { if (ebt == "true") {
localStorage.setItem('ebt_' + tlid, 'but') localStorage.setItem("ebt_" + tlid, "but");
$('#sta-bt-' + tlid).text('BT Only') $("#sta-bt-" + tlid).text("BT Only");
$('#sta-bt-' + tlid).css('color', '#ff9800') $("#sta-bt-" + tlid).css("color", '#ff9800');
$('#timeline_' + tlid).addClass('except-bt-filter') $("#timeline_" + tlid).addClass("except-bt-filter")
$('#timeline_' + tlid).removeClass('bt-filter') $("#timeline_" + tlid).removeClass("bt-filter")
} else if (ebt == 'but') { } else if (ebt == "but") {
localStorage.removeItem('ebt_' + tlid) localStorage.removeItem("ebt_" + tlid);
$('#sta-bt-' + tlid).text('Off') $("#sta-bt-" + tlid).text("Off");
$('#sta-bt-' + tlid).css('color', 'red') $("#sta-bt-" + tlid).css("color", 'red');
$('#timeline_' + tlid).removeClass('bt-filter') $("#timeline_" + tlid).removeClass("bt-filter")
$('#timeline_' + tlid).removeClass('except-bt-filter') $("#timeline_" + tlid).removeClass("except-bt-filter")
} else { } else {
localStorage.setItem('ebt_' + tlid, 'true') localStorage.setItem("ebt_" + tlid, "true");
$('#sta-bt-' + tlid).text('BT Ex') $("#sta-bt-" + tlid).text("BT Ex");
$('#sta-bt-' + tlid).css('color', '#009688') $("#sta-bt-" + tlid).css("color", '#009688');
$('#timeline_' + tlid).addClass('bt-filter') $("#timeline_" + tlid).addClass("bt-filter")
$('#timeline_' + tlid).removeClass('except-bt-filter') $("#timeline_" + tlid).removeClass("except-bt-filter")
} }
} }
//各TL上方のMedia[On/Off]をチェック //各TL上方のMedia[On/Off]をチェック
function mediaCheck(tlid) { function mediaCheck(tlid) {
var media = localStorage.getItem('media_' + tlid) var media = localStorage.getItem("media_" + tlid);
if (media) { if (media) {
$('#sta-media-' + tlid).text('On') $("#sta-media-" + tlid).text("On");
$('#sta-media-' + tlid).css('color', '#009688') $("#sta-media-" + tlid).css("color", '#009688');
$('#timeline_' + tlid).addClass('media-filter') $("#timeline_" + tlid).addClass("media-filter")
} else { } else {
$('#sta-media-' + tlid).text('Off') $("#sta-media-" + tlid).text("Off");
$('#sta-media-' + tlid).css('color', 'red') $("#sta-media-" + tlid).css("color", 'red');
$('#timeline_' + tlid).removeClass('media-filter') $("#timeline_" + tlid).removeClass("media-filter")
} }
} }
//各TL上方のBT[On/Off]をチェック //各TL上方のBT[On/Off]をチェック
function ebtCheck(tlid) { function ebtCheck(tlid) {
var ebt = localStorage.getItem('ebt_' + tlid) var ebt = localStorage.getItem("ebt_" + tlid);
if (ebt == 'true') { if (ebt == "true") {
$('#sta-bt-' + tlid).text('BT Ex') $("#sta-bt-" + tlid).text("BT Ex");
$('#sta-bt-' + tlid).css('color', '#009688') $("#sta-bt-" + tlid).css("color", '#009688');
$('#timeline_' + tlid).addClass('bt-filter') $("#timeline_" + tlid).addClass("bt-filter")
$('#timeline_' + tlid).removeClass('except-bt-filter') $("#timeline_" + tlid).removeClass("except-bt-filter")
} else if (ebt == 'but') { } else if (ebt == "but") {
$('#sta-bt-' + tlid).text('BT Only') $("#sta-bt-" + tlid).text("BT Only");
$('#sta-bt-' + tlid).css('color', '#ff9800') $("#sta-bt-" + tlid).css("color", '#ff9800');
$('#timeline_' + tlid).addClass('except-bt-filter') $("#timeline_" + tlid).addClass("except-bt-filter")
$('#timeline_' + tlid).removeClass('bt-filter') $("#timeline_" + tlid).removeClass("bt-filter")
} else { } else {
$('#sta-bt-' + tlid).text('Off') $("#sta-bt-" + tlid).text("Off");
$('#sta-bt-' + tlid).css('color', 'red') $("#sta-bt-" + tlid).css("color", 'red');
$('#timeline_' + tlid).removeClass('bt-filter') $("#timeline_" + tlid).removeClass("bt-filter")
$('#timeline_' + tlid).removeClass('except-bt-filter') $("#timeline_" + tlid).removeClass("except-bt-filter")
} }
} }
/* 削除追跡*/ /* 削除追跡*/
function catchToggle(tlid) { function catchToggle(tlid) {
var catchck = localStorage.getItem('catch_' + tlid) var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) { if (catchck) {
localStorage.removeItem('catch_' + tlid) localStorage.removeItem("catch_" + tlid);
$('#sta-del-' + tlid).text('Off') $("#sta-del-" + tlid).text("Off");
$('#sta-del-' + tlid).css('color', 'red') $("#sta-del-" + tlid).css("color", 'red');
parseColumn(tlid) parseColumn(tlid);
} else { } else {
localStorage.setItem('catch_' + tlid, 'true') localStorage.setItem("catch_" + tlid, "true");
$('#sta-del-' + tlid).text('On') $("#sta-del-" + tlid).text("On");
$('#sta-del-' + tlid).css('color', '#009688') $("#sta-del-" + tlid).css("color", '#009688');
parseColumn(tlid) parseColumn(tlid);
} }
} }
function catchCheck(tlid) { function catchCheck(tlid) {
var catchck = localStorage.getItem('catch_' + tlid) var catchck = localStorage.getItem("catch_" + tlid);
if (catchck) { if (catchck) {
$('#sta-del-' + tlid).text('On') $("#sta-del-" + tlid).text("On");
$('#sta-del-' + tlid).css('color', '#009688') $("#sta-del-" + tlid).css("color", '#009688');
} else { } else {
$('#sta-del-' + tlid).text('Off') $("#sta-del-" + tlid).text("Off");
$('#sta-del-' + tlid).css('color', 'red') $("#sta-del-" + tlid).css("color", 'red');
} }
} }
function delreset(tlid) { function delreset(tlid) {
$('[tlid=' + tlid + '] .by_delcatch').hide() $("[tlid=" + tlid + "] .by_delcatch").hide();
$('[tlid=' + tlid + '] .by_delcatch').remove() $("[tlid=" + tlid + "] .by_delcatch").remove();
} }
/*ワードフィルター機能*/ /*ワードフィルター機能*/
function filterMenu() { function filterMenu() {
$('#left-menu a').removeClass('active') $("#left-menu div").removeClass("active");
$('#filterMenu').addClass('active') $("#filterMenu").addClass("active");
$('.menu-content').addClass('hide') $(".menu-content").addClass("hide");
$('#filter-box').removeClass('hide') $("#filter-box").removeClass("hide");
} }
function filter() { function filter() {
$('#filtered-words').html('') $("#filtered-words").html("");
$('#filter-edit-id').val('') $("#filter-edit-id").val("")
var acct_id = $('#filter-acct-sel').val() var acct_id = $("#filter-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/filters' var start = "https://" + domain + "/api/v1/filters"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at, 'Authorization': 'Bearer ' + at
}, },
}) }).then(function (response) {
.then(function (response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function (text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (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.lang_edit + '</a>/<a onclick="filterDel(' + filterword.id + ',' + acct_id +
')" class="pointer">' + lang.lang_del + '</a><br> ';
});
if (filters == "") {
filters = lang.lang_filter_nodata + "<br>";
} }
return response.json() $("#filtered-words").html(filters);
}) } else {
.catch(function (error) { $("#filtered-words").html(lang_filter_nodata);
todo(error) }
setLog(start, 'JSON', error) });
console.error(error)
})
.then(function (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.lang_edit}
</a>/
<a onclick="filterDel('${filterword.id}','${acct_id}')" class="pointer">
${lang.lang_del}
</a><br> `
})
if (filters == '') {
filters = lang.lang_filter_nodata + '<br>'
}
$('#filtered-words').html(filters)
} else {
$('#filtered-words').html(lang_filter_nodata)
}
})
} }
function filterTime(day, hour, min) { function filterTime(day, hour, min) {
$('#days_filter').val(day) $("#days_filter").val(day)
$('#hours_filter').val(hour) $("#hours_filter").val(hour)
$('#mins_filter').val(min) $("#mins_filter").val(min)
} }
function makeNewFilter() { function makeNewFilter() {
var acct_id = $('#filter-acct-sel').val() var acct_id = $("#filter-acct-sel").val();
var phr = $('#filter-add-word').val() var phr = $("#filter-add-word").val();
var cont = [] var cont = [];
if ($('#home_filter:checked').val()) { if ($("#home_filter:checked").val()) {
cont.push('home') cont.push("home");
} }
if ($('#local_filter:checked').val()) { if ($("#local_filter:checked").val()) {
cont.push('public') cont.push("public");
} }
if ($('#notf_filter:checked').val()) { if ($("#notf_filter:checked").val()) {
cont.push('notifications') cont.push("notifications");
} }
if ($('#conv_filter:checked').val()) { if ($("#conv_filter:checked").val()) {
cont.push('thread') cont.push("thread");
}
if ($('#prof_filter:checked').val()) {
cont.push('profiles')
} }
if (!cont.length) { if (!cont.length) {
$('#filtered-words').html('Error:' + lang.lang_filter_errordegree) $("#filtered-words").html('Error:' + lang.lang_filter_errordegree);
} }
var exc = $('#except_filter:checked').val() var exc = $("#except_filter:checked").val();
var who = $('#wholeword_filter:checked').val() var who = $("#wholeword_filter:checked").val();
if (!who) { if (!who) {
who = false who = false;
} }
var time = $('#days_filter').val() * 24 * 60 * 60 + $('#hours_filter').val() * 60 * 60 + $('#mins_filter').val() * 60 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 domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if ($('#filter-edit-id').val()) { if ($("#filter-edit-id").val()) {
var start = 'https://' + domain + '/api/v1/filters/' + $('#filter-edit-id').val() var start = "https://" + domain + "/api/v1/filters/" + $("#filter-edit-id").val();
var method = 'PUT' var method = "PUT"
} else { } else {
var start = 'https://' + domain + '/api/v1/filters' var start = "https://" + domain + "/api/v1/filters"
var method = 'POST' var method = "POST"
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open(method, start, true) httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send( httpreq.send(JSON.stringify({
JSON.stringify({ phrase: phr,
phrase: phr, context: cont,
context: cont, irreversible: exc,
irreversible: exc, whole_word: who,
whole_word: who, expires_in: time
expires_in: time, }));
})
)
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { filter();
setLog(start, this.status, this.response)
}
filter()
filterUpdate(acct_id) filterUpdate(acct_id)
$('#filter-add-word').val('') $("#filter-add-word").val("");
$('#home_filter').prop('checked', false) $("#home_filter").prop("checked", false);
$('#local_filter').prop('checked', false) $("#local_filter").prop("checked", false);
$('#notf_filter').prop('checked', false) $("#notf_filter").prop("checked", false);
$('#conv_filter').prop('checked', false) $("#conv_filter").prop("checked", false);
$('#prof_filter').prop('checked', false) $("#except_filter").prop("checked", false);
$('#except_filter').prop('checked', false) $("#wholeword_filter").prop("checked", false);
$('#wholeword_filter').prop('checked', false) $("#days_filter").val("0");
$('#days_filter').val('0') $("#hours_filter").val("0");
$('#hours_filter').val('0') $("#mins_filter").val("0");
$('#mins_filter').val('0') $("#add-filter-btn").text(lang.lang_add);
$('#add-filter-btn').text(lang.lang_add) $("#filter-edit-id").val("")
$('#filter-edit-id').val('')
} }
} }
} }
function filterEdit(id, acct_id) { function filterEdit(id, acct_id) {
$('#filter-add-word').val('') $("#filter-add-word").val("");
$('#home_filter').prop('checked', false) $("#home_filter").prop("checked", false);
$('#local_filter').prop('checked', false) $("#local_filter").prop("checked", false);
$('#notf_filter').prop('checked', false) $("#notf_filter").prop("checked", false);
$('#conv_filter').prop('checked', false) $("#conv_filter").prop("checked", false);
$('#except_filter').prop('checked', false) $("#except_filter").prop("checked", false);
$('#wholeword_filter').prop('checked', false) $("#wholeword_filter").prop("checked", false);
$('#days_filter').val('0') $("#days_filter").val("0");
$('#hours_filter').val('0') $("#hours_filter").val("0");
$('#mins_filter').val('0') $("#mins_filter").val("0");
$('#add-filter-btn').text(lang.lang_edit) $("#add-filter-btn").text(lang.lang_edit);
$('#filter-edit-id').val(id) $("#filter-edit-id").val(id);
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/filters/' + id var start = "https://" + domain + "/api/v1/filters/" + id
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at, 'Authorization': 'Bearer ' + at
}, },
}) }).then(function (response) {
.then(function (response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function (text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (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);
} }
return response.json() if (json.whole_word) {
}) $("#wholeword_filter").prop("checked", true);
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (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)
} }
}) 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) { function filterDel(id, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/filters/' + id var start = "https://" + domain + "/api/v1/filters/" + id;
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('DELETE', start, true) httpreq.open("DELETE", start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send() httpreq.send();
httpreq.onreadystatechange = function () { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { filter();
setLog(start, this.status, this.response)
}
filter()
filterUpdate(acct_id) filterUpdate(acct_id)
} }
} }
} }
function getFilter(acct_id) { function getFilter(acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) != 'misskey') { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = 'https://' + domain + '/api/v1/filters' var start = "https://" + domain + "/api/v1/filters"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at, 'Authorization': 'Bearer ' + at
}, },
}) }).then(function (response) {
.then(function (response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function (text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} localStorage.setItem("filter_" + acct_id, JSON.stringify(json));
return response.json() });
})
.catch(function (error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function (json) {
localStorage.setItem('filter_' + acct_id, JSON.stringify(json))
})
} else { } else {
localStorage.setItem('filter_' + acct_id, JSON.stringify({})) localStorage.setItem("filter_" + acct_id, JSON.stringify({}));
} }
} }
function getFilterType(json, type) { function getFilterType(json, type) {
if (!json) { if (!json) {
return [] return [];
} }
if (type == 'local') { if (type == "local") {
type = 'public' type = "public";
} else if (type == 'list') { } else if (type == "list") {
type = 'home' type = "home";
} else if (type == 'notf') { } else if (type == "notf") {
type = 'notifi' type = "notifi";
} }
var mutedfilters = [] var mutedfilters = [];
Object.keys(json).forEach(function (key) { Object.keys(json).forEach(function (key) {
var filterword = json[key] var filterword = json[key];
var phrases = filterword.phrase var phrases = filterword.phrase;
var arr = filterword.context if (filterword.context.join(",").indexOf(type) !== -1) {
if (arr.join(',').indexOf(type) !== -1) { mutedfilters.push(phrases);
mutedfilters.push(phrases)
} else if (type == 'mix') {
if (arr.indexOf('home') !== -1 || arr.indexOf('public') !== -1) {
mutedfilters.push(phrases)
}
} }
}) });
return mutedfilters return mutedfilters;
}
function getFilterTypeByAcct(acct_id, type) {
if (localStorage.getItem('filter_' + acct_id) != 'undefined') {
var mute = getFilterType(JSON.parse(localStorage.getItem('filter_' + acct_id)), type)
} else {
var mute = []
}
return mute
} }
function filterUpdate(acct_id) { function filterUpdate(acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/filters' var start = "https://" + domain + "/api/v1/filters"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at, 'Authorization': 'Bearer ' + at
}, },
}) }).then(function (response) {
.then(function (response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function (text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} localStorage.setItem("filter_" + acct_id, JSON.stringify(json));
return response.json() filterUpdateInternal(json, "home");
}) filterUpdateInternal(json, "local");
.catch(function (error) { filterUpdateInternal(json, "notf");
todo(error) filterUpdateInternal(json, "pub");
setLog(start, 'JSON', 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) { function filterUpdateInternal(json, type) {
var home = getFilterType(json, type) var home = getFilterType(json, type);
var wordmute = localStorage.getItem('word_mute') var wordmute = localStorage.getItem("word_mute");
if (wordmute) { if (wordmute) {
var wordmute = JSON.parse(wordmute) var wordmute = JSON.parse(wordmute);
home = home.concat(wordmute) home = home.concat(wordmute);
} }
if (home) { if (home) {
$('[data-acct=' + acct_id + '] [data-type=' + type + '] .cvo').each(function (i, elem) { $("[data-acct=" + acct_id + "] [data-type=" + type + "] .cvo").each(function (i, elem) {
var id = $(elem).attr('toot-id') var id = $(elem).attr("toot-id");
$('[toot-id=' + id + ']').removeClass('hide') $("[toot-id=" + id + "]").removeClass("hide");
var text = $(elem).find('.toot').html() var text = $(elem).find('.toot').html();
Object.keys(home).forEach(function (key8) { Object.keys(home).forEach(function (key8) {
var word = home[key8] var word = home[key8];
var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, '\\$&'), 'g') var regExp = new RegExp(word.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&"), "g");
if ($.strip_tags(text).match(regExp)) { if ($.strip_tags(text).match(regExp)) {
$('[toot-id=' + id + ']').addClass('hide') $("[toot-id=" + id + "]").addClass("hide");
} }
}) });
}) });
} }
} }
/* /*
@@ -491,73 +386,73 @@ function filterUpdateInternal(json, type) {
*/ */
//通知フィルター //通知フィルター
function exclude(key) { function exclude(key) {
localStorage.setItem('exclude-' + key, '') localStorage.setItem("exclude-" + key, "")
var excludetxt = localStorage.getItem('exclude-' + key) var excludetxt = localStorage.getItem("exclude-" + key);
if ($('#exc-reply-' + key + ':checked').val()) { if ($('#exc-reply-' + key + ':checked').val()) {
excludetxt = '?exclude_types[]=mention' excludetxt = "?exclude_types[]=mention"
} }
if ($('#exc-fav-' + key + ':checked').val()) { if ($('#exc-fav-' + key + ':checked').val()) {
if (excludetxt || excludetxt != '') { if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + '&exclude_types[]=favourite' excludetxt = excludetxt + "&exclude_types[]=favourite"
} else { } else {
excludetxt = '?exclude_types[]=favourite' excludetxt = "?exclude_types[]=favourite"
} }
} }
if ($('#exc-bt-' + key + ':checked').val()) { if ($('#exc-bt-' + key + ':checked').val()) {
if (excludetxt || excludetxt != '') { if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + '&exclude_types[]=reblog' excludetxt = excludetxt + "&exclude_types[]=reblog"
} else { } else {
excludetxt = '?exclude_types[]=reblog' excludetxt = "?exclude_types[]=reblog"
} }
} }
if ($('#exc-follow-' + key + ':checked').val()) { if ($('#exc-follow-' + key + ':checked').val()) {
if (excludetxt || excludetxt != '') { if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + '&exclude_types[]=follow' excludetxt = excludetxt + "&exclude_types[]=follow"
} else { } else {
excludetxt = '?exclude_types[]=follow' excludetxt = "?exclude_types[]=follow"
} }
} }
if ($('#exc-poll-' + key + ':checked').val()) { if ($('#exc-poll-' + key + ':checked').val()) {
if (excludetxt || excludetxt != '') { if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + '&exclude_types[]=poll' excludetxt = excludetxt + "&exclude_types[]=poll"
} else { } else {
excludetxt = '?exclude_types[]=poll' excludetxt = "?exclude_types[]=poll"
} }
} else { } else {
} }
localStorage.setItem('exclude-' + key, excludetxt) localStorage.setItem("exclude-" + key, excludetxt)
parseColumn(key) parseColumn(key);
} }
function excludeCk(key, target) { function excludeCk(key, target) {
var exc = localStorage.getItem('exclude-' + key) var exc = localStorage.getItem("exclude-" + key);
if (!exc) { if (!exc) {
return '' return "";
} }
if (~exc.indexOf(target)) { if (~exc.indexOf(target)) {
return 'checked' return "checked"
} else { } else {
return '' return "";
} }
} }
function checkNotfFilter(tlid) { function checkNotfFilter(tlid){
var excludetxt = localStorage.getItem('exclude-' + tlid) var excludetxt = localStorage.getItem("exclude-" + tlid);
if (!excludetxt || excludetxt != '') { if(!excludetxt || excludetxt != ""){
return true return true;
} else { }else{
return false return false;
} }
} }
function resetNotfFilter(tlid) { function resetNotfFilter(tlid){
localStorage.setItem('exclude-' + tlid, '') localStorage.setItem("exclude-" + tlid, "")
parseColumn(tlid) parseColumn(tlid);
} }
function notfFilter(id, tlid, acct_id) { function notfFilter(id,tlid,acct_id){
var excludetxt = localStorage.getItem('exclude-' + tlid) var excludetxt = localStorage.getItem("exclude-" + tlid);
if (excludetxt || excludetxt != '') { if (excludetxt || excludetxt !="") {
excludetxt = excludetxt + '&account_id=' + id excludetxt = excludetxt + "&account_id="+id
} else { } else {
excludetxt = '?account_id=' + id excludetxt = "?account_id="+id
} }
localStorage.setItem('exclude-' + tlid, excludetxt) localStorage.setItem("exclude-" + tlid, excludetxt)
parseColumn(tlid) parseColumn(tlid);
} }

View File

@@ -1,358 +1,263 @@
function listMenu() { function listMenu() {
$('#left-menu a').removeClass('active') $("#left-menu div").removeClass("active");
$('#listMenu').addClass('active') $("#listMenu").addClass("active");
$('.menu-content').addClass('hide') $(".menu-content").addClass("hide");
$('#list-box').removeClass('hide') $("#list-box").removeClass("hide");
$('ul.tabs').tabs('select_tab', 'src-sta') $('ul.tabs').tabs('select_tab', 'src-sta');
$('#src-contents').html('') $("#src-contents").html("");
} }
function list() { function list() {
$('#lists-user').html('') $("#lists-user").html("");
var acct_id = $('#list-acct-sel').val() var acct_id = $("#list-acct-sel").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/api/users/lists/list' var start = "https://" + domain + "/api/users/lists/list"
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
body: JSON.stringify({ body: JSON.stringify({
i: at i: at
}) }),
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} if (json) {
return response.json() var lists = "";
}) Object.keys(json).forEach(function (key) {
.catch(function(error) { var list = json[key];
todo(error) lists = lists + escapeHTML(list.title) + ':<a onclick="listShow(\'' + list.id + '\',\'' + escapeHTML(list.title) + '\',\'' + acct_id +
setLog(start, 'JSON', error) '\')" class="pointer">' + lang.lang_list_show + '</a><br>';
console.error(error) });
}) $("#lists").html(lists);
.then(function(json) { } else {
if (json) { $("#lists").html(lang.lang_list_nodata);
var lists = '' }
Object.keys(json).forEach(function(key) { });
var list = json[key]
lists =
lists +
escapeHTML(list.title) +
`:<a onclick="listShow('${list.id}','${escapeHTML(
list.title
)}','${acct_id}')" class="pointer">
${lang.lang_list_show}
</a><br>`
})
$('#lists').html(lists)
} else {
$('#lists').html(lang.lang_list_nodata)
}
})
} else { } else {
var start = 'https://' + domain + '/api/v1/lists' var start = "https://" + domain + "/api/v1/lists"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json) {
var lists = "";
Object.keys(json).forEach(function (key) {
var list = json[key];
lists = lists + escapeHTML(list.title) + ':<a onclick="listShow(\'' + list.id + '\',\'' + escapeHTML(list.title) + '\',\'' + acct_id +
'\')" class="pointer">' + lang.lang_list_show + '</a>/<a onclick="listUser(\'' + list.id + '\',' + acct_id +
')" class="pointer">' + lang.lang_list_users + '</a><br>';
});
$("#lists").html(lists);
} else {
$("#lists").html(lang.lang_list_nodata);
} }
}) });
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json) {
var lists = ''
Object.keys(json).forEach(function(key) {
var list = json[key]
lists =
lists +
escapeHTML(list.title) +
`:<a onclick="listShow('${list.id}','${escapeHTML(
list.title
)}','${acct_id}')" class="pointer">
${lang.lang_list_show}
</a>/
<a onclick="listUser('${list.id}','${acct_id}')" class="pointer">
${lang.lang_list_users}
'</a><br>`
})
$('#lists').html(lists)
} else {
$('#lists').html(lang.lang_list_nodata)
}
})
} }
} }
function makeNewList() { function makeNewList() {
var acct_id = $('#list-acct-sel').val() var acct_id = $("#list-acct-sel").val();
var text = $('#list-add').val() var text = $("#list-add").val();
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) != 'misskey') { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = 'https://' + domain + '/api/v1/lists' var start = "https://" + domain + "/api/v1/lists"
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send( httpreq.send(JSON.stringify({
JSON.stringify({ title: text
title: text }));
}) httpreq.onreadystatechange = function () {
)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { list();
setLog(start, this.status, this.response) $("#list-add").val("")
}
list()
$('#list-add').val('')
} }
} }
} else { } else {
var start = 'https://' + domain + '/api/users/lists/create' var start = "https://" + domain + "/api/users/lists/create"
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send( httpreq.send(JSON.stringify({
JSON.stringify({ i: at,
i: at, title: text
title: text }));
}) httpreq.onreadystatechange = function () {
)
httpreq.onreadystatechange = function() {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) { list();
setLog(start, this.status, this.response) $("#list-add").val("")
}
list()
$('#list-add').val('')
} }
} }
} }
} }
function listShow(id, title, acct_id) { function listShow(id, title, acct_id) {
localStorage.setItem('list_' + id + '_' + acct_id, title) localStorage.setItem("list_" + id + "_" + acct_id, title);
tl('list', id, acct_id, 'add') tl('list', id, acct_id, 'add');
} }
function listUser(id, acct_id) { function listUser(id, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/lists/' + id + '/accounts' var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json) {
var lists = "";
var templete = userparse(json, '', acct_id);
if (!json[0]) {
templete = lang.lang_list_nouser;
}
$("#lists-user").html(templete);
jQuery("time.timeago").timeago();
} else {
$("#lists-user").html(lang.lang_list_nouser);
} }
}) });
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json) {
var lists = ''
var templete = userparse(json, '', acct_id)
if (!json[0]) {
templete = lang.lang_list_nouser
}
$('#lists-user').html(templete)
jQuery('time.timeago').timeago()
} else {
$('#lists-user').html(lang.lang_list_nouser)
}
})
} }
function hisList(user, acct_id) { function hisList(user, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) != 'misskey') { if (localStorage.getItem("mode_" + domain) != "misskey") {
var start = 'https://' + domain + '/api/v1/lists' var start = "https://" + domain + "/api/v1/lists"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json) {
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">' + escapeHTML(list.title) + '</a><br> ';
});
$("#his-lists-a").html(lists);
} else {
$("#his-lists-a").html(lang.lang_list_nodata);
} }
}) });
.then(function(response) { var start = "https://" + domain + "/api/v1/accounts/" + user + "/lists"
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json) {
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">
${escapeHTML(list.title)}
</a><br> `
})
$('#his-lists-a').html(lists)
} else {
$('#his-lists-a').html(lang.lang_list_nodata)
}
})
var start = 'https://' + domain + '/api/v1/accounts/' + user + '/lists'
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
},
}).then(function (response) {
return response.json();
}).catch(function (error) {
todo(error);
console.error(error);
}).then(function (json) {
if (json) {
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 +
'\')" class="pointer">' + escapeHTML(list.title) + '</a><br> ';
});
$("#his-lists-b").html(lists);
} else {
$("#his-lists-b").html(lang.lang_list_nodata);
} }
}) });
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
if (json) {
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}')" class="pointer">
${escapeHTML(list.title)}
</a><br> `
})
$('#his-lists-b').html(lists)
} else {
$('#his-lists-b').html(lang.lang_list_nodata)
}
})
} else { } else {
var start = 'https://' + domain + '/api/users/lists/list' var start = "https://" + domain + "/api/users/lists/list"
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
body: JSON.stringify({ body: JSON.stringify({
i: at i: at
}) }),
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} if (json) {
return response.json() var lists = "";
}) Object.keys(json).forEach(function (key) {
.catch(function(error) { var list = json[key];
todo(error) lists = lists + list.title + ':<a onclick="listShow(\'' + list.id + '\',\'' + escapeHTML(list.title) + '\',\'' + acct_id +
setLog(start, 'JSON', error) '\')" class="pointer">' + lang.lang_list_show + '</a>/<a onclick="listAdd(\'' + list.id + '\',\'' + user + '\',\'' + acct_id +
console.error(error) '\')" class="pointer">' + lang.lang_list_add + lang.lang_list_add_misskey + '</a><br>';
}) });
.then(function(json) { $("#his-lists-a").html(lists);
if (json) { } else {
var lists = '' $("#his-lists-a").html(lang.lang_list_nodata);
Object.keys(json).forEach(function(key) { }
var list = json[key] });
lists = $("#his-lists-b").html("");
lists +
list.title +
`:<a onclick="listShow('${list.id}','${escapeHTML(
list.title
)}','${acct_id}')" class="pointer">
${lang.lang_list_show}
</a>/
<a onclick="listAdd('${list.id}','${user}','${acct_id}')" class="pointer">
${lang.lang_list_add}
${lang.lang_list_add_misskey}
'</a><br>`
})
$('#his-lists-a').html(lists)
} else {
$('#his-lists-a').html(lang.lang_list_nodata)
}
})
$('#his-lists-b').html('')
} }
} }
function listAdd(id, user, acct_id) { function listAdd(id, user, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/api/users/lists/push' var start = "https://" + domain + "/api/users/lists/push"
var i = { var i = {
i: at, i: at,
listId: id, listId: id,
userId: user userId: user
} }
} else { } else {
var start = 'https://' + domain + '/api/v1/lists/' + id + '/accounts' var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
var i = { var i = {
account_ids: [user] account_ids: [user]
} }
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify(i)) httpreq.send(JSON.stringify(i));
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
hisList(user, acct_id) hisList(user, acct_id)
} }
} }
} }
function listRemove(id, user, acct_id) { function listRemove(id, user, acct_id) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
var start = 'https://' + domain + '/api/users/lists/push' var start = "https://" + domain + "/api/users/lists/push"
var method = 'POST' var method = 'POST'
var i = { var i = {
i: at, i: at,
@@ -360,25 +265,22 @@ function listRemove(id, user, acct_id) {
userId: user userId: user
} }
} else { } else {
var start = 'https://' + domain + '/api/v1/lists/' + id + '/accounts' var start = "https://" + domain + "/api/v1/lists/" + id + "/accounts"
var method = 'DELETE' var method = 'DELETE'
var i = { var i = {
account_ids: [user] account_ids: [user]
} }
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open(method, start, true) httpreq.open(method, start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify(i)) httpreq.send(JSON.stringify(i));
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
if (httpreq.readyState === 4) { if (httpreq.readyState === 4) {
var json = httpreq.response var json = httpreq.response;
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
hisList(user, acct_id) hisList(user, acct_id)
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,216 +1,327 @@
//Integrated TL //Integrated TL
async function mixtl(acct_id, tlid, type, delc, voice) { function mixtl(acct_id, tlid, type, delc, voice) {
localStorage.setItem('now', type) localStorage.removeItem("morelock")
todo('Integrated TL Loading...(Local)') localStorage.setItem("now", type);
const domain = localStorage.getItem('domain_' + acct_id) todo("Integrated TL Loading...(Local)");
let startLocal = 'https://' + domain + '/api/v1/timelines/public?local=true' //まずLocal
let local = await getTL(startLocal, acct_id) var domain = localStorage.getItem("domain_" + acct_id);
let startHome = 'https://' + domain + '/api/v1/timelines/home' var at = localStorage.getItem("acct_" + acct_id + "_at");
let home = await getTL(startHome, acct_id) var start = "https://" + domain + "/api/v1/timelines/public?local=true";
let concated = _.concat(local, home) fetch(start, {
let uniqued = _.uniqBy(concated, 'id')
let sorted = _.orderBy(uniqued, ['id'], ['desc'])
let integrated = _.slice(sorted, 0, 19)
$('#landing_' + tlid).hide()
let mute = getFilterTypeByAcct(acct_id, 'mix')
let templete = parse(integrated, type, acct_id, tlid, '', mute, type)
localStorage.setItem('lastobj_' + tlid, integrated[0].id)
$('#timeline_' + tlid).html(templete)
additional(acct_id, tlid)
jQuery('time.timeago').timeago()
todc()
if(mastodonBaseWsStatus[domain] == 'cannotuse') {
mixre(acct_id, tlid, 'mix', mute, voice, '')
} else if (mastodonBaseWsStatus[domain] == 'undetected' || mastodonBaseWsStatus[domain] == 'connecting') {
const mbws = setInterval(function () {
if(mastodonBaseWsStatus[domain] == 'cannotuse') {
mixre(acct_id, tlid, 'mix', mute, voice, '')
clearInterval(mbws)
} else if(mastodonBaseWsStatus[domain] == 'available') {
mastodonBaseWs[domain].send(JSON.stringify({type: 'subscribe', stream: 'public:local'}))
clearInterval(mbws)
}
}, 1000)
} else if(mastodonBaseWsStatus[domain] == 'available') {
mastodonBaseWs[domain].send(JSON.stringify({type: 'subscribe', stream: 'public:local'}))
}
$(window).scrollTop(0)
lastId = integrated[0].id
beforeLastId = integrated[1].id
}
async function getTL(start, acct_id) {
const at = localStorage.getItem('acct_' + acct_id + '_at')
let promise = await fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function (response) {
if (!promise.ok) { return response.json();
promise.text().then(function(text) { }).catch(function (error) {
setLog(promise.url, promise.status, text) todo(error);
}) console.error(error);
} }).then(function (jsonL) {
return await promise.json() var start = "https://" + domain + "/api/v1/timelines/home";
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 (jsonH) {
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;
return 0;
});
if (type == "integrated") {
timeline.splice(20);
}
var templete = "";
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "mix");
} else {
var mute = [];
}
Object.keys(timeline).forEach(function (key) {
var pkey = key * 1 + 1;
if (pkey < timeline.length) {
if (date(timeline[key].created_at, "unix") != date(timeline[pkey].created_at, "unix")) {
if (type == "integrated") {
templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix");
} else if (type == "plus") {
if (timeline[key].account.acct == timeline[key].account.username) {
templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "plus");
}
}
}
}
});
$("#landing_" + tlid).hide();
$("#timeline_" + tlid).html(templete);
mixre(acct_id, tlid, type, mute, delc, voice);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
todc();
});
});
} }
//Streamingに接続 //Streamingに接続
function mixre(acct_id, tlid, TLtype, mute, voice, mode) { function mixre(acct_id, tlid, TLtype, mute, delc, voice, mode) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
if (localStorage.getItem('streaming_' + acct_id)) { if (localStorage.getItem("streaming_" + acct_id)) {
var wss = localStorage.getItem('streaming_' + acct_id) var wss = localStorage.getItem("streaming_" + acct_id)
} else { } else {
var wss = 'wss://' + domain var wss = "wss://" + domain
} }
var startHome = wss + '/api/v1/streaming/?stream=user&access_token=' + at var startHome = wss +
var startLocal = wss + '/api/v1/streaming/?stream=public:local&access_token=' + at "/api/v1/streaming/?stream=user&access_token=" + at;
var wshid = wsHome.length var startLocal = wss +
var wslid = wsLocal.length "/api/v1/streaming/?stream=public:local&access_token=" + at;
wsHome[wshid] = new WebSocket(startHome) var wshid = websocketHome.length;
wsLocal[wslid] = new WebSocket(startLocal) var wslid = websocketLocal.length;
wsHome[wshid].onopen = function(mess) { websocketHome[wshid] = new WebSocket(startHome);
localStorage.setItem('wssH_' + tlid, wshid) websocketLocal[wslid] = new WebSocket(startLocal);
console.table({ websocketHome[wshid].onopen = function (mess) {
tlid: tlid, localStorage.setItem("wssH_" + tlid, wshid);
type: 'Connect Streaming API(Integrated:Home)', console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Home)", "domain": domain, "message": mess })
domain: domain, $("#notice_icon_" + tlid).removeClass("red-text");
message: mess
})
$('#notice_icon_' + tlid).removeClass('red-text')
} }
wsLocal[wslid].onopen = function(mess) { websocketLocal[wslid].onopen = function (mess) {
localStorage.setItem('wssL_' + tlid, wslid) localStorage.setItem("wssL_" + tlid, wslid);
console.table({ console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Local)", "domain": domain, "message": mess })
tlid: tlid, $("#notice_icon_" + tlid).removeClass("red-text");
type: 'Connect Streaming API(Integrated:Local)',
domain: domain,
message: mess
})
$('#notice_icon_' + tlid).removeClass('red-text')
} }
wsLocal[wslid].onmessage = function(mess) { websocketLocal[wslid].onmessage = function (mess) {
console.log('Receive Streaming API:(Integrated:Local)', mess) console.log(["Receive Streaming API:(Integrated:Local)", obj]);
integratedMessage(mess, acct_id, tlid, mute, voice)
} var obj = JSON.parse(JSON.parse(mess.data).payload);
wsHome[wshid].onmessage = function(mess) { var type = JSON.parse(mess.data).event;
console.log(['Receive Streaming API:(Integrated:Home)', mess]) if (type == "delete") {
integratedMessage(mess, acct_id, tlid, mute, voice) if (delc == "true") {
} $("#timeline_" + tlid + " [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
wsLocal[wslid].onerror = function(error) { $("#timeline_" + tlid + " [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
console.error('WebSocketLocal Error')
console.error(error)
$('#notice_icon_' + tlid).addClass('red-text')
if (mode == 'error') {
todo('WebSocket Error ' + error)
} else {
var errorct = localStorage.getItem('wserror_' + tlid) * 1 + 1
localStorage.setItem('wserror_' + tlid, errorct)
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, '', 'error')
}
}
}
wsLocal[wslid].onclose = function() {
console.warn('WebSocketLocal Closing:' + tlid)
$('#notice_icon_' + tlid).addClass('red-text')
if (mode == 'error') {
todo('WebSocket Closed')
} else {
var errorct = localStorage.getItem('wserror_' + tlid) * 1 + 1
localStorage.setItem('wserror_' + tlid, errorct)
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, '', 'error')
}
}
}
wsHome[wshid].onerror = function(error) {
console.error(['WebSocketHome Error', error])
$('#notice_icon_' + tlid).addClass('red-text')
if (mode == 'error') {
todo('WebSocket Error ' + error)
} else {
var errorct = localStorage.getItem('wserror_' + tlid) * 1 + 1
localStorage.setItem('wserror_' + tlid, errorct)
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, '', 'error')
}
}
}
wsHome[wshid].onclose = function() {
console.warn('WebSocketHome Closing:' + tlid)
$('#notice_icon_' + tlid).addClass('red-text')
if (mode == 'error') {
todo('WebSocket Closed')
} else {
var errorct = localStorage.getItem('wserror_' + tlid) * 1 + 1
localStorage.setItem('wserror_' + tlid, errorct)
if (errorct < 3) {
reconnector(tlid, TLtype, acct_id, '', 'error')
}
}
}
}
function integratedMessage(mess, acct_id, tlid, mute, voice) {
let data = JSON.parse(mess.data)
let type = data.event
let payload = data.payload
if (type == 'delete') {
$('[unique-id=' + payload + ']').hide()
$('[unique-id=' + payload + ']').remove()
} else if (type == 'update') {
let obj = JSON.parse(payload)
if (obj.id != lastId && obj.id != beforeLastId) {
lastId = obj.id
beforeLastId = obj.id
let dom = parse([obj], '', acct_id, tlid, '', mute)
if (voice) say(obj.content)
if ($('timeline_box_' + tlid + '_box .tl-box').scrollTop() === 0) {
$('#timeline_' + tlid).prepend(dom)
} else { } else {
let pool = localStorage.getItem('pool_' + tlid) $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
if (pool) { $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
pool = dom + pool
} else {
pool = dom
}
localStorage.setItem('pool_' + tlid, pool)
} }
scrollck()
additional(acct_id, tlid) } else if (type == "update") {
jQuery('time.timeago').timeago() 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, "mix");
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("二重取得発生中");
}
} }
} }
websocketHome[wshid].onmessage = function (mess) {
console.log(["Receive Streaming API:(Integrated:Home)", obj]);
var obj = JSON.parse(JSON.parse(mess.data).payload);
var type = JSON.parse(mess.data).event;
if (type == "delete") {
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, "", mute, "mix");
} else {
var templete = "";
}
}
if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) {
if (voice) {
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid, "", mute, "mix");
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("二重取得発生中");
}
}
}
websocketLocal[wslid].onerror = function (error) {
console.error('WebSocketLocal Error')
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, TLtype, acct_id, "", "error");
}
}
};
websocketLocal[wslid].onclose = function () {
console.warn('WebSocketLocal Closing:' + 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, TLtype, acct_id, "", "error");
}
}
};
websocketHome[wshid].onerror = function (error) {
console.error(['WebSocketHome 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, TLtype, acct_id, "", "error");
}
}
};
websocketHome[wshid].onclose = function () {
console.warn('WebSocketHome Closing:' + 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, TLtype, acct_id, "", "error");
}
}
};
} }
//ある程度のスクロールで発火 //ある程度のスクロールで発火
async function mixmore(tlid, type) { function mixmore(tlid, type) {
var multi = localStorage.getItem('column') var multi = localStorage.getItem("column");
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain var acct_id = obj[tlid].domain;
moreloading = true moreloading = true;
todo('Integrated TL MoreLoading...(Local)') todo("Integrated TL MoreLoading...(Local)");
const domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
const sid = $('#timeline_' + tlid + ' .cvo') var at = localStorage.getItem("acct_" + acct_id + "_at");
.last() var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
.attr('unique-id')
let startLocal = 'https://' + domain + '/api/v1/timelines/public?local=true&max_id=' + sid
let local = await getTL(startLocal, acct_id) var start = "https://" + domain + "/api/v1/timelines/public?local=true&max_id=" + sid;
let startHome = 'https://' + domain + '/api/v1/timelines/home?max_id=' + sid fetch(start, {
let home = await getTL(startHome, acct_id) method: 'GET',
let concated = _.concat(local, home) headers: {
let uniqued = _.uniqBy(concated, 'id') 'content-type': 'application/json',
let sorted = _.orderBy(uniqued, ['id'], ['desc']) 'Authorization': 'Bearer ' + at
let integrated = _.slice(sorted, 0, 19) },
$('#landing_' + tlid).hide() }).then(function (response) {
let mute = getFilterTypeByAcct(acct_id, 'mix') return response.json();
let templete = parse(integrated, type, acct_id, tlid, '', mute, type) }).catch(function (error) {
localStorage.setItem('lastobj_' + tlid, integrated[0].id) todo(error);
$('#timeline_' + tlid).append(templete) console.error(error);
additional(acct_id, tlid) }).then(function (jsonL) {
jQuery('time.timeago').timeago() var start = "https://" + domain + "/api/v1/timelines/home?max_id=" + sid;
moreloading = false fetch(start, {
todc() 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 (jsonH) {
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;
return 0;
});
timeline.splice(20);
var templete = "";
Object.keys(timeline).forEach(function (key) {
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, "", mute, "mix");
} else if (type == "plus") {
if (timeline[key].account.acct == timeline[key].account.username) {
templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix");
}
}
}
}
});
$("#timeline_" + tlid).append(templete);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
moreloading = false;
todc();
});
});
} }

View File

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

View File

@@ -1,375 +1,249 @@
//Integrated TL //Integrated TL
function mixtl(acct_id, tlid, type, delc, voice) { function mixtl(acct_id, tlid) {
localStorage.removeItem('morelock') var type = "mix";
localStorage.setItem('now', type) localStorage.removeItem("morelock")
todo('Integrated TL Loading...(Local)') localStorage.setItem("now", type);
todo("Integrated TL Loading...(Local)");
var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem("acct_"+ acct_id + "_at");
//まずLocal //まずLocal
var domain = localStorage.getItem('domain_' + acct_id) var start = "https://" + domain + "/api/v1/timelines/public?local=true";
var at = localStorage.getItem('acct_' + acct_id + '_at')
var start = 'https://' + domain + '/api/v1/timelines/public?local=true'
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function(response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function(error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function(json) {
//パースして描画
var templete = parse(json, 'mix', acct_id, tlid);
$("#timeline_" + tlid).html(templete[0]);
jQuery("time.timeago").timeago();
$(window).scrollTop(0);
var locals = templete[1];
var times = templete[2];
todo("Integrated TL Loading...(Home)");
//Home
var start = "https://" + domain + "/api/v1/timelines/home";
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(obj) {
//ホームのオブジェクトをUnix時間で走査
if (!$("[toot-id=" + obj[0].id + "]").length) {
$("#timeline_" + tlid + " .cvo").first().before(parse([obj[0]], 'home',
acct_id));
//delete obj[0];
} }
return response.json() //Localが遅すぎてHomeの全てより過去の場合
}) var unixL=date(json[0].created_at,"unix");
.catch(function(error) { var unixH=date(obj[obj.length-1].created_at,"unix");
todo(error) //console.log(unixH+"vs"+unixL)
setLog(start, 'JSON', error) if(unixH < unixL){
console.error(error) Object.keys(obj).forEach(function(key) {
}) var skey = obj.length - key - 1;
.then(function(jsonL) { var toot = obj[key];
var start = 'https://' + domain + '/api/v1/timelines/home' console.log(toot);
fetch(start, { var id = toot.id;
method: 'GET', if ($("#timeline_" + tlid + " [toot-id=" + toot.id + "]").length < 1) {
headers: { //console.log(toot.id);
'content-type': 'application/json', var tarunix = date(toot.created_at, 'unix');
Authorization: 'Bearer ' + at var beforekey2;
} var key2;
}) //console.log(locals)
.then(function(response) { //ホームのオブジェクトに対してLocalのオブジェクトを時間走査
if (!response.ok) { Object.keys(times).forEach(function(key2) {
response.text().then(function(text) { if (times[key2] < tarunix) {
setLog(response.url, response.status, text) var local = json[key2].id;
}) //console.log($.strip_tags(toot.content));
} html = parse(
return response.json() [toot], 'home', acct_id, tlid);
}) $("#timeline_" + tlid + " [toot-id=" + local + "]").before(html);
.catch(function(error) { //console.log("#timeline_" + tlid + " [toot-id=" + local + "]");
todo(error) tarunix = 0;
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(jsonH) {
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
return 0
})
if (type == 'integrated') {
timeline.splice(20)
}
var templete = ''
if (localStorage.getItem('filter_' + acct_id) != 'undefined') {
var mute = getFilterType(JSON.parse(localStorage.getItem('filter_' + acct_id)), 'mix')
} else {
var mute = []
}
Object.keys(timeline).forEach(function(key) {
var pkey = key * 1 + 1
if (pkey < timeline.length) {
if (
date(timeline[key].created_at, 'unix') != date(timeline[pkey].created_at, 'unix')
) {
if (type == 'integrated') {
templete = templete + parse([timeline[key]], '', acct_id, tlid, '', mute, 'mix')
} else if (type == 'plus') {
if (timeline[key].account.acct == timeline[key].account.username) {
templete =
templete + parse([timeline[key]], '', acct_id, tlid, '', mute, 'plus')
}
}
}
} }
})
$('#landing_' + tlid).hide() });
$('#timeline_' + tlid).html(templete) }
mixre(acct_id, tlid, type, mute, delc, voice) });
additional(acct_id, tlid) }else{
jQuery('time.timeago').timeago() html = parse(
todc() obj, 'home', acct_id, tlid);
}) $("#timeline_" + tlid).html(html);
}) }
todc();
mixre(acct_id, tlid);
additional(acct_id, tlid);
jQuery("time.timeago").timeago();
});
});
} }
//Streamingに接続 //Streamingに接続
function mixre(acct_id, tlid, TLtype, mute, delc, voice, mode) { function mixre(acct_id, tlid) {
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_"+ acct_id + "_at");
if (localStorage.getItem('streaming_' + acct_id)) { var type = "mix";
var wss = localStorage.getItem('streaming_' + acct_id) localStorage.setItem("now", type);
} else { var startHome = "wss://" + domain +
var wss = 'wss://' + domain "/api/v1/streaming/?stream=user&access_token=" + at;
}
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 "/api/v1/streaming/?stream=public:local&access_token=" + at;
var wshid = websocketHome.length var wshid = websocketHome.length;
var wslid = websocketLocal.length var wslid = websocketLocal.length;
websocketHome[wshid] = new WebSocket(startHome) websocketHome[wshid] = new WebSocket(startHome);
websocketLocal[wslid] = new WebSocket(startLocal) websocketLocal[wslid] = new WebSocket(startLocal);
websocketHome[wshid].onopen = function(mess) { websocketHome[wshid].onopen = function(mess) {
localStorage.setItem('wssH_' + tlid, wshid) console.log("Connect Streaming API(Home)");
console.table({ $("#notice_icon_" + tlid).removeClass("red-text");
tlid: tlid,
type: 'Connect Streaming API(Integrated:Home)',
domain: domain,
message: mess
})
$('#notice_icon_' + tlid).removeClass('red-text')
} }
websocketLocal[wslid].onopen = function(mess) { websocketLocal[wslid].onopen = function(mess) {
localStorage.setItem('wssL_' + tlid, wslid) console.log("Connect Streaming API(Local)");
console.table({ $("#notice_icon_" + tlid).removeClass("red-text");
tlid: tlid,
type: 'Connect Streaming API(Integrated:Local)',
domain: domain,
message: mess
})
$('#notice_icon_' + tlid).removeClass('red-text')
} }
websocketLocal[wslid].onmessage = function(mess) { websocketLocal[wslid].onmessage = function(mess) {
console.log(['Receive Streaming API:(Integrated:Local)', obj]) console.log("Receive Streaming API:");
var obj = JSON.parse(JSON.parse(mess.data).payload) var obj = JSON.parse(JSON.parse(mess.data).payload);
var type = JSON.parse(mess.data).event console.log(obj);
if (type == 'delete') { var type = JSON.parse(mess.data).event;
if (delc == 'true') { if (type == "delete") {
$('#timeline_' + tlid + ' [toot-id=' + JSON.parse(mess.data).payload + ']').addClass( $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
'emphasized' $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
) } else if (type == "update") {
$('#timeline_' + tlid + ' [toot-id=' + JSON.parse(mess.data).payload + ']').addClass( var templete = parse([obj], '', acct_id, tlid);
'by_delcatch' var pool = localStorage.getItem("pool_" + tlid);
)
} 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, '', mute)
if ($('#timeline_' + tlid + ' [toot-id=' + obj.id + ']').length < 1) {
if (voice) {
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid, '', mute, 'mix')
var pool = localStorage.getItem('pool_' + tlid)
if (pool) { if (pool) {
pool = templete + pool pool = templete + pool;
} else { } else {
pool = templete pool = templete
} }
localStorage.setItem('pool_' + tlid, pool) localStorage.setItem("pool_" + tlid, pool);
scrollck();
scrollck() additional(acct_id, tlid);
jQuery("time.timeago").timeago();
additional(acct_id, tlid) todc();
jQuery('time.timeago').timeago()
} else {
todo('二重取得発生中')
}
} }
} }
websocketHome[wshid].onmessage = function(mess) { websocketHome[wshid].onmessage = function(mess) {
console.log(['Receive Streaming API:(Integrated:Home)', obj]) console.log("Receive Streaming API:(Home)");
var obj = JSON.parse(JSON.parse(mess.data).payload)
var type = JSON.parse(mess.data).event var obj = JSON.parse(JSON.parse(mess.data).payload);
if (type == 'delete') { console.log(obj);
if (del > 10) { var type = JSON.parse(mess.data).event;
reconnector(tlid, type, acct_id, data) if (type == "delete") {
} else { $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
localStorage.setItem('delete', del * 1 + 1) $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
} } else if (type == "update") {
if (delc == 'true') { var templete = parse([obj], '', acct_id, tlid);
$('[toot-id=' + JSON.parse(mess.data).payload + ']').addClass('emphasized') if (obj.visibility != "public" || obj.account.acct != obj.account.username) {
$('[toot-id=' + JSON.parse(mess.data).payload + ']').addClass('by_delcatch') var pool = localStorage.getItem("pool_" + tlid);
} 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, '', mute, 'mix')
} else {
var templete = ''
}
}
if ($('#timeline_' + tlid + ' [toot-id=' + obj.id + ']').length < 1) {
if (voice) {
say(obj.content)
}
var templete = parse([obj], type, acct_id, tlid, '', mute, 'mix')
var pool = localStorage.getItem('pool_' + tlid)
if (pool) { if (pool) {
pool = templete + pool pool = templete + pool;
} else { } else {
pool = templete pool = templete
} }
localStorage.setItem('pool_' + tlid, pool) localStorage.setItem("pool_" + tlid, pool);
scrollck();
scrollck() additional(acct_id, tlid);
jQuery("time.timeago").timeago();
additional(acct_id, tlid)
jQuery('time.timeago').timeago()
} else {
todo('二重取得発生中')
} }
} }
} }
websocketLocal[wslid].onerror = function(error) { websocketLocal[wslid].onerror = function(error) {
console.error('WebSocketLocal Error') console.error('WebSocket Error ' + error);
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, TLtype, acct_id, '', 'error')
}
}
}
websocketLocal[wslid].onclose = function() {
console.warn('WebSocketLocal Closing:' + 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, TLtype, acct_id, '', 'error')
}
}
}
websocketHome[wshid].onerror = function(error) { websocketHome[wshid].onerror = function(error) {
console.error(['WebSocketHome Error', error]) console.error('WebSocket 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, TLtype, acct_id, '', 'error')
}
}
}
websocketHome[wshid].onclose = function() {
console.warn('WebSocketHome Closing:' + 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, TLtype, acct_id, '', 'error')
}
}
}
} }
//ある程度のスクロールで発火 //ある程度のスクロールで発火
function mixmore(tlid, type) { function mixmore(tlid) {
var multi = localStorage.getItem('column') var multi = localStorage.getItem("column");
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
var acct_id = obj[tlid].domain var acct_id = obj[tlid].domain;
moreloading = true todo("Integrated TL MoreLoading...(Local)");
todo('Integrated TL MoreLoading...(Local)') var domain = localStorage.getItem("domain_" + acct_id);
var domain = localStorage.getItem('domain_' + acct_id) var at = localStorage.getItem("acct_"+ acct_id + "_at");
var at = localStorage.getItem('acct_' + acct_id + '_at') var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
var sid = $('#timeline_' + tlid + ' .cvo') var len = $("#timeline_" + tlid + " .cvo").length
.last() var start = "https://" + domain +
.attr('unique-id') "/api/v1/timelines/public?local=true&max_id=" + sid;
console.log(start);
var start = 'https://' + domain + '/api/v1/timelines/public?local=true&max_id=' + sid
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function(response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function(error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function(json) {
var templete = parse(json, 'mix', acct_id, tlid);
$("#timeline_" + tlid).append(templete[0]);
var locals = templete[1];
todo("Integrated TL MoreLoading...(Home)");
console.log(sid);
var start = "https://" + domain + "/api/v1/timelines/home?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(obj) {
if ($("[toot-id=" + obj[0].id + "]").length < 1) {
$("#timeline_" + tlid + " .cvo").eq(len).before(parse([obj[0]], 'home',
acct_id)+'<div class="divider"></div>');
//delete obj[0];
} }
return response.json() Object.keys(obj).forEach(function(key) {
}) var skey = obj.length - key - 1;
.catch(function(error) { var toot = obj[skey];
todo(error) var id = toot.id;
setLog(start, 'JSON', error) var tarunix = date(toot.created_at, 'unix');
console.error(error) var beforekey2;
}) var key2;
.then(function(jsonL) { Object.keys(locals).forEach(function(key2) {
var start = 'https://' + domain + '/api/v1/timelines/home?max_id=' + sid if ($("[toot-id=" + toot.id + "]").length <1) {
fetch(start, { if (key2 > tarunix) {
method: 'GET', var local = locals[key2];
headers: { $("#timeline_" + tlid + " [toot-id=" + local + "]").after(parse([toot], 'home',
'content-type': 'application/json', acct_id, tlid));
Authorization: 'Bearer ' + at tarunix = 2147483647;
}
})
.then(function(response) {
if (!response.ok) {
response.text().then(function(text) {
setLog(response.url, response.status, text)
})
}
return response.json()
})
.catch(function(error) {
todo(error)
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(jsonH) {
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
return 0
})
timeline.splice(20)
var templete = ''
Object.keys(timeline).forEach(function(key) {
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, '', mute, 'mix')
} else if (type == 'plus') {
if (timeline[key].account.acct == timeline[key].account.username) {
templete = templete + parse([timeline[key]], '', acct_id, tlid, '', mute, 'mix')
}
}
}
} }
})
$('#timeline_' + tlid).append(templete) }
additional(acct_id, tlid) });
jQuery('time.timeago').timeago() });
moreloading = false additional(acct_id, tlid);
todc() jQuery("time.timeago").timeago();
}) todc();
}) });
} });
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +1,37 @@
//アンケートのトグル //アンケートのトグル
function pollToggle() { function pollToggle() {
if ($('#poll').hasClass('hide')) { if ($("#poll").hasClass("hide")) {
$('#right-side').show() $("#right-side").show()
$('#right-side').css('width', '300px') $("#right-side").css("width", "300px")
$('#left-side').css('width', 'calc(100% - 300px)') $("#left-side").css("width", "calc(100% - 300px)")
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem("postbox-width");
if (width) { if (width) {
width = width.replace('px', '') * 1 + 300 width = width.replace("px", "") * 1 + 300
} else { } else {
width = 600 width = 600
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
$('#poll').removeClass('hide') $("#poll").removeClass("hide")
$('#pollsta').text(lang.lang_yesno) $("#pollsta").text(lang.lang_yesno)
} else { } else {
$('#right-side').hide() $("#right-side").hide()
$('#left-side').css('width', '100%') $("#left-side").css("width", "100%")
$('#right-side').css('width', '300px') $("#right-side").css("width", "300px")
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem("postbox-width");
if (width) { if (width) {
width = width.replace('px', '') * 1 width = width.replace("px", "") * 1
} else { } else {
width = 300 width = 300
} }
$('#post-box').css('width', width + 'px') $("#post-box").css("width", width + "px")
$('#emoji').addClass('hide') $("#emoji").addClass("hide")
$('#draft').addClass('hide') $("#poll").addClass("hide")
$('#poll').addClass('hide') $("#pollsta").text(lang.lang_no)
$('#pollsta').text(lang.lang_no) }
}
} }
function pollProviderCk() { function pollProviderCk() {
$('.poll-provider').addClass('hide') $(".poll-provider").addClass("hide");
$('#' + $('#poll-sel').val()).removeClass('hide') $("#" + $("#poll-sel").val()).removeClass("hide");
} }
/* /*
function pollAddtime(num){ function pollAddtime(num){
@@ -43,81 +42,98 @@ function pollAddtime(num){
} }
*/ */
function pollCalc() { function pollCalc() {
var days = $('#days_poll').val() var days = $("#days_poll").val();
var hrs = $('#hours_poll').val() var hrs = $("#hours_poll").val();
var mins = $('#mins_poll').val() var mins = $("#mins_poll").val();
console.log('Poll calc:' + days * 86400 + hrs * 3600 + mins * 60) console.log("Poll calc:" + days * 86400 + hrs * 3600 + mins * 60)
return days * 86400 + hrs * 3600 + mins * 60 return days * 86400 + hrs * 3600 + mins * 60;
} }
//Vote //Vote
function voteSelMastodon(acct_id, id, to, mul, elem) { function voteSelMastodon(acct_id, id, to, mul) {
if ($(elem).hasClass('sel')) { if ($('.vote_' + acct_id + '_' + id + '_' + to).hasClass("sel")) {
$(elem).css('background-color', 'transparent') $('.vote_' + acct_id + '_' + id + '_' + to).css("background-color", "transparent")
$(elem).removeClass('sel') $('.vote_' + acct_id + '_' + id + '_' + to).removeClass("sel");
} else { } else {
if (!mul) { if (!mul) {
$('.vote_' + acct_id + '_' + id + ' div').css('background-color', 'transparent') $('.vote_' + acct_id + '_' + id + ' div').each(function (i, elem) {
$('.vote_' + acct_id + '_' + id + ' div').removeClass('sel') if (i == to) {
$(elem).css('background-color', 'var(--emphasized)') $(this).css("background-color", "var(--emphasized)");
$(elem).addClass('sel') $(this).addClass("sel");
} else { } else {
$(elem).css('background-color', 'var(--emphasized)') $(this).css("background-color", "transparent")
$(elem).addClass('sel') $(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, target) { function voteMastodon(acct_id, id) {
var choice = [] var choice = [];
$(`#vote${target} div`).each(function(i, elem) { $('.vote_' + acct_id + '_' + id + ' div').each(function (i, elem) {
if ($(this).hasClass('sel')) { if ($(this).hasClass("sel")) {
choice.push(i + '') choice.push(i + "");
} }
}) });
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/polls/' + id + '/votes' var start = "https://" + domain + "/api/v1/polls/" + id + "/votes";
if (localStorage.getItem('mode_' + domain) == 'misskey') { if (localStorage.getItem("mode_" + domain) == "misskey") {
return false return false;
} }
var httpreq = new XMLHttpRequest() var httpreq = new XMLHttpRequest();
httpreq.open('POST', start, true) httpreq.open('POST', start, true);
httpreq.setRequestHeader('Content-Type', 'application/json') httpreq.setRequestHeader('Content-Type', 'application/json');
httpreq.setRequestHeader('Authorization', 'Bearer ' + at) httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
httpreq.responseType = 'json' httpreq.responseType = "json";
httpreq.send(JSON.stringify({ choices: choice })) httpreq.send(JSON.stringify({ choices: choice }));
httpreq.onreadystatechange = function() { httpreq.onreadystatechange = function () {
voteMastodonrefresh(acct_id, id, target) voteMastodonrefresh(acct_id, id)
} }
} }
function showResult(acct_id, id) { function showResult(acct_id, id) {
$('.vote_' + acct_id + '_' + id + '_result').toggleClass('hide') $('.vote_' + acct_id + '_' + id + '_result').toggleClass("hide")
}
function voteMastodonrefresh(acct_id, id, target) {
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.setRequestHeader('Authorization', 'Bearer ' + at)
httpreqd.responseType = 'json'
httpreqd.send()
httpreqd.onreadystatechange = function() {
if (httpreqd.readyState == 4) {
if (this.status !== 200) {
setLog(start, this.status, this.response)
}
var json = httpreqd.response
console.log(['Refresh vote', json])
if (!json) {
return false
}
var poll = pollParse(json, acct_id, json.emojis)
$(`#vote${target}`).html(poll)
}
}
} }
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.setRequestHeader('Authorization', 'Bearer ' + at);
httpreqd.responseType = 'json';
httpreqd.send();
httpreqd.onreadystatechange = function () {
if (httpreqd.readyState == 4) {
var json = httpreqd.response;
console.log(["Refresh vote", 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 + '">' + escapeHTML(choice.title) + '<span class="vote_' + acct_id + '_' + json.id + '_result ' + result_hide + '">(' + choice.votes_count + ')</span></div>';
});
poll = poll + myvote + '<a onclick="voteMastodonrefresh(\'' + acct_id + '\',\'' + json.id + '\')" class="pointer">' + lang.lang_manager_refresh + '</a><span class="cbadge cbadge-hover" title="' + date(json.expires_at, 'absolute') +
'"><i class="far fa-calendar-times"></i>' +
date(json.expires_at, datetype) + '</span>';
$('.vote_' + acct_id + '_' + json.id).html(poll)
}
}
}

View File

@@ -1,183 +1,108 @@
$voise = null $voise = null;
isBouyomi = localStorage.getItem('voice_bouyomi') $voiseName = lang.lang_speech;
$voiseName = lang.lang_speech $voices = speechSynthesis.getVoices();
$voices = speechSynthesis.getVoices() $synthes = new SpeechSynthesisUtterance();
$synthes = new SpeechSynthesisUtterance() $voise = $.grep($voices, function (n, i) { return n.name == $voiseName })[0];
$voise = $.grep($voices, function(n, i) { $synthes.voice = $voise; // 音声の設定
return n.name == $voiseName localStorage.removeItem("voicebank");
})[0]
$synthes.voice = $voise // 音声の設定
localStorage.removeItem('voicebank')
speechSynthesis.cancel() speechSynthesis.cancel()
if (!localStorage.getItem('voice_vol')) { if (!localStorage.getItem("voice_vol")) {
localStorage.setItem('voice_vol', 1) localStorage.setItem("voice_vol", 1)
} }
voiceRate = localStorage.getItem('voice_speed') $synthes.rate = localStorage.getItem("voice_speed");
$synthes.rate = voiceRate $synthes.pitch = localStorage.getItem("voice_pitch");
voicePitch = localStorage.getItem('voice_pitch') $synthes.volume = localStorage.getItem("voice_vol");
$synthes.pitch = voicePitch
voiceVol = localStorage.getItem('voice_vol')
$synthes.volume = voiceVol
function say(msgr) { function say(msgr) {
msg = voiceParse(msgr) msg = voiceParse(msgr);
var voice = localStorage.getItem('voicebank') var voice = localStorage.getItem("voicebank");
var obj = JSON.parse(voice) var obj = JSON.parse(voice);
if (!obj) { if (!obj) {
var json = JSON.stringify([msg]) var json = JSON.stringify([msg]);
localStorage.setItem('voicebank', json) localStorage.setItem("voicebank", json);
} else { } else {
obj.push([msg]) obj.push([msg]);
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('voicebank', json) 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]) {
if (localStorage.getItem('voice_bouyomi')) {
var delim = '<bouyomi>'
var thisVoiceRate = voiceRate * 10 + 70
var thisVoicePitch = voicePitch * 50 + 70
var thisVoiceVol = voiceVol * 100
console.log(thisVoiceRate, thisVoicePitch, thisVoiceVol)
var command = 0x0001
var type = 0
var sends =
'' +
command +
delim +
thisVoiceRate +
delim +
thisVoicePitch +
delim +
thisVoiceVol +
delim +
type +
delim +
obj[0]
bouyomiConnect(sends)
} else {
$synthes.text = obj[0]
speechSynthesis.speak($synthes)
}
obj.splice(0, 1) }
var json = JSON.stringify(obj) $repeat = setInterval(function () {
localStorage.setItem('voicebank', json) if (!speechSynthesis.speaking) {
} var voice = localStorage.getItem("voicebank");
} if (voice) {
} var obj = JSON.parse(voice);
}, 300) if (obj[0]) {
$synthes.text = obj[0];
speechSynthesis.speak($synthes);
obj.splice(0, 1);
var json = JSON.stringify(obj);
localStorage.setItem("voicebank", json);
}
}
}
}, 300);
function voiceParse(msg) { function voiceParse(msg) {
msg = $.strip_tags(msg) msg = $.strip_tags(msg);
msg = msg.replace(/#/g, '') msg = msg.replace(/#/g, "");
msg = msg.replace(/'/g, '') msg = msg.replace(/'/g, "");
msg = msg.replace(/"/g, '') msg = msg.replace(/"/g, "");
msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?%&-]+/g, '') msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?%&-]+/g, "");
return msg return msg;
} }
function voiceToggle(tlid) { function voiceToggle(tlid) {
var voiceck = localStorage.getItem('voice_' + tlid) var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) { if (voiceck) {
localStorage.removeItem('voice_' + tlid) localStorage.removeItem("voice_" + tlid);
speechSynthesis.cancel() speechSynthesis.cancel()
if (localStorage.getItem('voice_bouyomi')) { $("#sta-voice-" + tlid).text("Off");
var command = 0x0010 $("#sta-voice-" + tlid).css("color", 'red');
var sends = '' + command parseColumn(tlid);
bouyomiConnect(sends) } else {
} localStorage.setItem("voice_" + tlid, "true");
$('#sta-voice-' + tlid).text('Off') $("#sta-voice-" + tlid).text("On");
$('#sta-voice-' + tlid).css('color', 'red') $("#sta-voice-" + tlid).css("color", '#009688');
parseColumn(tlid) parseColumn(tlid);
} else { }
localStorage.setItem('voice_' + tlid, 'true')
$('#sta-voice-' + tlid).text('On')
$('#sta-voice-' + tlid).css('color', '#009688')
parseColumn(tlid)
}
} }
function voiceCheck(tlid) { function voiceCheck(tlid) {
var voiceck = localStorage.getItem('voice_' + tlid) var voiceck = localStorage.getItem("voice_" + tlid);
if (voiceck) { if (voiceck) {
$('#sta-voice-' + tlid).text('On') $("#sta-voice-" + tlid).text("On");
$('#sta-voice-' + tlid).css('color', '#009688') $("#sta-voice-" + tlid).css("color", '#009688');
} else { } else {
$('#sta-voice-' + tlid).text('Off') $("#sta-voice-" + tlid).text("Off");
$('#sta-voice-' + tlid).css('color', 'red') $("#sta-voice-" + tlid).css("color", 'red');
} }
} }
function voicePlay() { function voicePlay() {
if (speechSynthesis.speaking) { if (speechSynthesis.speaking) {
speechSynthesis.cancel() speechSynthesis.cancel()
} else { } else {
var text = $('#voicetxt').val() $synthes.text = $("#voicetxt").val();
var rate = $('#voicespeed').val() $synthes.rate = $("#voicespeed").val() / 10;
var pitch = $('#voicepitch').val() $synthes.pitch = $("#voicepitch").val() / 50;
var vol = $('#voicevol').val() $synthes.volume = $("#voicevol").val() / 100;
if (localStorage.getItem('voice_bouyomi')) { speechSynthesis.speak($synthes);
var delim = '<bouyomi>' }
rate = rate * 1 + 70
pitch = pitch * 1 + 70
var command = 0x0001 // コマンドです。0x0001.読み上げ/0x0010.ポーズ/0x0020.再開/0x0030.スキップ
/*var speed = 100; // 速度50-200。-1を指定すると本体設定
var pitch = 100; // ピッチ50-200。-1を指定すると本体設定
var volume = 100; // ボリューム0-100。-1を指定すると本体設定*/
var type = 0 // 声質(0.本体設定/1.女性1/2.女性2/3.男性1/4.男性2/5.中性/6.ロボット/7.機械1/8.機械2)
var sends =
'' + command + delim + rate + delim + pitch + delim + vol + delim + type + delim + text
bouyomiConnect(sends)
} else {
$synthes.text = text
$synthes.rate = rate / 10
$synthes.pitch = pitch / 50
$synthes.volume = vol / 100
speechSynthesis.speak($synthes)
}
}
} }
function voiceSettings() { function voiceSettings() {
var awk = $('[name=bym]:checked').val() localStorage.setItem("voice_speed", $("#voicespeed").val() / 10);
if (awk == 'yes') { localStorage.setItem("voice_pitch", $("#voicepitch").val() / 50);
localStorage.setItem('voice_bouyomi', 'yes') localStorage.setItem("voice_vol", $("#voicevol").val() / 100);
M.toast({ html: 'Bouyomi Chan connection requires WebSocket Plugin', displayLength: 3000 }) M.toast({ html: lang.lang_speech_refresh, displayLength: 3000 })
} else {
localStorage.removeItem('voice_bouyomi')
}
localStorage.setItem('voice_speed', $('#voicespeed').val() / 10)
localStorage.setItem('voice_pitch', $('#voicepitch').val() / 50)
localStorage.setItem('voice_vol', $('#voicevol').val() / 100)
M.toast({ html: lang.lang_speech_refresh, displayLength: 3000 })
} }
function voiceSettingLoad() { function voiceSettingLoad() {
var flag = localStorage.getItem('voice_bouyomi') var speed = localStorage.getItem("voice_speed");
if (flag) { var pitch = localStorage.getItem("voice_pitch");
$('#bym_yes').prop('checked', true) var vol = localStorage.getItem("voice_vol");
} else { if (speed) {
$('#bym_no').prop('checked', true) $("#voicespeed").val(speed * 10);
} }
var speed = localStorage.getItem('voice_speed') if (pitch) {
var pitch = localStorage.getItem('voice_pitch') $("#voicepitch").val(pitch * 50);
var vol = localStorage.getItem('voice_vol') }
if (speed) { if (vol) {
$('#voicespeed').val(speed * 10) $("#voicevol").val(vol * 100);
$('#voicespeedVal').text(speed * 10) }
} }
if (pitch) {
$('#voicepitch').val(pitch * 50)
$('#voicepitchVal').text(pitch * 50)
}
if (vol) {
$('#voicevol').val(vol * 100)
$('#voicevolVal').text(vol * 100)
}
}
function bouyomiConnect(sends) {
var socket = new WebSocket('ws://localhost:50002/')
socket.onopen = function() {
socket.send(sends)
}
}

View File

@@ -1,360 +1,252 @@
//検索 //検索
//検索ボックストグル //検索ボックストグル
function searchMenu() { function searchMenu() {
$('#src-contents').html('') $("#src-contents").html("");
trend() trend();
$('#left-menu a').removeClass('active') $("#left-menu div").removeClass("active");
$('#searchMenu').addClass('active') $("#searchMenu").addClass("active");
$('.menu-content').addClass('hide') $(".menu-content").addClass("hide");
$('#src-box').removeClass('hide') $("#src-box").removeClass("hide");
//$('ul.tabs').tabs('select_tab', 'src-sta'); //$('ul.tabs').tabs('select_tab', 'src-sta');
} }
//検索取得 //検索取得
function src(mode, offset) { function src(mode, offset) {
if (!offset) { if(!offset){
$('#src-contents').html('') $("#src-contents").html("");
var add = '' var add = ""
} else { }else{
var add = '&type=accounts&offset=' + $('#src-accts .cvo').length var add = "&type=accounts&offset=" + $("#src-accts .cvo").length
} }
var q = $('#src').val() var q = $("#src").val();
var acct_id = $('#src-acct-sel').val() var acct_id = $("#src-acct-sel").val();
if (acct_id == 'tootsearch') { if (acct_id == "tootsearch") {
tsAdd(q) tsAdd(q)
return false return false;
} }
localStorage.setItem('last-use', acct_id) localStorage.setItem("last-use", acct_id);
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var m = q.match(/^#(.+)$/) var m = q.match(/^#(.+)$/);
if (m) { if (m) { q = m[1]; }
q = m[1] if (user == "--now") {
} var user = $('#his-data').attr("user-id");
if (user == '--now') {
var user = $('#his-data').attr('user-id')
} }
if (!mode) { if (!mode) {
var start = 'https://' + domain + '/api/v2/search?resolve=true&q=' + encodeURIComponent(q) + add var start = "https://" + domain + "/api/v2/search?q=" + q + add
} else { } else {
var start = 'https://' + domain + '/api/v1/search?q=' + q var start = "https://" + domain + "/api/v1/search?q=" + q
} }
console.log('Try to search at ' + start) console.log("Try to search at " + start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { src("v1")
setLog(response.url, response.status, text) return false;
}) }).then(function (json) {
} console.log(["Search", json]);
return response.json() //ハッシュタグ
}) if (json.hashtags[0]) {
.catch(function(error) { var tags = "";
src('v1') Object.keys(json.hashtags).forEach(function (key4) {
return false var tag = json.hashtags[key4];
}) if (mode) {
.then(function(json) { tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
console.log(['Search', json]) '\',\'add\')" class="pointer">#' + escapeHTML(tag) + '</a><br> ';
//ハッシュタグ
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">
#${escapeHTML(tag)}
</a>
<br> `
} else {
tags = tags + graphDraw(tag, acct_id)
}
})
$('#src-contents').append('Tags<br>' + tags)
}
//トゥート
if (json.statuses[0]) {
var templete = parse(json.statuses, '', acct_id)
$('#src-contents').append('<br>Mentions<br>' + templete)
}
//アカウント
if (json.accounts[0]) {
var templete = userparse(json.accounts, '', acct_id)
if (!offset) {
$('#src-contents').append(
`<br>Accounts<div id="src-accts">
${templete}
</div><a onclick="src(false,'more')" class="pointer">more...</a>`
)
} else { } else {
$('#src-accts').append(templete) tags = tags + graphDraw(tag, acct_id);
} }
});
$("#src-contents").append("Tags<br>" + tags);
}
//トゥート
if (json.statuses[0]) {
var templete = parse(json.statuses, '', acct_id);
$("#src-contents").append("<br>Mentions<br>" + templete);
}
//アカウント
if (json.accounts[0]) {
var templete = userparse(json.accounts, '', acct_id);
if(!offset){
$("#src-contents").append("<br>Accounts<div id=\"src-accts\">" + templete + '</div><a onclick="src(false,\'more\')" class="pointer">more...</a>');
}else{
$("#src-accts").append(templete)
} }
jQuery('time.timeago').timeago()
}) }
jQuery("time.timeago").timeago();
});
} }
function tsAdd(q) { function tsAdd(q) {
var add = { var add = {
domain: acct_id, domain: acct_id,
type: 'tootsearch', type: "tootsearch",
data: q data: q
} };
var multi = localStorage.getItem('column') var multi = localStorage.getItem("column");
var obj = JSON.parse(multi) var obj = JSON.parse(multi);
localStorage.setItem('card_' + obj.length, 'true') localStorage.setItem("card_" + obj.length, "true");
obj.push(add) obj.push(add);
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('column', json) localStorage.setItem("column", json);
parseColumn('add') parseColumn('add');
} }
function tootsearch(tlid, q) { function tootsearch(tlid, q) {
if(!q || q=='undefined') { var start = "https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=" + q
return false console.log("Toot srrach at " + start)
} $("#notice_" + tlid).text("tootsearch(" + q + ")");
var start = 'https://tootsearch.chotto.moe/api/v1/search?from=0&sort=created_at%3Adesc&q=' + q $("#notice_icon_" + tlid).text("search");
console.log('Toot search at ' + start)
$('#notice_' + tlid).text('tootsearch(' + q + ')')
$('#notice_icon_' + tlid).text('search')
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
} },
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (raw) {
} var templete = "";
return response.json() var json = raw.hits.hits;
}) var max_id = raw["hits"].length;
.catch(function(error) { for (var i = 0; i < json.length; i++) {
todo(error) var toot = json[i]["_source"];
setLog(start, 'JSON', error) if (lastid != toot.uri) {
console.error(error) if (toot && toot.account) {
}) templete = templete + parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
.then(function(raw) {
var templete = ''
var json = raw.hits.hits
var max_id = raw['hits'].length
for (var i = 0; i < json.length; i++) {
var toot = json[i]['_source']
if (lastid != toot.uri) {
if (toot && toot.account) {
templete = templete + parse([toot], 'noauth', null, tlid, 0, [], 'tootsearch')
}
} }
var lastid = toot.uri
} }
if (!templete) { var lastid = toot.uri;
templete = lang.lang_details_nodata }
} else { if (!templete) {
templete = templete + `<div class="hide ts-marker" data-maxid="${max_id}"></div>` templete = lang.lang_details_nodata;
} } else {
$('#timeline_' + tlid).html(templete) templete = templete + '<div class="hide ts-marker" data-maxid="' + max_id + '"></div>';
}
$("#timeline_" + tlid).html(templete);
jQuery('time.timeago').timeago() jQuery("time.timeago").timeago();
}) });
} }
function moreTs(tlid, q) { function moreTs(tlid, q) {
var sid = $('#timeline_' + tlid + ' .ts-marker') var sid = $("#timeline_" + tlid + " .ts-marker").last().attr("data-maxid");
.last() moreloading = true;
.attr('data-maxid') var start = "https://tootsearch.chotto.moe/api/v1/search?from=" + sid + "&sort=created_at%3Adesc&q=" + q
moreloading = true $("#notice_" + tlid).text("tootsearch(" + q + ")");
var start = $("#notice_icon_" + tlid).text("search");
'https://tootsearch.chotto.moe/api/v1/search?from=' + sid + '&sort=created_at%3Adesc&q=' + q
$('#notice_' + tlid).text('tootsearch(' + q + ')')
$('#notice_icon_' + tlid).text('search')
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json' 'content-type': 'application/json'
} },
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (raw) {
} var templete = "";
return response.json() var json = raw.hits.hits;
}) var max_id = raw["hits"].length;
.catch(function(error) { for (var i = 0; i < json.length; i++) {
todo(error) var toot = json[i]["_source"];
setLog(start, 'JSON', error) if (lastid != toot.uri) {
console.error(error) if (toot && toot.account) {
}) templete = templete + parse([toot], "noauth", null, tlid, 0, [], "tootsearch")
.then(function(raw) {
var templete = ''
var json = raw.hits.hits
var max_id = raw['hits'].length
for (var i = 0; i < json.length; i++) {
var toot = json[i]['_source']
if (lastid != toot.uri) {
if (toot && toot.account) {
templete = templete + parse([toot], 'noauth', null, tlid, 0, [], 'tootsearch')
}
} }
var lastid = toot.uri
} }
if (!templete) { var lastid = toot.uri;
templete = lang.lang_details_nodata }
} else { if (!templete) {
templete = templete + `<div class="hide ts-marker" data-maxid="${max_id}"></div>` templete = lang.lang_details_nodata;
} } else {
$('#timeline_' + tlid).append(templete) templete = templete + '<div class="hide ts-marker" data-maxid="' + max_id + '"></div>';
}
$("#timeline_" + tlid).append(templete);
jQuery('time.timeago').timeago() jQuery("time.timeago").timeago();
}) });
} }
function graphDraw(tag, acct_id) { function graphDraw(tag, acct_id) {
var tags = '' var tags = "";
var his = tag.history var his = tag.history;
return graphDrawCore(his, tag, acct_id) 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);
function graphDrawCore(his, tag, acct_id) { var five = 50 - (his[5].uses / max * 50);
var max = Math.max.apply(null, [ var four = 50 - (his[4].uses / max * 50);
his[0].uses, var three = 50 - (his[3].uses / max * 50);
his[1].uses, var two = 50 - (his[2].uses / max * 50);
his[2].uses, var one = 50 - (his[1].uses / max * 50);
his[3].uses, var zero = 50 - (his[0].uses / max * 50);
his[4].uses, if (max === 0) {
his[5].uses, tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
his[6].uses '</svg><span style="font-size:200%">' + his[0].uses + '</span>toot(s)&nbsp;<a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
]) '\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a>&nbsp;' + his[0].accounts + lang.lang_src_people;
var six = 50 - (his[6].uses / max) * 50 } else {
var five = 50 - (his[5].uses / max) * 50 tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">' +
var four = 50 - (his[4].uses / max) * 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>' +
var three = 50 - (his[3].uses / max) * 50 '</svg><span style="font-size:200%">' + his[0].uses + '</span>toot&nbsp;<a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
var two = 50 - (his[2].uses / max) * 50 '\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a>&nbsp;' + his[0].accounts + lang.lang_src_people;
var one = 50 - (his[1].uses / max) * 50 }
var zero = 50 - (his[0].uses / max) * 50
return `<div class="tagComp"> return tags;
<div class="tagCompSvg">
<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} 61,61 0,61"
style="stroke: #0f8c0c;fill: rgba(13,113,19,.25); stroke-width: 1;">
</path>
</g>
</svg>
</div>
<div class="tagCompToot">
<span style="font-size:200%">${his[0].uses}</span>
</div>
<div class="tagCompToots">
toot
</div>
<div class="tagCompTag">
<a onclick="tl('tag','${escapeHTML(
tag.name
)}','${acct_id}','add')" class="pointer" title="${escapeHTML(tag.name)}">
#${escapeHTML(tag.name)}
</a>
</div>
<div class="tagCompUser">
${his[0].accounts}
${lang.lang_src_people}
</div>
</div>`
} }
/* /*
<svg version="1.1" viewbox="0 0 50 300" width="100%" height="50"> <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> <path d="M0,0 L10,0 20,10 20,50" fill="#3F51B5"></path>
</svg> </svg>
*/ */
function trend() { function trend(){
console.log('get trend') console.log("get trend")
$('#src-contents').html('') $("#src-contents").html("");
var acct_id = $('#src-acct-sel').val() var acct_id = $("#src-acct-sel").val();
if (acct_id == 'tootsearch') { if(acct_id=="tootsearch"){
return false return false;
} }
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_"+ acct_id + "_at");
var start = 'https://' + domain + '/api/v1/trends' var start = "https://" + domain + "/api/v1/trends"
console.log(start) console.log(start)
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function(response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function(error) {
response.text().then(function(text) { //todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function(json) {
} var tags = "";
return response.json()
})
.catch(function(error) {
setLog(start, 'JSON', error)
console.error(error)
})
.then(function(json) {
var tags = ''
Object.keys(json).forEach(function(keye) { Object.keys(json).forEach(function(keye) {
var tag = json[keye] var tag = json[keye];
var his = tag.history var his=tag.history;
tags = graphDrawCore(his, tag, acct_id) 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);
tags = '<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+"<br><br>";
$('#src-contents').append(tags) $("#src-contents").append(tags);
}) });
})
} });
function srcBox(mode) {
var selectedText = window.getSelection().toString()
if (mode == 'open') {
$('#pageSrc').removeClass('hide')
} else if (mode == 'close') {
if(!selectedText) {
$('#pageSrc').addClass('hide')
$('#pageSrc').removeClass('keep')
}
} else {
$('#pageSrc').toggleClass('hide')
}
if(!$('#pageSrc').hasClass('keep')) {
$('#pageSrcInput').val(selectedText)
}
}
$('#pageSrcInput').click(function() {
$('#pageSrc').addClass('keep')
})
$('#pageSrcInput').on('input', function(evt) {
if(!$('#pageSrcInput').val()) {
$('#pageSrc').removeClass('keep')
}
})
document.addEventListener('selectionchange', function() {
var selectedText = window.getSelection().toString()
if (selectedText && !$('input').is(':focus') && !$('textarea').is(':focus')) {
srcBox('open')
}
})
function doSrc(type) {
$('#pageSrc').addClass('hide')
$('#pageSrc').removeClass('keep')
var q = $('#pageSrcInput').val()
if(type == 'web') {
var start = localStorage.getItem('srcUrl')
if(!start) {
start = 'https://google.com/search?q={q}'
}
start = start.replace(/{q}/, q)
postMessage(["openUrl", start], "*")
} else if(type == 'ts') {
tsAdd(q)
}
} }

View File

@@ -1,225 +1,153 @@
//タグ表示 //タグ表示
if (location.search) { if (location.search) {
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/) var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
var mode = m[1] var mode = m[1];
var codex = m[2] var codex = m[2];
if (mode == 'tag') { if (mode == "tag") {
var acct_id = localStorage.getItem('main') var acct_id = localStorage.getItem("main");
tl('tag', decodeURI(codex), acct_id, 'add') tl('tag', decodeURI(codex), acct_id, 'add');
} }
} }
//よく使うタグ //よく使うタグ
function tagShow(tag) { function tagShow(tag) {
console.log('[data-regTag=' + decodeURI(tag).toLowerCase() + ']') $("[data-tag=" + decodeURI(tag).toLowerCase() + "]").toggleClass("hide");
$('[data-regTag=' + decodeURI(tag).toLowerCase() + ']').toggleClass('hide')
} }
//タグ追加 //タグ追加
function tagPin(tag) { function tagPin(tag) {
var tags = localStorage.getItem('tag') var tags = localStorage.getItem("tag");
if (!tags) { if (!tags) {
var obj = [] var obj = [];
} else { } else {
var obj = JSON.parse(tags) var obj = JSON.parse(tags);
} }
var can var can;
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function (key) {
var tagT = obj[key] var tagT = obj[key];
if (tagT == tag) { if (tagT == tag) {
can = true can = true;
} else { } else {
can = false can = false;
} }
}) });
if (!can) { if (!can) {
obj.push(tag) obj.push(tag);
} }
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('tag', json) localStorage.setItem("tag", json);
favTag() favTag();
} }
//タグ削除 //タグ削除
function tagRemove(key) { function tagRemove(key) {
var tags = localStorage.getItem('tag') var tags = localStorage.getItem("tag");
var obj = JSON.parse(tags) var obj = JSON.parse(tags);
obj.splice(key, 1) obj.splice(key, 1);
var json = JSON.stringify(obj) var json = JSON.stringify(obj);
localStorage.setItem('tag', json) localStorage.setItem("tag", json);
favTag() favTag();
} }
function favTag() { function favTag() {
$('#taglist').html('') $("#taglist").html("");
var tagarr = localStorage.getItem('tag') var tagarr = localStorage.getItem("tag");
if (!tagarr) { if (!tagarr) {
var obj = [] var obj = [];
} else { } else {
var obj = JSON.parse(tagarr) var obj = JSON.parse(tagarr);
} }
var tags = '' var tags = "";
var nowPT = localStorage.getItem('stable') var nowPT = localStorage.getItem("stable")
Object.keys(obj).forEach(function(key) { Object.keys(obj).forEach(function (key) {
var tag = obj[key] var tag = obj[key];
if (nowPT != tag) { if (nowPT != tag) {
console.log('stable tags:' + nowPT + '/' + tag) console.log("stable tags:" + nowPT + "/" + tag);
var ptt = lang.lang_tags_realtime var ptt = lang.lang_tags_realtime;
var nowon = '' var nowon = "";
} else { } else {
var ptt = lang.lang_tags_unrealtime var ptt = lang.lang_tags_unrealtime;
var nowon = '(' + lang.lang_tags_realtime + ')' var nowon = "(" + lang.lang_tags_realtime + ")";
} }
tag = escapeHTML(tag) tag = escapeHTML(tag);
tags = tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a>' + nowon + '<span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="' + lang.lang_parse_tagTL.replace("{{tag}}", '#' + tag) + '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}", '#' + tag) + '">Toot</a> ' +
tags + '<a onclick="autoToot(\'' + tag + '\');" class="pointer" title="' + lang.lang_tags_always + lang.lang_parse_tagtoot.replace("{{tag}}", '#' + tag) + '">' + ptt + '</a> <a onclick="tagRemove(\'' + key + '\')" class="pointer" title="' + lang.lang_tags_tagunpin.replace("{{tag}}", '#' + tag) + '">' + lang.lang_del + '</a></span> ';
`<a onclick="tagShow('${tag}')" class="pointer">#${tag}</a> });
${nowon}<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}">  if (obj.length > 0) {
<a onclick=\"tagTL('tag','${tag}',false,'add')" class="pointer" title="${lang.lang_parse_tagTL.replace('{{tag}}', '#' + tag)}"> $("#taglist").append("My Tags:" + tags);
TL } else {
</a>  $("#taglist").append("");
<a onclick="brInsert('#${tag}')" class="pointer" title="${lang.lang_parse_tagtoot.replace('{{tag}}', '#' + tag)}"> }
Toot
</a> 
<a onclick="autoToot('${tag}');" class="pointer" title="${lang.lang_tags_always}${lang.lang_parse_tagtoot.replace('{{tag}}', '#' + tag)}">
${ptt}
</a> 
<a onclick="tagRemove('${key}')" class="pointer" title="${lang.lang_tags_tagunpin.replace('{{tag}}', '#' + tag)}">
${lang.lang_del}
</a>
</span> `
})
if (obj.length > 0) {
$('#taglist').append('My Tags:' + tags)
} else {
$('#taglist').append('')
}
} }
function trendTag() { function trendTag() {
$('.trendtag').remove() $(".trendtag").remove();
var domain = 'imastodon.net' var domain = "imastodon.net"
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/trend_tags' var start = "https://" + domain + "/api/v1/trend_tags"
fetch(start, { fetch(start, {
method: 'GET', method: 'GET',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
} },
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { todo(error);
setLog(response.url, response.status, text) console.error(error);
}) }).then(function (json) {
} if (json) {
return response.json() var tags = "";
}) json = json.score;
.catch(function(error) { Object.keys(json).forEach(function (tag) {
todo(error) tag = escapeHTML(tag);
setLog(start, 'JSON', error) 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> ';
console.error(error) });
}) $("#taglist").append('<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' + tags + '</div>');
.then(function(json) { trendintervalset()
if (json) { } else {
var tags = '' $("#taglist").html("");
json = json.score }
Object.keys(json).forEach(function(tag) { });
tag = escapeHTML(tag)
tags =
tags +
`<a onclick="tagShow('${tag}')" class="pointer">#${tag}</a>
<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> 
<a onclick=\"tagTL('tag','${tag}',false,'add')" class="pointer" title="#${tag}のタイムライン">TL</a> 
<a onclick="show();brInsert('#${tag}')" class="pointer" title="#${tag}でトゥート">
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() { function trendintervalset() {
setTimeout(trendTag, 6000000) setTimeout(trendTag, 6000000);
} }
function tagTL(a, b, c, d) { function tagTL(a, b, c, d) {
var acct_id = $('#post-acct-sel').val() var acct_id = $("#post-acct-sel").val();
tl(a, b, acct_id, d) tl(a, b, acct_id, d);
} }
function autoToot(tag) { function autoToot(tag) {
tag = escapeHTML(tag) tag = escapeHTML(tag)
var nowPT = localStorage.getItem('stable') var nowPT = localStorage.getItem("stable")
if (nowPT == tag) { if (nowPT == tag) {
localStorage.removeItem('stable') localStorage.removeItem("stable");
M.toast({ html: lang.lang_tags_unrealtime, displayLength: 3000 }) M.toast({ html: lang.lang_tags_unrealtime, displayLength: 3000 })
} else { } else {
localStorage.setItem('stable', tag) localStorage.setItem("stable", tag);
M.toast({ M.toast({ html: lang.lang_tags_tagwarn.replace("{{tag}}", tag).replace("{{tag}}", tag), displayLength: 3000 })
html: lang.lang_tags_tagwarn.replace('{{tag}}', tag).replace('{{tag}}', tag), brInsert('#' + tag + " ")
displayLength: 3000 }
}) favTag();
brInsert('#' + tag + ' ')
}
favTag()
} }
//タグをフィーチャー //タグをフィーチャー
function tagFeature(name, acct_id) { function tagFeature(name, acct_id){
var domain = localStorage.getItem('domain_' + acct_id) var domain = localStorage.getItem("domain_" + acct_id);
var at = localStorage.getItem('acct_' + acct_id + '_at') var at = localStorage.getItem("acct_" + acct_id + "_at");
var start = 'https://' + domain + '/api/v1/featured_tags' var start = "https://" + domain + "/api/v1/featured_tags"
fetch(start, { fetch(start, {
method: 'POST', method: 'POST',
headers: { headers: {
'content-type': 'application/json', 'content-type': 'application/json',
Authorization: 'Bearer ' + at 'Authorization': 'Bearer ' + at
}, },
body: JSON.stringify({ body: JSON.stringify({
name: name name: name
}) })
}) }).then(function (response) {
.then(function(response) { return response.json();
if (!response.ok) { }).catch(function (error) {
response.text().then(function(text) { return false;
setLog(response.url, response.status, text) }).then(function (json) {
}) console.log(json)
} M.toast({ html: "Complete: " + escapeHTML(name), displayLength: 3000 })
return response.json() });
}) }
.catch(function(error) {
return false
})
.then(function(json) {
console.log(json)
M.toast({ html: 'Complete: ' + escapeHTML(name), displayLength: 3000 })
})
}
//タグのフィルタ
function addTag(id) {
var columns = JSON.parse(localStorage.getItem('column'))
var column = columns[id]
if(!column.data.name) {
var name = column.data
} else {
var name = column.data.name
}
var col = localStorage.getItem('column')
var o = JSON.parse(col)
var obj = o[id]
obj.data = {
'name': name,
'all': $(`#all_tm-${id}`).val(),
'any': $(`#any_tm-${id}`).val(),
'none': $(`#none_tm-${id}`).val(),
}
o[id] = obj
var json = JSON.stringify(o)
console.log(json)
localStorage.setItem('column',json)
columnReload(id, 'tag')
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,259 +1,259 @@
/*イメージビューワー*/ /*イメージビューワー*/
//postのimg.jsとは異なります。 //postのimg.jsとは異なります。
function imgv(id, key, acct_id) { function imgv(id, key, acct_id) {
$('#imgprog').text(0) $("#imgprog").text(0);
$('#imgsec').text(0) $('#imgmodal').hide();
$('#imgmodal').hide() $('#imgmodal').attr('src', '../../img/loading.svg');
$('#imgmodal').attr('src', '../../img/loading.svg') var murl = $("#" + id + "-image-" + key).attr("data-url");
var murl = $('#' + id + '-image-' + key).attr('data-url') var type = $("#" + id + "-image-" + key).attr("data-type");
var ourl = $('#' + id + '-image-' + key).attr('data-original') $("#imagemodal").attr("data-id", id);
if (!ourl || ourl == 'null') { $("#imagemodal").attr("data-acct", acct_id);
ourl = murl $(document).ready(function () {
} if (type == "image") {
var type = $('#' + id + '-image-' + key).attr('data-type') $('#imagemodal').modal('open');
$('#imagemodal').attr('data-id', id) xhr = new XMLHttpRequest;
$('#imagemodal').attr('data-acct', acct_id) xhr.open('GET', murl, true);
$('#imagemodal').attr('data-original', ourl) xhr.addEventListener('progress', function (event) {
$('#imagemodal').attr('data-image', murl) if (event.lengthComputable) {
//表示はリモートを使うか(どちらにしろコピーはオリジナル) var total = event.total;
var remote_img = localStorage.getItem('remote_img') var now = event.loaded;
if (remote_img == 'yes') { var per = now / total * 100;
murl = ourl $("#imgprog").text(Math.floor(per));
} }
$(document).ready(function() { }, false);
if (type == 'image') { xhr.addEventListener('loadend', function (event) {
$('#imagemodal').modal('open') var total = event.total;
imageXhr(id, key, murl) var now = event.loaded;
$('#imagewrap').dragScroll() // ドラッグスクロール設定 var per = now / total * 100;
$('#imgmodal').show() $("#imgprog").text(Math.floor(per));
$('#imagemodal').attr('data-key', key) }, false);
$('#imagemodal').attr('data-id', id) xhr.send();
} else if (type == 'video' || type == 'gifv') { $('#imgmodal').attr('src', murl);
$('#video').attr('src', murl) $('#imagewrap').dragScroll(); // ドラッグスクロール設定
$('#videomodal').modal('open') $('#imgmodal').show();
$('#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;
element.onload = function () {
var width = element.naturalWidth;
var height = element.naturalHeight;
var windowH = $(window).height();
var windowW = $(window).width();
$("#imagemodal").css("bottom", "0")
$("#imagemodal img").css("width", "auto")
if (height < windowH) {
$("#imagemodal").css("height", height + 60 + "px")
$("#imagemodal img").css("height", "100%")
if (width > windowW * 0.8) {
$("#imagemodal").css("width", "80vw")
$("#imagemodal img").css("width", "100%")
var heightS = windowW * 0.8 / width * height;
$("#imagemodal").css("height", heightS + 60 + "px")
} else {
$("#imagemodal").css("width", width + "px")
}
} else {
$("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width;
if (widthS < windowW) {
$("#imagemodal").css("width", widthS + "px")
} else {
$("#imagemodal").css("width", "100vw")
}
$("#imagemodal").css("height", "100vh")
$("#imagemodal img").css("height", "calc(100vh - 60px)")
}
}
if ($("#" + id + "-image-" + (key * 1 + 1)).length == 0) {
$("#image-next").prop("disabled", true);
} else {
$("#image-next").prop("disabled", false);
}
if ($("#" + id + "-image-" + (key * 1 - 1)).length == 0) {
$("#image-prev").prop("disabled", true);
} else {
$("#image-prev").prop("disabled", false);
}
element.src = murl;
});
} }
//イメージビューワーの送り //イメージビューワーの送り
function imgCont(type) { function imgCont(type) {
var key = $('#imagemodal').attr('data-key') $("#imgprog").text(0);
var id = $('#imagemodal').attr('data-id') var key = $('#imagemodal').attr('data-key');
if (type == 'next') { var id = $('#imagemodal').attr('data-id');
key++ if (type == "next") {
} else if (type == 'prev') { key++;
key = key * 1 - 1 } else if (type == "prev") {
} key = key * 1 - 1;
var murl = $('#' + id + '-image-' + key).attr('data-url')
var ourl = $('#' + id + '-image-' + key).attr('data-original')
var type = $('#' + id + '-image-' + key).attr('data-type')
$('#imagemodal').attr('data-id', id)
$('#imagemodal').attr('data-acct', acct_id)
$('#imagemodal').attr('data-original', ourl)
$('#imagemodal').attr('data-image', murl)
//表示はリモートを使うか(どちらにしろコピーはオリジナル)
var remote_img = localStorage.getItem('remote_img')
if (remote_img == 'yes' && ourl != 'null') {
murl = ourl
} }
var murl = $("#" + id + "-image-" + key).attr("data-url");
if (murl) { if (murl) {
$('#imgprog').text(0) $('#imgmodal').attr('src', '../../img/loading.svg');
$('#imgsec').text(0) var type = $("#" + id + "-image-" + key).attr("data-type");
$('#imgmodal').attr('src', '../../img/loading.svg') $(document).ready(function () {
var type = $('#' + id + '-image-' + key).attr('data-type') if (type == "image") {
$(document).ready(function() { xhr = new XMLHttpRequest;
if (type == 'image') { xhr.open('GET', murl, true);
imageXhr(id, key, murl) xhr.responseType = "arraybuffer";
$('#imagewrap').dragScroll() // ドラッグスクロール設定 xhr.addEventListener('progress', function (event) {
$('#imagemodal').attr('data-key', key) if (event.lengthComputable) {
$('#imagemodal').attr('data-id', id) var total = event.total;
} else if (type == 'video' || type == 'gifv') { var now = event.loaded;
$('#video').attr('src', murl) var per = now / total * 100;
$('#videomodal').modal('open') $("#imgprog").text(Math.floor(per));
}
})
}
}
function imageXhr(id, key, murl) {
var startTime = new Date()
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(Math.floor(per))
}
},
false
)
xhr.addEventListener(
'loadend',
function(event) {
var total = event.total
$('#imgbyte').text(Math.floor(total / 1024))
var now = event.loaded
var per = (now / total) * 100
$('#imgprog').text(Math.floor(per))
},
false
)
xhr.addEventListener(
'error',
function(event) {
$('#imgmodal').attr('src', murl)
},
false
)
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
r = new FileReader()
r.readAsDataURL(this.response)
r.onload = function() {
var b64 = r.result
var element = new Image()
var width
element.onload = function() {
var width = element.naturalWidth
if(width < 650) {
width = 650
} }
var height = element.naturalHeight }, false);
var windowH = $(window).height() xhr.addEventListener('loadend', function (event) {
var windowW = $(window).width() var total = event.total;
$('#imagemodal').css('bottom', '0') var now = event.loaded;
$('#imagemodal img').css('width', 'auto') var per = now / total * 100;
if (height < windowH) { $("#imgprog").text(Math.floor(per));
$('#imagemodal').css('height', height + 100 + 'px') }, false);
$('#imagemodal img').css('height', height + 'px') xhr.send();
if (width > windowW * 0.8) { $('#imgmodal').attr('src', murl);
$('#imagemodal').css('width', '80vw') $('#imagewrap').dragScroll(); // ドラッグスクロール設定
$('#imagemodal img').css('width', 'auto') $('#imagemodal').attr('data-key', key);
var heightS = ((windowW * 0.8) / width) * height $('#imagemodal').attr('data-id', id);
$('#imagemodal').css('height', heightS + 100 + 'px') } else if (type == "video" || type == "gifv") {
} else { $('#video').attr('src', murl);
$('#imagemodal').css('width', width + 'px') $('#videomodal').modal('open');
} }
var element = new Image();
var width;
element.onload = function () {
var width = element.naturalWidth;
var height = element.naturalHeight;
var windowH = $(window).height();
var windowW = $(window).width();
$("#imagemodal").css("bottom", "0")
$("#imagemodal img").css("width", "auto")
if (height < windowH) {
$("#imagemodal").css("height", height + 60 + "px")
$("#imagemodal img").css("height", "100%")
if (width > windowW * 0.8) {
$("#imagemodal").css("width", "80vw")
$("#imagemodal img").css("width", "100%")
var heightS = windowW * 0.8 / width * height;
$("#imagemodal").css("height", heightS + 60 + "px")
} else { } else {
$('#imagemodal img').css('width', 'auto') $("#imagemodal").css("width", width + "px")
var widthS = (windowH / height) * width
if (widthS < windowW) {
$('#imagemodal').css('width', widthS + 'px')
} else {
$('#imagemodal').css('width', '100vw')
}
$('#imagemodal').css('height', '100vh')
$('#imagemodal img').css('height', 'calc(100vh - 60px)')
} }
}
if ($('#' + id + '-image-' + (key * 1 + 1)).length == 0) {
$('#image-next').prop('disabled', true)
} else { } else {
$('#image-next').prop('disabled', false) $("#imagemodal img").css("width", "auto")
var widthS = windowH / height * width;
if (widthS < windowW) {
$("#imagemodal").css("width", widthS + "px")
} else {
$("#imagemodal").css("width", "100vw")
}
$("#imagemodal").css("height", "100vh")
$("#imagemodal img").css("height", "calc(100vh - 60px)")
} }
if ($('#' + id + '-image-' + (key * 1 - 1)).length == 0) {
$('#image-prev').prop('disabled', true)
} else {
$('#image-prev').prop('disabled', false)
}
element.src = b64
var endTime = new Date()
var proctime = endTime.getTime() - startTime.getTime()
$('#imgsec').text(proctime)
$('#imgmodal').attr('src', b64)
} }
} if ($("#" + id + "-image-" + (key * 1 + 1)).length === 0) {
$("#image-next").prop("disabled", true);
} else {
$("#image-next").prop("disabled", false);
}
if ($("#" + id + "-image-" + (key * 1 - 1)).length === 0) {
$("#image-prev").prop("disabled", true);
} else {
$("#image-prev").prop("disabled", false);
}
element.src = murl;
});
} }
xhr.responseType = 'blob'
xhr.send()
} }
//ズームボタン(z:倍率) //ズームボタン(z:倍率)
function zoom(z) { function zoom(z) {
var wdth = $('#imagewrap img').width() var wdth = $('#imagewrap img').width();
var wdth = wdth * z var wdth = wdth * z;
$('#imagewrap img').css('width', wdth + 'px') $('#imagewrap img').css("width", wdth + "px");
var hgt = $('#imagewrap img').height() var hgt = $('#imagewrap img').height();
var hgt = hgt * z var hgt = hgt * z;
$('#imagewrap img').css('height', hgt + 'px') $('#imagewrap img').css("height", hgt + "px");
} }
//スマホ対応ドラッグ移動システム //スマホ対応ドラッグ移動システム
(function() { (function () {
$.fn.dragScroll = function() { $.fn.dragScroll = function () {
var target = this var target = this;
$(this) $(this).mousedown(function (event) {
.mousedown(function(event) { $(this)
$(this) .data('down', true)
.data('down', true) .data('x', event.clientX)
.data('x', event.clientX) .data('y', event.clientY)
.data('y', event.clientY) .data('scrollLeft', this.scrollLeft)
.data('scrollLeft', this.scrollLeft) .data('scrollTop', this.scrollTop);
.data('scrollTop', this.scrollTop) return false;
return false }).css({
}) 'overflow': 'hidden', // スクロールバー非表示
.css({ 'cursor': 'move'
overflow: 'hidden', // スクロールバー非表示 });
cursor: 'move'
})
// ウィンドウから外れてもイベント実行 // ウィンドウから外れてもイベント実行
$(document) $(document).mousemove(function (event) {
.mousemove(function(event) { if ($(target).data('down') == true) {
if ($(target).data('down') == true) { // スクロール
// スクロール target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') - event.clientX) event.clientX);
target.scrollTop($(target).data('scrollTop') + $(target).data('y') - event.clientY) target.scrollTop($(target).data('scrollTop') + $(target).data('y') -
return false // 文字列選択を抑止 event.clientY);
} return false; // 文字列選択を抑止
}) }
.mouseup(function(event) { }).mouseup(function (event) {
$(target).data('down', false) $(target).data('down', false);
}) });
$(this) $(this).on('touchstart', function (event) {
.on('touchstart', function(event) { $(this)
$(this) .data('down', true)
.data('down', true) .data('x', getX(event))
.data('x', getX(event)) .data('y', getY(event))
.data('y', getY(event)) .data('scrollLeft', this.scrollLeft)
.data('scrollLeft', this.scrollLeft) .data('scrollTop', this.scrollTop);
.data('scrollTop', this.scrollTop) return false;
return false }).css({
}) 'overflow': 'hidden', // スクロールバー非表示
.css({ 'cursor': 'move'
overflow: 'hidden', // スクロールバー非表示 }); //指が触れたか検知
cursor: 'move' $(this).on('touchmove', function (event) {
}) //指が触れたか検知
$(this).on('touchmove', function(event) {
if ($(target).data('down') === true) { if ($(target).data('down') === true) {
// スクロール // スクロール
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') - getX(event)) target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
target.scrollTop($(target).data('scrollTop') + $(target).data('y') - getY(event)) getX(event));
return false // 文字列選択を抑止 target.scrollTop($(target).data('scrollTop') + $(target).data('y') -
} else { getY(event));
} return false; // 文字列選択を抑止
}) //指が動いたか検知 } else { }
$(this).on('touchend', function(event) { }); //指が動いたか検知
$(target).data('down', false) $(this).on('touchend', function (event) {
}) $(target).data('down', false);
});
return this return this;
} }
})(jQuery) })(jQuery);
function getX(event) { function getX(event) {
return event.originalEvent.touches[0].pageX return event.originalEvent.touches[0].pageX;
} }
function getY(event) { function getY(event) {
return event.originalEvent.touches[0].pageY return event.originalEvent.touches[0].pageY;
} }
//マウスホイールで拡大 //マウスホイールで拡大
var element = document.getElementById('imagemodal') var element = document.getElementById("imagemodal");
element.onmousewheel = function(e) { element.onmousewheel = function (e) {
var delta = e.wheelDelta var delta = e.wheelDelta;
if (delta > 0) { if (delta > 0) {
zoom(1.1) zoom(1.1)
} else { } else {
@@ -263,33 +263,22 @@ element.onmousewheel = function(e) {
//当該トゥート //当該トゥート
function detFromImg() { function detFromImg() {
var id = $('#imagemodal').attr('data-id') var id = $("#imagemodal").attr("data-id");
var acct_id = $('#imagemodal').attr('data-acct') var acct_id = $("#imagemodal").attr("data-acct");
$('#imagemodal').modal('close') $('#imagemodal').modal('close');
details(id, acct_id) details(id, acct_id);
} }
//画像保存 //画像保存
function dlImg() { function dlImg() {
var ourl = $('#imagemodal').attr('data-original') var url = $("#imgmodal").attr("src");
var murl = $('#imagemodal').attr('data-image') if (localStorage.getItem("savefolder")) {
var remote_img = localStorage.getItem('remote_img') var save = localStorage.getItem("savefolder");
if (remote_img == 'yes') { } else {
murl = ourl var save = "";
} }
var save = localStorage.getItem('savefolder') postMessage(["generalDL", [url, save, false]], "*")
if (!save || save == 'null') {
var save = ''
}
postMessage(['generalDL', [murl, save, false]], '*')
} }
function openFinder(dir) { function openFinder(dir) {
postMessage(['openFinder', dir], '*') postMessage(["openFinder", dir], "*")
} }
function stopVideo() {
document.getElementById('video').pause()
}
function copyImgUrl() {
var murl = $('#imagemodal').attr('data-original')
execCopy(murl)
M.toast({ html: lang.lang_img_copyDone, displayLength: 1500 })
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -1,138 +1,134 @@
/*ささやきボックス(Cr民並感)*/ /*ささやきボックス(Cr民並感)*/
//✕隠す //✕隠す
function hide() { function hide() {
$('#right-side').hide() $("#right-side").hide()
$('#right-side').css('width', '300px') $("#right-side").css("width", "300px")
$('#left-side').css('width', '100%') $("#left-side").css("width", "100%")
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem("postbox-width");
if (width) { if(width){
width = width.replace('px', '') * 1 width = width.replace("px", "") * 1
} else { } else {
width = 300 width = 300
} }
$('#post-box').css('width', width) $("#post-box").css("width", width)
$('#post-box').fadeOut() $('#post-box').fadeOut()
$('#post-box').removeClass('appear') $("#post-box").removeClass("appear")
$('#emoji').addClass('hide') $("#emoji").addClass("hide")
$('#left-side').show() $("#left-side").show();
$('#default-emoji').show() $("#default-emoji").show();
$('#unreact').show() $("#unreact").show();
$('#addreact').addClass('hide') $("#addreact").addClass("hide");
} }
//最小化 //最小化
function mini() { function mini() {
$('body').toggleClass('mini-post') $("body").toggleClass("mini-post");
if ($('body').hasClass('mini-post')) { if ($("body").hasClass("mini-post")) {
$('.mini-btn').text('expand_less') $(".mini-btn").text("expand_less");
} else { } else {
$('.mini-btn').text('expand_more') $(".mini-btn").text("expand_more");
} }
} }
//最小化時に展開 //最小化時に展開
function show() { function show() {
$('#post-box').addClass('appear') $("#post-box").addClass("appear")
$('#textarea').focus() $("#textarea").focus();
console.log('show' + localStorage.getItem('postbox-left')) console.log("show" + localStorage.getItem("postbox-left"));
var left = localStorage.getItem('postbox-left') var left = localStorage.getItem("postbox-left");
if (left > $('body').width() - $('#post-box').width()) { if (left > $('body').width() - $('#post-box').width()) {
left = $('body').width() - $('#post-box').width() left = $('body').width() - $('#post-box').width();
} else if (left < 0) { } else if (left < 0) {
left = 0 left = 0;
} }
var top = localStorage.getItem('postbox-top') var top = localStorage.getItem("postbox-top");
if (top > $('body').height() - $('#post-box').height()) { if (top > $('body').height() - $('#post-box').height()) {
top = $('body').height() - $('#post-box').height() top = $('body').height() - $('#post-box').height();
} else if (top < 0) { } else if (top < 0) {
top = 0 top = 0;
} }
$('#post-box').css('left', left + 'px') $('#post-box').css("left", left + "px")
$('#post-box').css('top', top + 'px') $('#post-box').css("top", top + "px")
var width = localStorage.getItem('postbox-width') var width = localStorage.getItem("postbox-width");
if (width) { if (width) {
$('#post-box').css('width', width + 'px') $('#post-box').css("width", width + "px")
} else { } else {
$('#post-box').css('width', '300px') $('#post-box').css("width", "300px")
} }
$('#post-box').fadeIn() $('#post-box').fadeIn();
$('#textarea').characterCounter() $('#textarea').characterCounter();
mdCheck()
} }
$(function () { $(function () {
$('#post-box').draggable({ $("#post-box").draggable({
handle: '#post-bar', handle: "#post-bar",
stop: function () { stop: function () {
var left = $('#post-box').offset().left var left = $('#post-box').offset().left;
if (left > $('body').width() - $('#post-box').width()) { if (left > $('body').width() - $('#post-box').width()) {
left = $('body').width() - $('#post-box').width() left = $('body').width() - $('#post-box').width();
} else if (left < 0) { } else if (left < 0) {
left = 0 left = 0;
} }
var top = $('#post-box').offset().top var top = $('#post-box').offset().top;
if (top > $('body').height() - $('#post-box').height()) { if (top > $('body').height() - $('#post-box').height()) {
top = $('body').height() - $('#post-box').height() top = $('body').height() - $('#post-box').height();
} else if (top < 0) { } else if (top < 0) {
top = 0 top = 0;
} }
localStorage.setItem('postbox-left', left) localStorage.setItem("postbox-left", left);
localStorage.setItem('postbox-top', top) localStorage.setItem("postbox-top", top);
}, }
}) });
$('#post-box').resizable({ $("#post-box").resizable({
minHeight: 150, minHeight: 150,
minWidth: 100, minWidth: 100,
stop: function (event, ui) { stop: function (event, ui) {
$('#textarea').blur() $("#textarea").blur()
localStorage.setItem('postbox-width', ui.size.width) localStorage.setItem("postbox-width", ui.size.width);
}, }
}) });
}) });
//コード受信 //コード受信
if (location.search) { if (location.search) {
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/) var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
var mode = m[1] var mode = m[1];
var codex = m[2] var codex = m[2];
if (mode == 'share') { if (mode == "share") {
$('textarea').focus() $('textarea').focus();
$('#textarea').val(decodeURI(codex)) $("#textarea").val(decodeURI(codex));
show() show();
$('body').removeClass('mini-post') $("body").removeClass("mini-post");
$('.mini-btn').text('expand_less') $(".mini-btn").text("expand_less");
} }
} }
function initPostbox() { $('#posttgl').click(function (e) {
$('#posttgl').click(function (e) { if (!$('#post-box').hasClass("appear")) {
if (!$('#post-box').hasClass('appear')) { show();
show() } else {
} else { hide();
hide() }
} $('.cvo').removeClass("selectedToot")
$('.cvo').removeClass('selectedToot') selectedColumn = 0
selectedColumn = 0 selectedToot = 0
selectedToot = 0 });
})
$('#timeline-container,#group').click(function (e) { $("#timeline-container,#group").click(function (e) {
if (localStorage.getItem('box') != 'absolute') { if (localStorage.getItem("box") != "absolute") {
if ($('#post-box').hasClass('appear') && !localStorage.getItem('nohide')) { if ($('#post-box').hasClass("appear") && !localStorage.getItem("nohide")) {
hide() hide();
}
} }
$('.cvo').removeClass('selectedToot') }
selectedColumn = 0 $('.cvo').removeClass("selectedToot")
selectedToot = 0 selectedColumn = 0
localStorage.removeItem('nohide') selectedToot = 0
srcBox('close') localStorage.removeItem("nohide")
}) });
$('#textarea,#cw-text').focusout(function (e) { $('#textarea,#cw-text').focusout(function (e) {
localStorage.setItem('nohide', true) localStorage.setItem("nohide", true)
var countup = function () { var countup = function () {
localStorage.removeItem('nohide') localStorage.removeItem("nohide")
} }
//setTimeout(remove, 100); //setTimeout(remove, 100);
$('.cvo').removeClass('selectedToot') $('.cvo').removeClass("selectedToot")
selectedColumn = 0 selectedColumn = 0
selectedToot = 0 selectedToot = 0
}) });
}

View File

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

View File

@@ -1,70 +1,62 @@
//スクロールで続きを読む //スクロールで続きを読む
function scrollevent() { function scrollevent() {
$('.tl-box').scroll(function() { $(".tl-box").scroll(function () {
scrollck() scrollck();
}) });
} }
scrollevent() scrollevent();
function scrollck() { function scrollck() {
$('.tl-box').each(function(i, elem) { $(".tl-box").each(function (i, elem) {
var tlid = $(this).attr('tlid') var tlid = $(this).attr('tlid');
var len = $('#timeline_' + tlid + ' .cvo').length
//一番上ならためていた新しいトゥートを表示ないしtealなら未読管理モード //一番上ならためていた新しいトゥートを表示ないしtealなら未読管理モード
if ($(this).scrollTop() === 0) { if ($(this).scrollTop() === 0) {
if (!$('#unread_' + tlid + ' .material-icons').hasClass('teal-text')) { if (!$("#unread_" + tlid + " .material-icons").hasClass("teal-text")) {
var pool = localStorage.getItem('pool_' + tlid) var pool = localStorage.getItem("pool_" + tlid);
if (pool) { if (pool) {
$('#timeline_' + tlid).prepend(pool) $("#timeline_" + tlid).prepend(pool);
jQuery('time.timeago').timeago() jQuery("time.timeago").timeago();
localStorage.removeItem('pool_' + tlid) localStorage.removeItem("pool_" + tlid);
} }
} else { } else {
ueload(tlid) ueload(tlid)
} }
//自動リフレッシュ //自動リフレッシュ
if (len > 30) { if ($("#timeline_" + tlid + " .cvo").length > 30) {
for (var i = 30; i < $('#timeline_' + tlid + ' .cvo').length; i++) { for (var i = 30; i < $("#timeline_" + tlid + " .cvo").length; i++) {
$('#timeline_' + tlid + ' .cvo') $("#timeline_" + tlid + " .cvo").eq(i).remove();
.eq(i)
.remove()
} }
} }
} }
//続きを読むトリガー //続きを読むトリガー
var scrt = var scrt = $(this).find(".tl").height() - $(window).height();
$(this) var scr = $(this).scrollTop();
.find('.tl') if (scr > scrt) {
.height() - $(window).height() console.log("kicked more loading:" + tlid);
var scr = $(this).scrollTop() moreload('', tlid);
if (scr > scrt && scrt > 0) {
console.log('kicked more loading:' + tlid)
moreload('', tlid)
} }
}) });
} }
function goTop(id) { function goTop(id) {
if ($('#unread_' + id + ' .material-icons').hasClass('teal-text')) { if ($("#unread_" + id + " .material-icons").hasClass("teal-text")) {
$('#unread_' + id + ' .material-icons').removeClass('teal-text') $("#unread_" + id + " .material-icons").removeClass("teal-text")
var multi = localStorage.getItem('column') var multi = localStorage.getItem("column")
var obj = JSON.parse(multi) var obj = JSON.parse(multi)
var acct_id = obj[id * 1].domain var acct_id = obj[id * 1].domain
var type = obj[id * 1].type var type = obj[id * 1].type
console.log(id, type) console.log(id, type)
columnReload(id, type) columnReload(id, type)
} }
if ($('#timeline_box_' + id + '_box .tl-box').scrollTop() > 500) { if ($("#timeline_box_" + id + "_box .tl-box").scrollTop() > 500) {
$('#timeline_box_' + id + '_box .tl-box').scrollTop(500) $("#timeline_box_" + id + "_box .tl-box").scrollTop(500)
} }
$('#timeline_box_' + id + '_box .tl-box').animate({ scrollTop: 0 }) $("#timeline_box_" + id + "_box .tl-box").animate({ scrollTop: 0 });
} }
function goColumn(key) { function goColumn(key) {
$('#sort-box').addClass('hide') $("#sort-box").addClass("hide");
$('#sort-box').removeClass('show') $("#sort-box").removeClass("show");
if ($('[tlid=' + key + ']').length) { if ($('[tlid=' + key + ']').length) {
$('#timeline-container').animate({ $("#timeline-container").animate({ scrollLeft: $("#timeline-container").scrollLeft() + $('[tlid=' + key + ']').offset().left });
scrollLeft: $('#timeline-container').scrollLeft() + $('[tlid=' + key + ']').offset().left
})
} }
} }

File diff suppressed because it is too large Load Diff

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