Compare commits
229 Commits
15.0.0
...
untagged-9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7037f63b44 | ||
|
|
f9e3b4129b | ||
|
|
f0c89a291e | ||
|
|
abee0bb901 | ||
|
|
ef5dbcf040 | ||
|
|
bacac4486b | ||
|
|
8d4670d8d9 | ||
|
|
b2e10feba8 | ||
|
|
c245f2c5e6 | ||
|
|
63821f2c45 | ||
|
|
a058659778 | ||
|
|
8c27c43c13 | ||
|
|
da5549d1f0 | ||
|
|
487a8e7a1b | ||
|
|
9e7788cd62 | ||
|
|
ccb652dcf0 | ||
|
|
db673357f1 | ||
|
|
f84948b6c3 | ||
|
|
fdc6ec906c | ||
|
|
fd83ceef92 | ||
|
|
deab6fd869 | ||
|
|
677f167c8e | ||
|
|
21d8c52829 | ||
|
|
1c22572048 | ||
|
|
d6012ea128 | ||
|
|
2856aec405 | ||
|
|
28e39cdd3d | ||
|
|
bc8958ac6a | ||
|
|
083cb6e619 | ||
|
|
ba018b8568 | ||
|
|
1361958e8d | ||
|
|
6c69954ec4 | ||
|
|
978d3964d2 | ||
|
|
dd55236e84 | ||
|
|
dd59de1172 | ||
|
|
9e21979839 | ||
|
|
8589577995 | ||
|
|
2216777710 | ||
|
|
7950042eb6 | ||
|
|
b4674c8b09 | ||
|
|
91f9fa6591 | ||
|
|
f0869f3086 | ||
|
|
ae2f30a342 | ||
|
|
d8362add72 | ||
|
|
5b699c1775 | ||
|
|
412791975c | ||
|
|
dd2a7b4228 | ||
|
|
30805a2263 | ||
|
|
2dcf702d54 | ||
|
|
381e661484 | ||
|
|
b6f2feb147 | ||
|
|
f45fa97e95 | ||
|
|
86d99f40a5 | ||
|
|
d5f3354e71 | ||
|
|
5134dd274b | ||
|
|
560494467b | ||
|
|
75a397aafd | ||
|
|
4d5916b595 | ||
|
|
3c00ff5695 | ||
|
|
6513fc0e3e | ||
|
|
b16ef4576f | ||
|
|
67a7b1e08e | ||
|
|
092f3bd7d7 | ||
|
|
810a08c8e7 | ||
|
|
456500e954 | ||
|
|
e3470ae0f2 | ||
|
|
7da4cd53d2 | ||
|
|
1f1a429e35 | ||
|
|
1efa656529 | ||
|
|
52cb240be3 | ||
|
|
6411fc9fb1 | ||
|
|
48da2cf287 | ||
|
|
8968c248df | ||
|
|
27721fa481 | ||
|
|
ee618155ac | ||
|
|
f6e8f04b2a | ||
|
|
c6e99b2b47 | ||
|
|
c6701a4d59 | ||
|
|
693993e899 | ||
|
|
314ec5ab4d | ||
|
|
d344a7fc47 | ||
|
|
28f2e9302a | ||
|
|
697d942180 | ||
|
|
6412139ae4 | ||
|
|
add018263e | ||
|
|
baaa3e2527 | ||
|
|
79276bf698 | ||
|
|
3953f560e4 | ||
|
|
75d6a558ad | ||
|
|
230dd30294 | ||
|
|
e49c803f89 | ||
|
|
80577639d7 | ||
|
|
b85ac213da | ||
|
|
a8f446a1bd | ||
|
|
b7ec01aa1f | ||
|
|
6cc765a6f1 | ||
|
|
54a39151d1 | ||
|
|
37a1b7e52d | ||
|
|
54231cde73 | ||
|
|
57f7a92063 | ||
|
|
61c67457ac | ||
|
|
c05e13858b | ||
|
|
caa8d97a23 | ||
|
|
7921633efd | ||
|
|
77ad2bd200 | ||
|
|
fa3b3e0800 | ||
|
|
e1fb172f5b | ||
|
|
ccb0cb6db4 | ||
|
|
44e507dc90 | ||
|
|
c59267bf6e | ||
|
|
da0d9bbb51 | ||
|
|
c6d9d7aa49 | ||
|
|
a08b7501ce | ||
|
|
5950fa5bbd | ||
|
|
ed326cb264 | ||
|
|
4a984af695 | ||
|
|
d36a9215af | ||
|
|
e145efb1a2 | ||
|
|
c434ed903d | ||
|
|
fa546df375 | ||
|
|
cbe0cb171b | ||
|
|
70f76d61f4 | ||
|
|
0d0a9c43ad | ||
|
|
f762dd600c | ||
|
|
f3186373bf | ||
|
|
4f82cf00d6 | ||
|
|
ec2fb97a68 | ||
|
|
2c85cee77a | ||
|
|
c6ad258c1c | ||
|
|
4c0735b2ed | ||
|
|
cdaca5c9f7 | ||
|
|
0175038e77 | ||
|
|
205e1d3332 | ||
|
|
66d97388f5 | ||
|
|
c60572b132 | ||
|
|
bc197db0d5 | ||
|
|
a93c488aa5 | ||
|
|
a2d0268d39 | ||
|
|
8bb27aa8d5 | ||
|
|
0c7cf6f776 | ||
|
|
abd2a39204 | ||
|
|
1c476fe9b1 | ||
|
|
eb57d7f58d | ||
|
|
3be7b06010 | ||
|
|
c3133e5544 | ||
|
|
80c6af04cc | ||
|
|
7794cb75e1 | ||
|
|
f51f18d1ad | ||
|
|
01232153cd | ||
|
|
cc258230f8 | ||
|
|
f87ece1535 | ||
|
|
1b96b42356 | ||
|
|
9e05a1443a | ||
|
|
5ef3305ef2 | ||
|
|
9931225e9d | ||
|
|
07ad76f125 | ||
|
|
0f860f1814 | ||
|
|
e57264ae7e | ||
|
|
2f8b11b0b2 | ||
|
|
9ce718fbf0 | ||
|
|
f2db5cab20 | ||
|
|
f381d71239 | ||
|
|
75fb2e202a | ||
|
|
0fa27bad73 | ||
|
|
c3b787cb39 | ||
|
|
335440560a | ||
|
|
25b385b77c | ||
|
|
0ef0c80ac8 | ||
|
|
cf587c76e6 | ||
|
|
8439aa3e05 | ||
|
|
8ed7796556 | ||
|
|
406f65b17f | ||
|
|
5dbafe5dc7 | ||
|
|
c5151f6db0 | ||
|
|
621a1f3797 | ||
|
|
2fc7b6b183 | ||
|
|
c18af0042d | ||
|
|
d0061c5a95 | ||
|
|
edd712b6ba | ||
|
|
1ac79f21ae | ||
|
|
b29da449f0 | ||
|
|
c21cacf180 | ||
|
|
131c4ae35e | ||
|
|
b71a8eab26 | ||
|
|
7ab860c34c | ||
|
|
a2a937e220 | ||
|
|
b3ff01188c | ||
|
|
57e736b253 | ||
|
|
7ab23339ef | ||
|
|
dd81771ccf | ||
|
|
96995066ac | ||
|
|
7178c2d6c5 | ||
|
|
f6f3525bc8 | ||
|
|
1020106382 | ||
|
|
5a920d63fd | ||
|
|
7f64bd6d2a | ||
|
|
5473c22fe5 | ||
|
|
62b52e4ffa | ||
|
|
7ba4b3d442 | ||
|
|
5844e81277 | ||
|
|
48c184699a | ||
|
|
7dfbd6e2e4 | ||
|
|
29f3d3af58 | ||
|
|
f1fd3f0197 | ||
|
|
faa8b70aff | ||
|
|
49a45f2ecf | ||
|
|
d0af57b69d | ||
|
|
1cfe24ba94 | ||
|
|
760522312d | ||
|
|
aad1ae656e | ||
|
|
ea4e17920c | ||
|
|
5c39443d92 | ||
|
|
ca3aff674d | ||
|
|
16649e6913 | ||
|
|
f42f6e2572 | ||
|
|
a8e0133edb | ||
|
|
cc95b26cdb | ||
|
|
f4ec593e26 | ||
|
|
e47a952f0e | ||
|
|
d5f7153464 | ||
|
|
d4de0a6ca8 | ||
|
|
97e4d16642 | ||
|
|
03485425be | ||
|
|
103f0853bb | ||
|
|
de8f063aea | ||
|
|
a379617427 | ||
|
|
f19d95a2a6 | ||
|
|
3fa604533a | ||
|
|
c20b14b708 |
15
.gitignore
vendored
15
.gitignore
vendored
@@ -1,4 +1,17 @@
|
||||
*.bat
|
||||
*.zip
|
||||
*.7z
|
||||
TheDesk-*
|
||||
*.exe
|
||||
TheDesk-*
|
||||
app/build
|
||||
build
|
||||
make.js
|
||||
make_js.js
|
||||
app/.DS_Store
|
||||
.DS_Store
|
||||
.vs/*
|
||||
.vscode/*
|
||||
enq.md
|
||||
app/.tkn
|
||||
app/node_modules
|
||||
app/js/login/tkn.js
|
||||
|
||||
33
.travis.yml
Normal file
33
.travis.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
os: windows
|
||||
language: node_js
|
||||
node_js:
|
||||
- '10.15.2'
|
||||
script: node -v
|
||||
before_deploy:
|
||||
- cd app
|
||||
- npm install electron-builder -g
|
||||
- npm install
|
||||
- electron-builder --win --ia32
|
||||
- mv ../build/TheDesk-setup.exe ../TheDesk-setup-ia32.exe
|
||||
- mv ../build/TheDesk*.exe ../TheDesk-ia32.exe
|
||||
- electron-builder --win --x64
|
||||
- mv ../build/TheDesk-setup.exe ../TheDesk-setup.exe
|
||||
- mv ../build/TheDesk*.exe ../TheDesk.exe
|
||||
- cd ../
|
||||
- ls
|
||||
after_deploy: ls
|
||||
deploy:
|
||||
skip_cleanup: true
|
||||
provider: releases
|
||||
api_key:
|
||||
secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
|
||||
file:
|
||||
- TheDesk.exe
|
||||
- TheDesk-setup.exe
|
||||
- TheDesk-ia32.exe
|
||||
- TheDesk-setup-ia32.exe
|
||||
on:
|
||||
repo: cutls/TheDesk
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -1,2 +0,0 @@
|
||||
{
|
||||
}
|
||||
23
LATEST.md
23
LATEST.md
@@ -1,17 +1,22 @@
|
||||
## For Astarte(kirishima.cloud), My Primary Instance
|
||||
|
||||
TheDesk :thedesk: Mizuki (ver.7)
|
||||
【重要】
|
||||
このアップデートは必ず適用して下さい。
|
||||
理由:インスタンスにログインできない、トゥートができない等の問題を修正しています。
|
||||
TheDesk :thedesk: Akane (16.1.0)
|
||||
・不具合修正(マウスオーバー,クリックに関する)
|
||||
・2.5.0に対する対応(リプ数やendorseなど)
|
||||
・軽量化を図った
|
||||
・一つのカラムをTwitter(TweetDeck)にできる機能
|
||||
・画像の保存先を変えられるように
|
||||
・インスタンス情報の拡充
|
||||
・デザイン変更
|
||||
・トゥートバーを左端に持ってこれるように
|
||||
・Windowsのネイティブ通知が復活
|
||||
|
||||
ほか
|
||||
https://thedesk.top
|
||||
:github: https://github.com/cutls/TheDesk #Desk #DeskUpdate
|
||||
|
||||
## For Other Instances
|
||||
|
||||
PCクライアントTheDesk :thedesk: Mizuki (ver.7)
|
||||
【重要】このトゥートは重要な事項を含むため他のインスタンスでもトゥートされます。
|
||||
このアップデートは必ず適用して下さい。
|
||||
理由:インスタンスにログインできない、トゥートができない等の問題を修正しています。
|
||||
TheDeskはマルチカラム,マルチアカウントはもちろんのこと,なにかとマストドンライフをシンプルに効率化するクライアントです。
|
||||
TheDesk :thedesk: Akane (16.0.1)
|
||||
|
||||
https://thedesk.top
|
||||
674
LICENSE
Normal file
674
LICENSE
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
82
LICENSE.md
82
LICENSE.md
@@ -1,78 +1,8 @@
|
||||
# TheDesk LICENSE v3
|
||||
# プライバシーポリシー
|
||||
|
||||
(C)TheDesk 2018 all rights reserved. Website:[https://thedesk.top](https://thedesk.top)
|
||||
* TheDeskは「開発者からのお知らせ」配信のためにサーバー(thedesk.top)に常時アクセスしています。
|
||||
* 上記の接続によるユーザーの情報提供はありません。(IPアドレス等を含む)
|
||||
* thedesk.topのページにおいては、Googleアナリティクスによる解析を採用しています。
|
||||
* 配信についてAmazon Web Service CloudFrontを使用しています。CloudFrontにはアクセス解析機能がありますが、これの使用につきましては同プライバシーポリシーに則ります。
|
||||
* 接続するインスタンスのプライバシーポリシーはAPIを通じた全てのアクションに対して有効ですので、TheDeskについてもそれらに則ります。
|
||||
|
||||
以下のライセンスに基づき当ソフトウェアを公開します。
|
||||
- 以下の条件の範囲内で個人ないし団体による再頒布を認めます。
|
||||
- 必ず上記コピーライトと本ライセンス条項を改変無く含めること。(必ず年度が2018であること。他言語翻訳を付与する場合も原文を表記。)
|
||||
- 変更を含め全てのコードを公開すること。商用利用やライセンスの変更は認めない。依存パッケージのライセンスにも従っているものとする。
|
||||
- プラットフォームはElectronやCordova、またはそれに準ずるものであること。Webアプリケーションとしての配布は認めない。
|
||||
- TheDeskとして他のプラットフォームに移植する場合、コードを一切変更してはならない。
|
||||
- 改変する場合、必ずソフトウェアのタイトルの末尾が"Powered by TheDesk"であり、ユーザーの見えるところにTheDesk [使用バージョン名]を表示すること。
|
||||
- 改変する場合、一切thedesk.topにアクセスしてはならない。TheDeskは標準でバージョン確認のためにthedesk.topにアクセスする。
|
||||
- 改変する場合、サポートインスタンスを廃止すること。
|
||||
- 改変する場合、アイコンを必ず変更するし、かつそれがTheDeskを想起させるものであること。
|
||||
- このソフトウェアを改変して同時に複数インスタンスへ投稿させてはならない。
|
||||
- このソフトウェアの使用、再頒布に伴う一切の責任をTheDeskは負いません。
|
||||
- このソフトウェアを通じて投稿される内容やAPIを通じたアクションは全て投稿者が権利を主張でき、責務を負うことになります。
|
||||
- APIを通じたアクションは、全てそのインスタンスの規約に従っていなければなりません。特記無き場合、法的責任はそのインスタンスのホストの所在国の法律に従って下さい。
|
||||
- 利用しているインスタンスに関わらないTheDeskに起因する法的責任は日本国の法律に従います。
|
||||
- [https://thedesk.top](https://thedesk.top)で公式に頒布されるソフトのみ[kirishima.cloud](https://kirishima.cloud)(アスタルテ)公認クライアントです。
|
||||
このライセンス条項は2018年3月27日以降であり、TheDesk Airi (ver.9)以降をダウンロードした際に効力を持ちます。
|
||||
|
||||
以下バージョンとコードネームの比較です。
|
||||
_斜字_ はTheDeskには採用していません。前作等に使用されています。
|
||||
__太字__ は2018年3月27日現在のTheDeskで使用されたコードネームです。
|
||||
[カッコ囲み]は飛ばされることが確定しています。バージョンの番号も飛ばされます。
|
||||
52以降が必要になったときに使用します。
|
||||
1. _Rin_oct
|
||||
1. _Anzu_
|
||||
1. _Kanako_
|
||||
1. _Kaede_
|
||||
1. _Rika_
|
||||
1. _Ranko_
|
||||
1. __Miku__
|
||||
1. _Kirari_
|
||||
1. __Mika__
|
||||
1. __Uzuki__
|
||||
1. __Miho__
|
||||
1. __Riina__
|
||||
1. __Airi__
|
||||
1. __Mizuki__
|
||||
1. Mio
|
||||
1. Akane
|
||||
1. Miria
|
||||
1. Nana
|
||||
1. [Minami]
|
||||
1. Sachiko
|
||||
1. Mayu
|
||||
1. Koume
|
||||
1. Chieri
|
||||
1. Anastasia
|
||||
1. Aiko
|
||||
1. Shoko
|
||||
1. Nao
|
||||
1. Karen
|
||||
1. Sae
|
||||
1. Yuko
|
||||
1. Fumika
|
||||
1. Yuki
|
||||
1. Frederica
|
||||
1. Kanade
|
||||
1. Nina
|
||||
1. Arisu
|
||||
1. Sanae
|
||||
1. Shiki
|
||||
1. Syuko
|
||||
1. Momoka
|
||||
1. Yui
|
||||
1. Yuka
|
||||
1. Asuka
|
||||
1. Yumi
|
||||
1. Kyoko
|
||||
1. Yuuki
|
||||
1. Ryo
|
||||
1. Yoshino
|
||||
1. Hiromi
|
||||
1. Miyu
|
||||
1. Tomoe
|
||||
122
README.md
122
README.md
@@ -1,47 +1,115 @@
|
||||
# TheDesk
|
||||
Mastodon client for Windows/Linux(Linux ver. is not supported by developer.)
|
||||
オープンソースSNSマストドンのWindows/Linuxクライアント
|
||||
|
||||
[](https://travis-ci.org/cutls/TheDesk)
|
||||
[](https://translate.thedesk.top/project/thedesk)
|
||||
[](https://status.cutls.com/)
|
||||
Mastodon/Misskey client for PC(Windows/Linux/macOS)
|
||||
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント
|
||||
Download:[TheDesk](https://thedesk.top)
|
||||
Latest Info(Markdown Toot)/最新情報(マークダウン形式のトゥート): [LATEST.md](https://github.com/cutls/TheDesk/blob/master/LATEST.md)
|
||||
|
||||
## Developer/作った人
|
||||
|
||||
### Cutls P
|
||||
<img src="https://thedesk.top/img/desk.png" width="100px">
|
||||
|
||||
I'm developing TheDesk on Mastodon in Nishinomiya and Kyoto, Japan.
|
||||
My works:[Cutls Portal](https://the.cutls.com)
|
||||
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk
|
||||
|
||||
TheDeskを関西で開発しています。[Cutls Portal](https://the.cutls.com)で他のサービスをご覧いただけます。
|
||||
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ、または#Deskでトゥートして下さい。
|
||||
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.
|
||||
|
||||
## License
|
||||
### Contribute/コントリビュート
|
||||
|
||||
[TheDesk LICENSE v3](https://github.com/cutls/TheDesk/blob/master/LICENSE.md)
|
||||
Please make a pull request to ***WIP(before CI)*** brunch
|
||||
***WIP(before CI)*** ブランチにプルリクエストをお願いします。
|
||||
|
||||
## Component/構成
|
||||
## License/ライセンス
|
||||
|
||||
app:Raw files(you can download to modify or check)
|
||||
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)
|
||||
|
||||
app:そのままのファイル。ダウンロード→テスト用
|
||||
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)/アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。
|
||||
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)
|
||||
|
||||
desk.icns: If you build yourself on macOS, you can use this .icns file as icon.
|
||||
desk.icns: macOS向けアイコン。セルフビルドにどうぞ。
|
||||
* [PNG](https://dl.thedesk.top/press/TheDesk.png)
|
||||
* [Monotone SVG](https://dl.thedesk.top/press/TheDesk.svg)
|
||||
* [ico](https://dl.thedesk.top/press/TheDesk.ico)
|
||||
* [icns](https://dl.thedesk.top/press/TheDesk.icns)
|
||||
|
||||
## Terms of Use/利用規約
|
||||
|
||||
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
|
||||
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
|
||||
|
||||
## Language/言語
|
||||
|
||||
Japanese
|
||||
日本語
|
||||
* 日本語(Japanese)
|
||||
* English(英語)
|
||||
|
||||
### Translation/翻訳
|
||||
|
||||
Crowdin project is available! Visit: https://translate.thedesk.top
|
||||
|
||||
Crowdinから翻訳に参加してみませんか?: https://translate.thedesk.top
|
||||
|
||||
## Requirement/環境
|
||||
|
||||
- Windows (to launch TheDesk/実行に必要) / Linux (x64/ia32/armv7l)
|
||||
- Electron beta.1.8.4
|
||||
- electron-dl
|
||||
- Jimp(Node.js)
|
||||
- Ability to read unformated files!
|
||||
* Electron 3.0.10(install yourself)
|
||||
* electron-dl(in package.json)
|
||||
* Jimp(in package.json)
|
||||
* font-manager(in package.json)
|
||||
* Python 2.x(install yourself)
|
||||
* VisualC++(Windows)(install yourself)
|
||||
* itunes-nowplaying-mac(for macOS)(in package.json)
|
||||
* node-notifier(in package.json)
|
||||
* sumchecker(in package.json)
|
||||
* Ability to read unformated files!(install yourself)
|
||||
|
||||
## Contributors/コントリビューター
|
||||
|
||||
macOSビルダー
|
||||
|
||||
* [とねぢ](https://minohdon.jp/@toneji)
|
||||
|
||||
Linuxビルダー
|
||||
|
||||
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
|
||||
|
||||
## Build/ビルド
|
||||
|
||||
Misskey(misskey.xyz) application token is not in cutls/TheDesk
|
||||
Misskey(misskey.xyz)のトークンは含まれておりません。
|
||||
`git clone https://github.com/cutls/TheDesk`
|
||||
`npm install electron -g`
|
||||
`cd TheDesk/app`
|
||||
`npm install`
|
||||
`npm install --save-dev electron-rebuild`
|
||||
|
||||
Linux/macOS
|
||||
`./node_modules/.bin/electron-rebuild`
|
||||
Windows
|
||||
`.\node_modules\.bin\electron-rebuild.cmd`
|
||||
|
||||
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild`
|
||||
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)
|
||||
`npm install --global windows-build-tools`
|
||||
|
||||
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)
|
||||
|
||||
### electron-packager
|
||||
|
||||
Windows
|
||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite`
|
||||
Linux
|
||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=4.0.5 --overwrite`
|
||||
macOS
|
||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`
|
||||
|
||||
### electron-builder
|
||||
|
||||
Config is all on package.json
|
||||
ビルド設定はすべてpackage.jsonに記載しています。
|
||||
|
||||
## Pleroma support
|
||||
|
||||
Did you find a bug with Pleroma accounts?
|
||||
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.
|
||||
Please write issues to improve TheDesk affinity with Pleroma.
|
||||
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。
|
||||
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
|
||||
|
||||
## See also/詳しく
|
||||
|
||||
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
|
||||
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
@@ -70,7 +71,7 @@ a,button{
|
||||
</head>
|
||||
<body class="center " style="overflow:hidden">
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
|
||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
|
||||
<img src="./img/desk.png" style="max-width:70%;">
|
||||
<h5>TheDesk</h5>
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ja">
|
||||
<head>
|
||||
<title>Account Manager - TheDesk</title>
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/auth.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
|
||||
<style>.acct{display:flex; justify-content:space-around;}
|
||||
.text{overflow-x: scroll;}
|
||||
body,html{overflow-y: scroll;}
|
||||
</style>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body id="mainView">
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first.js"></script>
|
||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/tips.js"></script>
|
||||
<script type="text/javascript" src="./js/common/time.js"></script>
|
||||
<script type="text/javascript" src="./js/common/modal.js"></script>
|
||||
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;">戻る</a><br>
|
||||
<div id="acct-list" class="row"></div>
|
||||
<div class="divider"></div>
|
||||
アカウントを追加<br>
|
||||
<div id="add">
|
||||
<div class="row">
|
||||
<div class="col s6">
|
||||
<input type="text" id="url" style="width:70%" placeholder="mstdn.jp">
|
||||
<div id="ins-suggest"></div>
|
||||
Windows以外でご使用の方やPleromaにログインされる方はチェックを入れて下さい。<br>
|
||||
<input type="checkbox" class="filled-in" id="linux" />
|
||||
<label for="linux">コードセットアップ</label><br>
|
||||
<button class="btn waves-effect" onclick="instance()">Login</button><br>
|
||||
</div>
|
||||
<div class="col s6">
|
||||
<span style="font-family:Open Sans;">Supports</span>
|
||||
<div id="support" class="collection transparent"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="auth" style="display:none">
|
||||
指定されたコードを貼り付けてください。ログインウィンドウは閉じていただいて構いません。<br>
|
||||
<input type="text" id="code" placeholder="コードを入力">
|
||||
<button class="btn waves-effect" onclick="code()">認証</button><br>
|
||||
</div>
|
||||
現在ログイン中のインスタンス情報 by <a href="https://instances.social" target="_blank">instances.social API</a><br>
|
||||
<img src="./img/loading.svg" id="ins-prof" width="200"><br>
|
||||
<span id="ins-upd"></span>現在<br>
|
||||
ドメイン名:<span id="ins-name"></span><br>
|
||||
接続済みインスタンス:<span id="ins-connect"></span>個<br>
|
||||
トゥート数:<span id="ins-toot"></span>個<br>
|
||||
ユーザー数:<span id="ins-user"></span>人<br>
|
||||
コネクション:<span id="ins-per"></span>%<br>
|
||||
マストドンバージョン:<span id="ins-ver"></span><br>
|
||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/end.js"></script>
|
||||
<script type="text/javascript" src="./js/login/manager.js"></script>
|
||||
<script type="text/javascript" src="./js/login/instance.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/date.js"></script>
|
||||
260
app/adobe.html
Normal file
260
app/adobe.html
Normal file
@@ -0,0 +1,260 @@
|
||||
<!doctype html>
|
||||
<html lang="ja">
|
||||
<head>
|
||||
<title>Adobe Photo Editor - TheDesk</title>
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/auth.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
|
||||
<style>
|
||||
#cb-drag {
|
||||
margin-bottom: 8px;
|
||||
padding: 24px 0;
|
||||
text-align: center;
|
||||
}
|
||||
#cb-drag p {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
#cb-file {
|
||||
cursor: pointer;
|
||||
}
|
||||
#cb-display {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
#cb-display p {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 0;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.cb-div {
|
||||
padding: 16px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.cb-image {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
</style>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body id="mainView">
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
|
||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/tips.js"></script>
|
||||
<script type="text/javascript" src="./js/common/time.js"></script>
|
||||
<script type="text/javascript" src="./js/common/modal.js"></script>
|
||||
<div>
|
||||
<div id="cb-drag">
|
||||
<p>ここに画像ファイルをドラッグし、画像をクリックしてください。</p>
|
||||
<input type="file" id="cb-file">
|
||||
</div>
|
||||
<div id="cb-display"></div>
|
||||
</div>
|
||||
<script type="text/javascript" src="https://dme0ih8comzn4.cloudfront.net/imaging/v2/editor.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var dragAndDrop = (function (window, document) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var drag = document.getElementById("mainView");
|
||||
var disp = document.getElementById("cb-display");
|
||||
var file = document.getElementById("cb-file");
|
||||
|
||||
function makeView(data) {
|
||||
|
||||
var div, img, customEvent;
|
||||
var metaData = "<p>■ファイル名: <b>" + data.name + "</b><br>■容量: <b>" + data.size + "</b>バイト</p>";
|
||||
|
||||
div = document.createElement("div");
|
||||
div.setAttribute("class", "cb-div");
|
||||
|
||||
img = document.createElement("img");
|
||||
img.src = data.url;
|
||||
img.setAttribute("class", "cb-image");
|
||||
img.style.maxWidth = "100%";
|
||||
img.style.height = "auto";
|
||||
|
||||
div.appendChild(img);
|
||||
img.insertAdjacentHTML("afterend", metaData);
|
||||
disp.appendChild(div);
|
||||
|
||||
customEvent = document.createEvent("HTMLEvents");
|
||||
customEvent.initEvent("makeView", true, false);
|
||||
div.dispatchEvent(customEvent);
|
||||
|
||||
}
|
||||
|
||||
function readImage(e) {
|
||||
|
||||
var f = (e.dataTransfer) ? e.dataTransfer.files : e.target.files;
|
||||
|
||||
for (var i = 0, l = f.length; i < l; i++) {
|
||||
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = (function (f) {
|
||||
|
||||
var imageData = {};
|
||||
|
||||
return function (evt) {
|
||||
|
||||
if (f.type === "image/gif" || f.type === "image/png" || f.type === "image/jpeg") {
|
||||
|
||||
imageData.type = f.type;
|
||||
imageData.name = f.name;
|
||||
imageData.size = f.size;
|
||||
imageData.date = f.lastModifiedDate.toLocaleDateString();
|
||||
imageData.url = evt.target.result;
|
||||
makeView(imageData);
|
||||
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(f[i]);
|
||||
|
||||
reader.readAsDataURL(f[i]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dragFiles() {
|
||||
|
||||
drag.addEventListener("drop", function (e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
readImage(e);
|
||||
}, false);
|
||||
|
||||
drag.addEventListener("dragover", function (e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}, false);
|
||||
|
||||
}
|
||||
|
||||
function uploadFiles() {
|
||||
|
||||
file.addEventListener("change", function(e) {
|
||||
readImage(e);
|
||||
}, false);
|
||||
|
||||
}
|
||||
|
||||
return {
|
||||
init: function () {
|
||||
dragFiles();
|
||||
uploadFiles();
|
||||
}
|
||||
};
|
||||
|
||||
})(this, this.document);
|
||||
|
||||
var photoEditor = (function (window, document) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var featherEditor = new Aviary.Feather({
|
||||
apiKey: "ffee425017ab44b18ce95dab98a5cdc1",
|
||||
onSave: function(imageID, newURL) {
|
||||
var img1 = document.getElementById(imageID);
|
||||
img1.src = newURL;
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('bmp-image', [newURL,0]);
|
||||
window.close();
|
||||
}
|
||||
});
|
||||
|
||||
function clearImage() {
|
||||
this.parentNode.style.display = "none";
|
||||
}
|
||||
|
||||
function launchEditor(id, src) {
|
||||
featherEditor.launch({
|
||||
image: id,
|
||||
url: src
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function editPhoto() {
|
||||
//console.log(this);
|
||||
var id = this.getAttribute("id");
|
||||
var src = this.getAttribute("src");
|
||||
launchEditor(id, src);
|
||||
}
|
||||
|
||||
function makeButton() {
|
||||
var button = document.createElement("button");
|
||||
button.setAttribute("style",
|
||||
"width: 64px;"
|
||||
+ " line-height: 24px;"
|
||||
+ " background-color: #37474F;"
|
||||
+ " color: #fff;"
|
||||
+ " border: none;"
|
||||
+ " cursor: pointer;"
|
||||
+ " border-radius: 2px;"
|
||||
+ " font-size: 14px;"
|
||||
+ " position: absolute;"
|
||||
+ " text-align: center;"
|
||||
+ " top: 16px;"
|
||||
+ " right: 8px;"
|
||||
+ " padding: 0;"
|
||||
+ " z-index: 1000;"
|
||||
);
|
||||
button.innerHTML = "削除";
|
||||
return button;
|
||||
}
|
||||
|
||||
function listener() {
|
||||
|
||||
var disp = document.getElementById("cb-display");
|
||||
|
||||
disp.addEventListener("makeView", function () {
|
||||
|
||||
var image = document.querySelectorAll(".cb-image");
|
||||
var button = [];
|
||||
|
||||
for (var i = 0, l = image.length; i < l; i++) {
|
||||
|
||||
button[i] = makeButton();
|
||||
image[i].setAttribute("id", "cb-image_" + i);
|
||||
image[i].parentNode.style.position = "relative";
|
||||
image[i].parentNode.appendChild(button[i]);
|
||||
|
||||
button[i].addEventListener("click", clearImage, false);
|
||||
image[i].addEventListener("click", editPhoto, false);
|
||||
}
|
||||
|
||||
}, false);
|
||||
|
||||
}
|
||||
|
||||
return {
|
||||
init: function () {
|
||||
listener();
|
||||
}
|
||||
};
|
||||
|
||||
})(this, this.document);
|
||||
|
||||
dragAndDrop.init();
|
||||
photoEditor.init();
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/end.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
1
app/build/README.md
Normal file
1
app/build/README.md
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
BIN
app/build/icon.icns
Normal file
BIN
app/build/icon.icns
Normal file
Binary file not shown.
@@ -1,5 +1,17 @@
|
||||
/*共通CSS*/
|
||||
html,body{overflow:hidden; user-select: none; cursor:default; font-size:13px;height: 100vh;}
|
||||
html,body{
|
||||
/*transform: translate3d(0,0,0);*/
|
||||
overflow:hidden;
|
||||
user-select: none;
|
||||
cursor:default;
|
||||
font-size:13px;
|
||||
height: 100vh;
|
||||
background-color: var(--bg);
|
||||
color: var(--color);
|
||||
}
|
||||
body{
|
||||
border: thin solid gray;
|
||||
}
|
||||
.btn {
|
||||
margin: 5px;
|
||||
text-transform: none;
|
||||
@@ -32,21 +44,21 @@ option {
|
||||
display: none;
|
||||
max-width: 100vw;
|
||||
max-height: 100vh;
|
||||
top:0;
|
||||
background-color: white;
|
||||
position: fixed;
|
||||
z-index: 9;
|
||||
}
|
||||
#imagemodal, #videomodal, #tootmodal {
|
||||
background-color: white;
|
||||
#videomodal, #tootmodal {
|
||||
background-color: var(--modal);
|
||||
}
|
||||
#imagemodal .modal-content {
|
||||
overflow: hidden;
|
||||
padding:0;
|
||||
}
|
||||
#imagemodal .modal-footer{
|
||||
overflow-x:scroll;
|
||||
overflow-y:hidden;
|
||||
}
|
||||
|
||||
#imagewrap {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -54,6 +66,10 @@ option {
|
||||
.pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
.badge{
|
||||
min-width: 0 !important;
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
.bbcode-pulse-loadings, .bbcode-pulse-loading, .fa-pulse {
|
||||
display: inline-block;
|
||||
animation-duration: 3s;
|
||||
@@ -69,6 +85,38 @@ option {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes shake {
|
||||
from,
|
||||
to {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
10%,
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90% {
|
||||
-webkit-transform: translate3d(-10px, 0, 0);
|
||||
transform: translate3d(-10px, 0, 0);
|
||||
}
|
||||
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80% {
|
||||
-webkit-transform: translate3d(10px, 0, 0);
|
||||
transform: translate3d(10px, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.shake {
|
||||
display: inline-block;
|
||||
animation-duration: 1s;
|
||||
animation-fill-mode: both;
|
||||
animation-iteration-count: infinite;
|
||||
animation-name: shake;
|
||||
}
|
||||
code:before, .pre:before {
|
||||
content: "Code";
|
||||
font-size: 1.8rem;
|
||||
@@ -91,12 +139,9 @@ code, pre {
|
||||
background-color: #000;
|
||||
padding: 1em 1em 1em;
|
||||
position: relative;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-webkit-border-bottom-right-radius: 10px;
|
||||
-webkit-border-bottom-left-radius: 10px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
-moz-border-radius-bottomright: 10px;
|
||||
-moz-border-radius-bottomleft: 10px;
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
}
|
||||
blockquote, .quote p {
|
||||
margin: 0;
|
||||
@@ -106,12 +151,9 @@ blockquote, .quote {
|
||||
background-color: #ddd;
|
||||
padding: 1em 1em 1em;
|
||||
position: relative;
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-webkit-border-bottom-right-radius: 10px;
|
||||
-webkit-border-bottom-left-radius: 10px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
-moz-border-radius-bottomright: 10px;
|
||||
-moz-border-radius-bottomleft: 10px;
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
}
|
||||
blockquote:before, .quote:before {
|
||||
content: "Quote";
|
||||
@@ -123,12 +165,53 @@ blockquote:before, .quote:before {
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
.twitter-tweet {
|
||||
color: black;
|
||||
background-color: #fff;
|
||||
padding: 1em 1em 1em;
|
||||
position: relative;
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
border-left: 5px solid #0c7abf;
|
||||
}
|
||||
.twitter-tweet :before {
|
||||
content: "From Twitter";
|
||||
font-size: 1.8rem;
|
||||
line-height: 1em;
|
||||
font-family: Open Sans;
|
||||
color: #999;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
.pixiv-post {
|
||||
color: black;
|
||||
background-color: #fff;
|
||||
padding: 1em 1em 1em;
|
||||
position: relative;
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
border-left: 5px solid #0096fa;
|
||||
}
|
||||
.pixiv-post :before {
|
||||
content: "From Pixiv";
|
||||
font-size: 1.8rem;
|
||||
line-height: 1em;
|
||||
font-family: Open Sans;
|
||||
color: #999;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
#drag {
|
||||
display: none;
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
background-color: var(--bg);
|
||||
color: var(--color);
|
||||
z-index: 99999;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -142,7 +225,7 @@ blockquote:before, .quote:before {
|
||||
#pip{
|
||||
z-index:504;
|
||||
width:418px;
|
||||
background-color: white;
|
||||
background-color: var(--subcolor);
|
||||
position:absolute;
|
||||
}
|
||||
.pip-bottom{
|
||||
@@ -160,7 +243,15 @@ blockquote:before, .quote:before {
|
||||
#pip-content .material-icons{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.big-text{
|
||||
font-size:1.2rem;
|
||||
}
|
||||
#releasenote {
|
||||
background-color: var(--modal);
|
||||
}
|
||||
#releasenote li{
|
||||
list-style-type: disc
|
||||
}
|
||||
@media only screen and (min-width: 993px){
|
||||
#toast-container {
|
||||
top:auto;
|
||||
@@ -181,75 +272,128 @@ blockquote:before, .quote:before {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.hide-anime{
|
||||
animation: hide 0.2s linear 0s;
|
||||
display:none;
|
||||
}
|
||||
@keyframes hide{
|
||||
from{
|
||||
opacity: 1;
|
||||
}
|
||||
to{
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.collapsible-header,.tabs{
|
||||
background-color: var(--subcolor);
|
||||
}
|
||||
.modal-footer{
|
||||
background-color: var(--modalfooter) !important;
|
||||
}
|
||||
.font{
|
||||
font-size:1.5rem;
|
||||
margin-bottom:5px;
|
||||
}
|
||||
.font:hover{
|
||||
background-color: #999;
|
||||
}
|
||||
.release-do{
|
||||
border: solid 2px;
|
||||
border-color:var(--color);
|
||||
padding:5px;
|
||||
}
|
||||
#pickers{
|
||||
display:flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
#menu{
|
||||
position:fixed;
|
||||
z-index:9999;
|
||||
background-color: var(--box);
|
||||
width:540px;
|
||||
top:calc(50% - 150px);
|
||||
left:calc(50% - 250px);
|
||||
padding: 5px;
|
||||
border: thin solid gray;
|
||||
border-radius:5px;
|
||||
}
|
||||
#menu-wrapper{
|
||||
margin-left:-5px;
|
||||
display:flex;
|
||||
}
|
||||
#left-menu{
|
||||
width:170px;
|
||||
}
|
||||
#left-menu div{
|
||||
padding-left:5px;
|
||||
width:100%;
|
||||
height:50px;
|
||||
display:flex;
|
||||
align-items:center;
|
||||
cursor:pointer;
|
||||
}
|
||||
#left-menu div:hover {
|
||||
background-color: var(--beforehover);
|
||||
}
|
||||
#left-menu span{
|
||||
margin-left:5px;
|
||||
}
|
||||
#left-menu div.active{
|
||||
background-color: var(--emphasized);
|
||||
}
|
||||
#right-menu{
|
||||
width:380px;
|
||||
max-height:375px;
|
||||
overflow-y:scroll;
|
||||
overflow-x:hidden;
|
||||
padding:5px;
|
||||
}
|
||||
#tltype{
|
||||
display:flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
}
|
||||
#tltype .type{
|
||||
display:flex;
|
||||
flex-wrap: wrap;
|
||||
align-items:center;
|
||||
width:170px;
|
||||
height:40px;
|
||||
cursor:pointer;
|
||||
}
|
||||
#tltype .type:hover {
|
||||
background-color: var(--beforehover);
|
||||
}
|
||||
#tltype .active{
|
||||
background-color: var(--emphasized);
|
||||
}
|
||||
#tltype i{
|
||||
font-size:30px;
|
||||
}
|
||||
#tltype i.sub-icon{
|
||||
font-size: 20px;
|
||||
position: relative;
|
||||
color: var(--beforehover);
|
||||
left: -15px;
|
||||
|
||||
/*black theme*/
|
||||
.blacktheme body {
|
||||
color: white;
|
||||
background-color: #212121;
|
||||
}
|
||||
.blacktheme #drag {
|
||||
color: white;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 99999;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.blacktheme #imagemodal,.blacktheme #videomodal,.blacktheme #tootmodal {
|
||||
background-color: black;
|
||||
}
|
||||
.blacktheme .collapsible-header,.blacktheme .tabs,.blacktheme #pip {
|
||||
background-color: #212121;
|
||||
}
|
||||
/*indigo theme*/
|
||||
.indigotheme body {
|
||||
color: white;
|
||||
background-color: #031833;
|
||||
}
|
||||
.indigotheme #drag {
|
||||
color: white;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 99999;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.indigotheme #imagemodal,.indigotheme #videomodal,.indigotheme #tootmodal {
|
||||
background-color: #0d1351;
|
||||
}
|
||||
.indigotheme .collapsible-header,.indigotheme .tabs,.indigotheme #pip {
|
||||
background-color: #0d1351;
|
||||
}
|
||||
/*brown theme*/
|
||||
.browntheme body {
|
||||
color: white;
|
||||
background-color: #261411;
|
||||
}
|
||||
.browntheme #drag {
|
||||
color: white;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 99999;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.browntheme #imagemodal,.browntheme #videomodal,.browntheme #tootmodal {
|
||||
background-color: #261411;
|
||||
}
|
||||
.browntheme .collapsible-header,.browntheme .tabs,.browntheme #pip {
|
||||
background-color: #4e342e;
|
||||
.drag-bar{
|
||||
cursor:move;
|
||||
text-align:center;
|
||||
width:calc(100% + 10px);
|
||||
border-radius: 5px;
|
||||
background-color: var(--bg);
|
||||
margin-left:-5px;
|
||||
margin-right:-5px;
|
||||
margin-top:-5px;
|
||||
font-size:16px;
|
||||
padding:4px;
|
||||
}
|
||||
|
||||
/*スクロールバー*/
|
||||
::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
height: 10px;
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
@@ -260,6 +404,6 @@ blockquote:before, .quote:before {
|
||||
::-webkit-scrollbar-thumb {
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #9e9e9e;
|
||||
background: #607d8b;
|
||||
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
1
app/css/pickr.css
Normal file
1
app/css/pickr.css
Normal file
File diff suppressed because one or more lines are too long
@@ -1,23 +1,26 @@
|
||||
/*トゥートボックス向けCSS*/
|
||||
#post-box {
|
||||
display:none;
|
||||
position: fixed;
|
||||
right: 78px;
|
||||
bottom: 3px;
|
||||
background-color: white;
|
||||
left: calc(50vw - 150px);
|
||||
top: 50vh;
|
||||
background-color: var(--postbox);
|
||||
border: thin solid gray;
|
||||
z-index: 500;
|
||||
width: 300px;
|
||||
z-index: 501;
|
||||
min-width:300px;
|
||||
max-width:100%;
|
||||
padding: 5px;
|
||||
border-radius:5px;
|
||||
}
|
||||
|
||||
.cancel {
|
||||
font-size: 0.5rem;
|
||||
color: gray;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 60px;
|
||||
right: 0px;
|
||||
right: 2px;
|
||||
top:4px;
|
||||
|
||||
}
|
||||
.more-show {
|
||||
display: none;
|
||||
@@ -25,8 +28,6 @@
|
||||
#drag {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
background-color: #e0e0e0;
|
||||
color: black;
|
||||
}
|
||||
#post-btn {
|
||||
display: none;
|
||||
@@ -37,6 +38,15 @@
|
||||
#cw-text {
|
||||
display: none;
|
||||
}
|
||||
#sch-box {
|
||||
display: none;
|
||||
}
|
||||
#sch-box input {
|
||||
width:auto;
|
||||
}
|
||||
.picker__close, .picker__today, .picker__clear {
|
||||
color: #26a69a !important;
|
||||
}
|
||||
.cw {
|
||||
display: none;
|
||||
}
|
||||
@@ -44,17 +54,15 @@
|
||||
filter: blur(50px);
|
||||
}
|
||||
#emoji {
|
||||
position: fixed;
|
||||
bottom: 120px;
|
||||
right: 20px;
|
||||
width: 300px;
|
||||
height: 440px;
|
||||
z-index: 502;
|
||||
padding: 5px;
|
||||
|
||||
}
|
||||
#suggest{
|
||||
max-height:300px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#emoji-list {
|
||||
width: 100%;
|
||||
height: calc(100% - 190px);
|
||||
height: 200px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#preview-field {
|
||||
@@ -68,30 +76,38 @@
|
||||
position: relative;
|
||||
top: -25px;
|
||||
}
|
||||
|
||||
|
||||
/*black theme*/
|
||||
.blacktheme #post-box {
|
||||
background-color: #424242;
|
||||
.trendtag{
|
||||
overflow-y:scroll;
|
||||
max-height:100px;
|
||||
}
|
||||
/*indigo theme*/
|
||||
.indigotheme #post-box {
|
||||
background-color: #1a237e ;
|
||||
#toot-btn-field{
|
||||
display:flex;
|
||||
}
|
||||
/*brown theme*/
|
||||
.browntheme #post-box {
|
||||
background-color: #4e342e;
|
||||
#toot-post-btn{
|
||||
width:calc(100% - 10px); padding:0; margin-top:10px;
|
||||
}
|
||||
/*
|
||||
.blacktheme #drag {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
background-color: #004d40;
|
||||
color: white;
|
||||
padding: 3px;
|
||||
#toot-sec-btn{
|
||||
width:30px; padding:0; margin-top:10px;
|
||||
}
|
||||
#left-side{
|
||||
float:left;
|
||||
width:300px;
|
||||
}
|
||||
#right-side{
|
||||
display:none;
|
||||
float:left;
|
||||
width:300px;
|
||||
padding:5px;
|
||||
}
|
||||
#poll{
|
||||
|
||||
}
|
||||
.poll-provider{
|
||||
position: absolute;
|
||||
height: calc(100% - 90px);
|
||||
overflow-y: scroll;
|
||||
top: 90px;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*mini*/
|
||||
.mini-post .mize{
|
||||
|
||||
@@ -1,13 +1,32 @@
|
||||
|
||||
.drag-content{
|
||||
width:300px;
|
||||
max-width:100%;
|
||||
height:30px;
|
||||
text-overflow: ellipsis;
|
||||
cursor:move;
|
||||
user-select: none;
|
||||
background-color:black;
|
||||
background-color:var(--modalfooter);
|
||||
margin:5px;
|
||||
border-radius:5px;
|
||||
color:white;
|
||||
color:var(--color);
|
||||
padding:3px;
|
||||
display:grid;
|
||||
grid-template-columns: 43px 1fr 60px;
|
||||
grid-template-areas: 'sorticon sorttitle sorttitle' 'sorticon sortacct sortaction';
|
||||
}
|
||||
.sorticon {
|
||||
grid-area:sorticon;
|
||||
}
|
||||
.sorticon i{
|
||||
font-size:43px;
|
||||
}
|
||||
.sorttitle {
|
||||
margin-left:5px;
|
||||
grid-area:sorttitle;
|
||||
}
|
||||
.sortacct {
|
||||
margin-left:5px;
|
||||
grid-area:sortacct;
|
||||
}
|
||||
.sortaction {
|
||||
margin-left:5px;
|
||||
grid-area:sortaction;
|
||||
}
|
||||
100
app/css/themes.css
Normal file
100
app/css/themes.css
Normal file
@@ -0,0 +1,100 @@
|
||||
:root{
|
||||
--bg:white;
|
||||
--drag:rgba(255, 255, 255, 0.8);
|
||||
--color:black;
|
||||
--beforehover:#757575;
|
||||
--modal:white;
|
||||
--subcolor:#e0e0e0;
|
||||
--box:white;
|
||||
--sidebar:#eeeeee;
|
||||
--shared:#cfd8dc;
|
||||
--notfbox:white;
|
||||
--emphasized:#81c784;
|
||||
--his-data:rgba(255, 255, 255, 0.9);
|
||||
--active:#e6ee9c;
|
||||
--postbox:white;
|
||||
--modalfooter:#fafafa;
|
||||
}
|
||||
#imagemodal{
|
||||
background: url("../img/pixel.white.svg");
|
||||
}
|
||||
.blacktheme {
|
||||
--bg:#212121;
|
||||
--drag:rgba(0, 0, 0, 0.8);
|
||||
--color:white;
|
||||
--beforehover:#9e9e9e;
|
||||
--modal:black;
|
||||
--subcolor:#212121;
|
||||
--box:#424242;
|
||||
--sidebar:#424242;
|
||||
--shared:#004d40;
|
||||
--notfbox:#333333;
|
||||
--emphasized:#4e342e;
|
||||
--his-data:rgba(0, 0, 0, 0.8);
|
||||
--active:#757575;
|
||||
--postbox:#424242;
|
||||
--modalfooter:#212121;
|
||||
}
|
||||
.blacktheme #imagemodal{
|
||||
background: url("../img/pixel.svg");
|
||||
}
|
||||
.indigotheme {
|
||||
--bg:#031833;
|
||||
--drag:rgba(0, 0, 0, 0.8);
|
||||
--color:white;
|
||||
--beforehover:#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;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
.browntheme #imagemodal{
|
||||
background: url("../img/pixel.svg");
|
||||
}
|
||||
.greentheme{
|
||||
--bg:#c8e6c9;
|
||||
--drag:rgba(255, 255, 255, 0.8);
|
||||
--color:black;
|
||||
--beforehover:#757575;
|
||||
--modal:#81c784;
|
||||
--subcolor:#a5d6a7;
|
||||
--box:#81c784;
|
||||
--sidebar:#81c784;
|
||||
--shared:#ffcc80;
|
||||
--notfbox:#a5d6a7;
|
||||
--emphasized:#9e9d24;
|
||||
--his-data:rgba(255, 255, 255, 0.9);
|
||||
--active:#e6ee9c;
|
||||
--postbox:#a5d6a7;
|
||||
--modalfooter:#81c784;
|
||||
}
|
||||
.greentheme #imagemodal{
|
||||
background: url("../img/pixel.white.svg");
|
||||
}
|
||||
371
app/css/tl.css
371
app/css/tl.css
@@ -7,54 +7,89 @@
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
height: calc(100vh - 40px);
|
||||
flex-grow:4;
|
||||
}
|
||||
#sidebar{
|
||||
width:75px;
|
||||
min-width:75px;
|
||||
height:100vh;
|
||||
background-color:#e0e0e0;
|
||||
#bottom{
|
||||
position:absolute;
|
||||
bottom:0;
|
||||
width:100vw;
|
||||
height:40px;
|
||||
padding:3px;
|
||||
padding-right:0;
|
||||
padding-left:40px;
|
||||
background-color:var(--sidebar);
|
||||
display:flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap:wrap;
|
||||
z-index:500;
|
||||
box-shadow: 10px 0 10px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
#sidebar-top{
|
||||
height:calc(100vh - 100px);
|
||||
#bottom.reverse{
|
||||
padding-left:0;
|
||||
padding-right:40px;
|
||||
}
|
||||
.reverse{
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
#bottom #dambox{
|
||||
width:300px;
|
||||
margin-right:10px;
|
||||
}
|
||||
#bottom.reverse #dambox{
|
||||
margin-right:0;
|
||||
}
|
||||
#bottom .trendtag{
|
||||
height:40px;
|
||||
}
|
||||
#bottom #group{
|
||||
margin-right:40px;
|
||||
}
|
||||
#bottom .leftside{
|
||||
display:flex;
|
||||
flex-wrap:wrap;
|
||||
align-content:flex-start;
|
||||
overflow-y:scroll;
|
||||
}
|
||||
#sidebar-btm{
|
||||
height:9em;
|
||||
display:flex;
|
||||
flex-wrap:wrap;
|
||||
align-content:flex-end;
|
||||
#bottom #tips img{
|
||||
vertical-align: -3px;
|
||||
}
|
||||
#sidebar div{
|
||||
width:100%;
|
||||
vertical-align:text-bottom;
|
||||
#bottom a{
|
||||
color:var(--color);
|
||||
}
|
||||
#sidebar a{
|
||||
color:black;
|
||||
#bottom i{
|
||||
font-size:30px;
|
||||
}
|
||||
#sidebar .big-menu{
|
||||
text-align:center;
|
||||
.exc-icons{
|
||||
font-size:20px;
|
||||
}
|
||||
#sidebar .big-menu i.big-icon{
|
||||
font-size:5em;
|
||||
.exc-chb{
|
||||
padding-left:24px !important;
|
||||
}
|
||||
#sidebar .small-menu i{
|
||||
font-size:2rem;
|
||||
#bottom .btnsgroup{
|
||||
border:1px solid;
|
||||
padding:1px;
|
||||
padding-left:5px;
|
||||
padding-right:5px;
|
||||
margin-right:15px;
|
||||
border-radius:5px;
|
||||
}
|
||||
#sidebar .small-menu .side-label{
|
||||
font-size:12px;
|
||||
vertical-align: 0.6rem;
|
||||
#spot-box{
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
#sidebar .side-dead{
|
||||
height:30px;
|
||||
#spot-img{
|
||||
margin-right:2px;
|
||||
}
|
||||
#spot-art{
|
||||
margin-right:2px;
|
||||
margin-left:2px;
|
||||
}
|
||||
.btnsgroup .grouptitle{
|
||||
font-family:Open Sans;
|
||||
font-size:15px;
|
||||
}
|
||||
@media screen and (max-width: 890px) {
|
||||
.btnsgroup .grouptitle{ display: none; }
|
||||
#tips,#tips-menu{ display: none; }
|
||||
}
|
||||
|
||||
iframe {
|
||||
max-width:100%;
|
||||
}
|
||||
@@ -76,15 +111,19 @@ iframe {
|
||||
height: 100vh;
|
||||
flex: 1;
|
||||
border: thin solid gray;
|
||||
border-top:none;
|
||||
}
|
||||
.box .pin,#his-data .pin{
|
||||
display:none;
|
||||
}
|
||||
.user{
|
||||
cursor:text;
|
||||
font-size:1.2rem;
|
||||
font-size:1.1rem;
|
||||
}
|
||||
.emojione,.emoji-img{
|
||||
.emoji,.emoji-img{
|
||||
width: 15px;
|
||||
}
|
||||
.area-toot .emoji,.area-toot .emoji-img{
|
||||
width: 20px;
|
||||
vertical-align: middle;
|
||||
margin: -3px 0 0;
|
||||
@@ -100,14 +139,25 @@ iframe {
|
||||
.media-filter .nomedia{
|
||||
display:none;
|
||||
}
|
||||
.bt-filter .shared{
|
||||
display:none;
|
||||
}
|
||||
.except-bt-filter .unshared{
|
||||
display:none;
|
||||
}
|
||||
.cvo {
|
||||
user-select: text;
|
||||
padding-left: 5px;
|
||||
border-bottom:0.5px solid;
|
||||
padding-right: 2px;
|
||||
word-break: break-all;
|
||||
word-break: break-word;
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: 43px 2fr 1fr;
|
||||
grid-template-areas: 'notice notice notice' 'icon display_name acct' 'icon toot toot' 'vis additional additional' 'actions actions actions';
|
||||
grid-template-areas: 'notice notice notice' 'icon display_name display_name' 'icon toot toot' 'vis additional additional' 'actions actions side';
|
||||
}
|
||||
.cvo h1,.cvo h2,.cvo h3,.cvo h4,.cvo h5,.cvo h6{
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.area-notice {
|
||||
@@ -122,28 +172,30 @@ grid-area: icon;
|
||||
}
|
||||
|
||||
.area-display_name {
|
||||
user-select: auto;
|
||||
user-select: text;
|
||||
height:1.5em;
|
||||
margin:2px;
|
||||
margin-left:5px;
|
||||
overflow:hidden;
|
||||
grid-area: display_name;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
width:100%;
|
||||
flex-wrap:nowrap
|
||||
}
|
||||
|
||||
.area-acct {
|
||||
margin:2px;
|
||||
grid-area: acct;
|
||||
overflow:hidden;
|
||||
text-align:right;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
.flex-name{
|
||||
max-width:calc(100% - 60px);
|
||||
overflow:hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.area-toot {
|
||||
cursor:text;
|
||||
user-select: auto;
|
||||
margin:2px;
|
||||
margin-left:5px;
|
||||
grid-area: toot;
|
||||
}
|
||||
|
||||
@@ -159,18 +211,49 @@ grid-area: toot;
|
||||
}
|
||||
|
||||
.area-actions {
|
||||
margin:2px;
|
||||
grid-area: actions;
|
||||
padding:0;
|
||||
margin:0;
|
||||
top:-20px;
|
||||
display:flex;
|
||||
justify-content:space-around;
|
||||
width:250px;
|
||||
max-width:100%;
|
||||
grid-area: actions;
|
||||
}
|
||||
.area-vis {
|
||||
margin:2px;
|
||||
font-size:0.5rem !important;
|
||||
grid-area: vis;
|
||||
}
|
||||
|
||||
.action i{
|
||||
font-size:1rem;
|
||||
.area-side {
|
||||
display:flex;
|
||||
justify-content:flex-end;
|
||||
margin:2px;
|
||||
grid-area: side;
|
||||
}
|
||||
.btn-flat{
|
||||
color:var(--color);
|
||||
}
|
||||
.area-side i{
|
||||
margin-left:10px;
|
||||
}
|
||||
.viabadge{
|
||||
margin-top:10px;
|
||||
}
|
||||
.action i{
|
||||
font-size:1.2rem;
|
||||
margin-right:2px;
|
||||
}
|
||||
.action .fa-quote-right{
|
||||
margin-top: 2px;
|
||||
}
|
||||
.actct{
|
||||
color:var(--beforehover);
|
||||
}
|
||||
.actct:hover{
|
||||
color:var(--color);
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
.gray {
|
||||
color: gray;
|
||||
}
|
||||
@@ -207,6 +290,14 @@ font-size:1rem;
|
||||
text-overflow: ellipsis;
|
||||
height:calc(0.8em + 8px);
|
||||
}
|
||||
.cbadge-hover {
|
||||
color: var(--color);
|
||||
background-color: transparent;
|
||||
}
|
||||
.cbadge-hover:hover {
|
||||
color: #fff;
|
||||
background-color: #777;
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
margin-bottom: 0px;
|
||||
@@ -215,17 +306,17 @@ p:not(:last-child){
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.shared {
|
||||
background-color: #cfd8dc;
|
||||
background-color: var(--shared);
|
||||
}
|
||||
.emphasized {
|
||||
background-color: #81c784;
|
||||
background-color: var(--emphasized);
|
||||
}
|
||||
.udg {
|
||||
cursor: pointer;
|
||||
}
|
||||
.notice-box {
|
||||
top: 0;
|
||||
background-color:white;
|
||||
background-color:var(--notfbox);
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
width:100%;
|
||||
@@ -233,9 +324,9 @@ p:not(:last-child){
|
||||
z-index:500;
|
||||
padding:5px;
|
||||
display: grid;
|
||||
grid-template-columns: 40px 1fr 1fr 1fr;
|
||||
grid-template-columns: 40px 48px 1fr 24px;
|
||||
grid-template-rows: 30px 30px;
|
||||
grid-template-areas: 'notice notice_name notice_name notice_name' 'notice a1 a2 a3' 'notf-box notf-box notf-box notf-box';
|
||||
grid-template-areas: 'notice notice_name notice_name a2' 'notice a1 sta a3' 'notf-box notf-box notf-box notf-box';
|
||||
}
|
||||
.emp{
|
||||
font-weight: bold;
|
||||
@@ -258,7 +349,10 @@ p:not(:last-child){
|
||||
text-align: center;
|
||||
grid-area: a1;
|
||||
}
|
||||
|
||||
.area-sta {
|
||||
text-align: center;
|
||||
grid-area: sta;
|
||||
}
|
||||
.area-a2 {
|
||||
text-align: center;
|
||||
grid-area: a2;
|
||||
@@ -288,7 +382,7 @@ p:not(:last-child){
|
||||
.notf-box {
|
||||
position: fixed;
|
||||
right: 70px;
|
||||
background-color: white;
|
||||
background-color: var(--box);
|
||||
border: thin solid gray;
|
||||
z-index: 501;
|
||||
width: 400px;
|
||||
@@ -296,73 +390,134 @@ p:not(:last-child){
|
||||
min-height: 100px;
|
||||
max-height: 500px;
|
||||
}
|
||||
.column-hide{
|
||||
display:none;
|
||||
overflow:hidden;
|
||||
height:0;
|
||||
}
|
||||
.prof-img{
|
||||
border-radius: 3px;
|
||||
}
|
||||
.notf-icon{
|
||||
position: relative;
|
||||
top: -20px;
|
||||
width: 20px;
|
||||
left: 20px;
|
||||
}
|
||||
.notf-indv-box {
|
||||
width:100%;
|
||||
min-height: 100px;
|
||||
max-height: 400px;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
border: thin solid gray;
|
||||
border-bottom: 2px solid white;
|
||||
grid-area: notf-box;
|
||||
box-shadow:0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.3), 0px -10px 10px 0px rgba(0,0,0,0.3) inset;
|
||||
}
|
||||
#src-contents {
|
||||
min-height: 100px;
|
||||
max-height: 190px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.mention {
|
||||
color: black;
|
||||
cursor: text;
|
||||
}
|
||||
.type-b{
|
||||
display:none;
|
||||
}
|
||||
.modal-footer{
|
||||
background-color:var(--box);
|
||||
}
|
||||
.ballons{
|
||||
background-color: var(--box);
|
||||
position:absolute;
|
||||
bottom:0px;
|
||||
right:0px;
|
||||
}
|
||||
.toot a span.ellipsis:after{
|
||||
content:"...";
|
||||
}
|
||||
.toot a:not(.mention) span:last-of-type{
|
||||
display:none;
|
||||
}
|
||||
.tl-box .via-hide{
|
||||
display:none;
|
||||
}
|
||||
.vote{
|
||||
width: 100%;
|
||||
border: 1px solid;
|
||||
margin-top: 3px;
|
||||
padding: 1px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.fa-2x>.emoji-img {
|
||||
width: 36px!important;
|
||||
height: 36px!important
|
||||
}
|
||||
.fa-3x>.emoji-img {
|
||||
width: 54px!important;
|
||||
height: 54px!important
|
||||
}
|
||||
.fa-4x>.emoji-img {
|
||||
width: 72px!important;
|
||||
height: 72px!important
|
||||
}
|
||||
.fa-5x>.emoji-img {
|
||||
width: 90px!important;
|
||||
height: 90px!important
|
||||
}
|
||||
#lists-user{
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
max-height: 200px;
|
||||
}
|
||||
.votebtn{
|
||||
border: 1px solid;
|
||||
color: var(--bg);
|
||||
background-color: var(--beforehover);
|
||||
cursor:pointer;
|
||||
width: 50px;
|
||||
padding: 2px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
margin-top: 5px;
|
||||
border-radius: 10px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
.votebtn:hover{
|
||||
background-color:var(--color);
|
||||
}
|
||||
|
||||
/*black theme*/
|
||||
.blacktheme .notf-box,.blacktheme .modal-footer,.blacktheme #sidebar {
|
||||
background-color: #424242;
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(0, -100%, 0);
|
||||
transform: translate3d(0, -100%, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.blacktheme .btn-flat,.blacktheme .mention ,.blacktheme #sidebar a {
|
||||
color: white
|
||||
@keyframes fadeInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(-100%, 0, 0);
|
||||
transform: translate3d(-100%, 0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.blacktheme .shared {
|
||||
background-color: #004d40;
|
||||
.box-anime {
|
||||
animation-duration: 1s;
|
||||
animation-name: fadeInLeft;
|
||||
}
|
||||
.blacktheme .notice-box {
|
||||
background-color: #333333;
|
||||
|
||||
.cvo-anime {
|
||||
animation-duration: 0.1s;
|
||||
animation-name: fadeInDown;
|
||||
}
|
||||
.blacktheme .emphasized {
|
||||
background-color: #4e342e;
|
||||
}
|
||||
/*indigo theme*/
|
||||
.indigotheme .notf-box,.indigotheme .modal-footer,.indigotheme #sidebar {
|
||||
background-color: #0d1351;
|
||||
}
|
||||
.indigotheme .btn-flat,.indigotheme .mention ,.indigotheme #sidebar a {
|
||||
color: white
|
||||
}
|
||||
.indigotheme .shared {
|
||||
background-color: #004d40;
|
||||
}
|
||||
.indigotheme .notice-box {
|
||||
background-color: #0d47a1;
|
||||
}
|
||||
.indigotheme .emphasized {
|
||||
background-color: #4e342e;
|
||||
}
|
||||
/*brown theme*/
|
||||
.browntheme .notf-box,.browntheme .modal-footer,.browntheme #sidebar {
|
||||
background-color: #4e342e;
|
||||
}
|
||||
.browntheme .btn-flat,.browntheme .mention ,.browntheme #sidebar a {
|
||||
color: white
|
||||
}
|
||||
.browntheme .shared {
|
||||
background-color: #004d40;
|
||||
}
|
||||
.browntheme .notice-box {
|
||||
background-color: #4e342e;
|
||||
}
|
||||
.browntheme .emphasized {
|
||||
background-color: #0d47a1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,58 +1,92 @@
|
||||
/*アイコンをクリックした時とかにでてくるユーザーデータ*/
|
||||
#his-data {
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('/img/loading.svg');
|
||||
background-image: url('../../loading.svg');
|
||||
overflow-y: hidden;
|
||||
}
|
||||
#his-name{
|
||||
font-size:1.5rem;
|
||||
}
|
||||
#his-prof {
|
||||
float: left;
|
||||
width: 100px;
|
||||
margin-right:5px;
|
||||
}
|
||||
.his-float {
|
||||
float: left;
|
||||
width: calc(50% - 50px);
|
||||
height: 122px;
|
||||
overflow-y: scroll;
|
||||
padding: 5px;
|
||||
}
|
||||
#his-float-data{
|
||||
width: 400px;
|
||||
height: 100%;
|
||||
}
|
||||
#his-float-timeline{
|
||||
width: calc(100% - 400px);
|
||||
height:100%;
|
||||
overflow-y:hidden;
|
||||
}
|
||||
#his-basic-prof{
|
||||
min-height:130px;
|
||||
}
|
||||
#his-matching-list{
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#his-field{
|
||||
vertical-align: baseline;
|
||||
text-align:center;
|
||||
padding:0;
|
||||
}
|
||||
#his-field tr{
|
||||
height:1.5rem;
|
||||
}
|
||||
.his-field-title{
|
||||
height:1.5rem; padding:0; background-color:#757575; text-align:center;
|
||||
padding:5px;
|
||||
margin-bottom:1px;
|
||||
}
|
||||
.his-field-content{
|
||||
height:1.5rem; padding:0; padding-left:5px;
|
||||
}
|
||||
#his-data a span.ellipsis:after{
|
||||
content:"...";
|
||||
}
|
||||
#his-data a:not(.mention) span:last-of-type{
|
||||
display:none;
|
||||
}
|
||||
#his-data-show {
|
||||
margin: 50px;
|
||||
background-color:rgba(255, 255, 255, 0.9);
|
||||
width: calc(100% - 50px);
|
||||
height: calc(100% - 50px);
|
||||
margin: 20px;
|
||||
background-color:var(--his-data);
|
||||
width: calc(100% - 20px);
|
||||
height: calc(100% - 20px);
|
||||
margin-bottom: 0;
|
||||
padding: 5px;
|
||||
}
|
||||
.tab-content {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
height: calc(100% - 240px)
|
||||
}
|
||||
.my-data-width {
|
||||
width: 11.11%;
|
||||
width: 10%;
|
||||
}
|
||||
.active-back{
|
||||
background-color: #e6ee9c;
|
||||
background-color: var(--active);
|
||||
}
|
||||
|
||||
|
||||
/*black theme*/
|
||||
.blacktheme #his-data-show {
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
#his-name .emojione,#his-name .emoji-img{
|
||||
width: 20px;
|
||||
}
|
||||
.blacktheme .active-back{
|
||||
background-color:#757575;
|
||||
#his-plus-action .btn{
|
||||
width:170px
|
||||
}
|
||||
/*indigo theme*/
|
||||
.indigotheme #his-data-show {
|
||||
background-color: rgba(13, 19, 81,0.8);
|
||||
.custom-tabs{
|
||||
display:flex;
|
||||
}
|
||||
.indigotheme .active-back{
|
||||
background-color:#757575;
|
||||
.custom-tabs .custom-tab a{
|
||||
padding: 8px 12px;
|
||||
}
|
||||
/*brown theme*/
|
||||
.browntheme #his-data-show {
|
||||
background-color: rgba(62, 39, 35,0.8);
|
||||
}
|
||||
.browntheme .active-back{
|
||||
background-color:#757575;
|
||||
#his-des .mention{
|
||||
color: #039be5;
|
||||
cursor: pointer;
|
||||
}
|
||||
BIN
app/desk.icns
BIN
app/desk.icns
Binary file not shown.
BIN
app/icon.icns
Normal file
BIN
app/icon.icns
Normal file
Binary file not shown.
BIN
app/img/kyash.png
Normal file
BIN
app/img/kyash.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
11
app/img/pixel.svg
Normal file
11
app/img/pixel.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<defs>
|
||||
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
|
||||
<rect x="0" y="0" width="15" height="15" fill="#616161" />
|
||||
<rect x="0" y="15" width="15" height="15" fill="#000000" />
|
||||
<rect x="15" y="15" width="15" height="15" fill="#616161" />
|
||||
<rect x="15" y="0" width="15" height="15" fill="#000000" />
|
||||
</pattern>
|
||||
</defs>
|
||||
<rect width="300" height="300" fill="url(#pp)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 503 B |
11
app/img/pixel.white.svg
Normal file
11
app/img/pixel.white.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<defs>
|
||||
<pattern id="pp" x="0" y="0" width="30" height="30" patternUnits="userSpaceOnUse">
|
||||
<rect x="0" y="0" width="15" height="15" fill="#e0e0e0" />
|
||||
<rect x="0" y="15" width="15" height="15" fill="#ffffff" />
|
||||
<rect x="15" y="15" width="15" height="15" fill="#e0e0e0" />
|
||||
<rect x="15" y="0" width="15" height="15" fill="#ffffff" />
|
||||
</pattern>
|
||||
</defs>
|
||||
<rect width="300" height="300" fill="url(#pp)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 503 B |
BIN
app/img/sticker.png
Normal file
BIN
app/img/sticker.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
751
app/index.html
751
app/index.html
@@ -1,751 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ja">
|
||||
<head>
|
||||
<title>TheDesk</title>
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/post.css' rel='stylesheet' type='text/css'>
|
||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/sort.css' rel='stylesheet' type='text/css'>
|
||||
<link href='./css/twemoji-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first.js"></script>
|
||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/tips.js"></script>
|
||||
<script type="text/javascript" src="./js/common/time.js"></script>
|
||||
<script type="text/javascript" src="./js/common/version.js"></script>
|
||||
<script type="text/javascript" src="./js/common/keyshortcut.js"></script>
|
||||
<script type="text/javascript" src="./js/common/modal.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/jquery-ui.min.js"></script>
|
||||
<script>
|
||||
//必ずアプデ時のremove instance消して!
|
||||
var ver="Mio (ver.1 beta)";
|
||||
//betaを入れるとバージョンチェックしない
|
||||
var ver="beta";
|
||||
var acct_id=0;
|
||||
var tlid=0;
|
||||
verck(ver);
|
||||
</script>
|
||||
<textarea id="copy" style="top:-100px; position:fixed;"></textarea>
|
||||
<div id="tl">
|
||||
<!--TL-->
|
||||
<!--ドラッグハンドラ-->
|
||||
<div id="drag">
|
||||
<div id="drag-content" data-trans="drag_here">ここにドラッグして添付(ドラッグと同時にアップロードされます)
|
||||
<br>
|
||||
<button class="btn waves-effect" onclick="closedrop()" data-trans="close">閉じる</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--カラム追加-->
|
||||
<div id="add-box" class="hide z-depth-4 notf-box">
|
||||
<div class="input-field"><span data-trans="your_acct">アカウント選択</span>
|
||||
<br>
|
||||
<select id="add-acct-sel" class="acct-sel" style="color:black" onchange="addselCk()"></select>
|
||||
<label></label>
|
||||
</div>
|
||||
<div class="input-field">
|
||||
<div id="auth">
|
||||
<select id="type-sel" style="color:black">
|
||||
<option value="local" data-trans="local">ローカル</option>
|
||||
<option value="home" data-trans="home">ホーム</option>
|
||||
<option value="pub" data-trans="public">連合</option>
|
||||
<option value="mix" data-trans="integrated">統合(ローカルとホーム)</option>
|
||||
<option value="plus" data-trans="plus">統合(ローカルとブースト・リプライ)</option>
|
||||
<option value="notf" data-trans="notification">通知</option>
|
||||
</select>
|
||||
<label data-trans="show_tl">表示するタイムライン</label>
|
||||
</div>
|
||||
<div id="noauth" class="hide">表示するタイムライン
|
||||
<input id="noauth-url" type="text" class="validate" style="width:calc( 70% - 40px);" placeholder="e.g:mstdn.jp">
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn waves-effect blue " style="width:calc( 100% - 10px);" onclick="addColumn()" data-trans-i="add">
|
||||
<i class="material-icons left">add</i>追加
|
||||
</button>
|
||||
<br>
|
||||
<br>
|
||||
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="addToggle()" data-trans-i="close">
|
||||
<i class="material-icons left">close</i>閉じる
|
||||
</button>
|
||||
</div>
|
||||
<!--検索-->
|
||||
<div id="src-box" class="hide notf-box z-depth-4">
|
||||
<div class="input-field">
|
||||
<i class="material-icons prefix">search</i>
|
||||
<input id="src" type="text" class="validate" style="width:calc( 70% - 40px);">
|
||||
<br><span data-trans="src_tip">ハッシュタグを検索するときは#を抜いてください。</span>
|
||||
<br><span data-trans="src_acct_sel">検索に使用するアカウントを選択</span>
|
||||
<br>
|
||||
<div class="input-field">
|
||||
<select id="src-acct-sel" class="acct-sel"></select>
|
||||
<label></label>
|
||||
</div>
|
||||
<label for="src" data-trans="src">検索</label>
|
||||
<button class="btn waves-effect indigo" style="width:calc( 60% - 40px);" onclick="src()" data-trans-i="src">
|
||||
<i class="material-icons left">search</i>検索
|
||||
</button>
|
||||
</div>
|
||||
<div id="search">
|
||||
<div id="src-contents">
|
||||
</div>
|
||||
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="srcToggle()">
|
||||
<i class="material-icons left" data-trans-i="close">close</i>閉じる
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--並べ替え-->
|
||||
<div id="sort-box" class="hide notf-box z-depth-4">
|
||||
<ul id="sort"></ul>
|
||||
<button onclick="sort()" class="btn waves-effect light-blue nex" style="width:100%; max-width:200px;" data-trans-i="sort">
|
||||
<i class="material-icons left">sort</i>並べ替え設定
|
||||
</button>
|
||||
<button class="btn waves-effect orange " style="width:calc( 100% - 10px);" onclick="sortToggle()" data-trans-i="close">
|
||||
<i class="material-icons left">close</i>閉じる
|
||||
</button>
|
||||
</div>
|
||||
<!--リスト-->
|
||||
<div id="list-box" class="hide notf-box z-depth-4">
|
||||
アカウント選択
|
||||
<div class="input-field">
|
||||
<select id="list-acct-sel" class="acct-sel"></select>
|
||||
<label></label>
|
||||
</div>
|
||||
<button class="btn waves-effect indigo" style="width:calc( 60% - 40px);" onclick="list()" data-trans-i="lists">
|
||||
リスト一覧
|
||||
</button><br><br>
|
||||
<div id="lists"></div>
|
||||
<div id="lists-user"></div>
|
||||
<input type="text" style="width:150px" id="list-add" placeholder="タイトル">
|
||||
<button class="btn waves-effect" style="width:120px;" onclick="makeNewList()">新規作成</button>
|
||||
</div>
|
||||
<div id="main">
|
||||
<!--TLのTL-->
|
||||
<div id="timeline-container">
|
||||
まずは右のアカウントボタンからアカウントを追加してください。<br>
|
||||
右のカラム追加ボタンで認証せずにローカルタイムラインを見ることもできます。
|
||||
</div>
|
||||
<!--サイドバー-->
|
||||
<div id="sidebar">
|
||||
<div id="sidebar-top">
|
||||
<div class="side-dead"></div>
|
||||
<div class="big-menu" id="add-tgl">
|
||||
<a onclick="addToggle()" class="nex waves-effect" data-trans-i="add">
|
||||
<i class="material-icons nex big-icon" title="カラム追加" data-trans-title="column_add">add</i>
|
||||
</a>
|
||||
<br>
|
||||
<span class="side-label" data-trans="column_add">カラム追加</span>
|
||||
</div>
|
||||
<div class="big-menu">
|
||||
<a href="acct.html" class="nex waves-effect">
|
||||
<i class="material-icons nex big-icon" title="アカウントマネージャー(Ctrl+Shift+M)" data-trans-title="manager">account_circle</i>
|
||||
</a>
|
||||
<br>
|
||||
<span class="side-label" data-trans="manager_short">アカウント</span>
|
||||
</div>
|
||||
<div class="big-menu" id="sort-tgl">
|
||||
<a onclick="sortToggle()" class="nex waves-effect">
|
||||
<i class="material-icons nex big-icon" title="カラム一覧" data-trans-title="sort">sort</i>
|
||||
</a>
|
||||
<br>
|
||||
<span class="side-label" data-trans="sort">カラム一覧</span>
|
||||
</div>
|
||||
<div class="side-dead">
|
||||
</div>
|
||||
<div class="small-menu" id="src-tgl">
|
||||
<a onclick="srcToggle()" class="nex waves-effect">
|
||||
<i class="material-icons" title="検索" data-trans-title="src">search</i>
|
||||
<span class="side-label" data-trans="src">検索</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-menu">
|
||||
<a href="setting.html" class="nex waves-effect">
|
||||
<i class="material-icons nex" title="設定(Ctrl+Shift+S)" data-trans-title="setting">settings</i>
|
||||
<span class="side-label" data-trans="setting">設定</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-menu" id="list-tgl">
|
||||
<a onclick="listToggle()" class="nex waves-effect">
|
||||
<i class="material-icons" title="リスト" data-trans-title="list">view_headline</i>
|
||||
<span class="side-label" data-trans="list">リスト</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-menu">
|
||||
<a href="index.html" class="nex mize waves-effect">
|
||||
<i class="material-icons nex" title="スーパーリロード" data-trans-title="reload">refresh</i>
|
||||
<span class="side-label" data-trans="reload">再読込</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-menu">
|
||||
<a onclick="window.open('https://astarte.thedesk.top');" class="setting nex waves-effect" target="_blank" id="ranking-btn" style="display:none;">
|
||||
<i class="material-icons nex" title="アスタルテランキング">timeline</i>
|
||||
<span class="side-label">暇ラン</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="small-menu">
|
||||
<a onclick="nano()" class="nex waves-effect">
|
||||
<i class="material-icons" title="最小のマストドン。TheDesk Nano" data-trans-title="nano_desp">remove_from_queue</i>
|
||||
<span class="side-label" data-trans="nano">Nano</span>
|
||||
</a>
|
||||
</div>
|
||||
<div id="side-dead">
|
||||
</div>
|
||||
<div class="small-menu">
|
||||
<a onclick="xpand()" class="nex waves-effect">
|
||||
<i class="material-icons" title="サイドバーの開閉" data-trans-title="sidebar_xpand" id="x-btn">keyboard_arrow_right</i>
|
||||
<span class="side-label" data-trans="sidebar_xpand_short">たたむ</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sidebar-btm">
|
||||
<!--最小化-->
|
||||
<div id="menu-btn" class="big-menu" onclick="show()" style="display:none;">
|
||||
<a class="waves-effect">
|
||||
<i class="material-icons big-icon">mode_edit</i>
|
||||
<br>
|
||||
<span class="side-label" data-trans="post">投稿</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="post-box" class="z-depth-3">
|
||||
<!--トゥートボックス-->
|
||||
|
||||
<div class="row" style="margin-bottom:0;">
|
||||
</span>
|
||||
<div class="" style="float:left;">
|
||||
<a onclick="profShow()" style="vertical-align:-2.5rem;" class="pointer mize">
|
||||
<img src="./img/missing.svg" id="acct-sel-prof" title="選択中のプロフィール表示(Ctrl+Shift+P)" data-trans-title="post_box_prof" width="24px">
|
||||
</a>
|
||||
</div>
|
||||
<div class="input-field mize" style="float:left; width:calc(100% - 24px)">
|
||||
<select id="post-acct-sel" class="acct-sel" onchange="mdCheck()"></select>
|
||||
</div>
|
||||
<span class="cancel">
|
||||
<i class="material-icons waves-effect" onclick="hide()" title="このボックスを閉じる(X)" data-trans-title="post_box_close">cancel</i>
|
||||
<i class="material-icons waves-effect mini-btn" onclick="mini()" title="このボックスを最小化" data-trans-title="post_box_mini">expand_more</i>
|
||||
</span>
|
||||
<!--Markdown-->
|
||||
<div class="row" style="margin-bottom:0">
|
||||
<div class="markdown mize">
|
||||
<div class="col s12">
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('b')" title="太字(Ctrl+B)テキストボックス内を選択してから押すと囲みます。">format_bold</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('i')" title="斜字(Ctrl+I)テキストボックス内を選択してから押すと囲みます。">format_italic</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('u')" title="下線(Ctrl+U)テキストボックス内を選択してから押すと囲みます。">format_underlined</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('s')" title="取り消し(Ctrl+S)テキストボックス内を選択してから押すと囲みます。">strikethrough_s</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdown('>','no','yes')" title="引用">format_quote</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdown('#','no','yes')" title="見出し">short_text</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdown('`','yes','no')" title="コード挿入 テキストボックス内を選択してから押すと囲みます。">code</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdown('- ','yes','yes')" title="箇条書きリスト">format_list_bulleted</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdown('1. ','yes','yes')" title="番号付きリスト">format_list_numbered</i>
|
||||
<i class="pointer setting fa fa-subscript waves-effect" onclick="markdown('__','yes','no','before')" title="下付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
|
||||
<i class="pointer setting fa fa-superscript waves-effect" onclick="markdown('_','yes','no','before')" title="上付き文字 テキストボックス内を選択してから押すと囲みます。" style="font-size:1.5rem"></i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('spin')" title="回転 テキストボックス内を選択してから押すと囲みます。">autorenew</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('pulse')" title="点滅 テキストボックス内を選択してから押すと囲みます。">flare</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=vertical')" title="上下反転 テキストボックス内を選択してから押すと囲みます。">swap_vert</i>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('flip=horizontal')" title="左右反転 テキストボックス内を選択してから押すと囲みます。">swap_horiz</i>
|
||||
<span class="sml gray pointer waves-effect">
|
||||
<a onclick="mdToggle()">Markdownエディタを隠す</a>
|
||||
</span>
|
||||
<br>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('size')" title="文字サイズ変更 テキストボックス内を選択してから押すと囲みます。">format_size</i>
|
||||
<input id="size" style="width: calc(50% - 20px); margin: 0; height: 24px;" value="12">px
|
||||
<i class="material-icons pointer setting waves-effect" onclick="tagsel('colorhex')" title="文字色変更 テキストボックス内を選択してから押すと囲みます。">color_lens</i>
|
||||
<input id="colorhex" style="width: calc(50% - 50px); margin: 0; height: 24px;" type="color">
|
||||
<br>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdownLink()" title="リンク挿入">link</i>
|
||||
<input id="linkt" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクテキスト">
|
||||
<input id="link2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="リンクアドレス">
|
||||
<br>
|
||||
<i class="material-icons pointer setting waves-effect" onclick="markdownImage()" title="インライン画像挿入">image</i>
|
||||
<input id="image" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="代替テキスト">
|
||||
<input id="image2" style="width: calc(50% - 20px); margin: 0; height: 24px;" placeholder="画像アドレス">
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field col s12" id="preview-field" style="margin-top: 0;">
|
||||
<div id="md-preview">
|
||||
</div>
|
||||
<span class="sml gray pointer">
|
||||
<a onclick="previewEdit()">Edit</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="input-field col s12" id="toot-field" style="margin-top: 0;">
|
||||
|
||||
<textarea id="textarea" class="materialize-textarea unmize" style="margin-bottom:0;" data-length="500"></textarea>
|
||||
<label for="textarea" data-trans="toot">トゥート</label>
|
||||
<br>
|
||||
<span class="sml gray pointer more-show markdown mize" id="preview-btn">
|
||||
<a onclick="preview()">Preview</a>
|
||||
</span>
|
||||
<span class="sml gray pointer more-show anti-markdown hide mize">
|
||||
<a onclick="mdToggle()">Markdownエディタを表示</a>
|
||||
</span>
|
||||
<span id="suggest"></span>
|
||||
</div>
|
||||
<div class="col s12 mize" style="margin-top: 0; display:flex; justify-content: space-between">
|
||||
<i class="waves-effect gray material-icons" id="nsfw" title="画像に制限を付与" onclick="nsfw()">visibility_off</i>
|
||||
<i class="waves-effect gray material-icons purple-text dropdown-button" data-activates='dropdown1' id="vis-icon">public</i>
|
||||
<a class="waves-effect gray" id="cw" onclick="cw()" title="コンテンツワーニング(トゥートを表示する前にメッセージで隠す)">CW</a>
|
||||
<span><span id="imgup"></span><span id="imgsel"><i class="waves-effect material-icons gray" onclick="fileselect()" title="ファイルを選択">photo_library</i></span></span>
|
||||
<i class="waves-effect gray material-icons" onclick="adobe()" title="Adobeフォトエディタ">format_shapes</i>
|
||||
<i class="waves-effect gray material-icons" onclick="emoji()" title="絵文字を挿入">tag_faces</i>
|
||||
<a onclick="nowplaying('spotify')" class="pointer waves-effect gray" title="Spotify Now Playing(アカウント連携が必要です)Ctrl+Shift+N"><i class="fa fa-spotify" style="font-size:24px;"></i></a>
|
||||
<i class="material-icons nex gray waves-effect" title="トゥートボックスのクリア(Ctrl+Shit+C)" data-trans-title="post_box_clear" id="clear">clear</i>
|
||||
</div>
|
||||
<div class="col s11 mize" style="margin-bottom:5px; padding:0;">
|
||||
|
||||
<span id="preview" class="mize"></span>
|
||||
<span class=" sml mize"><span data-trans="reply">返信モード</span>:
|
||||
<span id="rec">いいえ</span>/<span data-trans="file">添付</span>:
|
||||
<span id="mec">なし</span>/<span data-trans="vis">公開範囲</span>:
|
||||
<span id="vis">public</span>
|
||||
</span>
|
||||
<br>
|
||||
<input type="text" id="cw-text" placeholder="警告文" class="mize">
|
||||
</div>
|
||||
</div>
|
||||
<!-- 公開範囲 Dropdown Structure -->
|
||||
<ul id='dropdown1' class='dropdown-content'>
|
||||
<li style="font-size: 16px; display: block; line-height: 22px; padding: 14px 16px;">公開範囲指定</li>
|
||||
<li>
|
||||
<a onclick="vis('public')">公開(Public)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a onclick="vis('unlisted')">未収載(Unlisted)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a onclick="vis('private')" id="private-button">非公開(Private)</a>
|
||||
</li>
|
||||
<li id="limited-button" class="hide">
|
||||
<a onclick="vis('limited')">限定公開(Limited)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a onclick="vis('direct')" class="disabled direct">ダイレクト(Direct)</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!--hidden area-->
|
||||
<input type="hidden" id="reply">
|
||||
<input type="hidden" id="media">
|
||||
<!--END hidden area-->
|
||||
</div>
|
||||
<div id="toot-btn-field">
|
||||
<button class="btn waves-effect indigo unmize" style="width:calc(100% - 10px); padding:0; margin-top:10px;" onclick="post()" id="toot-post-btn">トゥート</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--絵文字ピッカー-->
|
||||
<div id="emoji" class="hide shared z-depth-4">
|
||||
<span class="gray sml">インスタンスによって実装が異なります。
|
||||
<i>
|
||||
<a onclick="emojiGet('true')" class="pointer">絵文字更新</a>
|
||||
</i>
|
||||
<br>
|
||||
</span>
|
||||
<input type="text" id="emoji-suggest" placeholder="カスタム絵文字検索">
|
||||
<div id="emoji-list" class="" style="">
|
||||
</div>
|
||||
<div class="emoji-control center">
|
||||
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('before')" id="emoji-before">
|
||||
<i class="material-icons">navigate_before</i>
|
||||
</button>
|
||||
<span id="emoji-count"></span>/
|
||||
<span id="emoji-sum"></span>
|
||||
<button class="btn waves-effect blue" style="width:30%; padding:0;" onclick="emojiList('next')" id="emoji-next">
|
||||
<i class="material-icons">navigate_next</i>
|
||||
</button>
|
||||
</div>
|
||||
<div id="default-emoji">
|
||||
<span id="now-emoji"></span>一覧を表示中<br><span class="gray sml">一部デフォルト絵文字は入力・描画できません。(国旗系など)</span>
|
||||
<br>
|
||||
<a onclick="customEmoji()" class="pointer waves-effect" title="カスタム絵文字">
|
||||
<i class="material-icons">add</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('people')" class="pointer waves-effect" title="ひと">
|
||||
<i class="material-icons">people</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('nature')" class="pointer waves-effect" title="自然">
|
||||
<i class="material-icons">local_florist</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('food')" class="pointer waves-effect" title="食べ物">
|
||||
<i class="material-icons">restaurant</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('activity')" class="pointer waves-effect" title="活動">
|
||||
<i class="material-icons">directions_run</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('place')" class="pointer waves-effect" title="場所">
|
||||
<i class="material-icons">directions_car</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('object')" class="pointer waves-effect" title="もの">
|
||||
<i class="material-icons">attach_file</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('symbol')" class="pointer waves-effect" title="記号">
|
||||
<i class="material-icons">gesture</i>
|
||||
</a>
|
||||
<a onclick="defaultEmoji('flag')" class="pointer waves-effect" title="国旗">
|
||||
<i class="material-icons">flag</i>
|
||||
</a>
|
||||
<a onclick="faicon()" class="pointer waves-effect" title="faicon" id="faicon-btn">
|
||||
<i class="fa fa-fort-awesome"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal Structure Tootdata-->
|
||||
<div id="tootmodal" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<ul class="collapsible" data-collapsible="accordion" id="det-col">
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="material-icons">arrow_upward</i>これより前の会話
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-reply">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header" id="activator">
|
||||
<i class="material-icons">more_horiz</i>対象のトゥート
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-this">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="material-icons">arrow_downward</i>これよりあとの会話
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-after">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="material-icons">people_outline</i>これより前のLocal TL(エアリプソース確認)
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-before">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="material-icons">person_outline</i>これより前のユーザーTL(BTソース確認)
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="user-before">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="material-icons">star</i>このトゥートをお気に入りに登録した人
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-fav">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header">
|
||||
<i class="text-darken-3 fa fa-retweet"></i>このトゥートをブーストした人
|
||||
</div>
|
||||
<div class="collapsible-body toot-reset" id="toot-rt">
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
他のアカウントを使用(<i class="fa fa-retweet"></i>/<i class="fa fa-star"></i>の解除はできません)<br>
|
||||
<div class="row">
|
||||
<div class="col s4">
|
||||
<select id="status-acct-sel" class="acct-sel"></select>
|
||||
</div>
|
||||
<div class="col s2">
|
||||
<button class="dropdown-button btn waves-effect" style="width:100%;" onclick="staEx('reply')"><i class="fa fa-share left"></i>返信</button>
|
||||
</div>
|
||||
<div class="col s2">
|
||||
<button class="dropdown-button btn waves-effect indigo" style="width:100%;" onclick="staEx('rt')"><i class="fa fa-retweet left"></i>ブースト</button>
|
||||
</div>
|
||||
<div class="col s3">
|
||||
<button class="dropdown-button btn waves-effect orange" style="width:100%;" onclick="staEx('fav')"><i class="fa fa-star left"></i>お気に入り登録</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="toot-tools">
|
||||
</div>
|
||||
<div id="toot-after">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="waves-effect waves-green btn-flat" onclick="brws()">ブラウザで開く</a>
|
||||
<a href="#!" class="waves-effect waves-green btn-flat" onclick="shot()">スクリーンショット</a>
|
||||
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy()">URLをコピー</a>
|
||||
<a href="#!" class="waves-effect waves-green btn-flat" onclick="cbCopy('emb')">埋め込む</a>
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal Structure Userdata -->
|
||||
<div id="his-data" class="modal bottom-sheet modal-fixed-footer" style="max-height:750px; height:90%;">
|
||||
<div id="his-data-content" class="modal-content" style="padding-bottom: 0;overflow-y:hidden;">
|
||||
<div id="his-data-show">
|
||||
<img src="./img/loading.svg" id="his-prof" style="">
|
||||
<div class="his-float">
|
||||
<span id="his-name" style="font-size:1.5rem">Loading...</span>
|
||||
<br>@
|
||||
<span id="his-acct"></span>
|
||||
<span class="gray" id="his-relation"></span>
|
||||
<br>
|
||||
<span class="cbadge">
|
||||
<span id="his-sta"></span>トゥート
|
||||
</span>
|
||||
<span class="cbadge">フォロー:
|
||||
<span id="his-follow"></span>
|
||||
</span>
|
||||
<span class="cbadge">フォロワー:
|
||||
<span id="his-follower"></span>
|
||||
</span>
|
||||
<span class="cbadge" style="max-width:150px; width:150px; ">Since:
|
||||
<span id="his-since"></span>
|
||||
</div>
|
||||
<div class="his-float">
|
||||
<span id="his-des"></span>
|
||||
<br>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12" id="my-data-nav">
|
||||
<ul class="custom-tabs transparent">
|
||||
<li class="custom-tab col my-data-width active-back">
|
||||
<a go="#his-tl">タイムライン</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width">
|
||||
<a go="#his-follow-list">フォロー</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width">
|
||||
<a go="#his-follower-list">フォロワー</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-his-data">
|
||||
<a go="#his-action">他アカウントで操作</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-his-data">
|
||||
<a go="#his-list">リスト</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-fav-list">お気に入り登録</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-blocking-list">ブロック</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-muting-list">ミュート</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-domain-list">ドメインブロック</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-prof-list">プロフィール編集</a>
|
||||
</li>
|
||||
<li class="custom-tab col my-data-width only-my-data">
|
||||
<a go="#his-request-list">フォローリクエスト</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="his-tl" class="col s12 tab-content">
|
||||
<div id="his-tl-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="utl('--now','more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-follow-list" class="col s12 tab-content">
|
||||
<div id="his-follow-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="flw('--now','more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-follower-list" class="col s12 tab-content">
|
||||
<div id="his-follower-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="fer('--now','more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-action" class="col s12 tab-content">
|
||||
他のアカウントを使用してフォロー(解除はできません)<br>
|
||||
<div style="max-width:500px;"><select id="user-acct-sel" class="acct-sel"></select></div>で
|
||||
<a href="#!" class="waves-effect btn" onclick="follow('selector','true')">フォロー</a><br>
|
||||
または<br>
|
||||
<a href="#!" class="waves-effect btn" onclick="udgEx('selector', 'selector')">プロフを開く</a><br>
|
||||
</div>
|
||||
<div id="his-list" class="col s12 tab-content">
|
||||
<div id="his-lists-a"></div>
|
||||
|
||||
<div id="his-lists-b"></div>
|
||||
</div>
|
||||
<div id="his-fav-list" class="col s12 tab-content">
|
||||
<div id="his-fav-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect" style="width:100%; padding:0;" onclick="showFav('more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-blocking-list" class="col s12 tab-content">
|
||||
<div id="his-blocking-list-contents"class="cont-series" >
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showBlo('more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-muting-list" class="col s12 tab-content">
|
||||
<div id="his-muting-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showMut('more')">もっと</button>
|
||||
</div>
|
||||
<div id="his-domain-list" class="col s12 tab-content">
|
||||
<div id="his-domain-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showDom('more')">もっと</button>ブロックするドメイン
|
||||
<br>
|
||||
<input type="text" placeholder="example.com" id="domainblock">
|
||||
<button class="btn waves-effect" onclick="addDomainblock()">ブロック</button>
|
||||
<br>
|
||||
</div>
|
||||
<div id="his-prof-list" class="col s12 tab-content">名前
|
||||
<br>
|
||||
<input type="text" placeholder="名前" id="his-name-val" width="max-width:150px;">
|
||||
<br>自己紹介
|
||||
<br>
|
||||
<div class="input-field col s12">
|
||||
<textarea placeholder="自己紹介" id="his-des-val" class="materialize-textarea"></textarea>
|
||||
<label for="his-des-val">自己紹介</label>
|
||||
</div>
|
||||
<button onclick="profedit()" class="btn waves-effect indigo">適用</button>
|
||||
<br>
|
||||
<br>プロフィール画像変更:
|
||||
<span id="prof-change">
|
||||
<input type="file" onchange="imgChange(this,'avatar')">
|
||||
</span>
|
||||
<br>ヘッダー画像変更:
|
||||
<span id="header-change">
|
||||
<input type="file" onchange="imgChange(this,'header')">
|
||||
</span>
|
||||
</div>
|
||||
<div id="his-request-list" class="col s12 tab-content">
|
||||
<div id="his-request-list-contents" class="cont-series">
|
||||
</div>
|
||||
<button class="btn waves-effect " style="width:100%; padding:0;" onclick="showReq('more')">もっと</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="modal-action waves-effect waves-green btn-flat" id="his-history-btn" onclick="historyShow()">一つ前のユーザーデータ</button>
|
||||
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-follow-btn" onclick="follow()">フォロー</a>
|
||||
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-mute-btn" onclick="mute()">ミュート</a>
|
||||
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-block-btn" onclick="block()">ブロック</a>
|
||||
<a href="#!" class="modal-action waves-effect waves-green btn-flat" id="his-emp-btn" onclick="empUser()">ユーザー強調</a>
|
||||
<a href="#!" class="modal-action waves-effect waves-green btn-flat" onclick="hisclose()">Close</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal Structure Image-->
|
||||
<div id="imagemodal" class="modal modal-fixed-footer" style="min-width:550px">
|
||||
<div class="modal-content">
|
||||
<div id="imagewrap">
|
||||
<img src="" id="imgmodal">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
DL:<span id="imgprog"></span>%
|
||||
<a class="waves-effect white-text" onclick="zoom(2)">
|
||||
<i class="material-icons">zoom_in</i>
|
||||
</a>
|
||||
<a class="waves-effect white-text" onclick="zoom(0.5)">
|
||||
<i class="material-icons">zoom_out</i>
|
||||
</a>
|
||||
<button class="btn waves-effect purple" onclick="dlImg()">
|
||||
<i class="material-icons">file_download</i>
|
||||
</button>
|
||||
<button class="btn waves-effect brown" onclick="detFromImg()">当該トゥート</button>
|
||||
<button class="btn waves-effect orange" onclick="imgCont('prev')" id="image-prev">
|
||||
<i class="material-icons">keyboard_arrow_left</i>
|
||||
</button>
|
||||
<button class="btn waves-effect orange" onclick="imgCont('next')" id="image-next">
|
||||
<i class="material-icons">keyboard_arrow_right</i>
|
||||
</button>
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">
|
||||
<i class="material-icons">close</i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal Structure Video-->
|
||||
<div id="videomodal" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls >
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||
</div>
|
||||
</div>
|
||||
<!--PiP-->
|
||||
<div id="pip" class="hide pip-bottom pip-left">
|
||||
<i class="material-icons pip-horiz pointer" onclick="pipHoriz()">chevron_right</i>
|
||||
<i class="material-icons pip-vert pointer" onclick="pipVert()">expand_less</i>
|
||||
<i class="material-icons pointer" onclick="endPip()">close</i>
|
||||
<div id="pip-content">
|
||||
</div>
|
||||
</div>
|
||||
<!--左下メッセージ-->
|
||||
<div id="message">
|
||||
</div>
|
||||
<!--Radio Happy(Yui) Taku Inoue-->
|
||||
<audio src="" id="radio"></audio>
|
||||
<!--JS-->
|
||||
<script type="text/javascript" src="./js/common/about.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/parse.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/scroll.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/tl.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/card.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/date.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/notification.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/datails.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/mix.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/src.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/filter.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/tag.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/list.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/post-box.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/layout.js"></script>
|
||||
<script type="text/javascript" src="./js/login/login.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/img.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/pip.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/sort.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/spotify.js"></script>
|
||||
<script type="text/javascript" src="./js/post/post.js"></script>
|
||||
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
|
||||
<script type="text/javascript" src="./js/post/secure.js"></script>
|
||||
<script type="text/javascript" src="./js/post/img.js"></script>
|
||||
<script type="text/javascript" src="./js/post/status.js"></script>
|
||||
<script type="text/javascript" src="./js/post/emoji.js"></script>
|
||||
<script type="text/javascript" src="./js/post/suggest.js"></script>
|
||||
<script type="text/javascript" src="./js/post/bb-md.js"></script>
|
||||
<script type="text/javascript" src="./js/userdata/showOnTL.js"></script>
|
||||
<script type="text/javascript" src="./js/userdata/his-data.js"></script>
|
||||
<script type="text/javascript" src="./js/userdata/prof-edit.js"></script>
|
||||
<script type="text/javascript" src="./js/emoji/emojione.js"></script>
|
||||
<script type="text/javascript" src="./js/emoji/emojipack.js"></script>
|
||||
<script type="text/javascript" src="./js/emoji/default-emoji.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/end.js"></script>
|
||||
<!--
|
||||
<script type="text/javascript" src="https://dme0ih8comzn4.cloudfront.net/imaging/v2/editor.js"></script>
|
||||
<script type="text/javascript">
|
||||
//Adobeエディターのセットアップ関数
|
||||
function set_adbe_image(){
|
||||
//<body>内の画像要素を取得
|
||||
var image = document.getElementById('imgmodal');
|
||||
//画像編集エディタを利用するための準備
|
||||
var Editor = new Aviary.Feather({
|
||||
apiKey: 'ffee425017ab44b18ce95dab98a5cdc1',
|
||||
language: 'ja',
|
||||
onSave: function(imageID, newURL) {
|
||||
console.log(newURL);
|
||||
},
|
||||
});
|
||||
//画像要素をクリックしたら、「編集エディタ」を表示
|
||||
image.addEventListener('click', function () {
|
||||
Editor.launch({
|
||||
//<img>内のidとsrcを取得
|
||||
image: image.id,
|
||||
url: image.src
|
||||
});
|
||||
});
|
||||
}
|
||||
//エディター動作割り当てる
|
||||
set_adbe_image();
|
||||
</script>-->
|
||||
5
app/index.start.html
Normal file
5
app/index.start.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" />
|
||||
</head>
|
||||
@@ -3,20 +3,40 @@ $(function($) {
|
||||
$(window).keydown(function(e) {
|
||||
var hasFocus = $('input').is(':focus');
|
||||
var hasFocus2 = $('textarea').is(':focus');
|
||||
if(document.getElementById("webview")){
|
||||
if($("#webviewsel:checked").val()){
|
||||
var wv=false;
|
||||
}else{
|
||||
var wv=true;
|
||||
}
|
||||
}else{
|
||||
var wv=true;
|
||||
}
|
||||
//Ctrl+Shift+Enter:Lgen
|
||||
if (event.metaKey || event.ctrlKey && wv) {
|
||||
if (event.shiftKey) {
|
||||
if (e.keyCode === 13) {
|
||||
post('local');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//Ctrl+Enter:投稿
|
||||
if (event.ctrlKey) {
|
||||
if (event.metaKey || event.ctrlKey && wv) {
|
||||
if (e.keyCode === 13) {
|
||||
post();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Shift+Enter:Markdown
|
||||
if (event.shiftKey) {
|
||||
//Alt+Enter:セカンダリー
|
||||
if (event.metaKey || event.altKey && wv) {
|
||||
if (e.keyCode === 13) {
|
||||
brInsert(" \n");
|
||||
sec();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//Shift+Space:Markdownゼロ幅スペース
|
||||
if (event.shiftKey) {
|
||||
if (e.keyCode === 32) {
|
||||
@@ -25,17 +45,17 @@ $(function($) {
|
||||
}
|
||||
}
|
||||
//Esc:消す
|
||||
if (e.keyCode === 27) {
|
||||
if (e.keyCode === 27 && wv) {
|
||||
hide();
|
||||
return false;
|
||||
}
|
||||
//F5リロード
|
||||
if (e.keyCode === 116) {
|
||||
if (e.keyCode === 116 && wv) {
|
||||
location.href = "index.html";
|
||||
return false;
|
||||
}
|
||||
//Ctrl+R:ランキング
|
||||
if (event.ctrlKey) {
|
||||
if ((event.metaKey || event.ctrlKey) && wv) {
|
||||
if (e.keyCode === 82) {
|
||||
if(localStorage.getItem("kirishima")){
|
||||
window.open("https://astarte.thedesk.top");
|
||||
@@ -43,26 +63,35 @@ $(function($) {
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+C:全消し
|
||||
if (event.ctrlKey && event.shiftKey) {
|
||||
if (((event.metaKey || event.ctrlKey) && event.shiftKey )&& wv) {
|
||||
if (e.keyCode === 67) {
|
||||
clear();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+N:NowPlaying
|
||||
if (event.ctrlKey && event.shiftKey) {
|
||||
if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
|
||||
if (e.keyCode === 78) {
|
||||
show();
|
||||
nowplaying()
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//input/textareaにフォーカスなし時
|
||||
if (!hasFocus && !hasFocus2) {
|
||||
if ((!hasFocus && !hasFocus2 ) && wv) {
|
||||
if(!wv){
|
||||
return true;
|
||||
}
|
||||
//Ctrl+V:いつもの
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
if (e.keyCode === 86) {
|
||||
show();
|
||||
}
|
||||
}
|
||||
//X:開閉
|
||||
if (e.keyCode === 88) {
|
||||
if ($("#post-box").hasClass("hidenbox")) {
|
||||
if (!$("#post-box").hasClass("appear")) {
|
||||
show();
|
||||
$('textarea').focus();
|
||||
} else {
|
||||
hide();
|
||||
}
|
||||
@@ -70,47 +99,49 @@ $(function($) {
|
||||
}
|
||||
//N:新トゥート
|
||||
if (e.keyCode === 78) {
|
||||
if ($("#post-box").hasClass("hidenbox")) {
|
||||
if (!$("#post-box").hasClass("appear")) {
|
||||
show();
|
||||
}
|
||||
$('textarea').focus();
|
||||
return false;
|
||||
}
|
||||
//E:拡張On/Off
|
||||
if (e.keyCode === 69) {
|
||||
zoomBox();
|
||||
return false;
|
||||
//Ctrl+E:全ての通知未読を既読にする
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
if (e.keyCode === 69) {
|
||||
allNotfRead();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Ctrl+Space:読み込み
|
||||
if (event.ctrlKey) {
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
if (e.keyCode === 32) {
|
||||
parseColumn();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+S:設定
|
||||
if (event.ctrlKey && event.shiftKey) {
|
||||
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode === 83) {
|
||||
location.href = "setting.html";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+M:アカマネ
|
||||
if (event.ctrlKey && event.shiftKey) {
|
||||
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode === 77) {
|
||||
location.href = "acct.html";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+P:プロフ
|
||||
if (event.ctrlKey && event.shiftKey) {
|
||||
if ((event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode === 80) {
|
||||
profShow()
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//数字:TL
|
||||
if (event.ctrlKey) {
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
if (e.keyCode >= 49 && e.keyCode <= 57) {
|
||||
var kz=e.keyCode-49;
|
||||
goColumn(kz);
|
||||
@@ -119,8 +150,8 @@ $(function($) {
|
||||
}
|
||||
}
|
||||
//textareaフォーカス時
|
||||
if (hasFocus2) {
|
||||
if (event.ctrlKey) {
|
||||
if (hasFocus2 && wv) {
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
//Ctrl+B:太字
|
||||
if (e.keyCode === 66) {
|
||||
tagsel('b');
|
||||
@@ -141,16 +172,24 @@ $(function($) {
|
||||
tagsel('s');
|
||||
return false;
|
||||
}
|
||||
//C+S+(No):ワンクリ
|
||||
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode >= 49 && e.keyCode <= 51) {
|
||||
var no=e.keyCode-48;
|
||||
if(localStorage.getItem("oks-"+no)){$("#textarea").val($("#textarea").val()+localStorage.getItem("oks-"+no))}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//イメージビューワー切り替え
|
||||
if (e.keyCode === 37) {
|
||||
if (e.keyCode === 37 &&wv) {
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('prev');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (e.keyCode === 39) {
|
||||
if (e.keyCode === 39 && wv) {
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('next');
|
||||
return false;
|
||||
|
||||
33
app/js/common/sha256.js
Normal file
33
app/js/common/sha256.js
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
A JavaScript implementation of the SHA family of hashes, as
|
||||
defined in FIPS PUB 180-4 and FIPS PUB 202, as well as the corresponding
|
||||
HMAC implementation as defined in FIPS PUB 198a
|
||||
|
||||
Copyright 2008-2018 Brian Turek, 1998-2009 Paul Johnston & Contributors
|
||||
Distributed under the BSD License
|
||||
See http://caligatio.github.com/jsSHA/ for more information
|
||||
*/
|
||||
'use strict';(function(I){function w(c,a,d){var l=0,b=[],g=0,f,n,k,e,h,q,y,p,m=!1,t=[],r=[],u,z=!1;d=d||{};f=d.encoding||"UTF8";u=d.numRounds||1;if(u!==parseInt(u,10)||1>u)throw Error("numRounds must a integer >= 1");if(0===c.lastIndexOf("SHA-",0))if(q=function(b,a){return A(b,a,c)},y=function(b,a,l,f){var g,e;if("SHA-224"===c||"SHA-256"===c)g=(a+65>>>9<<4)+15,e=16;else throw Error("Unexpected error in SHA-2 implementation");for(;b.length<=g;)b.push(0);b[a>>>5]|=128<<24-a%32;a=a+l;b[g]=a&4294967295;
|
||||
b[g-1]=a/4294967296|0;l=b.length;for(a=0;a<l;a+=e)f=A(b.slice(a,a+e),f,c);if("SHA-224"===c)b=[f[0],f[1],f[2],f[3],f[4],f[5],f[6]];else if("SHA-256"===c)b=f;else throw Error("Unexpected error in SHA-2 implementation");return b},p=function(b){return b.slice()},"SHA-224"===c)h=512,e=224;else if("SHA-256"===c)h=512,e=256;else throw Error("Chosen SHA variant is not supported");else throw Error("Chosen SHA variant is not supported");k=B(a,f);n=x(c);this.setHMACKey=function(b,a,g){var e;if(!0===m)throw Error("HMAC key already set");
|
||||
if(!0===z)throw Error("Cannot set HMAC key after calling update");f=(g||{}).encoding||"UTF8";a=B(a,f)(b);b=a.binLen;a=a.value;e=h>>>3;g=e/4-1;if(e<b/8){for(a=y(a,b,0,x(c));a.length<=g;)a.push(0);a[g]&=4294967040}else if(e>b/8){for(;a.length<=g;)a.push(0);a[g]&=4294967040}for(b=0;b<=g;b+=1)t[b]=a[b]^909522486,r[b]=a[b]^1549556828;n=q(t,n);l=h;m=!0};this.update=function(a){var c,f,e,d=0,p=h>>>5;c=k(a,b,g);a=c.binLen;f=c.value;c=a>>>5;for(e=0;e<c;e+=p)d+h<=a&&(n=q(f.slice(e,e+p),n),d+=h);l+=d;b=f.slice(d>>>
|
||||
5);g=a%h;z=!0};this.getHash=function(a,f){var d,h,k,q;if(!0===m)throw Error("Cannot call getHash after setting HMAC key");k=C(f);switch(a){case "HEX":d=function(a){return D(a,e,k)};break;case "B64":d=function(a){return E(a,e,k)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{h=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("format must be HEX, B64, BYTES, or ARRAYBUFFER");
|
||||
}q=y(b.slice(),g,l,p(n));for(h=1;h<u;h+=1)q=y(q,e,0,x(c));return d(q)};this.getHMAC=function(a,f){var d,k,t,u;if(!1===m)throw Error("Cannot call getHMAC without first setting HMAC key");t=C(f);switch(a){case "HEX":d=function(a){return D(a,e,t)};break;case "B64":d=function(a){return E(a,e,t)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("outputFormat must be HEX, B64, BYTES, or ARRAYBUFFER");
|
||||
}k=y(b.slice(),g,l,p(n));u=q(r,x(c));u=y(k,e,h,u);return d(u)}}function m(){}function D(c,a,d){var l="";a/=8;var b,g;for(b=0;b<a;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1),l+="0123456789abcdef".charAt(g>>>4&15)+"0123456789abcdef".charAt(g&15);return d.outputUpper?l.toUpperCase():l}function E(c,a,d){var l="",b=a/8,g,f,n;for(g=0;g<b;g+=3)for(f=g+1<b?c[g+1>>>2]:0,n=g+2<b?c[g+2>>>2]:0,n=(c[g>>>2]>>>8*(3+g%4*-1)&255)<<16|(f>>>8*(3+(g+1)%4*-1)&255)<<8|n>>>8*(3+(g+2)%4*-1)&255,f=0;4>f;f+=1)8*g+6*f<=a?l+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n>>>
|
||||
6*(3-f)&63):l+=d.b64Pad;return l}function F(c,a){var d="",l=a/8,b,g;for(b=0;b<l;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1)&255,d+=String.fromCharCode(g);return d}function G(c,a){var d=a/8,l,b=new ArrayBuffer(d),g;g=new Uint8Array(b);for(l=0;l<d;l+=1)g[l]=c[l>>>2]>>>8*(3+l%4*-1)&255;return b}function C(c){var a={outputUpper:!1,b64Pad:"=",shakeLen:-1};c=c||{};a.outputUpper=c.outputUpper||!1;!0===c.hasOwnProperty("b64Pad")&&(a.b64Pad=c.b64Pad);if("boolean"!==typeof a.outputUpper)throw Error("Invalid outputUpper formatting option");
|
||||
if("string"!==typeof a.b64Pad)throw Error("Invalid b64Pad formatting option");return a}function B(c,a){var d;switch(a){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(c){case "HEX":d=function(a,b,c){var f=a.length,d,k,e,h,q;if(0!==f%2)throw Error("String of HEX type must be in byte increments");b=b||[0];c=c||0;q=c>>>3;for(d=0;d<f;d+=2){k=parseInt(a.substr(d,2),16);if(isNaN(k))throw Error("String of HEX type contains invalid characters");
|
||||
h=(d>>>1)+q;for(e=h>>>2;b.length<=e;)b.push(0);b[e]|=k<<8*(3+h%4*-1)}return{value:b,binLen:4*f+c}};break;case "TEXT":d=function(c,b,d){var f,n,k=0,e,h,q,m,p,r;b=b||[0];d=d||0;q=d>>>3;if("UTF8"===a)for(r=3,e=0;e<c.length;e+=1)for(f=c.charCodeAt(e),n=[],128>f?n.push(f):2048>f?(n.push(192|f>>>6),n.push(128|f&63)):55296>f||57344<=f?n.push(224|f>>>12,128|f>>>6&63,128|f&63):(e+=1,f=65536+((f&1023)<<10|c.charCodeAt(e)&1023),n.push(240|f>>>18,128|f>>>12&63,128|f>>>6&63,128|f&63)),h=0;h<n.length;h+=1){p=k+
|
||||
q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=n[h]<<8*(r+p%4*-1);k+=1}else if("UTF16BE"===a||"UTF16LE"===a)for(r=2,n="UTF16LE"===a&&!0||"UTF16LE"!==a&&!1,e=0;e<c.length;e+=1){f=c.charCodeAt(e);!0===n&&(h=f&255,f=h<<8|f>>>8);p=k+q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=f<<8*(r+p%4*-1);k+=2}return{value:b,binLen:8*k+d}};break;case "B64":d=function(a,b,c){var f=0,d,k,e,h,q,m,p;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");k=a.indexOf("=");a=a.replace(/\=/g,
|
||||
"");if(-1!==k&&k<a.length)throw Error("Invalid '=' found in base-64 string");b=b||[0];c=c||0;m=c>>>3;for(k=0;k<a.length;k+=4){q=a.substr(k,4);for(e=h=0;e<q.length;e+=1)d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(q[e]),h|=d<<18-6*e;for(e=0;e<q.length-1;e+=1){p=f+m;for(d=p>>>2;b.length<=d;)b.push(0);b[d]|=(h>>>16-8*e&255)<<8*(3+p%4*-1);f+=1}}return{value:b,binLen:8*f+c}};break;case "BYTES":d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;k=c>>>3;for(n=0;n<a.length;n+=
|
||||
1)d=a.charCodeAt(n),h=n+k,e=h>>>2,b.length<=e&&b.push(0),b[e]|=d<<8*(3+h%4*-1);return{value:b,binLen:8*a.length+c}};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(l){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;n=c>>>3;h=new Uint8Array(a);for(d=0;d<a.byteLength;d+=1)e=d+n,k=e>>>2,b.length<=k&&b.push(0),b[k]|=h[d]<<8*(3+e%4*-1);return{value:b,binLen:8*a.byteLength+c}};break;default:throw Error("format must be HEX, TEXT, B64, BYTES, or ARRAYBUFFER");
|
||||
}return d}function r(c,a){return c>>>a|c<<32-a}function J(c,a,d){return c&a^~c&d}function K(c,a,d){return c&a^c&d^a&d}function L(c){return r(c,2)^r(c,13)^r(c,22)}function M(c){return r(c,6)^r(c,11)^r(c,25)}function N(c){return r(c,7)^r(c,18)^c>>>3}function O(c){return r(c,17)^r(c,19)^c>>>10}function P(c,a){var d=(c&65535)+(a&65535);return((c>>>16)+(a>>>16)+(d>>>16)&65535)<<16|d&65535}function Q(c,a,d,l){var b=(c&65535)+(a&65535)+(d&65535)+(l&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>>
|
||||
16)&65535)<<16|b&65535}function R(c,a,d,l,b){var g=(c&65535)+(a&65535)+(d&65535)+(l&65535)+(b&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>>16)+(g>>>16)&65535)<<16|g&65535}function x(c){var a=[],d;if(0===c.lastIndexOf("SHA-",0))switch(a=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],d=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],c){case "SHA-224":break;case "SHA-256":a=d;break;case "SHA-384":a=[new m,new m,
|
||||
new m,new m,new m,new m,new m,new m];break;case "SHA-512":a=[new m,new m,new m,new m,new m,new m,new m,new m];break;default:throw Error("Unknown SHA variant");}else throw Error("No SHA variants supported");return a}function A(c,a,d){var l,b,g,f,n,k,e,h,m,r,p,w,t,x,u,z,A,B,C,D,E,F,v=[],G;if("SHA-224"===d||"SHA-256"===d)r=64,w=1,F=Number,t=P,x=Q,u=R,z=N,A=O,B=L,C=M,E=K,D=J,G=H;else throw Error("Unexpected error in SHA-2 implementation");d=a[0];l=a[1];b=a[2];g=a[3];f=a[4];n=a[5];k=a[6];e=a[7];for(p=
|
||||
0;p<r;p+=1)16>p?(m=p*w,h=c.length<=m?0:c[m],m=c.length<=m+1?0:c[m+1],v[p]=new F(h,m)):v[p]=x(A(v[p-2]),v[p-7],z(v[p-15]),v[p-16]),h=u(e,C(f),D(f,n,k),G[p],v[p]),m=t(B(d),E(d,l,b)),e=k,k=n,n=f,f=t(g,h),g=b,b=l,l=d,d=t(h,m);a[0]=t(d,a[0]);a[1]=t(l,a[1]);a[2]=t(b,a[2]);a[3]=t(g,a[3]);a[4]=t(f,a[4]);a[5]=t(n,a[5]);a[6]=t(k,a[6]);a[7]=t(e,a[7]);return a}var H;H=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,
|
||||
2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,
|
||||
2756734187,3204031479,3329325298];"function"===typeof define&&define.amd?define(function(){return w}):"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(module.exports=w),exports=w):I.jsSHA=w})(this);
|
||||
function sha256(token){
|
||||
var shaObj = new jsSHA("SHA-256", "TEXT");
|
||||
shaObj.update(token);
|
||||
var hash = shaObj.getHash("HEX");
|
||||
return hash;
|
||||
}
|
||||
@@ -1,11 +1,78 @@
|
||||
//バージョンチェッカー
|
||||
function verck(ver) {
|
||||
localStorage.setItem("ver", ver);
|
||||
console.log("Welcome")
|
||||
if(localStorage.getItem("ver")!=ver){
|
||||
localStorage.setItem("ver", ver);
|
||||
console.log("Thank you for your update");
|
||||
$(document).ready(function(){
|
||||
$('#releasenote').modal('open');
|
||||
verp=ver.replace( '(', '');
|
||||
verp=verp.replace( '.', '-');
|
||||
verp=verp.replace( '.', '-');
|
||||
verp=verp.replace( '[', '-');
|
||||
verp=verp.replace( ']', '');
|
||||
verp=verp.replace( ')', '');
|
||||
verp=verp.replace( ' ', '_');
|
||||
console.log(verp);
|
||||
if(lang.language=="ja"){
|
||||
$("#release-"+verp).show();
|
||||
}else{
|
||||
$("#release-en").show();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var platform=remote.process.platform;
|
||||
if(platform=="win32"){
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: "Select your platform",
|
||||
message: lang.lang_version_platform,
|
||||
buttons: [lang.lang_no,lang.lang_yesno]
|
||||
}
|
||||
if(!localStorage.getItem("winstore")){
|
||||
|
||||
dialog.showMessageBox(options, function(arg) {
|
||||
if(arg==1){
|
||||
localStorage.setItem("winstore","winstore")
|
||||
}else{
|
||||
localStorage.setItem("winstore","localinstall")
|
||||
}
|
||||
});
|
||||
}
|
||||
}else if(platform=="linux"){
|
||||
if(localStorage.getItem("winstore")=="unix"){
|
||||
localStorage.removeItem("winstore")
|
||||
}
|
||||
if(!localStorage.getItem("winstore")){
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: "Select your platform",
|
||||
message: lang.lang_version_platform_linux,
|
||||
buttons: [lang.lang_no,lang.lang_yesno]
|
||||
}
|
||||
dialog.showMessageBox(options, function(arg) {
|
||||
if(arg==1){
|
||||
localStorage.setItem("winstore","snapcraft")
|
||||
}else{
|
||||
localStorage.setItem("winstore","localinstall")
|
||||
}
|
||||
});
|
||||
}
|
||||
}else{
|
||||
localStorage.setItem("winstore","unix")
|
||||
}
|
||||
if(localStorage.getItem("winstore")=="snapcraft" || localStorage.getItem("winstore")=="winstore"){
|
||||
var winstore=true;
|
||||
}else{
|
||||
var winstore=false;
|
||||
}
|
||||
var l = 5;
|
||||
|
||||
// 生成する文字列に含める文字セット
|
||||
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||
|
||||
var cl = c.length;
|
||||
var r = "";
|
||||
for(var i=0; i<l; i++){
|
||||
@@ -22,15 +89,149 @@ function verck(ver) {
|
||||
}).then(function(mess) {
|
||||
console.log(mess);
|
||||
if (mess) {
|
||||
if (mess.desk == ver) {
|
||||
todo("お使いのバージョン" + mess.desk + "は最新です。");
|
||||
//betaならアプデチェックしない
|
||||
} else if (ver != "beta") {
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var platform=remote.process.platform;
|
||||
if(platform=="darwin"){
|
||||
var newest=mess.desk_mac;
|
||||
}else{
|
||||
var newest=mess.desk;
|
||||
}
|
||||
if (newest == ver) {
|
||||
todo(lang.lang_version_usever.replace("{{ver}}" ,mess.desk));
|
||||
//betaかWinstoreならアプデチェックしない
|
||||
} else if (ver.indexOf("beta")!=-1 || winstore) {
|
||||
|
||||
}else{
|
||||
localStorage.removeItem("instance")
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('update', "true");
|
||||
if(localStorage.getItem("new-ver-skip")){
|
||||
if(localStorage.getItem("next-ver")!=newest){
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('update', "true");
|
||||
}else{
|
||||
console.log(lang.lang_version_skipver);
|
||||
todo(lang.lang_version_skipver);
|
||||
}
|
||||
}else{
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('update', "true");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if(!localStorage.getItem("last-notice-id")){
|
||||
localStorage.setItem("last-notice-id",0)
|
||||
}
|
||||
console.log(localStorage.getItem("last-notice-id"))
|
||||
var start = "https://thedesk.top/notice?since_id="+localStorage.getItem("last-notice-id");
|
||||
console.log(start);
|
||||
fetch(start, {
|
||||
method: 'GET'
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(mess) {
|
||||
console.log(mess.length);
|
||||
if(mess.length<1){
|
||||
return false;
|
||||
}else{
|
||||
var last=localStorage.getItem("last-notice-id")
|
||||
localStorage.setItem("last-notice-id",mess[0].ID)
|
||||
for(i=0;i<mess.length;i++){
|
||||
var obj=mess[i];
|
||||
if(obj.ID*1<=last){
|
||||
break;
|
||||
}else{
|
||||
var show=true;
|
||||
if(obj.Toot!=""){
|
||||
var toot='<button class="btn-flat toast-action" onclick="detEx(\''+obj.Toot+'\',\'main\')">Show</button>';
|
||||
}else{
|
||||
var toot="";
|
||||
}
|
||||
if(obj.Ver!=""){
|
||||
if(obj.Ver==ver){
|
||||
show=true;
|
||||
}else{
|
||||
show=false;
|
||||
}
|
||||
}
|
||||
if(obj.Domain!=""){
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (multi) {
|
||||
show=false;
|
||||
var accts = JSON.parse(multi);
|
||||
Object.keys(accts).forEach(function(key) {
|
||||
var acct = accts[key];
|
||||
if(acct.domain==obj.Domain){
|
||||
show=true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if(show){
|
||||
Materialize.toast(obj.Text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
infows = new WebSocket("wss://thedesk.top/ws/");
|
||||
infows.onopen = function(mess) {
|
||||
console.log(tlid + ":Connect Streaming Info:");
|
||||
console.log(mess);
|
||||
}
|
||||
infows.onmessage = function(mess) {
|
||||
console.log(":Receive Streaming:");
|
||||
console.log(JSON.parse(mess.data));
|
||||
var obj=JSON.parse(mess.data);
|
||||
if(obj.type!="counter"){
|
||||
if(obj.id*1<=localStorage.getItem("last-notice-id")){
|
||||
|
||||
}else{
|
||||
localStorage.setItem("last-notice-id",obj.id)
|
||||
var show=true;
|
||||
if(obj.toot!=""){
|
||||
var toot='<button class="btn-flat toast-action" onclick="detEx(\''+obj.toot+'\',\'main\')">Show</button>';
|
||||
}else{
|
||||
var toot="";
|
||||
}
|
||||
if(obj.ver!=""){
|
||||
if(obj.ver==ver){
|
||||
show=true;
|
||||
}else{
|
||||
show=false;
|
||||
}
|
||||
}
|
||||
if(obj.domain!=""){
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (multi) {
|
||||
show=false;
|
||||
var accts = JSON.parse(multi);
|
||||
Object.keys(accts).forEach(function(key) {
|
||||
var acct = accts[key];
|
||||
if(acct.domain==obj.domain){
|
||||
show=true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if(show){
|
||||
Materialize.toast(obj.text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$("#persons").text(obj.text);
|
||||
}
|
||||
}
|
||||
infows.onerror = function(error) {
|
||||
console.error("Error closing:info");
|
||||
console.error(error);
|
||||
return false;
|
||||
};
|
||||
infows.onclose = function() {
|
||||
console.error("Closing:info");
|
||||
};
|
||||
}
|
||||
@@ -9,25 +9,40 @@ var defaultemoji={
|
||||
place:place,
|
||||
symbol:symbol
|
||||
};
|
||||
var defaultemojiname={
|
||||
activity:"活動",
|
||||
flag:"国旗",
|
||||
food:"食べ物",
|
||||
nature:"自然",
|
||||
object:"もの",
|
||||
people:"ひと",
|
||||
place:"場所",
|
||||
symbol:"記号"
|
||||
};
|
||||
if(lang=="ja"){
|
||||
var defaultemojiname={
|
||||
activity:"活動",
|
||||
flag:"国旗",
|
||||
food:"食べ物",
|
||||
nature:"自然",
|
||||
object:"もの",
|
||||
people:"ひと",
|
||||
place:"場所",
|
||||
symbol:"記号"
|
||||
};
|
||||
}else{
|
||||
var defaultemojiname={
|
||||
activity:"Activities",
|
||||
flag:"Flags",
|
||||
food:"Foods",
|
||||
nature:"Nature",
|
||||
object:"Tools",
|
||||
people:"People",
|
||||
place:"Places",
|
||||
symbol:"Symbols"
|
||||
};
|
||||
}
|
||||
|
||||
function defaultEmoji(target){
|
||||
var json=defaultemoji[target];
|
||||
var emojis="";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var emoji = json[key];
|
||||
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'./img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
|
||||
emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'../../img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
|
||||
});
|
||||
$("#emoji-list").html(emojis);
|
||||
$("#now-emoji").text(defaultemojiname[target]+"の絵文字");
|
||||
$("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
|
||||
console.log(target);
|
||||
$(".emoji-control").addClass("hide");
|
||||
}
|
||||
function customEmoji(){
|
||||
@@ -36,10 +51,10 @@ function customEmoji(){
|
||||
emojiList('home')
|
||||
}
|
||||
function defEmoji(target){
|
||||
if(target=="thinking_face"){
|
||||
target="thinking";
|
||||
}
|
||||
var emoji=emojione.shortnameToUnicode(":"+target+":");
|
||||
var emojiraw = newpack.filter(function(item, index){
|
||||
if (item.short_name == target) return true;
|
||||
});
|
||||
emoji=twemoji.convert.fromCodePoint(emojiraw[0].unified);
|
||||
var now = $("#textarea").val();
|
||||
var selin = localStorage.getItem("cursor");
|
||||
var now = $("#textarea").val();
|
||||
@@ -53,6 +68,11 @@ function defEmoji(target){
|
||||
console.log(emoji);
|
||||
$("#textarea").val(newt);
|
||||
$("#textarea").focus();
|
||||
var selin = $("#textarea").prop('selectionStart');
|
||||
if(!selin){
|
||||
selin=0;
|
||||
}
|
||||
localStorage.setItem("cursor", selin);
|
||||
}
|
||||
function faicon(){
|
||||
var json=faicons;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
242
app/js/lang/lang.en.js
Normal file
242
app/js/lang/lang.en.js
Normal file
@@ -0,0 +1,242 @@
|
||||
//commonError
|
||||
var lang={
|
||||
"language":"en",
|
||||
"lang_toot":"Toot",
|
||||
"lang_there":"Yes",
|
||||
"lang_nothing":"None",
|
||||
"lang_yesno":"Yes",
|
||||
"lang_no":"No",
|
||||
"lang_progress":"Wait...",
|
||||
"lang_edit":"Edit",
|
||||
"lang_del":"Delete",
|
||||
"lang_add":"Add",
|
||||
"lang_fatalerroroccured":"Some errors are occured, please restart TheDesk.",
|
||||
"lang_speech":"Google US English",
|
||||
//language.html
|
||||
"lang_lang":"Language",
|
||||
"lang_langlocale":"English",
|
||||
"lang_back":"Back",
|
||||
"lang_set":"Set",
|
||||
"lang_langadd":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help.",
|
||||
//common/version.js
|
||||
"lang_version_usever":"No update is found({{ver}})",
|
||||
"lang_version_skipver":"Update was ignored.",
|
||||
"lang_version_platform":"Was this software installed at Microsoft Store? When select 'yes', any update was ignored.",
|
||||
"lang_version_platform_linux":"Was this software installed at Snapcraft(snapd)? When select 'yes', any update was ignored.",
|
||||
//login
|
||||
//login/login.js
|
||||
"lang_login_noauth":"Show TL of unlogined accounts",
|
||||
//login/manager.js
|
||||
"lang_manager_info":"About this instance",
|
||||
"lang_manager_refresh":"Refresh",
|
||||
"lang_manager_delete":"Logout",
|
||||
"lang_manager_color":"Account Color",
|
||||
"lang_manager_confirm":"is about to logout. Continue?",
|
||||
"lang_manager_mainAcct":"Done:choose main account",
|
||||
"lang_manager_def":"Default",
|
||||
"lang_manager_none":"None",
|
||||
"lang_manager_godev":"Open DevCenter of Misskey. We show also an official documents to refer.",
|
||||
//post/bb-md.js
|
||||
"lang_bbmd_misskey":"TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
|
||||
//post/emoji.js
|
||||
"lang_emoji_get":"Get emojis",
|
||||
"lang_emoji_custom":"Custom emojis",
|
||||
"lang_defaultemojis_text":"Emojis about {{cat}}",
|
||||
//post/img.js
|
||||
"lang_postimg_previewdis":"cannot preview",
|
||||
"lang_postimg_aftupload":"You cannot change accounts after uploading.",
|
||||
//post/post.js
|
||||
"lang_post_tagTL":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?",
|
||||
"lang_post_tagVis":"This toot(not 'public' toot) is not shown on this tag's TL.",
|
||||
"lang_post_cwtitle":"Auto CW Alert",
|
||||
"lang_post_cwtxt":"You are about to post longer toot than you set.\nWarning text:",
|
||||
"lang_post_btn1":"Cancel (will not post)",
|
||||
"lang_post_btn2":"Make text hidden automatically",
|
||||
"lang_post_btn3":"Continue to post",
|
||||
//post/status.js
|
||||
"lang_status_favWarn":"It will take a miunte to favourite a remote toot.",
|
||||
"lang_status_btWarn":"It will take a miunte to boost a remote toot.",
|
||||
"lang_status_follow":"Follow",
|
||||
"lang_status_unfollow":"Unfollow",
|
||||
"lang_status_block":"Block",
|
||||
"lang_status_unblock":"Unblock",
|
||||
"lang_status_mute":"Mute",
|
||||
"lang_status_unmute":"Unmute",
|
||||
"lang_status_redraft":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1.",
|
||||
"lang_status_emphas":"'s toots are emphasized. Please reload after this action.",
|
||||
"lang_status_unemphas":"'s toots are not emphasized. Please reload after this action.",
|
||||
"lang_status_unendorse":"Not feature on profile",
|
||||
"lang_status_endorse":"Feature on profile",
|
||||
//post/suggest.js
|
||||
"lang_suggest_nodata":"Please get emojis list in order to show suggestion.",
|
||||
//post/use-txtbox.js
|
||||
"lang_usetxtbox_reply":"Reply Mode. Ctrl+Shift+C to clear.",
|
||||
//tl/card.js
|
||||
"lang_cards_check":" check",
|
||||
"lang_cards_pip":"PiP mode",
|
||||
//tl/details.js
|
||||
"lang_details_nodata":"No data",
|
||||
"lang_details_filtered":"Filtered toot",
|
||||
"lang_details_embed":"Embed HTML is cliped.",
|
||||
"lang_details_url":"URL of this toot is cliped.",
|
||||
"lang_details_txt":"Content of this toot is cliped.",
|
||||
//tl/filter.js
|
||||
"lang_filter_nodata":"No data",
|
||||
"lang_filter_errordegree":"Please check a context",
|
||||
//tl/list.js
|
||||
"lang_list_nodata":"No data",
|
||||
"lang_list_show":"Show",
|
||||
"lang_list_users":"Users list",
|
||||
"lang_list_nouser":"No users in this list.",
|
||||
"lang_list_add":"Add to the list",
|
||||
"lang_list_remove":"Remove from the list",
|
||||
//tl/notification.js
|
||||
"lang_notf_new":" new notifications",
|
||||
//tl/speech.js
|
||||
"lang_speech_refresh":"Save value about TTS config",
|
||||
//tl/src.js
|
||||
"lang_src_ts":"chronological order",
|
||||
"lang_src_people":" people toot",
|
||||
//tl/tag.js
|
||||
"lang_tags_always":"Always toots with ",
|
||||
"lang_tags_realtime":"Tag-stream toot",
|
||||
"lang_tags_tagunpin":"Unpin {{tag}}",
|
||||
"lang_tags_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/layout.js
|
||||
"lang_layout_gotop":"Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
|
||||
"lang_layout_thisacct":"{{notf}} of this account",
|
||||
"lang_layout_delthis":"Remove this column",
|
||||
"lang_layout_setthis":"Preferences of this column",
|
||||
"lang_layout_mediafil":"Media filtering",
|
||||
"lang_layout_linkana":"Auto Link Analyzer",
|
||||
"lang_layout_linkanades":"Auto link analyzer",
|
||||
"lang_layout_tts":"Text to speech ",
|
||||
"lang_layout_reconnect":"Reconnect to streaming API",
|
||||
"lang_layout_headercolor":"Header color of this column",
|
||||
"lang_layout_nodata":"[No data]<br>F5/⌘+R to reload",
|
||||
"lang_layout_dm":"Direct Message",
|
||||
"lang_layout_webviewmode":"Prefer WebView",
|
||||
"lang_excluded":"Excluded type of notification",
|
||||
"lang_layout_excludingbt":"Show BT mode(OFF/Exclude BT/Only BT)",
|
||||
//ui/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.",
|
||||
//userdata/showOnTL.js
|
||||
"lang_showontl_movetxt":"This account was moved",
|
||||
"lang_showontl_movebtn":"Continue on the new account",
|
||||
"lang_showontl_botacct":"[bot]",
|
||||
"lang_showontl_followed":"Following you",
|
||||
"lang_showontl_notf":"Notification ",
|
||||
"lang_showontl_domain":"Domain ",
|
||||
"lang_showontl_listwarn":"Follow to add this user to lists.",
|
||||
//parse
|
||||
"lang_parse_mentioned":" replied to you",
|
||||
"lang_parse_faved":" favourited your toot",
|
||||
"lang_parse_bted":" boosted your toot",
|
||||
"lang_parse_btedsimple":" boosted",
|
||||
"lang_parse_notftime":"Actioned at",
|
||||
"lang_parse_cwshow":"Show",
|
||||
"lang_parse_fulltext":"Full size text:",
|
||||
"lang_parse_autofold":"Auto folded",
|
||||
"lang_parse_more":"More",
|
||||
"lang_parse_url":"URL Analyzer",
|
||||
"lang_parse_tagTL":"Timeline of {{tag}}",
|
||||
"lang_parse_tagtoot":"Toot with {{tag}}",
|
||||
"lang_parse_tagpin":"Pin {{tag}}",
|
||||
"lang_parse_public":"Public",
|
||||
"lang_parse_unlisted":"Unlisted",
|
||||
"lang_parse_private":"Private",
|
||||
"lang_parse_direct":"Direct",
|
||||
"lang_parse_clickcopy":"Click to copy text of this toot",
|
||||
"lang_parse_clickcopyurl":"Click to copy URL of this toot",
|
||||
"lang_parse_trans":"Translate to Japanese",
|
||||
"lang_parse_replyto":"Reply to this toot",
|
||||
"lang_parse_bt":"Boost this toot",
|
||||
"lang_parse_fav":"Favourite this toot",
|
||||
"lang_parse_quote":"Quote this toot",
|
||||
"lang_parse_del":"Delete this toot",
|
||||
"lang_parse_pin":"Pin this toot",
|
||||
"lang_parse_det":"Details via your main account.",
|
||||
"lang_parse_redraft":"Delete & re-draft",
|
||||
"lang_parse_followed":"Followed you",
|
||||
"lang_parse_clientop":"Operation of this client",
|
||||
"lang_parse_clienttxt":" will be",
|
||||
"lang_parse_clientno":"done nothing",
|
||||
"lang_parse_clientemp":"emphasized(/not emphasized)",
|
||||
"lang_parse_clientmute":"muted",
|
||||
"lang_parse_mute":" will be muted. You can remove on preferences.",
|
||||
"lang_parse_voted":"Voted",
|
||||
"lang_parse_vote":"Voted",
|
||||
"lang_parse_unvoted":"Show the result without voting",
|
||||
"lang_parse_endedvote":"Expired",
|
||||
"lang_parse_thread":"Show thread",
|
||||
//misskey
|
||||
"lang_misskeyparse_renote":"Repost",
|
||||
"lang_misskeyparse_renoteqt":"Renote",
|
||||
"lang_misskeyparse_reaction":"Reaction",
|
||||
"lang_misskeyparse_tagnostr":"No streaming API on Tag TLs",
|
||||
"lang_misskeyparse_listnostr":"No streaming API on List TLs",
|
||||
"lang_misskeyparse_home":"Home",
|
||||
"lang_misskeyparse_followers":"Follower",
|
||||
"lang_misskeyparse_specified":"Specified User",
|
||||
"lang_misskeyparse_qt":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear",
|
||||
"lang_misskeyparse_renoted":" renoted your following post.",
|
||||
"lang_misskeyparse_quoted":" quoted your following post.",
|
||||
"lang_misskeyparse_reacted":" reacted your following post.",
|
||||
//setting
|
||||
"lang_setting_time":"Time format:{{set}}",
|
||||
"lang_setting_theme":"Theme:{{set}}",
|
||||
"lang_setting_nsfw":"NSFW:{{set}}",
|
||||
"lang_setting_cw":"CW:{{set}}",
|
||||
"lang_setting_cwtext":"Default CW text:{{set}}",
|
||||
"lang_setting_cws":"Always CW on:{{set}}",
|
||||
"lang_setting_rp":"Reply counter:{{set}}",
|
||||
"lang_setting_vis":"Default visibility:{{set}}",
|
||||
"lang_setting_popup":"Popup notification:{{set}}",
|
||||
"lang_setting_off":"Off",
|
||||
"lang_setting_s":"s",
|
||||
"lang_setting_box":"Default toot box action:{{set}}",
|
||||
"lang_setting_gif":"GIF:{{set}}",
|
||||
"lang_setting_selt":"Auto fold:{{set1}} lines and above, {{set2}} letters and above",
|
||||
"lang_setting_autocw":"Auto CW:{{set1}} lines and above, {{set2}} letters and above",
|
||||
"lang_setting_width":"Minimam width:{{set}}",
|
||||
"lang_setting_fixwidth":"TweetDeck fixed width:{{set}}px",
|
||||
"lang_setting_img":"After posting an image:{{set}}",
|
||||
"lang_setting_font":"Fonts:{{set}}",
|
||||
"lang_setting_default":"default font",
|
||||
"lang_setting_size":"Font size:{{set}}px",
|
||||
"lang_setting_imgheight":"Image height:{{set}}px",
|
||||
"lang_setting_ticker":"#InstanceTicker:{{set}}px",
|
||||
"lang_setting_animation":"Animation: {{set}}",
|
||||
"lang_setting_tag":"Tag TL:{{set}}",
|
||||
"lang_setting_boxConfirm":"Post box:{{set}}",
|
||||
"lang_setting_ul":"Native locale:{{set}}",
|
||||
"lang_setting_notf":"Native notification:{{set}}",
|
||||
"lang_setting_quote":"Quote format:{{set}}",
|
||||
"lang_setting_via":"Via:{{set}}",
|
||||
"lang_setting_mov":"Action buttons hiding:{{set}}",
|
||||
"lang_setting_setasread":"Notification markers:{{set}}",
|
||||
"lang_setting_main":"Default account:{{set}}",
|
||||
"lang_setting_sec":"Secondary toot button:{{set}}",
|
||||
"lang_setting_ksref":"Keyboard shortcuts are refreshed.",
|
||||
"lang_setting_nomuting":"No client is muted.",
|
||||
"lang_setting_notftest":" Notification test ",
|
||||
"lang_setting_notftestprof":"Your icon is shown.",
|
||||
"lang_setting_exportwarn":"Only important data will be exported. You must keep this data secure.",
|
||||
"lang_setting_importwarn":"All data will be deleted.",
|
||||
}
|
||||
242
app/js/lang/lang.ja.js
Normal file
242
app/js/lang/lang.ja.js
Normal file
@@ -0,0 +1,242 @@
|
||||
//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/version.js
|
||||
"lang_version_usever":"お使いのバージョン{{ver}}は最新です。",
|
||||
"lang_version_skipver":"アップデートはスキップされました。",
|
||||
"lang_version_platform":"このソフトウェアはMicrosoft Storeからダウンロードされましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
|
||||
"lang_version_platform_linux":"このソフトウェアはSnapcraft(snapd)からインストールしましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
|
||||
//login
|
||||
//login/login.js
|
||||
"lang_login_noauth":"認証せずに見る",
|
||||
//login/manager.js
|
||||
"lang_manager_info":"インスタンス情報",
|
||||
"lang_manager_refresh":"情報更新",
|
||||
"lang_manager_delete":"削除",
|
||||
"lang_manager_color":"アカウントカラーを選択",
|
||||
"lang_manager_confirm":"を削除します。",
|
||||
"lang_manager_mainAcct":"メインアカウントを設定しました。",
|
||||
"lang_manager_def":"既定",
|
||||
"lang_manager_none":"なし",
|
||||
"lang_manager_godev":"MisskeyのDevセンターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
|
||||
//post/bb-md.js
|
||||
"lang_bbmd_misskey":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。",
|
||||
//post/emoji.js
|
||||
"lang_emoji_get":"絵文字リストを取得",
|
||||
"lang_emoji_custom":"カスタム絵文字",
|
||||
"lang_defaultemojis_text":"{{cat}}の絵文字",
|
||||
//post/img.js
|
||||
"lang_postimg_previewdis":"プレビューできません。",
|
||||
"lang_postimg_aftupload":"アップロード後はアカウントを切り替えられません。",
|
||||
//post/post.js
|
||||
"lang_post_tagTL":"デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
|
||||
"lang_post_tagVis":"公開範囲が「公開」以外だと、タグTLに表示されません。(一部インスタンスを除く)",
|
||||
"lang_post_cwtitle":"長文投稿の警告",
|
||||
"lang_post_cwtxt":"指定文字数、行数を超えるトゥートを行おうとしています。\n自動CWのタイトル:",
|
||||
"lang_post_btn1":"キャンセル(投稿しない)",
|
||||
"lang_post_btn2":"自動でCWを付ける",
|
||||
"lang_post_btn3":"そのまま投稿",
|
||||
//post/status.js
|
||||
"lang_status_favWarn":"お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。",
|
||||
"lang_status_btWarn":"ブーストしました。インスタンスが違うときは時間がかかる場合があります。",
|
||||
"lang_status_follow":"フォロー",
|
||||
"lang_status_unfollow":"フォロー解除",
|
||||
"lang_status_block":"ブロック",
|
||||
"lang_status_unblock":"ブロック解除",
|
||||
"lang_status_mute":"ミュート",
|
||||
"lang_status_unmute":"ミュート解除",
|
||||
"lang_status_redraft":"削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
|
||||
"lang_status_emphas":"を強調します。リロードしてください。",
|
||||
"lang_status_unemphas":"を強調解除します。リロードしてください。",
|
||||
"lang_status_unendorse":"紹介解除",
|
||||
"lang_status_endorse":"プロフで紹介する",
|
||||
//post/suggest.js
|
||||
"lang_suggest_nodata":"サジェストのために絵文字リストを取得してください。",
|
||||
//post/use-txtbox.js
|
||||
"lang_usetxtbox_reply":"返信モードです。クリアするときはCtrl+Shift+Cを押してください。",
|
||||
//tl/card.js
|
||||
"lang_cards_check":"チェック",
|
||||
"lang_cards_pip":"ながら観モード",
|
||||
//tl/details.js
|
||||
"lang_details_nodata":"データなし",
|
||||
"lang_details_filtered":"フィルターされました。",
|
||||
"lang_details_embed":"埋め込みHTMLがコピーされました。",
|
||||
"lang_details_url":"トゥートURLがコピーされました。",
|
||||
"lang_details_txt":"トゥート本文がコピーされました。",
|
||||
//tl/filter.js
|
||||
"lang_filter_nodata":"フィルターはありません",
|
||||
"lang_filter_errordegree":"適応範囲を最低一つ以上チェックしてください。",
|
||||
//tl/list.js
|
||||
"lang_list_nodata":"リストはありません",
|
||||
"lang_list_show":"表示",
|
||||
"lang_list_users":"ユーザー一覧",
|
||||
"lang_list_nouser":"ユーザーはいません",
|
||||
"lang_list_add":"リストに追加",
|
||||
"lang_list_remove":"リストから削除",
|
||||
//tl/notification.js
|
||||
"lang_notf_new":"件の新しい通知",
|
||||
//tl/speech.js
|
||||
"lang_speech_refresh":"音声読み上げ設定を更新しました。",
|
||||
//tl/src.js
|
||||
"lang_src_ts":"時系列",
|
||||
"lang_src_people":"人がトゥート",
|
||||
//tl/tag.js
|
||||
"lang_tags_always":"常に",
|
||||
"lang_tags_realtime":"実況",
|
||||
"lang_tags_tagunpin":"{{tag}}をよく使うタグから削除",
|
||||
"lang_tags_unrealtime":"実況解除",
|
||||
"lang_tags_tagwarn":"{{tag}}がない場合自動で補完されます。",
|
||||
//tl/tl.js
|
||||
"lang_tl_media":"メディア",
|
||||
"lang_tl_reconnect":"Streamingに再接続しました",
|
||||
//ui/layout.js
|
||||
"lang_layout_gotop":"一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。",
|
||||
"lang_layout_thisacct":"このアカウントの{{notf}}",
|
||||
"lang_layout_delthis":"このカラムを削除",
|
||||
"lang_layout_setthis":"このカラムの設定",
|
||||
"lang_layout_mediafil":"メディアフィルター",
|
||||
"lang_layout_linkana":"リンク解析",
|
||||
"lang_layout_linkanades":"リンクの解析を切り替え",
|
||||
"lang_layout_tts":"読み上げ",
|
||||
"lang_layout_reconnect":"ストリーミング再接続",
|
||||
"lang_layout_headercolor":"TLヘッダーカラー",
|
||||
"lang_layout_nodata":"[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。",
|
||||
"lang_layout_dm":"ダイレクトメッセージ",
|
||||
"lang_layout_webviewmode":"WebView優先",
|
||||
"lang_excluded":"除外する通知",
|
||||
"lang_layout_excludingbt":"BT表示(OFF/BT除外/BTのみ)",
|
||||
//ui/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にはありません。",
|
||||
//userdata/showOnTL.js
|
||||
"lang_showontl_movetxt":"このアカウントは移行しています",
|
||||
"lang_showontl_movebtn":"移行先を見る",
|
||||
"lang_showontl_botacct":"botアカウント",
|
||||
"lang_showontl_followed":"フォローされています",
|
||||
"lang_showontl_notf":"通知",
|
||||
"lang_showontl_domain":"ドメイン",
|
||||
"lang_showontl_listwarn":"リストに追加するためにはフォローが必要です。",
|
||||
//parse
|
||||
"lang_parse_mentioned":"が返信しました",
|
||||
"lang_parse_faved":"がお気に入り登録しました",
|
||||
"lang_parse_bted":"がブーストしました",
|
||||
"lang_parse_btedsimple":"がブースト",
|
||||
"lang_parse_notftime":"通知された時間",
|
||||
"lang_parse_cwshow":"見る",
|
||||
"lang_parse_fulltext":"以下全文",
|
||||
"lang_parse_autofold":"自動折り畳み",
|
||||
"lang_parse_more":"続き...",
|
||||
"lang_parse_url":"URL解析",
|
||||
"lang_parse_tagTL":"{{tag}}のタイムライン",
|
||||
"lang_parse_tagtoot":"{{tag}}でトゥート",
|
||||
"lang_parse_tagpin":"{{tag}}をよく使うタグへ",
|
||||
"lang_parse_public":"公開",
|
||||
"lang_parse_unlisted":"未収載",
|
||||
"lang_parse_private":"非公開",
|
||||
"lang_parse_direct":"ダイレクト",
|
||||
"lang_parse_clickcopy":"クリックして本文をコピー",
|
||||
"lang_parse_clickcopyurl":"クリックしてトゥートURLをコピー",
|
||||
"lang_parse_trans":"このトゥートを日本語に翻訳",
|
||||
"lang_parse_replyto":"このトゥートに返信",
|
||||
"lang_parse_bt":"このトゥートをブースト",
|
||||
"lang_parse_fav":"このトゥートをお気に入り登録",
|
||||
"lang_parse_quote":"このトゥートを引用",
|
||||
"lang_parse_del":"このトゥートを削除",
|
||||
"lang_parse_pin":"このトゥートをピン留め",
|
||||
"lang_parse_det":"詳細(メインアカウント経由)",
|
||||
"lang_parse_redraft":"このトゥートを削除して再編集",
|
||||
"lang_parse_followed":"フォローされました。",
|
||||
"lang_parse_clientop":"クライアント処理",
|
||||
"lang_parse_clienttxt":"に対する処理を選択してください。",
|
||||
"lang_parse_clientno":"何もしない",
|
||||
"lang_parse_clientemp":"強調表示/解除",
|
||||
"lang_parse_clientmute":"ミュート",
|
||||
"lang_parse_mute":"ミュートします。設定から解除できます。",
|
||||
"lang_parse_voted":"投票済みです",
|
||||
"lang_parse_vote":"投票",
|
||||
"lang_parse_unvoted":"結果だけ見る",
|
||||
"lang_parse_endedvote":"終了済み",
|
||||
"lang_parse_thread":"会話を表示",
|
||||
//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
206
app/js/lang/lang.ps.js
Normal 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"
|
||||
}
|
||||
@@ -1,51 +1,110 @@
|
||||
//入力時にハッシュタグと@をサジェスト
|
||||
var timer = null;
|
||||
//インスタンスリスト
|
||||
var idata={
|
||||
"kirishima.cloud":"instance",
|
||||
"kirishima.cloud_name":"アスタルテ",
|
||||
"kirishima.cloud_letters":"6229",
|
||||
"kirishima.cloud_bbcode":"enabled",
|
||||
"kirishima.cloud_markdown":"enabled",
|
||||
"kirishima.cloud_glitch":"enabled",
|
||||
"kirishima.cloud_public":"パブリックタイムライン",
|
||||
"minohdon.jp":"instance",
|
||||
"minohdon.jp_name":"箕面丼",
|
||||
"minohdon.jp_letters":"500",
|
||||
"minohdon.jp_bbcode":"disabled",
|
||||
"minohdon.jp_markdown":"disabled",
|
||||
"minohdon.jp_glitch":"disabled",
|
||||
"knzk.me":"instance",
|
||||
"knzk.me_name":"神崎丼",
|
||||
"knzk.me_letters":"5000",
|
||||
"knzk.me_bbcode":"disabled",
|
||||
"knzk.me_markdown":"disabled",
|
||||
"knzk.me_glitch":"enabled",
|
||||
"mastodos.com":"instance",
|
||||
"mastodos.com_name":"マストどす",
|
||||
"mastodos.com_letters":"500",
|
||||
"mastodos.com_bbcode":"disabled",
|
||||
"mastodos.com_markdown":"disabled",
|
||||
"mastodos.com_glitch":"disabled",
|
||||
"dev.kirishima.cloud":"hidden",
|
||||
"dev.kirishima.cloud_name":"アスタルテ(Dev)",
|
||||
"dev.kirishima.cloud_letters":"6229",
|
||||
"dev.kirishima.cloud_bbcode":"enabled",
|
||||
"dev.kirishima.cloud_markdown":"enabled",
|
||||
"dev.kirishima.cloud_glitch":"enabled",
|
||||
"mstdn.y-zu.org":"instance",
|
||||
"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
|
||||
"mstdn.y-zu.org_letters":"500",
|
||||
"mstdn.y-zu.org_bbcode":"disabled",
|
||||
"mstdn.y-zu.org_markdown":"enabled",
|
||||
"mstdn.y-zu.org_glitch":"disabled",
|
||||
"imastodon.net":"instance",
|
||||
"imastodon.net_name":"im@stodon",
|
||||
"imastodon.net_letters":"500",
|
||||
"imastodon.net_bbcode":"disabled",
|
||||
"imastodon.net_markdown":"disabled",
|
||||
"imastodon.net_home":"オフィス",
|
||||
"imastodon.net_local":"楽屋",
|
||||
"imastodon.net_notification":"ホワイトボード",
|
||||
"imastodon.net_public":"ライブステージ",
|
||||
"imastodon.net_post":"あふぅ",
|
||||
"imastodon.net_fav":"の頭にティンときたようです",
|
||||
"imastodon.net_bt":":「わかるわ」",
|
||||
"imastodon.net_follow":"名刺をいただきました",
|
||||
"imastodon.net_glitch":"disabled",
|
||||
"mstdn.osaka":"instance",
|
||||
"mstdn.osaka_name":"大阪丼",
|
||||
"mstdn.osaka_letters":"500",
|
||||
"mstdn.osaka_bbcode":"disabled",
|
||||
"mstdn.osaka_markdown":"disabled",
|
||||
"mstdn.osaka_home":"ウチ",
|
||||
"mstdn.osaka_local":"近所",
|
||||
"mstdn.osaka_notification":"あめちゃん",
|
||||
"mstdn.osaka_public":"新世界",
|
||||
"mstdn.osaka_post":"なんや!",
|
||||
"mstdn.osaka_fav":"がええやん言いました",
|
||||
"mstdn.osaka_bt":"がしばいた",
|
||||
"mstdn.osaka_follow":"ツルまれました",
|
||||
"mstdn.osaka_glitch":"disabled",
|
||||
"mstdn.kemono-friends.info":"instance",
|
||||
"mstdn.kemono-friends.info_name":"ますとどんちほー",
|
||||
"mstdn.kemono-friends.info_letters":"1024",
|
||||
"mstdn.kemono-friends.info_bbcode":"disabled",
|
||||
"mstdn.kemono-friends.info_markdown":"disabled",
|
||||
"mstdn.kemono-friends.info_home":"なわばり",
|
||||
"mstdn.kemono-friends.info_local":"ますとどんちほー",
|
||||
"mstdn.kemono-friends.info_notification":"ねえねえ!",
|
||||
"mstdn.kemono-friends.info_public":"ジャパリパーク",
|
||||
"mstdn.kemono-friends.info_post":"がおー!",
|
||||
"mstdn.kemono-friends.info_fav":":「すごーい」",
|
||||
"mstdn.kemono-friends.info_bt":":「たーのしー」",
|
||||
"mstdn.kemono-friends.info_glitch":"disabled",
|
||||
"itabashi.0j0.jp":"instance",
|
||||
"itabashi.0j0.jp_name":"板橋丼",
|
||||
"itabashi.0j0.jp_letters":"1024",
|
||||
"itabashi.0j0.jp_bbcode":"disabled",
|
||||
"itabashi.0j0.jp_markdown":"disabled",
|
||||
"itabashi.0j0.jp_glitch":"disabled",
|
||||
"theboss.tech":"instance",
|
||||
"theboss.tech_name":"theboss.tech",
|
||||
"theboss.tech_letters":"1000",
|
||||
"theboss.tech_bbcode":"disabled",
|
||||
"theboss.tech_markdown":"disabled",
|
||||
"theboss.tech_glitch":"disabled",
|
||||
"dtp-mstdn.jp":"instance",
|
||||
"dtp-mstdn.jp_name":"DTP鯖",
|
||||
"dtp-mstdn.jp_letters":"500",
|
||||
"dtp-mstdn.jp_bbcode":"disabled",
|
||||
"dtp-mstdn.jp_markdown":"disabled",
|
||||
"dtp-mstdn.jp_glitch":"disabled",
|
||||
"misskey.xyz":"instance",
|
||||
"misskey.xyz_name":"Misskey",
|
||||
"misskey.xyz_letters":"1000",
|
||||
"misskey.xyz_bbcode":"disabled",
|
||||
"misskey.xyz_markdown":"enabled",
|
||||
"misskey.xyz_public":"Global",
|
||||
"misskey.xyz_post":"Post",
|
||||
"misskey.xyz_fav":" reacted your post.",
|
||||
"misskey.xyz_bt":" reposted your post.",
|
||||
};
|
||||
|
||||
var input = document.getElementById("url");
|
||||
|
||||
var prev_val = input.value;
|
||||
var oldSuggest;
|
||||
var suggest;
|
||||
input.addEventListener("focus", function() {
|
||||
$("#ins-suggest").html("");
|
||||
window.clearInterval(timer);
|
||||
timer = window.setInterval(function() {
|
||||
var new_val = input.value;
|
||||
if (prev_val != new_val) {
|
||||
if (new_val.length > 3) {
|
||||
var start = "https://instances.social/api/1.0/instances/search?q=" +
|
||||
new_val;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (!json.error) {
|
||||
|
||||
var urls = "もしかして:";
|
||||
Object.keys(json.instances).forEach(function(key) {
|
||||
var url = json.instances[key];
|
||||
urls = urls + ' <a onclick="login(\'' + url.name +
|
||||
'\')" class="pointer">' + url.name + '</a> ';
|
||||
});
|
||||
$("#ins-suggest").html(urls);
|
||||
}
|
||||
});
|
||||
}
|
||||
oldSuggest = suggest;
|
||||
prev_value = new_val;
|
||||
}
|
||||
}, 1000);
|
||||
}, false);
|
||||
|
||||
input.addEventListener("blur", function() {
|
||||
window.clearInterval(timer);
|
||||
}, false);
|
||||
localStorage.setItem("instance", JSON.stringify(idata));
|
||||
|
||||
@@ -5,75 +5,32 @@
|
||||
localStorage.removeItem("kirishima")
|
||||
localStorage.removeItem("imas")
|
||||
localStorage.removeItem("image");
|
||||
var idata={
|
||||
"kirishima.cloud":"instance",
|
||||
"kirishima.cloud_name":"アスタルテ",
|
||||
"kirishima.cloud_letters":"6229",
|
||||
"kirishima.cloud_bbcode":"disabled",
|
||||
"kirishima.cloud_markdown":"disabled",
|
||||
"minohdon.jp":"instance",
|
||||
"minohdon.jp_name":"箕面丼",
|
||||
"minohdon.jp_letters":"500",
|
||||
"minohdon.jp_bbcode":"disabled",
|
||||
"minohdon.jp_markdown":"disabled",
|
||||
"knzk.me":"instance",
|
||||
"knzk.me_name":"神崎丼",
|
||||
"knzk.me_letters":"5000",
|
||||
"knzk.me_bbcode":"disabled",
|
||||
"knzk.me_markdown":"disabled",
|
||||
"mastodos.com":"instance",
|
||||
"mastodos.com_name":"マストどす",
|
||||
"mastodos.com_letters":"500",
|
||||
"mastodos.com_bbcode":"disabled",
|
||||
"mastodos.com_markdown":"disabled",
|
||||
"dev.kirishima.cloud":"hidden",
|
||||
"dev.kirishima.cloud_name":"アスタルテ(Dev)",
|
||||
"dev.kirishima.cloud_letters":"6229",
|
||||
"dev.kirishima.cloud_bbcode":"enabled",
|
||||
"dev.kirishima.cloud_markdown":"enabled",
|
||||
"mstdn.y-zu.org":"instance",
|
||||
"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
|
||||
"mstdn.y-zu.org_letters":"500",
|
||||
"mstdn.y-zu.org_bbcode":"disabled",
|
||||
"mstdn.y-zu.org_markdown":"disabled",
|
||||
"imastodon.net":"instance",
|
||||
"imastodon.net_name":"im@stodon",
|
||||
"imastodon.net_letters":"500",
|
||||
"imastodon.net_bbcode":"disabled",
|
||||
"imastodon.net_markdown":"disabled",
|
||||
"imastodon.net_home":"オフィス",
|
||||
"imastodon.net_local":"楽屋",
|
||||
"imastodon.net_notification":"ホワイトボード",
|
||||
"imastodon.net_public":"ライブステージ",
|
||||
"mstdn.osaka":"instance",
|
||||
"mstdn.osaka_name":"大阪丼",
|
||||
"mstdn.osaka_letters":"500",
|
||||
"mstdn.osaka_bbcode":"disabled",
|
||||
"mstdn.osaka_markdown":"disabled",
|
||||
"mstdn.osaka_home":"ウチ",
|
||||
"mstdn.osaka_local":"近所",
|
||||
"mstdn.osaka_notification":"あめちゃん",
|
||||
"mstdn.osaka_public":"新世界",
|
||||
"mstdn.kemono-friends.info":"instance",
|
||||
"mstdn.kemono-friends.info_name":"ますとどんちほー",
|
||||
"mstdn.kemono-friends.info_letters":"1024",
|
||||
"mstdn.kemono-friends.info_bbcode":"disabled",
|
||||
"mstdn.kemono-friends.info_markdown":"disabled",
|
||||
"mstdn.kemono-friends.info_home":"なわばり",
|
||||
"mstdn.kemono-friends.info_local":"ますとどんちほー",
|
||||
"mstdn.kemono-friends.info_notification":"ねえねえ!",
|
||||
"mstdn.kemono-friends.info_public":"ジャパリパーク",
|
||||
"itabashi.0j0.jp":"instance",
|
||||
"itabashi.0j0.jp_name":"板橋丼",
|
||||
"itabashi.0j0.jp_letters":"1024",
|
||||
"itabashi.0j0.jp_bbcode":"disabled",
|
||||
"itabashi.0j0.jp_markdown":"disabled",
|
||||
};
|
||||
localStorage.setItem("instance", JSON.stringify(idata));
|
||||
|
||||
localStorage.removeItem("stable")
|
||||
localStorage.setItem("mode_misskey.xyz","misskey")
|
||||
function ck() {
|
||||
var domain = localStorage.getItem("domain_0");
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var main = localStorage.getItem("main");
|
||||
if(!main){
|
||||
localStorage.setItem("main",0)
|
||||
}
|
||||
var domainz = localStorage.getItem("domain_0");
|
||||
var at = localStorage.getItem("acct_0_at");
|
||||
var oldat = localStorage.getItem(domainz + "_at");
|
||||
if(oldat){
|
||||
console.log("Move to New Account Management System")
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var acctlen=1;
|
||||
} else {
|
||||
var obj = JSON.parse(multi);
|
||||
var acctlen=obj.length;
|
||||
}
|
||||
for(i=0;acctlen>i;i++){
|
||||
var domain = localStorage.getItem("domain_"+i);
|
||||
var oldat = localStorage.getItem(domain + "_at");
|
||||
var newat = localStorage.setItem("acct_"+ i + "_at",oldat);
|
||||
localStorage.removeItem(domain + "_at");
|
||||
}
|
||||
}
|
||||
//コード受信
|
||||
if(location.search){
|
||||
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
|
||||
@@ -81,19 +38,31 @@ function ck() {
|
||||
var codex=m[2];
|
||||
if(mode=="manager" || mode=="login"){
|
||||
code(codex,mode);
|
||||
}else{
|
||||
|
||||
}else{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (at) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [];
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
} else {
|
||||
var obj = JSON.parse(multi);
|
||||
}
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var acct=obj[key];
|
||||
if(acct.domain){
|
||||
refresh(key,true)
|
||||
}
|
||||
});
|
||||
console.log(obj);
|
||||
if (obj[0].domain) {
|
||||
$("#tl").show();
|
||||
parseColumn();
|
||||
multi();
|
||||
ticker();
|
||||
multiSelector();
|
||||
} else {
|
||||
$("#tl").show();
|
||||
multi();
|
||||
$("#post-box").hide();
|
||||
}
|
||||
}
|
||||
ck();
|
||||
@@ -109,7 +78,7 @@ function login(url) {
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
scopes: 'read write follow',
|
||||
client_name: "TheDesk(PC)",
|
||||
@@ -117,7 +86,7 @@ function login(url) {
|
||||
website: "https://thedesk.top"
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
|
||||
@@ -128,9 +97,7 @@ function login(url) {
|
||||
localStorage.setItem("client_secret", json["client_secret"]);
|
||||
$("#auth").show();
|
||||
$("#masara").hide();
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
const { shell } = require('electron');
|
||||
|
||||
shell.openExternal(auth);
|
||||
|
||||
@@ -201,7 +168,7 @@ function code(code,mode) {
|
||||
function getdata() {
|
||||
var acct_id = 0;
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -218,7 +185,7 @@ function getdata() {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
console.error("Error:" + json.error);
|
||||
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
|
||||
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
|
||||
5000);
|
||||
return;
|
||||
}
|
||||
@@ -232,7 +199,9 @@ function getdata() {
|
||||
name: json["display_name"],
|
||||
domain: domain,
|
||||
user: json["acct"],
|
||||
prof: avatar
|
||||
prof: avatar,
|
||||
id: json["id"],
|
||||
vis: json["source"]["privacy"]
|
||||
}];
|
||||
var json = JSON.stringify(obj);
|
||||
console.log(obj);
|
||||
@@ -266,14 +235,19 @@ function getdataAdv(domain, at) {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
console.error("Error:" + json.error);
|
||||
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
|
||||
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
|
||||
5000);
|
||||
return;
|
||||
}
|
||||
var avatar=json["avatar"];
|
||||
//missingがmissingなやつ
|
||||
if(avatar=="/avatars/original/missing.png"){
|
||||
avatar="./img/missing.svg";
|
||||
avatar="../../img/missing.svg";
|
||||
}
|
||||
if(json["source"]["privacy"]){
|
||||
var priv=json["source"]["privacy"];
|
||||
}else{
|
||||
var priv="public";
|
||||
}
|
||||
var add = {
|
||||
at: at,
|
||||
@@ -281,7 +255,8 @@ function getdataAdv(domain, at) {
|
||||
domain: domain,
|
||||
user: json["acct"],
|
||||
prof: avatar,
|
||||
id: json["id"]
|
||||
id: json["id"],
|
||||
vis: priv
|
||||
};
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
@@ -297,17 +272,86 @@ function getdataAdv(domain, at) {
|
||||
location.href="index.html";
|
||||
});
|
||||
}
|
||||
|
||||
//ユーザーデータ更新
|
||||
function refresh(target,loadskip) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
if(obj[target].mode=="misskey"){
|
||||
return
|
||||
}
|
||||
var start = "https://" + obj[target].domain +
|
||||
"/api/v1/accounts/verify_credentials";
|
||||
console.log(start);
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + obj[target].at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
console.error("Error:" + json.error);
|
||||
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
|
||||
5000);
|
||||
return;
|
||||
}
|
||||
var avatar=json["avatar"];
|
||||
//missingがmissingなやつ
|
||||
if(avatar=="/avatars/original/missing.png" || !avatar){
|
||||
avatar="./img/missing.svg";
|
||||
}
|
||||
var ref = {
|
||||
at: obj[target].at,
|
||||
name: json["display_name"],
|
||||
domain: obj[target].domain,
|
||||
user: json["acct"],
|
||||
prof: avatar,
|
||||
id: json["id"],
|
||||
vis: json["source"]["privacy"]
|
||||
};
|
||||
localStorage.setItem("name_" + target, json["display_name"]);
|
||||
localStorage.setItem("user_" + target, json["acct"]);
|
||||
localStorage.setItem("user-id_" + target, json["id"]);
|
||||
console.log("user-id_" + target+":"+json["id"])
|
||||
console.log(localStorage.getItem("user-id_"+target));
|
||||
localStorage.setItem("prof_" + target, avatar);
|
||||
localStorage.setItem("follow_" + target, json["following_count"]);
|
||||
obj[target] = ref;
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
if(!loadskip){
|
||||
load();
|
||||
}
|
||||
});
|
||||
}
|
||||
//MarkdownやBBCodeの対応、文字数制限をチェック
|
||||
//絶対ストリーミングを閉じさせないマン
|
||||
function ckdb(acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
localStorage.removeItem("home_" + acct_id);
|
||||
localStorage.removeItem("bb_" + acct_id);
|
||||
localStorage.removeItem("md_" + acct_id);
|
||||
localStorage.removeItem("local_" + acct_id);
|
||||
localStorage.removeItem("public_" + acct_id);
|
||||
localStorage.removeItem("notification_" + acct_id);
|
||||
localStorage.removeItem("post_" + acct_id);
|
||||
localStorage.removeItem("fav_" + acct_id);
|
||||
localStorage.removeItem("bt_" + acct_id);
|
||||
localStorage.removeItem("followlocale_" + acct_id);
|
||||
if(domain=="kirishima.cloud"){
|
||||
localStorage.setItem("kirishima", "true");
|
||||
$("#ranking-btn").show();
|
||||
}else if(domain=="imastodon.nat"){
|
||||
}else if(domain=="imastodon.net"){
|
||||
localStorage.setItem("imas", "true");
|
||||
$(".imasonly").show();
|
||||
}
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var bbcode = domain + "_bbcode";
|
||||
var letters = domain + "_letters";
|
||||
if(localStorage.getItem("instance")){
|
||||
@@ -330,6 +374,8 @@ function ckdb(acct_id) {
|
||||
localStorage.setItem("md_" + acct_id, "true");
|
||||
$(".markdown").show();
|
||||
}else{
|
||||
$(".anti-markdown").hide();
|
||||
$(".markdown").hide();
|
||||
localStorage.removeItem("bb_" + acct_id);
|
||||
}
|
||||
if(json[domain + "_home"]){
|
||||
@@ -345,27 +391,53 @@ function ckdb(acct_id) {
|
||||
if(json[domain + "_notification"]){
|
||||
localStorage.setItem("notification_" + acct_id, json[domain + "_notification"]);
|
||||
}
|
||||
|
||||
if(json[domain + "_post"]){
|
||||
localStorage.setItem("post_" + acct_id, json[domain + "_post"]);
|
||||
}
|
||||
if(json[domain + "_fav"]){
|
||||
localStorage.setItem("fav_" + acct_id, json[domain + "_fav"]);
|
||||
}
|
||||
if(json[domain + "_bt"]){
|
||||
localStorage.setItem("bt_" + acct_id, json[domain + "_bt"]);
|
||||
}
|
||||
if(json[domain + "_follow"]){
|
||||
localStorage.setItem("followlocale_" + acct_id, json[domain + "_follow"]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//サポートインスタンス取得
|
||||
function support() {
|
||||
var json=JSON.parse(localStorage.getItem("instance"));
|
||||
console.log(json);
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var instance = json[key];
|
||||
if (instance == "instance") {
|
||||
templete = '<button class="btn waves-effect" onclick="login(\'' + key +
|
||||
'\')">' + json[key + "_name"] + '(' + key + ')</button>';
|
||||
$("#support").append(templete);
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
var start = "https://" + domain + "/api/v1/instance";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
return;
|
||||
}
|
||||
if(json){
|
||||
if(json["max_toot_chars"]){
|
||||
localStorage.setItem("letters_" + acct_id, json["max_toot_chars"]);
|
||||
}
|
||||
if(json["urls"]["streaming_api"]){
|
||||
localStorage.setItem("streaming_" + acct_id, json["urls"]["streaming_api"]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}else{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//アカウントを選択…を実装
|
||||
function multi() {
|
||||
function multiSelector() {
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [];
|
||||
@@ -375,41 +447,68 @@ function multi() {
|
||||
var obj = JSON.parse(multi);
|
||||
}
|
||||
var templete;
|
||||
var last = localStorage.getItem("last-use");
|
||||
if(localStorage.getItem("mainuse")=="main"){
|
||||
var last = localStorage.getItem("main");
|
||||
}else if(localStorage.getItem("last-use")){
|
||||
var last = localStorage.getItem("last-use");
|
||||
}else{
|
||||
var last=0;
|
||||
}
|
||||
var sel;
|
||||
console.log(obj.length)
|
||||
if(obj.length<1){
|
||||
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
|
||||
$("#add-acct-sel").html('<option value="noauth">認証せずに見る</option>');
|
||||
$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
|
||||
}else{
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var acct = obj[key];
|
||||
var list = key * 1 + 1;
|
||||
if (key == last) {
|
||||
sel = "selected";
|
||||
var domain = localStorage.getItem("domain_" + key);
|
||||
var domain = acct.domain;
|
||||
localStorage.setItem("domain_" + key, domain);
|
||||
if(idata[domain+"_letters"]){
|
||||
$("#textarea").attr("data-length", idata[domain+"_letters"])
|
||||
}else{
|
||||
$("#textarea").attr("data-length", 500)
|
||||
var maxletters = localStorage.getItem("letters_" + key);
|
||||
if(maxletters>0){
|
||||
$("#textarea").attr("data-length", maxletters)
|
||||
}else{
|
||||
$("#textarea").attr("data-length", 500)
|
||||
}
|
||||
}
|
||||
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
|
||||
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">ダイレクトメッセージ</option>');
|
||||
}else{
|
||||
$("#direct-add").remove();
|
||||
if(idata[domain+"_glitch"]){
|
||||
$("#local-button").removeClass("hide")
|
||||
}
|
||||
var profimg=localStorage.getItem("prof_"+key);
|
||||
var domain=localStorage.getItem("domain_"+key);
|
||||
var profimg = acct.prof;
|
||||
localStorage.setItem("prof_" + key, profimg);
|
||||
console.log(profimg);
|
||||
if(!profimg){
|
||||
profimg="./img/missing.svg";
|
||||
profimg="../../img/missing.svg";
|
||||
}
|
||||
$("#acct-sel-prof").attr("src",profimg);
|
||||
$("#toot-post-btn").text("トゥート("+domain+")");
|
||||
console.log(domain);
|
||||
if(domain){
|
||||
var cc="("+domain+")";
|
||||
}else{
|
||||
var cc="";
|
||||
}
|
||||
$("#toot-post-btn").text(lang.lang_toot+cc);
|
||||
if(acct.background && acct.background!="def" && acct.text && acct.text!="def"){
|
||||
$("#toot-post-btn").removeClass("indigo");
|
||||
$("#toot-post-btn").css("background-color","#"+acct.background);
|
||||
$("#toot-post-btn").css("color",acct.text);
|
||||
}else{
|
||||
}
|
||||
if(domain=="kirishima.cloud"){
|
||||
$("#faicon-btn").show();
|
||||
}else{
|
||||
$("#faicon-btn").hide();
|
||||
}
|
||||
if(domain=="imastodon.net"){
|
||||
trendTag();
|
||||
}else{
|
||||
$("#trendtag").html("");
|
||||
}
|
||||
} else {
|
||||
sel = "";
|
||||
}
|
||||
@@ -420,9 +519,10 @@ function multi() {
|
||||
|
||||
});
|
||||
$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
|
||||
$("#add-acct-sel").append('<option value="noauth">認証せずに見る</option>');
|
||||
$("#add-acct-sel").append('<option value="noauth">'+lang.lang_login_noauth+'</option><option value="webview">Twitter</option>');
|
||||
}
|
||||
$('select').material_select('update');
|
||||
parseColumn();
|
||||
}
|
||||
|
||||
//バージョンエンコ
|
||||
@@ -434,3 +534,24 @@ function enc(ver){
|
||||
var ver = ver.replace( /\]/g , "" );
|
||||
return ver;
|
||||
}
|
||||
//インスタンスティッカー
|
||||
function ticker() {
|
||||
var start = "https://toot.app/toot/";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json.error) {
|
||||
return;
|
||||
}
|
||||
if(json){
|
||||
localStorage.setItem("ticker", JSON.stringify(json));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
//ログアウトします
|
||||
function logout(){
|
||||
localStorage.removeItem(localStorage.getItem("domain_"+acct_id)+"_at");
|
||||
localStorage.removeItem("acct_"+ acct_id + "_at");
|
||||
localStorage.removeItem("domain_"+acct_id);
|
||||
location.href="index.html";
|
||||
todc();
|
||||
|
||||
@@ -12,35 +12,46 @@ function load() {
|
||||
$(".now-domain").text(domain);
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [{
|
||||
at: localStorage.getItem(localStorage.getItem("domain_0") + "_at"),
|
||||
name: localStorage.getItem("name_0"),
|
||||
domain: localStorage.getItem("domain_0"),
|
||||
user: localStorage.getItem("user_0"),
|
||||
prof: localStorage.getItem("prof_0"),
|
||||
id: localStorage.getItem("user-id_0")
|
||||
}];
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
var obj = [];
|
||||
} else {
|
||||
var obj = JSON.parse(multi);
|
||||
}
|
||||
if(obj[0]){
|
||||
if(!obj[0].at){
|
||||
obj=[];
|
||||
localStorage.removeItem("multi");
|
||||
}
|
||||
}
|
||||
|
||||
console.log(obj);
|
||||
var templete;
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var acct = obj[key];
|
||||
var list = key * 1 + 1;
|
||||
templete = '<div id="acct_' + key + '"><div class="col s1">' + list +
|
||||
'.</div><div class="col s2"><img src="' + acct.prof + '" width="40" height="40"></div><div class="text col s3">' +
|
||||
acct.name + ' <span class="gray">' + escapeHTML(acct.user) + '@' + acct.domain +
|
||||
'</span></div><div class="col s2"><button class="btn waves-effect disTar" onclick="data(\'' +
|
||||
if(acct.background!="def" && acct.text!="def"){
|
||||
var style='style="background-color:#'+acct.background+'; color:'+acct.text+';"'
|
||||
}else{
|
||||
var style=""
|
||||
}
|
||||
if(acct.name){
|
||||
var name=acct.name;
|
||||
}else{
|
||||
var name=acct.user;
|
||||
}
|
||||
templete = '<div id="acct_' + key + '" class="card" '+style+'><div class="card-content "><span class="lts">' + list +
|
||||
'.</span><img src="' + acct.prof + '" width="40" height="40"><span class="card-title">' +
|
||||
name + '</span>' + escapeHTML(acct.user) + '@' + acct.domain +
|
||||
'</div><div class="card-action"><a class="waves-effect disTar pointer white-text" onclick="data(\'' +
|
||||
acct.domain +
|
||||
'\')">インスタンス情報</button></div><div class="col s2"><button class="btn waves-effect" onclick="refresh(' +
|
||||
'\')"><i class="material-icons">info</i>'+lang.lang_manager_info+'</a><a class="waves-effect disTar pointer white-text" onclick="refresh(' +
|
||||
key +
|
||||
')">情報更新</button></div><div class="col s2"><button class="btn waves-effect red disTar" onclick="multiDel(' +
|
||||
key + ')">削除</button><br></div></div>';
|
||||
')"><i class="material-icons">refresh</i>'+lang.lang_manager_refresh+'</a><a class="waves-effect disTar pointer red-text" onclick="multiDel(' +
|
||||
key +
|
||||
')"><i class="material-icons">delete</i>'+lang.lang_manager_delete+'</a><br>'+lang.lang_manager_color+'<div id="colorsel_'+key+'" class="colorsel"></div></div></div>';
|
||||
$("#acct-list").append(templete);
|
||||
colorpicker(key)
|
||||
});
|
||||
multisel();
|
||||
var acctN = localStorage.getItem("acct");
|
||||
if (!acctN) {
|
||||
localStorage.setItem("acct", 0);
|
||||
@@ -49,18 +60,18 @@ function load() {
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var platform=remote.process.platform;
|
||||
if(platform=="win32"){
|
||||
|
||||
if(localStorage.getItem("winstore")!="localinstall"){
|
||||
$("#linux").prop("checked", false);
|
||||
}else{
|
||||
$("#linux").prop("checked", true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//最初に読む
|
||||
load();
|
||||
support();
|
||||
|
||||
//instances.social
|
||||
//instances.social/instances API
|
||||
function data(domain) {
|
||||
$("#ins-upd").text("Loading...");
|
||||
$("#ins-add").text("Loading...");
|
||||
@@ -71,7 +82,7 @@ function data(domain) {
|
||||
$("#ins-user").text("Loading...");
|
||||
$("#ins-ver").text("Loading...");
|
||||
$("#ins-name").text("Loading...");
|
||||
$("#ins-prof").attr('src', "./img/loading.svg");
|
||||
$("#ins-prof").attr('src', "../../img/loading.svg");
|
||||
var start = "https://instances.social/api/1.0/instances/show?name=" + domain;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -96,7 +107,31 @@ function data(domain) {
|
||||
$("#ins-per").text(json.uptime * 100);
|
||||
$("#ins-user").text(json.users);
|
||||
$("#ins-ver").text(json.version);
|
||||
}
|
||||
});
|
||||
var start = "https://" + domain +"/api/v1/instance";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (!json.error) {
|
||||
$("#ins-title").text(json.title);
|
||||
$("#ins-desc").html(json.description);
|
||||
$("#ins-email").text(json.email);
|
||||
$("#ins-toot").text(json.stats.status_count);
|
||||
$("#ins-user").text(json.stats.user_count);
|
||||
$("#ins-ver").text(json.version);
|
||||
$("#ins-prof").attr('src', json.thumbnail);
|
||||
$("#ins-admin").text(escapeHTML(json.contact_account.display_name)+"("+json.contact_account.acct+")");
|
||||
$("#ins-admin").attr("href","index.html?mode=user&code="+json.contact_account.username+"@"+domain);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -105,26 +140,127 @@ function data(domain) {
|
||||
function multiDel(target) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] + "を削除します")) {
|
||||
//削除確認ダイアログ
|
||||
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var nk=key-1;
|
||||
//公開範囲(差分のみ)
|
||||
if(key>=target){
|
||||
var oldvis=localStorage.getItem("vis-memory-"+key);
|
||||
console.log(oldvis);
|
||||
if(oldvis){
|
||||
localStorage.setItem("vis-memory-"+nk,oldvis);
|
||||
}
|
||||
}
|
||||
//独自ロケール
|
||||
localStorage.removeItem("home_" + key);
|
||||
localStorage.removeItem("local_" + key);
|
||||
localStorage.removeItem("public_" + key);
|
||||
localStorage.removeItem("notification_" + key);
|
||||
//アクセストークンとドメイン、プロフ(差分)
|
||||
if(key>target){
|
||||
var olddom=localStorage.getItem("domain_"+key);
|
||||
localStorage.setItem("domain_"+nk,olddom);
|
||||
var oldat=localStorage.getItem("acct_"+key+"_at");
|
||||
localStorage.setItem("acct_"+nk+"_at",oldat);
|
||||
localStorage.setItem("name_" + nk, localStorage.getItem("name_" + key));
|
||||
localStorage.setItem("user_" + target, localStorage.getItem("user_" + key));
|
||||
localStorage.setItem("user-id_" + target, localStorage.getItem("user-id_" + key));
|
||||
localStorage.setItem("prof_" + target, localStorage.getItem("prof_" + key));
|
||||
}
|
||||
|
||||
});
|
||||
//とりあえず消す
|
||||
obj.splice(target, 1);
|
||||
console.log(obj);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
load();
|
||||
//カラムデータコンフリクト
|
||||
var col = localStorage.getItem("column");
|
||||
var oldcols = JSON.parse(col);
|
||||
var newcols=[];
|
||||
Object.keys(oldcols).forEach(function(key) {
|
||||
var nk=key-1;
|
||||
var oldcol=oldcols[key];
|
||||
if(target<oldcol.domain){
|
||||
var newdom=oldcol.domain-1;
|
||||
}else{
|
||||
var newdom=oldcol.domain;
|
||||
}
|
||||
var type=oldcol.type;
|
||||
//消した垢のコラムじゃないときコピー
|
||||
if(target!=oldcol.domain){
|
||||
var add = {
|
||||
domain: newdom,
|
||||
type: type
|
||||
};
|
||||
newcols.push(add);
|
||||
}
|
||||
});
|
||||
var json = JSON.stringify(newcols);
|
||||
localStorage.setItem("column", json);
|
||||
|
||||
}
|
||||
}
|
||||
function multiDel2(target) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
if (confirm(obj[target]["user"] + "@" + obj[target]["domain"] +lang.lang_manager_confirm)) {
|
||||
obj.splice(target, 1);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
if(key>=target){
|
||||
var oldvis=localStorage.getItem("vis-memory-"+key);
|
||||
console.log(oldvis);
|
||||
if(oldvis){
|
||||
var nk=key-1;
|
||||
localStorage.setItem("vis-memory-"+nk,oldvis);
|
||||
}
|
||||
}
|
||||
localStorage.removeItem("home_" + key);
|
||||
localStorage.removeItem("local_" + key);
|
||||
localStorage.removeItem("public_" + key);
|
||||
localStorage.removeItem("notification_" + key);
|
||||
refresh(key);
|
||||
});
|
||||
var col = localStorage.getItem("column");
|
||||
if (!col) {
|
||||
var obj = [{
|
||||
domain: 0,
|
||||
type: 'local'
|
||||
}];
|
||||
localStorage.setItem("card_0","true");
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
} else {
|
||||
var cobj = JSON.parse(col);
|
||||
}
|
||||
Object.keys(cobj).forEach(function(key) {
|
||||
var column = cobj[key];
|
||||
if(column.domain>target){
|
||||
var nk=key-1;
|
||||
column.domain=nk;
|
||||
cobj[key]=column;
|
||||
}else if(column.domain==target){
|
||||
localStorage.removeItem("card_" + tlid);
|
||||
cobj.splice(key, 1);
|
||||
}
|
||||
});
|
||||
var json = JSON.stringify(column);
|
||||
localStorage.setItem("column", json);
|
||||
load();
|
||||
}
|
||||
}
|
||||
|
||||
//サポートインスタンス
|
||||
function support() {
|
||||
var json=JSON.parse(localStorage.getItem("instance"));
|
||||
console.log(json);
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var instance = json[key];
|
||||
Object.keys(idata).forEach(function(key) {
|
||||
var instance = idata[key];
|
||||
if (instance == "instance") {
|
||||
templete = '<a onclick="login(\'' + key +
|
||||
'\')" class="collection-item pointer transparent">' + json[key + "_name"] + '(' + key + ')</a>';
|
||||
'\')" class="collection-item pointer transparent">' + idata[key + "_name"] + '(' + key + ')</a>';
|
||||
$("#support").append(templete);
|
||||
}
|
||||
});
|
||||
@@ -134,29 +270,23 @@ function support() {
|
||||
function login(url) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
var ng;
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var acct = obj[key];
|
||||
if (acct.domain == url) {
|
||||
Materialize.toast(url + "は登録できません。同一インスタンスには一つのアカウントでしかログインできません。", 5000);
|
||||
ng = "true";
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (ng) {
|
||||
if($('#misskey:checked').val()=="on" || url=="misskey.xyz"){
|
||||
$("#misskey").prop("checked", true);
|
||||
misskeyLogin(url);
|
||||
return;
|
||||
}
|
||||
if($('#linux:checked').val()=="on"){
|
||||
var red = "urn:ietf:wg:oauth:2.0:oob"
|
||||
var red = "https://thedesk.top/hello.html"
|
||||
}else{
|
||||
var red = 'thedesk://manager';
|
||||
}
|
||||
console.log(red);
|
||||
localStorage.setItem("redirect", red);
|
||||
var start = "https://" + url + "/api/v1/apps";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
scopes: 'read write follow',
|
||||
client_name: "TheDesk(PC)",
|
||||
@@ -164,12 +294,13 @@ function login(url) {
|
||||
website: "https://thedesk.top"
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
localStorage.setItem("msky","false");
|
||||
var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
|
||||
"client_id"] + "&client_secret=" + json["client_secret"] +
|
||||
"&response_type=code&scope=read+write+follow&redirect_uri=" + red;
|
||||
"&response_type=code&scope=read+write+follow&redirect_uri=" + encodeURIComponent(red);
|
||||
localStorage.setItem("domain_tmp", url);
|
||||
localStorage.setItem("client_id", json["client_id"]);
|
||||
localStorage.setItem("client_secret", json["client_secret"]);
|
||||
@@ -178,7 +309,7 @@ function login(url) {
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
|
||||
|
||||
shell.openExternal(auth);
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
@@ -190,10 +321,69 @@ function login(url) {
|
||||
|
||||
|
||||
}
|
||||
//これが後のMisskeyである。
|
||||
function misskeyLogin(url) {
|
||||
if(!url){
|
||||
var url=$("#misskey-url").val();
|
||||
}
|
||||
var start = "https://"+url+"/api/app/create";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
localStorage.setItem("msky","true");
|
||||
httpreq.send(JSON.stringify({
|
||||
name: "TheDesk(PC)",
|
||||
description: "Mastodon client for PC",
|
||||
permission: ["read","write","follow"]
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
misskeyAuth(url, json.secret)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
function misskeyAuth(url, mkc){
|
||||
var start = "https://"+url+"/api/auth/session/generate";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
|
||||
localStorage.setItem("mkc",mkc)
|
||||
localStorage.setItem("msky","true");
|
||||
httpreq.send(JSON.stringify({
|
||||
appSecret: mkc
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
var token=json.token;
|
||||
$("#auth").show();
|
||||
$("#code").val(token);
|
||||
$("#add").hide();
|
||||
$("#misskey").prop("checked", false);
|
||||
localStorage.setItem("domain_tmp",url);
|
||||
shell.openExternal(json.url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//テキストボックスにURL入れた
|
||||
function instance() {
|
||||
var url = $("#url").val();
|
||||
if(url.indexOf("@")!=-1 || url.indexOf("https")!=-1){
|
||||
alert("入力形式が違います。(Cutls@mstdn.jpにログインする場合、入力するのは\"mstdn.jp\"です。)")
|
||||
return false;
|
||||
}
|
||||
login(url);
|
||||
}
|
||||
|
||||
@@ -202,36 +392,85 @@ function code(code) {
|
||||
localStorage.removeItem("redirect")
|
||||
if(!code){
|
||||
var code = $("#code").val();
|
||||
$("#code").val("");
|
||||
}
|
||||
var url = localStorage.getItem("domain_tmp");
|
||||
localStorage.removeItem("domain_tmp");
|
||||
var start = "https://" + url + "/oauth/token";
|
||||
var id = localStorage.getItem("client_id");
|
||||
var secret = localStorage.getItem("client_secret");
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.send(JSON.stringify({
|
||||
grant_type: "authorization_code",
|
||||
redirect_uri: "urn:ietf:wg:oauth:2.0:oob",
|
||||
client_id: id,
|
||||
client_secret: secret,
|
||||
code: code
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if (json["access_token"]) {
|
||||
$("#auth").hide();
|
||||
$("#add").show();
|
||||
getdata(url, json["access_token"]);
|
||||
console.log(localStorage.getItem("msky"));
|
||||
if(localStorage.getItem("msky")=="true"){
|
||||
var start = "https://"+url+"/api/auth/session/userkey";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
token:code,
|
||||
appSecret:localStorage.getItem("mkc")
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
var i = sha256(json.accessToken + localStorage.getItem("mkc"));
|
||||
console.log(json);
|
||||
var avatar=json["user"]["avatarUrl"];
|
||||
var priv="public";
|
||||
var add = {
|
||||
at: i,
|
||||
name: json["user"]["name"],
|
||||
domain: url,
|
||||
user: json["user"]["username"],
|
||||
prof: avatar,
|
||||
id: json["user"]["id"],
|
||||
vis: priv,
|
||||
mode: "misskey"
|
||||
};
|
||||
localStorage.setItem("mode_" + url,"misskey")
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
var target = obj.lengtth;
|
||||
obj.push(add);
|
||||
localStorage.setItem("name_" + target, json["user"]["name"]);
|
||||
localStorage.setItem("user_" + target, json["user"]["username"]);
|
||||
localStorage.setItem("user-id_" + target, json["user"]["id"]);
|
||||
localStorage.setItem("prof_" + target, avatar);
|
||||
console.log(obj);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
|
||||
load();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}else{
|
||||
var start = "https://" + url + "/oauth/token";
|
||||
var id = localStorage.getItem("client_id");
|
||||
var secret = localStorage.getItem("client_secret");
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
grant_type: "authorization_code",
|
||||
redirect_uri: "https://thedesk.top/hello.html",
|
||||
client_id: id,
|
||||
client_secret: secret,
|
||||
code: code
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if (json["access_token"]) {
|
||||
$("#auth").hide();
|
||||
$("#add").show();
|
||||
getdata(url, json["access_token"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//ユーザーデータ取得
|
||||
function getdata(domain, at) {
|
||||
var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
|
||||
@@ -250,14 +489,19 @@ function getdata(domain, at) {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
console.error("Error:" + json.error);
|
||||
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
|
||||
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
|
||||
5000);
|
||||
return;
|
||||
}
|
||||
var avatar=json["avatar"];
|
||||
//missingがmissingなやつ
|
||||
if(avatar=="/avatars/original/missing.png"){
|
||||
avatar="./img/missing.svg";
|
||||
avatar="../../img/missing.svg";
|
||||
}
|
||||
if(json["source"]){
|
||||
var priv=json["source"]["privacy"];
|
||||
}else{
|
||||
var priv="public";
|
||||
}
|
||||
var add = {
|
||||
at: at,
|
||||
@@ -265,7 +509,9 @@ function getdata(domain, at) {
|
||||
domain: domain,
|
||||
user: json["acct"],
|
||||
prof: avatar,
|
||||
id: json["id"]
|
||||
id: json["id"],
|
||||
vis: priv,
|
||||
mode: "mastodon"
|
||||
};
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
@@ -286,6 +532,10 @@ function getdata(domain, at) {
|
||||
function refresh(target) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
if(obj[target].mode=="misskey"){
|
||||
misskeyRefresh(obj,target,obj[target].domain);
|
||||
return
|
||||
}
|
||||
var start = "https://" + obj[target].domain +
|
||||
"/api/v1/accounts/verify_credentials";
|
||||
console.log(start);
|
||||
@@ -304,7 +554,7 @@ function refresh(target) {
|
||||
console.log(json);
|
||||
if (json.error) {
|
||||
console.error("Error:" + json.error);
|
||||
Materialize.toast("エラーが発生しました。しばらく待ってから再起動してください。Error:" + json.error,
|
||||
Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
|
||||
5000);
|
||||
return;
|
||||
}
|
||||
@@ -319,7 +569,8 @@ function refresh(target) {
|
||||
domain: obj[target].domain,
|
||||
user: json["acct"],
|
||||
prof: avatar,
|
||||
id: json["id"]
|
||||
id: json["id"],
|
||||
vis: json["source"]["privacy"]
|
||||
};
|
||||
localStorage.setItem("name_" + target, json["display_name"]);
|
||||
localStorage.setItem("user_" + target, json["acct"]);
|
||||
@@ -328,10 +579,200 @@ function refresh(target) {
|
||||
console.log(localStorage.getItem("user-id_"+target));
|
||||
localStorage.setItem("prof_" + target, avatar);
|
||||
obj[target] = ref;
|
||||
console.log(obj);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
|
||||
load();
|
||||
});
|
||||
}
|
||||
function misskeyRefresh(obj,target,url){
|
||||
var start = "https://"+url+"/api/users/show";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
username:obj[target].user,
|
||||
i:localStorage.getItem("at")
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
return;
|
||||
var avatar=json["user"]["avatarURL"];
|
||||
var priv="public";
|
||||
var add = {
|
||||
at: json.accessToken,
|
||||
name: json["user"]["name"],
|
||||
domain: url,
|
||||
user: json["user"]["username"],
|
||||
prof: avatar,
|
||||
id: json["user"]["id"],
|
||||
vis: priv
|
||||
};
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
var target = obj.lengtth;
|
||||
obj.push(add);
|
||||
localStorage.setItem("name_" + target, json["user"]["name"]);
|
||||
localStorage.setItem("user_" + target, json["user"]["username"]);
|
||||
localStorage.setItem("user-id_" + target, json["user"]["id"]);
|
||||
localStorage.setItem("prof_" + target, avatar);
|
||||
console.log(obj);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
load();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//アカウントを選択…を実装
|
||||
function multisel() {
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [];
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
} else {
|
||||
var obj = JSON.parse(multi);
|
||||
}
|
||||
var templete;
|
||||
var last = localStorage.getItem("main");
|
||||
var sel;
|
||||
console.log(obj.length)
|
||||
if(obj.length<1){
|
||||
$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
|
||||
$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
|
||||
}else{
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var acct = obj[key];
|
||||
var list = key * 1 + 1;
|
||||
if (key == last) {
|
||||
sel = "selected";
|
||||
mainb='('+lang.lang_manager_def+')'
|
||||
var domain = localStorage.getItem("domain_" + key);
|
||||
var profimg=localStorage.getItem("prof_"+key);
|
||||
var domain=localStorage.getItem("domain_"+key);
|
||||
if(!profimg){
|
||||
profimg="../../img/missing.svg";
|
||||
}
|
||||
} else {
|
||||
sel = "";
|
||||
mainb=""
|
||||
}
|
||||
templete = '<option value="' + key + '" data-icon="' + acct.prof +
|
||||
'" class="left circle" ' + sel + '>' + acct.user + '@' + acct.domain +mainb+
|
||||
'</option>';
|
||||
$(".acct-sel").append(templete);
|
||||
|
||||
});
|
||||
}
|
||||
$('select').material_select('update');
|
||||
}
|
||||
function mainacct(){
|
||||
var acct_id = $("#main-acct-sel").val();
|
||||
localStorage.setItem("main", acct_id);
|
||||
Materialize.toast(lang.lang_manager_mainAcct, 3000);
|
||||
}
|
||||
function colorpicker(key){
|
||||
temp=
|
||||
'<div onclick="coloradd('+key+',\'def\',\'def\')" class="pointer exc">'+lang.lang_manager_none+'</div>'+
|
||||
'<div onclick="coloradd('+key+',\'f44336\',\'white\')" class="red white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'e91e63\',\'white\')" class="pink white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'9c27b0\',\'white\')" class="purple white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'673ab7\',\'white\')" class="deep-purple white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'3f51b5\',\'white\')" class="indigo white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'2196f3\',\'white\')" class="blue white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'03a9f4\',\'black\')" class="light-blue black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'00bcd4\',\'black\')" class="cyan black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'009688\',\'white\')" class="teal white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'4caf50\',\'black\')" class="green black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'8bc34a\',\'black\')" class="light-green black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'cddc39\',\'black\')" class="lime black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'ffeb3b\',\'black\')" class="yellow black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'ffc107\',\'black\')" class="amber black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'ff9800\',\'black\')" class="orange black-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'ff5722\',\'white\')" class="deep-orange white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'795548\',\'white\')" class="brown white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'9e9e9e\',\'white\')" class="grey white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'607d8b\',\'white\')" class="blue-grey white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'000000\',\'white\')" class="black white-text pointer"></div>'+
|
||||
'<div onclick="coloradd('+key+',\'ffffff\',\'black\')" class="white black-text pointer"></div>';
|
||||
$("#colorsel_"+key).html(temp);
|
||||
}
|
||||
function coloradd(key,bg,txt){
|
||||
var col = localStorage.getItem("multi");
|
||||
var o = JSON.parse(col);
|
||||
var obj=o[key];
|
||||
obj.background=bg;
|
||||
obj.text=txt;
|
||||
o[key]=obj;
|
||||
var json = JSON.stringify(o);
|
||||
localStorage.setItem("multi", json);
|
||||
if(txt=="def"){
|
||||
$("#acct_"+key).attr("style","")
|
||||
}else{
|
||||
$("#acct_"+key).css('background-color','#'+bg);
|
||||
if(txt=="black"){
|
||||
var bghex="000000";
|
||||
var ichex="9e9e9e"
|
||||
}else if(txt=="white"){
|
||||
var bghex="ffffff";
|
||||
var ichex="eeeeee"
|
||||
}
|
||||
$("#acct_"+key+" .nex").css('color','#'+ichex);
|
||||
$("#acct_"+key).css('color','#'+bghex);
|
||||
}
|
||||
}
|
||||
//入力時にハッシュタグと@をサジェスト
|
||||
var timer = null;
|
||||
|
||||
var input = document.getElementById("url");
|
||||
|
||||
var prev_val = input.value;
|
||||
var oldSuggest;
|
||||
var suggest;
|
||||
input.addEventListener("focus", function() {
|
||||
$("#ins-suggest").html("");
|
||||
window.clearInterval(timer);
|
||||
timer = window.setInterval(function() {
|
||||
var new_val = input.value;
|
||||
if (prev_val != new_val) {
|
||||
if (new_val.length > 3) {
|
||||
var start = "https://instances.social/api/1.0/instances/search?q=" +
|
||||
new_val;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer tC8F6xWGWBUwGScyNevYlx62iO6fdQ4oIK0ad68Oo7ZKB8GQdGpjW9TKxBnIh8grAhvd5rw3iyP9JPamoDpeLQdz62EToPJUW99hDx8rfuJfGdjQuimZPTbIOx0woA5M'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (!json.error) {
|
||||
|
||||
var urls = "Suggest:";
|
||||
Object.keys(json.instances).forEach(function(key) {
|
||||
var url = json.instances[key];
|
||||
urls = urls + ' <a onclick="login(\'' + url.name +
|
||||
'\')" class="pointer">' + url.name + '</a> ';
|
||||
});
|
||||
$("#ins-suggest").html(urls);
|
||||
}
|
||||
});
|
||||
}
|
||||
oldSuggest = suggest;
|
||||
prev_value = new_val;
|
||||
}
|
||||
}, 1000);
|
||||
}, false);
|
||||
|
||||
input.addEventListener("blur", function() {
|
||||
window.clearInterval(timer);
|
||||
}, false);
|
||||
@@ -8,9 +8,20 @@
|
||||
}
|
||||
var urls=[];
|
||||
if(url){
|
||||
urls = url.match(/https?:\/\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/);
|
||||
urls = url.match(/https?:\/\/(.+)/);
|
||||
//トゥートのURLぽかったら
|
||||
toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
||||
//タグのURLぽかったら
|
||||
var tags=[];
|
||||
tags = url.match(
|
||||
/https:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
||||
);
|
||||
//メンションっぽかったら
|
||||
var ats=[];
|
||||
ats = url.match(
|
||||
/https:\/\/([-a-zA-Z0-9@.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
||||
);
|
||||
console.log(toot);
|
||||
if(toot){
|
||||
if(toot[1]){
|
||||
var acct_id=$a.parent().attr("data-acct");
|
||||
@@ -21,14 +32,37 @@
|
||||
$a.parent().text("Loading...")
|
||||
detEx(url,acct_id);
|
||||
}
|
||||
|
||||
}else if(tags){
|
||||
if(tags[2]){
|
||||
tagShow(tags[2]);
|
||||
Materialize.toast('<a class="btn-flat toast-action" href="detEx(\''+url+'\')">Open in browser</a>', 86400);
|
||||
}
|
||||
}else if(ats){
|
||||
console.log(ats);
|
||||
if(ats[2]){
|
||||
if(ats[1]!="quesdon.rinsuki.net"){
|
||||
udgEx(ats[2]+"@"+ats[1],"main");
|
||||
return false
|
||||
}else{
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
|
||||
shell.openExternal(url);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}else{
|
||||
//hrefがhttp/httpsならブラウザで
|
||||
if(urls){
|
||||
if (urls[0]) {
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
|
||||
const {shell} = require('electron');
|
||||
if(~url.indexOf("thedeks.top")){
|
||||
//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
|
||||
url="https://thedesk.top";
|
||||
}
|
||||
shell.openExternal(url);
|
||||
} else {
|
||||
|
||||
@@ -45,8 +79,7 @@
|
||||
//よく使うライブラリ
|
||||
/*マルチバイト用切り出し*/
|
||||
$.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) {
|
||||
var ret = 0;
|
||||
@@ -77,22 +110,7 @@
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
$.strip_tags = function(str, allowed) {
|
||||
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
|
||||
.join('');
|
||||
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
|
||||
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
|
||||
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
|
||||
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
|
||||
});
|
||||
};
|
||||
function escapeHTML(str) {
|
||||
return str.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
}
|
||||
|
||||
//コピー
|
||||
function execCopy(string){
|
||||
var temp = $("#copy");
|
||||
@@ -115,7 +133,48 @@ function progshow(e) {
|
||||
if(percent<1){
|
||||
$("#imgup").text(Math.floor(percent*100)+"%");
|
||||
}else{
|
||||
$("#imgup").text("処理中");
|
||||
$("#imgup").text(lang.lang_progress);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.on('reload', function (event, arg) {
|
||||
location.reload();
|
||||
})
|
||||
ipc.on('mess', function (event, arg) {
|
||||
if(arg=="unzip"){
|
||||
if(lang=="ja"){
|
||||
$("body").text("アップデートを展開中です。");
|
||||
}else{
|
||||
$("body").text("Unzipping...");
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
//Native Notf
|
||||
ipc.on('shownotf', function (event, args) {
|
||||
if(args["type"]=="toot"){
|
||||
details(id, acct_id)
|
||||
}else if(args["type"]=="userdata"){
|
||||
udg(user, acct_id)
|
||||
}
|
||||
})
|
||||
function opendev(){
|
||||
var webview = document.getElementById("webview");
|
||||
webview.openDevTools();
|
||||
/*webview.sendInputEvent({
|
||||
type: "keyDown",
|
||||
keyCode: '2'
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
var webview = document.getElementById('webview');
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
webview.addEventListener('new-window', function(e) {
|
||||
shell.openExternal(e.url);
|
||||
});
|
||||
3
app/js/platform/first-not-view.js
Normal file
3
app/js/platform/first-not-view.js
Normal file
@@ -0,0 +1,3 @@
|
||||
//jQuery読む
|
||||
window.jQuery = window.$ = require('./js/common/jquery.js');
|
||||
var Hammer = require('./js/common/hammer.min.js');
|
||||
@@ -1,3 +1,160 @@
|
||||
//jQuery読む
|
||||
window.jQuery = window.$ = require('./js/common/jquery.js');
|
||||
var Hammer = require('./js/common/hammer.min.js');
|
||||
window.jQuery = window.$ = require('../../js/common/jquery.js');
|
||||
var Hammer = require('../../js/common/hammer.min.js');
|
||||
$.strip_tags = function(str, allowed) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
|
||||
.join('');
|
||||
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
|
||||
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
|
||||
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
|
||||
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
|
||||
});
|
||||
};
|
||||
function escapeHTML(str) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
return str.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
}
|
||||
//PHPのnl2brと同様
|
||||
function nl2br(str) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
str = str.replace(/\r\n/g, "<br />");
|
||||
str = str.replace(/(\n|\r)/g, "<br />");
|
||||
return str;
|
||||
}
|
||||
function formattime(date){
|
||||
var str=date.getFullYear()+"-";
|
||||
if(date.getMonth()+1<10){
|
||||
str=str+"0"+(date.getMonth()+1)+"-";
|
||||
}else{
|
||||
str=str+(date.getMonth()+1)+"-";
|
||||
}
|
||||
if(date.getDate()<10){
|
||||
str=str+"0"+date.getDate()
|
||||
}else{
|
||||
str=str+date.getDate()
|
||||
}
|
||||
str=str+"T";
|
||||
if(date.getHours()<10){
|
||||
str=str+"0"+date.getHours()+":"
|
||||
}else{
|
||||
str=str+date.getHours()+":"
|
||||
}
|
||||
if(date.getMinutes()<10){
|
||||
str=str+"0"+date.getMinutes()
|
||||
}else{
|
||||
str=str+date.getMinutes()
|
||||
}
|
||||
return str;
|
||||
}
|
||||
function formattimeutc(date){
|
||||
var str=date.getUTCFullYear()+"-";
|
||||
if(date.getUTCMonth()+1<10){
|
||||
str=str+"0"+(date.getUTCMonth()+1)+"-";
|
||||
}else{
|
||||
str=str+(date.getUTCMonth()+1)+"-";
|
||||
}
|
||||
if(date.getUTCDate()<10){
|
||||
str=str+"0"+date.getUTCDate()
|
||||
}else{
|
||||
str=str+date.getUTCDate()
|
||||
}
|
||||
str=str+"T";
|
||||
if(date.getUTCHours()<10){
|
||||
str=str+"0"+date.getUTCHours()+":"
|
||||
}else{
|
||||
str=str+date.getUTCHours()+":"
|
||||
}
|
||||
if(date.getUTCMinutes()<10){
|
||||
str=str+"0"+date.getUTCMinutes()
|
||||
}else{
|
||||
str=str+date.getUTCMinutes()
|
||||
}
|
||||
return str;
|
||||
}
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('custom-css-request', "");
|
||||
ipc.on('custom-css-response', function (event, arg) {
|
||||
if(arg==""){ return false; }
|
||||
var styleNode = document.createElement("style");
|
||||
styleNode.setAttribute("type","text/css")
|
||||
|
||||
var content = document.createTextNode(arg)
|
||||
styleNode.append(content)
|
||||
document.getElementsByTagName("head")[0].append(styleNode)
|
||||
})
|
||||
ipc.on('theme-css-response', function (event, arg) {
|
||||
if(arg==""){ return false; }
|
||||
var styleNode = document.createElement("style");
|
||||
styleNode.setAttribute("type","text/css")
|
||||
|
||||
var content = document.createTextNode(arg)
|
||||
styleNode.append(content)
|
||||
document.getElementsByTagName("head")[0].append(styleNode)
|
||||
})
|
||||
function makeCID(){
|
||||
return randomStr(8)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(12);
|
||||
}
|
||||
function randomStr(l){
|
||||
// 生成する文字列に含める文字セット
|
||||
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||
var cl = c.length;
|
||||
var r = "";
|
||||
for(var i=0; i<l; i++){
|
||||
r += c[Math.floor(Math.random()*cl)];
|
||||
}
|
||||
return r;
|
||||
}
|
||||
function rgbToHex(color)
|
||||
{
|
||||
// HEXに変換したものを代入する変数
|
||||
var hex = '';
|
||||
|
||||
// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
|
||||
// IE8の場合はjQueryのcss()関数でHEXを返すので除外
|
||||
if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i))
|
||||
{
|
||||
return color;
|
||||
}
|
||||
|
||||
// 正規表現
|
||||
var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/);
|
||||
|
||||
// 正規表現でマッチしたとき
|
||||
if (regex)
|
||||
{
|
||||
var rgb =
|
||||
[
|
||||
// RGBからHEXへ変換
|
||||
parseInt(regex[1]).toString(16),
|
||||
parseInt(regex[2]).toString(16),
|
||||
parseInt(regex[3]).toString(16)
|
||||
];
|
||||
|
||||
for (var i = 0; i < rgb.length; ++i)
|
||||
{
|
||||
// rgb(1,1,1)のようなときHEXに変換すると1桁になる
|
||||
// 1桁のときは前に0を足す
|
||||
if (rgb[i].length == 1)
|
||||
{
|
||||
rgb[i] = '0' + rgb[i];
|
||||
}
|
||||
hex += rgb[i];
|
||||
}
|
||||
|
||||
return hex;
|
||||
}
|
||||
|
||||
console.error(color+':第1引数はRGB形式で入力');
|
||||
}
|
||||
@@ -10,7 +10,7 @@ function tl(data) {
|
||||
//デフォルト
|
||||
var type = "local";
|
||||
}
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
$("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem(
|
||||
"user_" + acct_id) + "@" + domain + ")");
|
||||
var start = "https://" + domain + "/api/v1/timelines/" + com(type, data);
|
||||
@@ -29,16 +29,10 @@ function tl(data) {
|
||||
var templete = parse([json[0]], '', acct_id, tlid);
|
||||
$("#timeline_nano").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
reload(type, '', acct_id, data);
|
||||
});
|
||||
}
|
||||
|
||||
//Streaming接続
|
||||
var websocket=[];
|
||||
function reload(type, cc, acct_id, data) {
|
||||
var tlid=0;
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if (type == "home") {
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=user&access_token=" + at;
|
||||
@@ -132,6 +126,7 @@ function icon(type) {
|
||||
}
|
||||
function todo(){}
|
||||
function todc(){}
|
||||
function hide(){}
|
||||
$(function($) {
|
||||
//キーボードショートカット
|
||||
$(window).keydown(function(e) {
|
||||
|
||||
2
app/js/platform/pickr.js
Normal file
2
app/js/platform/pickr.js
Normal file
File diff suppressed because one or more lines are too long
@@ -48,9 +48,4 @@ function shot(){
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
$(window).load(function(){
|
||||
setTimeout(function(){
|
||||
shot();
|
||||
},2000);
|
||||
});
|
||||
}
|
||||
1
app/js/platform/tj-deck.js
Normal file
1
app/js/platform/tj-deck.js
Normal file
File diff suppressed because one or more lines are too long
319
app/js/platform/twitter.js
Normal file
319
app/js/platform/twitter.js
Normal file
File diff suppressed because one or more lines are too long
@@ -3,14 +3,20 @@
|
||||
function mdCheck(){
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var profimg=localStorage.getItem("prof_"+acct_id);
|
||||
$("#acct-sel-prof").attr("src",profimg);
|
||||
$("#toot-post-btn").text("トゥート("+localStorage.getItem("domain_"+acct_id)+")");
|
||||
if(!profimg){
|
||||
profimg="../../img/missing.svg";
|
||||
}
|
||||
$("#acct-sel-prof").attr("src",profimg);
|
||||
if(localStorage.getItem("post_" + acct_id)){
|
||||
$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")");
|
||||
}else{
|
||||
$("#toot-post-btn").text(lang.lang_toot+"("+localStorage.getItem("domain_"+acct_id)+")");
|
||||
}
|
||||
if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
|
||||
$(".markdown").addClass("hide");
|
||||
$(".anti-markdown").addClass("hide");
|
||||
}else{
|
||||
$(".markdown").removeClass("hide");
|
||||
$(".anti-markdown").addClass("hide");
|
||||
$(".anti-markdown").removeClass("hide");
|
||||
}
|
||||
if($(".markdown").hasClass("hide")){
|
||||
localStorage.setItem("md","hide");
|
||||
@@ -28,11 +34,39 @@ function mdCheck(){
|
||||
}else{
|
||||
$("#faicon-btn").hide();
|
||||
}
|
||||
if(domain=="imastodon.net"){
|
||||
trendTag();
|
||||
}else{
|
||||
$("#trendtag").html("");
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
Materialize.toast(lang.lang_bbmd_misskey, 5000);
|
||||
}
|
||||
if(idata[domain+"_letters"]){
|
||||
$("#textarea").attr("data-length", idata[domain+"_letters"])
|
||||
}else{
|
||||
$("#textarea").attr("data-length", 500)
|
||||
}
|
||||
if(idata[domain+"_glitch"]==="true"){
|
||||
$("#local-button").removeClass("hide");
|
||||
}else{
|
||||
$("#local-button").addClass("hide");
|
||||
}
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (multi) {
|
||||
var obj = JSON.parse(multi);
|
||||
if(obj[acct_id].background && obj[acct_id].background!="def" && obj[acct_id].text && obj[acct_id].text!="def"){
|
||||
$("#toot-post-btn").removeClass("indigo");
|
||||
$("#toot-post-btn").css("background-color","#"+obj[acct_id].background);
|
||||
$("#toot-post-btn").css("color",obj[acct_id].text);
|
||||
}else{
|
||||
$("#toot-post-btn").css("background-color","");
|
||||
$("#toot-post-btn").css("color","");
|
||||
$("#toot-post-btn").addClass("indigo");
|
||||
|
||||
}
|
||||
}
|
||||
loadVis();
|
||||
}
|
||||
//BOXのトグルボタン
|
||||
function mdToggle(){
|
||||
@@ -83,12 +117,6 @@ if(localStorage.getItem("md")=="hide"){
|
||||
}[match]
|
||||
});
|
||||
}
|
||||
//PHPのnl2brと同様
|
||||
function nl2br(str) {
|
||||
str = str.replace(/\r\n/g, "<br />");
|
||||
str = str.replace(/(\n|\r)/g, "<br />");
|
||||
return str;
|
||||
}
|
||||
//テキストボックスで選択したやつをタグで囲む(BB版)
|
||||
function surroundHTML(tagS,tagE) {
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
@@ -262,10 +290,10 @@ function preview(){
|
||||
for(let l = 0; l < li.length; l++) {
|
||||
var u=li[l].match(/^1\. (.+)$/);
|
||||
var listUl='<li>'+u[1]+'</li>';
|
||||
if(l == 0){
|
||||
if(l === 0){
|
||||
listUl='<ol>'+listUl;
|
||||
}
|
||||
if(l==li.length-1){
|
||||
if(l===li.length-1){
|
||||
listUl=listUl+'</ol>';
|
||||
}
|
||||
var bb=bb.replace(new RegExp(li[l], ""),listUl);
|
||||
|
||||
@@ -4,24 +4,30 @@ $("#emoji-before").addClass("disabled");
|
||||
$("#emoji-next").addClass("disabled");
|
||||
|
||||
//絵文字ボタンのトグル
|
||||
function emoji() {
|
||||
function emojiToggle() {
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var selin = $("#textarea").prop('selectionStart');
|
||||
if(!selin){
|
||||
selin=0;
|
||||
}
|
||||
localStorage.setItem("cursor", selin);
|
||||
|
||||
if ($("#emoji").hasClass("hide")) {
|
||||
$("#emoji").removeClass("hide")
|
||||
$("#right-side").show()
|
||||
$("#suggest").html("");
|
||||
if (!localStorage.getItem("emoji_" + acct_id)) {
|
||||
var html =
|
||||
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">絵文字リスト取得</button>';
|
||||
'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">'+lang.lang_emoji_get+'</button>';
|
||||
$("#emoji-list").html(html);
|
||||
} else {
|
||||
emojiList('home');
|
||||
}
|
||||
} else {
|
||||
$("#poll").addClass("hide")
|
||||
$("#emoji").addClass("hide")
|
||||
$("#suggest").html("");
|
||||
$("#right-side").hide()
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +69,7 @@ function emojiGet(parse) {
|
||||
|
||||
//リストの描画
|
||||
function emojiList(target) {
|
||||
$("#now-emoji").text("カスタム絵文字");
|
||||
$("#now-emoji").text(lang.lang_emoji_custom);
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var start = localStorage.getItem("emojiseek");
|
||||
if (target == "next") {
|
||||
@@ -86,7 +92,7 @@ function emojiList(target) {
|
||||
var page = Math.ceil(num / 126);
|
||||
$("#emoji-sum").text(page);
|
||||
var ct = Math.ceil(start / 126);
|
||||
if (ct == 0) {
|
||||
if (ct === 0) {
|
||||
var ct = 1;
|
||||
$("#emoji-before").addClass("disabled");
|
||||
} else {
|
||||
@@ -125,50 +131,21 @@ function emojiInsert(code, del) {
|
||||
var now = now.replace(regExp, "");
|
||||
$("#textarea").val(now + " " + code);
|
||||
}
|
||||
|
||||
$("#textarea").focus();
|
||||
var selin = $("#textarea").prop('selectionStart');
|
||||
if(!selin){
|
||||
selin=0;
|
||||
}
|
||||
localStorage.setItem("cursor", selin);
|
||||
}
|
||||
//改行挿入
|
||||
function brInsert(code) {
|
||||
if(!$('#post-box').hasClass("appear")){
|
||||
localStorage.setItem("nohide",true);
|
||||
show();
|
||||
}
|
||||
var now = $("#textarea").val();
|
||||
$("#textarea").val(now + code);
|
||||
$("#textarea").focus();
|
||||
}
|
||||
|
||||
//入力時に絵文字をサジェスト
|
||||
var etimer = null;
|
||||
|
||||
var einput = document.getElementById("emoji-suggest");
|
||||
|
||||
var prev_val = einput.value;
|
||||
var oldSuggest;
|
||||
var suggest;
|
||||
einput.addEventListener("focus", function() {
|
||||
$(".emoji-control").addClass("hide");
|
||||
$("#suggest").html("");
|
||||
window.clearInterval(etimer);
|
||||
etimer = window.setInterval(function() {
|
||||
var new_val = einput.value;
|
||||
var html="";
|
||||
if (prev_val != new_val && new_val.length > 3) {
|
||||
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
|
||||
var num = obj.length;
|
||||
for (i = 0; i < num; i++) {
|
||||
var emoji = obj[i];
|
||||
if ( ~emoji.shortcode.indexOf(new_val)) {
|
||||
//strにhogeを含む場合の処理
|
||||
if (emoji) {
|
||||
html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
|
||||
': \')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
|
||||
}
|
||||
}
|
||||
}
|
||||
$("#emoji-list").html(html+'<br><a onclick="customEmoji()" class="pointer waves-effect">リセット</a>');
|
||||
};
|
||||
oldSuggest = suggest;
|
||||
prev_value = new_val;
|
||||
}, 1000);
|
||||
}, false);
|
||||
|
||||
einput.addEventListener("blur", function() {
|
||||
window.clearInterval(etimer);
|
||||
}, false);
|
||||
@@ -43,7 +43,7 @@ function pimg(files) {
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('bmp-image', [files[i].path,i]);
|
||||
todo("変換中...");
|
||||
todo(lang.lang_progress);
|
||||
|
||||
}else{
|
||||
handleFileUpload(files[i], obj,i);
|
||||
@@ -90,7 +90,8 @@ function media(b64, type, no) {
|
||||
} else {
|
||||
$("#media").val("tmp_"+r);
|
||||
}
|
||||
$("#toot-post-btn").prop("disabled", true);
|
||||
$(".toot-btn-group").prop("disabled", true);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
localStorage.setItem("image","busy");
|
||||
todo("Image Upload...");
|
||||
var media = toBlob(b64, type);
|
||||
@@ -99,24 +100,41 @@ function media(b64, type, no) {
|
||||
fd.append('file', media);
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/media";
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.upload.addEventListener("progress", progshow, false);
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.send(fd);
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/drive/files/create";
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.upload.addEventListener("progress", progshow, false);
|
||||
httpreq.responseType = "json";
|
||||
if ($("#nsfw").hasClass("nsfw-avail")) {
|
||||
var nsfw = true;
|
||||
} else {
|
||||
var nsfw = false;
|
||||
}
|
||||
var previewer="url"
|
||||
fd.append('i', at);
|
||||
//fd.append('isSensitive', nsfw);
|
||||
httpreq.send(fd);
|
||||
}else{
|
||||
var previewer="preview_url"
|
||||
var start = "https://" + domain + "/api/v1/media";
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.upload.addEventListener("progress", progshow, false);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.send(fd);
|
||||
}
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
var img = localStorage.getItem("img");
|
||||
if (json.type=="image") {
|
||||
var html = '<img src="' + json.preview_url + '" style="width:50px; max-height:100px;">';
|
||||
if (json.type.indexOf("image")!=-1) {
|
||||
var html = '<img src="' + json[previewer] + '" style="width:50px; max-height:100px;">';
|
||||
$('#preview').append(html);
|
||||
} else {
|
||||
$('#preview').append("プレビューできません");
|
||||
$('#preview').append(lang.lang_postimg_previewdis);
|
||||
}
|
||||
if (!img) {
|
||||
var img = "no-act";
|
||||
@@ -132,11 +150,10 @@ function media(b64, type, no) {
|
||||
$("#textarea").val($("#textarea").val() + " " + json["text_url"])
|
||||
}
|
||||
todc();
|
||||
$("#toot-post-btn").prop("disabled", false);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
$(".toot-btn-group").prop("disabled", false);
|
||||
$('select').material_select();
|
||||
$("#mec").text("あり");
|
||||
Materialize.toast("ファイルアップロード後はアカウントを切り替えられません。", 1000);
|
||||
$("#mec").text(lang.lang_there);
|
||||
Materialize.toast(lang.lang_postimg_aftupload, 1000);
|
||||
$("#imgup").text("");
|
||||
$("#imgsel").show();
|
||||
localStorage.removeItem("image");
|
||||
@@ -165,6 +182,7 @@ function toBlob(base64, type) {
|
||||
//画像を貼り付けたら…
|
||||
var element = document.querySelector("#textarea");
|
||||
element.addEventListener("paste", function(e){
|
||||
console.log(e)
|
||||
// 画像の場合
|
||||
// e.clipboardData.types.length == 0
|
||||
// かつ
|
||||
@@ -174,6 +192,7 @@ element.addEventListener("paste", function(e){
|
||||
|| !e.clipboardData.types
|
||||
|| (e.clipboardData.types.length != 1)
|
||||
|| (e.clipboardData.types[0] != "Files")) {
|
||||
console.log("not image")
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -188,7 +207,7 @@ element.addEventListener("paste", function(e){
|
||||
var base64 = e.target.result;
|
||||
var mediav = $("#media").val();
|
||||
if(mediav){
|
||||
var i=media.split(",").length;
|
||||
var i=mediav.split(",").length;
|
||||
}
|
||||
media(base64, "image/png", i)
|
||||
};
|
||||
|
||||
217
app/js/post/misskeystatus.js
Normal file
217
app/js/post/misskeystatus.js
Normal file
@@ -0,0 +1,217 @@
|
||||
//Renpost
|
||||
function renote(id, acct_id, remote) {
|
||||
if ($("#pub_" + id).hasClass("rted")) {
|
||||
return false;
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/create";
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
return false;
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({i:at,renoteId:id}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
$("[toot-id=" + id + "]").addClass("rted");
|
||||
$(".rt_"+id).toggleClass("teal-text");
|
||||
}
|
||||
}
|
||||
}
|
||||
//Renote
|
||||
function renoteqt(id, acct_id) {
|
||||
localStorage.setItem("nohide",true);
|
||||
show();
|
||||
$("#reply").val("renote_"+id);
|
||||
$("#rec").text("Renote");
|
||||
$("#post-acct-sel").val(acct_id);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
$('select').material_select();
|
||||
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
|
||||
$("#textarea").focus();
|
||||
}
|
||||
//Reply
|
||||
function misskeyreply(id, acct_id) {
|
||||
localStorage.setItem("nohide",true);
|
||||
show();
|
||||
$("#reply").val(id);
|
||||
$("#rec").text("Renote");
|
||||
$("#post-acct-sel").val(acct_id);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
$('select').material_select();
|
||||
$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
|
||||
$("#textarea").focus();
|
||||
}
|
||||
//Reaction
|
||||
function reactiontoggle(id,acct_id,tlid){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/show";
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
return false;
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({i:at,noteId:id}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if(json.reactionCounts){
|
||||
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
|
||||
for(var i=0;i<reactions.length;i++){
|
||||
if(json.reactionCounts[reactions[i]]){
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
|
||||
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
|
||||
}else{
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
|
||||
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
|
||||
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
|
||||
}else{
|
||||
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
|
||||
}
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
|
||||
}
|
||||
}
|
||||
$("#pub_" + id +" .reactions").removeClass("hide");
|
||||
$("#pub_" + id +" .reactions").toggleClass("fullreact")
|
||||
}else{
|
||||
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
|
||||
$("#pub_" + id +" .reactions").addClass("hide")
|
||||
$("#pub_" + id +" .reactions").removeClass("fullreact")
|
||||
}else{
|
||||
$("#pub_" + id +" .reactions").removeClass("hide");
|
||||
$("#pub_" + id +" .reaction").removeClass("hide");
|
||||
$("#pub_" + id +" .reactions").addClass("fullreact");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function reactRefresh(acct_id,id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/show";
|
||||
|
||||
var req={};
|
||||
req.i=at;
|
||||
req.noteId=id;
|
||||
var i={
|
||||
method: "POST",
|
||||
body: JSON.stringify(req),
|
||||
}
|
||||
console.log(req)
|
||||
fetch(start, i,
|
||||
).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if(!json){
|
||||
return false;
|
||||
}
|
||||
var poll="";
|
||||
console.log(json);
|
||||
reactRefreshCore(json)
|
||||
});
|
||||
}
|
||||
function reactRefreshCore(json){
|
||||
var id=json.id;
|
||||
if(json.reactionCounts){
|
||||
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
|
||||
$("#pub_" + id +" .reactions").removeClass("hide")
|
||||
for(var i=0;i<reactions.length;i++){
|
||||
if(json.reactionCounts[reactions[i]]){
|
||||
console.log(json.reactionCounts[reactions[i]])
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
|
||||
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
|
||||
}else{
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
|
||||
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
|
||||
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
|
||||
}
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function reaction(mode,id,acct_id,tlid){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if($(".fav_"+id).hasClass("yellow-text")){
|
||||
var flag="delete";
|
||||
}else{
|
||||
var flag="create";
|
||||
}
|
||||
var start = "https://" + domain + "/api/notes/reactions/"+flag;
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
return false;
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({i:at,noteId:id,reaction:mode}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
$(".fav_"+id).toggleClass("yellow-text");
|
||||
}
|
||||
}
|
||||
}
|
||||
//Vote
|
||||
function vote(acct_id,id,to){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/polls/vote";
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
return false;
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({i:at,noteId:id,choice:to}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
voterefresh(acct_id,id)
|
||||
}
|
||||
}
|
||||
function voterefresh(acct_id,id){
|
||||
var httpreqd = new XMLHttpRequest();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/show";
|
||||
httpreqd.open('POST', start, true);
|
||||
httpreqd.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreqd.responseType = 'json';
|
||||
httpreqd.send(JSON.stringify({i:at,noteId:id}));
|
||||
httpreqd.onreadystatechange = function() {
|
||||
if (httpreqd.readyState == 4) {
|
||||
var json = httpreqd.response;
|
||||
if(!json){
|
||||
return false;
|
||||
}
|
||||
var poll="";
|
||||
if(json.poll){
|
||||
var choices=json.poll.choices;
|
||||
Object.keys(choices).forEach(function(keyc) {
|
||||
var choice = choices[keyc];
|
||||
if(choice.isVoted){
|
||||
var myvote=twemoji.parse("✅");
|
||||
}else{
|
||||
var myvote="";
|
||||
}
|
||||
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+json.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>';
|
||||
});
|
||||
$(".vote_"+json.id).html(poll)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,88 @@
|
||||
/*投稿系*/
|
||||
/*投稿系*/
|
||||
//投稿
|
||||
function post() {
|
||||
function sec(){
|
||||
var mode=localStorage.getItem("sec");
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(~domain.indexOf("kirishima.cloud")>=0 && mode=="local"){
|
||||
mode="unlisted";
|
||||
}
|
||||
post(null,mode);
|
||||
}
|
||||
function post(mode,postvis) {
|
||||
if($("#toot-post-btn").prop("disabled")){
|
||||
return false;
|
||||
}
|
||||
var str = $("#textarea").val();
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
localStorage.setItem("last-use", acct_id);
|
||||
todo("Posting");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(domain=="theboss.tech"){
|
||||
if(~str.indexOf("#")){
|
||||
if(str.indexOf("#theboss_tech")=="-1"){
|
||||
if(!confirm(lang.lang_post_tagTL)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(domain=="dtp-mstdn.jp"){
|
||||
if(~str.indexOf("#")){
|
||||
if(str.indexOf("#dtp")=="-1"){
|
||||
if(!confirm(lang.lang_post_tagTL)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!localStorage.getItem("cw_sentence")){
|
||||
var cw_sent=500;
|
||||
}else{
|
||||
var cw_sent=localStorage.getItem("cw_sentence");
|
||||
}
|
||||
if(!localStorage.getItem("cw_letters")){
|
||||
var cw_ltres=500;
|
||||
}else{
|
||||
var cw_ltres=localStorage.getItem("cw_letters");
|
||||
}
|
||||
if(domain!="kirishima.cloud"){
|
||||
if(mode!="pass" && !$("#cw").hasClass("cw-avail") && (str.length>cw_sent || (str.split("\n").length - 1)>cw_ltres)){
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var plus=str.replace(/\n/g,"").slice(0,10)+"...";
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: lang.lang_post_cwtitle,
|
||||
message: lang.lang_post_cwtxt+plus,
|
||||
buttons: [lang.lang_post_btn1,lang.lang_post_btn2, lang.lang_post_btn3]
|
||||
}
|
||||
dialog.showMessageBox(options, function(arg) {
|
||||
if(arg===1){
|
||||
$("#cw-text").show();
|
||||
$("#cw").addClass("yellow-text");
|
||||
$("#cw").addClass("cw-avail");
|
||||
$("#cw-text").val(plus);
|
||||
post("pass");
|
||||
}else if(arg===2){
|
||||
post("pass");
|
||||
}
|
||||
})
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
misskeyPost();
|
||||
return;
|
||||
}
|
||||
$(".toot-btn-group").prop("disabled", true);
|
||||
todo("Posting");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses";
|
||||
var reply = $("#reply").val();
|
||||
if(str.indexOf(localStorage.getItem("stable"))==-1){
|
||||
str+" #"+localStorage.getItem("stable");
|
||||
}
|
||||
var toot={
|
||||
status: str
|
||||
}
|
||||
@@ -25,10 +99,27 @@ function post() {
|
||||
} else {
|
||||
var nsfw = "false";
|
||||
}
|
||||
var vis = $("#vis").text();
|
||||
if(vis!="inherit"){
|
||||
toot.visibility=vis;
|
||||
if(postvis){
|
||||
var vis = postvis;
|
||||
}else{
|
||||
var vis = $("#vis").text();
|
||||
}
|
||||
|
||||
if(vis!="inherit" && vis!="local"){
|
||||
toot.visibility=vis;
|
||||
}else if(vis=="local"){
|
||||
toot.status=str+"👁️";
|
||||
}
|
||||
//ここに非公開・未収載タグについてwarn
|
||||
if(domain!="kirishima.cloud" && domain!="imastodon.net"){
|
||||
if(~str.indexOf("#")){
|
||||
if(vis == "local" || vis=="unlisted" || vis=="direct" || vis=="private"){
|
||||
if(!confirm(lang.lang_post_tagVis)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($("#cw").hasClass("cw-avail")) {
|
||||
var spo = $("#cw-text").val();
|
||||
cw();
|
||||
@@ -36,14 +127,123 @@ function post() {
|
||||
} else {
|
||||
var spo = "";
|
||||
}
|
||||
if ($("#sch-box").hasClass("sch-avail")) {
|
||||
var scheduled=formattimeutc(new Date(Date.parse($("#sch-date").val())))
|
||||
console.log(scheduled)
|
||||
schedule();
|
||||
toot.scheduled_at=scheduled;
|
||||
} else {
|
||||
var scheduled = "";
|
||||
}
|
||||
if ($("#poll-sel").val()=="mastodon-poll") {
|
||||
var options=[];
|
||||
$(".mastodon-choice").map(function() {
|
||||
var choice=$(this).val();
|
||||
if(choice!=""){
|
||||
options.push(choice);
|
||||
}
|
||||
});
|
||||
if($("#poll-multiple:checked").val()=="1"){
|
||||
var mul=true;
|
||||
}else{
|
||||
var mul=false;
|
||||
}
|
||||
if($("#poll-until:checked").val()=="1"){
|
||||
var htt=true;
|
||||
}else{
|
||||
var htt=false;
|
||||
}
|
||||
var exin=pollCalc();
|
||||
if(!exin){
|
||||
todc("Error: Poll expires_in param")
|
||||
}
|
||||
toot.poll={
|
||||
options: options,
|
||||
expires_in: exin,
|
||||
multiple: mul,
|
||||
hide_totals: htt
|
||||
}
|
||||
}
|
||||
console.log(toot);
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify(toot));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
var box = localStorage.getItem("box");
|
||||
if (box == "yes" || !box) {
|
||||
$("#textarea").blur();
|
||||
hide();
|
||||
}
|
||||
$(".toot-btn-group").prop("disabled", false);
|
||||
todc();
|
||||
clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
function misskeyPost(){
|
||||
var str = $("#textarea").val();
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
localStorage.setItem("last-use", acct_id);
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
$(".toot-btn-group").prop("disabled", true);
|
||||
todo("Posting");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/notes/create";
|
||||
var reply = $("#reply").val();
|
||||
var toot={
|
||||
text: str
|
||||
}
|
||||
if(reply){
|
||||
if(reply.indexOf("renote")!== -1){
|
||||
toot.renoteId=reply.replace("renote_","")
|
||||
}else{
|
||||
toot.replyId=reply
|
||||
}
|
||||
}
|
||||
|
||||
var media = $("#media").val();
|
||||
if(media){
|
||||
toot.mediaIds=media.split(",");
|
||||
}
|
||||
if ($("#nsfw").hasClass("nsfw-avail")) {
|
||||
var nsfw = "true";
|
||||
toot.sensitive=nsfw;
|
||||
} else {
|
||||
var nsfw = "false";
|
||||
}
|
||||
var vis = $("#vis").text();
|
||||
if(vis=="unlisted"){
|
||||
vis=="home"
|
||||
}else if(vis=="direct"){
|
||||
vis=="specified";
|
||||
toot.visibleUserIds=str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@");
|
||||
}
|
||||
if(vis!="inherit"){
|
||||
toot.visibility=vis;
|
||||
}
|
||||
if ($("#cw").hasClass("cw-avail")) {
|
||||
var spo = $("#cw-text").val();
|
||||
cw();
|
||||
toot.cw=spo;
|
||||
} else {
|
||||
var spo = "";
|
||||
}
|
||||
toot.i=at;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify(toot));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
if(str.indexOf(localStorage.getItem("stable"))==-1){
|
||||
localStorage.removeItem("stable")
|
||||
}
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
var box = localStorage.getItem("box");
|
||||
@@ -53,6 +253,7 @@ function post() {
|
||||
$("body").addClass("mini-post");
|
||||
$(".mini-btn").text("expand_less");
|
||||
}
|
||||
$(".toot-btn-group").prop("disabled", false);
|
||||
todc();
|
||||
clear();
|
||||
}
|
||||
@@ -62,7 +263,10 @@ function post() {
|
||||
//クリア(Shift+C)
|
||||
function clear() {
|
||||
$("#textarea").val("");
|
||||
$("#textarea").attr("placeholder", "");
|
||||
if(localStorage.getItem("stable")){
|
||||
$("#textarea").val("#"+localStorage.getItem("stable")+" ")
|
||||
}
|
||||
$("#textarea").attr("placeholder", lang.lang_toot);
|
||||
$("#reply").val("");
|
||||
$("#media").val("");
|
||||
var cwt = localStorage.getItem("cw-text");
|
||||
@@ -71,28 +275,36 @@ function clear() {
|
||||
} else {
|
||||
$("#cw-text").val("");
|
||||
}
|
||||
$("#cw").removeClass("yellow-text");
|
||||
$("#cw").removeClass("cw-avail");
|
||||
$("#rec").text("いいえ");
|
||||
$("#mec").text("なし");
|
||||
var vist = localStorage.getItem("vis");
|
||||
if (!vist) {
|
||||
vis("public");
|
||||
} else {
|
||||
if (vist == "memory") {
|
||||
localStorage.setItem("vis-memory", $("#vis").text());
|
||||
} else {
|
||||
vis(vist);
|
||||
}
|
||||
var acw = localStorage.getItem("always-cw");
|
||||
if (acw != "yes") {
|
||||
$("#cw").removeClass("yellow-text");
|
||||
$("#cw").removeClass("cw-avail");
|
||||
$("#cw-text").hide();
|
||||
}else{
|
||||
$("#cw").addClass("yellow-text");
|
||||
$("#cw").addClass("cw-avail");
|
||||
$("#cw-text").show();
|
||||
}
|
||||
$("#rec").text(lang.lang_no);
|
||||
$("#mec").text(lang.lang_nothing);
|
||||
loadVis();
|
||||
$("#nsfw").removeClass("yellow-text");
|
||||
$("#nsfw").html("visibility_off");
|
||||
$("#nsfw").removeClass("nsfw-avail");
|
||||
$("#nsc").text("なし");
|
||||
$("#nsc").text(lang.lang_nothing);
|
||||
$("#drag").css("background-color", "#e0e0e0");
|
||||
$("#preview").html("");
|
||||
$("#toot-post-btn").prop("disabled", false);
|
||||
$(".toot-btn-group").prop("disabled", false);
|
||||
$("#post-acct-sel").prop("disabled", false);
|
||||
$('select').material_select();
|
||||
$("#days_poll").val(0);
|
||||
$("#hours_poll").val(0);
|
||||
$("#mins_poll").val(0);
|
||||
$(".mastodon-choice").map(function() {
|
||||
$(this).val("");
|
||||
});
|
||||
localStorage.removeItem("image");
|
||||
if(localStorage.getItem("mainuse")=="main"){
|
||||
$("#post-acct-sel").val(localStorage.getItem("main"));
|
||||
}
|
||||
$('select').material_select();
|
||||
}
|
||||
@@ -19,34 +19,52 @@ function vis(set){
|
||||
$("#vis-icon").removeClass("orange-text");
|
||||
$("#vis-icon").removeClass("blue-text");
|
||||
$("#vis-icon").removeClass("purple-text");
|
||||
$("#vis-icon").removeClass("light-blue-text");
|
||||
$("#vis-icon").removeClass("teal-text");
|
||||
if(set=="public"){
|
||||
$("#vis-icon").text("public");
|
||||
$("#vis-icon").addClass("purple-text");
|
||||
}else if(set=="unlisted"){
|
||||
$("#vis-icon").text("lock_open");
|
||||
$("#vis-icon").addClass("blue-text");
|
||||
}else if(set=="private"){
|
||||
}else if(set=="private"){
|
||||
$("#vis-icon").text("lock");
|
||||
$("#vis-icon").addClass("orange-text");
|
||||
}else if(set=="direct"){
|
||||
}else if(set=="direct"){
|
||||
$("#vis-icon").text("mail");
|
||||
$("#vis-icon").addClass("red-text");
|
||||
}else if(set=="limited"){
|
||||
}else if(set=="limited"){
|
||||
$("#vis-icon").text("group");
|
||||
$("#vis-icon").addClass("teal-text");
|
||||
}else if(set=="local"){
|
||||
$("#vis-icon").text("visibility");
|
||||
$("#vis-icon").addClass("light-blue-text");
|
||||
}
|
||||
var vis=localStorage.getItem("vis");
|
||||
if(vis=="memory"){
|
||||
localStorage.setItem("vis-memory",set);
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
localStorage.setItem("vis-memory-"+acct_id,set);
|
||||
}
|
||||
$('.dropdown-button').dropdown('close');
|
||||
}
|
||||
function loadVis(){
|
||||
var vist = localStorage.getItem("vis");
|
||||
console.log(vist);
|
||||
if (!vist) {
|
||||
vis("public");
|
||||
} else {
|
||||
if (vist == "memory") {
|
||||
var memory = localStorage.getItem("vis-memory");
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var memory = localStorage.getItem("vis-memory-"+acct_id);
|
||||
if (!memory) {
|
||||
memory = "public";
|
||||
}
|
||||
vis(memory);
|
||||
} else if(vist == "useapi") {
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
var memory = obj[acct_id]["vis"];
|
||||
if (!memory) {
|
||||
memory = "public";
|
||||
}
|
||||
@@ -58,7 +76,7 @@ function loadVis(){
|
||||
}
|
||||
loadVis();
|
||||
|
||||
//コンテンツワーニング
|
||||
//コンテントワーニング
|
||||
function cw(){
|
||||
if($("#cw").hasClass("cw-avail")){
|
||||
$("#cw-text").val();
|
||||
@@ -75,8 +93,37 @@ function cw(){
|
||||
}
|
||||
}
|
||||
}
|
||||
//TLでコンテンツワーニングを表示トグル
|
||||
//TLでコンテントワーニングを表示トグル
|
||||
function cw_show(id){
|
||||
$(".cw_hide_"+id).toggleClass("cw");
|
||||
$(".cw-long-"+id).toggleClass("hide");
|
||||
}
|
||||
}
|
||||
$(function() {
|
||||
$('#cw-text').on('change', function(event) {
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var cwlen=$('#cw-text').val().length;
|
||||
|
||||
if(idata[domain+"_letters"]){
|
||||
$("#textarea").attr("data-length", idata[domain+"_letters"]-cwlen)
|
||||
}else{
|
||||
$("#textarea").attr("data-length", 500-cwlen)
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
});
|
||||
//スケジュール
|
||||
function schedule(){
|
||||
if($("#sch-box").hasClass("sch-avail")){
|
||||
$("#sch-box").hide();
|
||||
$("#sch-box").removeClass("sch-avail");
|
||||
}else{
|
||||
var date = new Date();
|
||||
|
||||
$("#sch-box").show();
|
||||
$("#sch-date").val(formattime(date));
|
||||
console.log(formattime(date));
|
||||
$("#sch-box").addClass("sch-avail");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,16 +7,16 @@ function fav(id, acct_id, remote) {
|
||||
var flag = "favourite";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
if(remote!="remote"){
|
||||
//APIのふぁぼカウントがおかしい
|
||||
@@ -43,7 +43,7 @@ function fav(id, acct_id, remote) {
|
||||
$(".fav_" + id).addClass("yellow-text");
|
||||
}
|
||||
}else{
|
||||
Materialize.toast("お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。", 1000);
|
||||
Materialize.toast(lang.lang_status_favWarn, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,16 +57,16 @@ function rt(id, acct_id, remote) {
|
||||
var flag = "reblog";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if (remote != "remote") {
|
||||
@@ -90,7 +90,7 @@ function rt(id, acct_id, remote) {
|
||||
$(".rt_" + id).addClass("teal-text");
|
||||
}
|
||||
} else {
|
||||
Materialize.toast("ブーストしました。インスタンスが違うときは時間がかかる場合があります。", 1000);
|
||||
Materialize.toast(lang.lang_status_btWarn, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -105,16 +105,22 @@ function follow(acct_id,remote) {
|
||||
}
|
||||
if (!remote && $("#his-data").hasClass("following")) {
|
||||
var flag = "unfollow";
|
||||
var flagm = "delete";
|
||||
} else {
|
||||
var flag = "follow";
|
||||
var flagm = "create";
|
||||
}
|
||||
var id = $("#his-data").attr("user-id");
|
||||
if(!remote){
|
||||
var remote = $("#his-data").attr("remote");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(remote=="true" && flag=="follow"){
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/following/"+flagm;
|
||||
var user=$("#his-acct").text();
|
||||
var ent={"i":at,"userId":id}
|
||||
}else if(remote=="true" && flag=="follow"){
|
||||
var start = "https://" + domain + "/api/v1/follows";
|
||||
var user=$("#his-acct").text();
|
||||
var ent={"uri":user}
|
||||
@@ -122,22 +128,23 @@ function follow(acct_id,remote) {
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
|
||||
var ent={}
|
||||
}
|
||||
console.log(ent);
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.send();
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify(ent));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if ($("#his-data").hasClass("following")) {
|
||||
$("#his-data").removeClass("following");
|
||||
$("#his-follow-btn").text("フォロー");
|
||||
$("#his-follow-btn").text(lang.lang_status_follow);
|
||||
} else {
|
||||
$("#his-data").addClass("following");
|
||||
$("#his-follow-btn").text("フォロー解除");
|
||||
$("#his-follow-btn").text(lang.lang_status_unfollow);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -155,22 +162,22 @@ function block(acct_id) {
|
||||
var flag = "block";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
if ($("#his-data").hasClass("blocking")) {
|
||||
$("#his-data").removeClass("blocking");
|
||||
$("#his-block-btn").text("ブロック");
|
||||
$("#his-block-btn").text(lang.lang_status_block);
|
||||
} else {
|
||||
$("#his-data").addClass("blocking");
|
||||
$("#his-block-btn").text("ブロック解除");
|
||||
$("#his-block-btn").text(lang.lang_status_unblock);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -184,26 +191,35 @@ function mute(acct_id) {
|
||||
var id = $("#his-data").attr("user-id");
|
||||
if ($("#his-data").hasClass("muting")) {
|
||||
var flag = "unmute";
|
||||
var flagm = "delete";
|
||||
} else {
|
||||
var flag = "mute";
|
||||
var flagm = "create";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/mute/"+flagm;
|
||||
var ent={"i":at,"userId":id}
|
||||
var rq=JSON.stringify(ent);
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
|
||||
var rq="";
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.send();
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(rq);
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
if ($("#his-data").hasClass("muting")) {
|
||||
$("#his-data").removeClass("muting");
|
||||
$("#his-mute-btn").text("ミュート");
|
||||
$("#his-mute-btn").text(lang.lang_status_mute);
|
||||
} else {
|
||||
$("#his-data").addClass("muting");
|
||||
$("#his-mute-btn").text("ミュート解除");
|
||||
$("#his-mute-btn").text(lang.lang_status_unmute);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -212,16 +228,61 @@ function mute(acct_id) {
|
||||
//投稿削除
|
||||
function del(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('DELETE', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.send();
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/notes/delete";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({i:at,noteId:id}));
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('DELETE', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
}
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
}
|
||||
}
|
||||
}
|
||||
//redraft
|
||||
function redraft(id, acct_id){
|
||||
if(confirm(lang.lang_status_redraft)){
|
||||
show();
|
||||
del(id, acct_id);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
var medias=$("[toot-id="+id+"]").attr("data-medias");
|
||||
var vismode=$("[toot-id="+id+"] .vis-data").attr("data-vis");
|
||||
vis(vismode);
|
||||
$("#media").val(medias);
|
||||
var ct=medias.split(",").length;
|
||||
$("[toot-id="+id+"] img.toot-img").each(function(i, elem) {
|
||||
if(i<ct){
|
||||
var url=$(elem).attr("src");
|
||||
console.log(url);
|
||||
$('#preview').append('<img src="' + url + '" style="width:50px; max-height:100px;">');
|
||||
}
|
||||
});
|
||||
var html=$("[toot-id="+id+"] .toot").html();
|
||||
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
|
||||
html = html.replace(/<br\s?\/?>/, "\n");
|
||||
html = html.replace(/<p>/, "\n");
|
||||
html = html.replace(/<\/p>/, "\n");
|
||||
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
|
||||
html=$.strip_tags(html);
|
||||
localStorage.setItem("nohide",true);
|
||||
show();
|
||||
$("#textarea").val(html);
|
||||
var cwtxt=$("[toot-id="+id+"] .cw_text").html();
|
||||
if(cwtxt!=""){
|
||||
cwtxt=$.strip_tags(cwtxt);
|
||||
cw();
|
||||
$("#cw-text").val(cwtxt);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,16 +294,16 @@ function pin(id, acct_id) {
|
||||
var flag = "pin";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('DELETE', start, true);
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if ($("[toot-id=" + id + "]").hasClass("pined")) {
|
||||
@@ -259,16 +320,16 @@ function pin(id, acct_id) {
|
||||
//フォロリク
|
||||
function request(id, flag, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/follow_requests/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
showReq();
|
||||
@@ -282,16 +343,16 @@ function domainblock(add, flag, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/domain_blocks"
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
showDom();
|
||||
@@ -312,7 +373,7 @@ function empUser(){
|
||||
if(!obj){
|
||||
var obj=[];
|
||||
obj.push(id);
|
||||
Materialize.toast(id+"を強調します。設定を適用するにはF5を押して下さい。", 4000);
|
||||
Materialize.toast(id+lang.lang_status_emphas, 4000);
|
||||
}else{
|
||||
var can;
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
@@ -322,17 +383,50 @@ function empUser(){
|
||||
}else{
|
||||
can=true;
|
||||
obj.splice(key, 1);
|
||||
Materialize.toast(id+"の強調を解除しました。設定を適用するにはF5を押して下さい。", 4000);
|
||||
Materialize.toast(id+lang.lang_status_unemphas, 4000);
|
||||
}
|
||||
});
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("user_emp", json);
|
||||
}
|
||||
//Endorse
|
||||
function pinUser(){
|
||||
var id=$("#his-data").attr("user-id");
|
||||
var acct_id=$("#his-data").attr("use-acct");
|
||||
if ($("#his-end-btn").hasClass("endorsed")) {
|
||||
var flag = "unpin";
|
||||
} else {
|
||||
var flag = "pin";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + id + "/" + flag;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
if ($("#his-end-btn").hasClass("endorsed")) {
|
||||
$("#his-end-btn").removeClass("endorsed")
|
||||
$("#his-end-btn").text(lang.lang_status_endorse)
|
||||
} else {
|
||||
$("#his-end-btn").addClass("endorsed")
|
||||
$("#his-end-btn").text(lang.lang_status_unendorse)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//URLコピー
|
||||
function tootUriCopy(url){
|
||||
execCopy(url);
|
||||
Materialize.toast("トゥートURLをコピーしました", 1500);
|
||||
Materialize.toast(lang.lang_details_url, 1500);
|
||||
}
|
||||
|
||||
//他のアカウントで…
|
||||
@@ -340,7 +434,7 @@ function staEx(mode){
|
||||
var url=$("#tootmodal").attr("data-url");
|
||||
var acct_id = $("#status-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+url
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
|
||||
@@ -13,36 +13,68 @@ input.addEventListener("focus", function() {
|
||||
window.clearInterval(timer);
|
||||
timer = window.setInterval(function() {
|
||||
var new_val = input.value;
|
||||
if(new_val==""){
|
||||
$("#suggest").html("");
|
||||
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
|
||||
$("#right-side").hide()
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (prev_val != new_val) {
|
||||
var semoji = new_val.match(/:(\S{3,})/);
|
||||
if(semoji){
|
||||
var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
|
||||
var num = obj.length;
|
||||
var ehtml="";
|
||||
for (i = 0; i < num; i++) {
|
||||
var emoji = obj[i];
|
||||
if ( ~emoji.shortcode.indexOf(semoji[1])) {
|
||||
if (emoji) {
|
||||
ehtml = ehtml+'<a onclick="emojiInsert(\':' + emoji.shortcode +
|
||||
': \',\':'+semoji[1]+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
|
||||
if(!obj){
|
||||
var ehtml=lang.lang_suggest_nodata;
|
||||
}else{
|
||||
var num = obj.length;
|
||||
var ehtml="";
|
||||
for (i = 0; i < num; i++) {
|
||||
var emoji = obj[i];
|
||||
if ( ~emoji.shortcode.indexOf(semoji[1])) {
|
||||
if (emoji) {
|
||||
ehtml = ehtml+'<a onclick="emojiInsert(\':' + emoji.shortcode +
|
||||
': \',\':'+semoji[1]+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(ehtml!=""){
|
||||
$("#right-side").show()
|
||||
$("#poll").addClass("hide")
|
||||
$("#emoji").addClass("hide")
|
||||
}else{
|
||||
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
|
||||
$("#right-side").hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
$("#suggest").html(ehtml);
|
||||
}
|
||||
|
||||
var tag = new_val.match(/#(\S{3,})/);
|
||||
var acct = new_val.match(/@(\S{3,})/);
|
||||
if (tag && tag[1]) {
|
||||
if(localStorage.getItem("imas")){
|
||||
//セルフNP
|
||||
var cpnp = new_val.match(/^(?!.*http)\/\/(\S{1,})/);
|
||||
}else{
|
||||
var cpnp=[];
|
||||
}
|
||||
if (cpnp && cpnp[1]) {
|
||||
var q = cpnp[1];
|
||||
cgNPs(q);
|
||||
} else if (tag && tag[1]) {
|
||||
var q = tag[1];
|
||||
} else if (acct && acct[1]) {
|
||||
var q = acct[1];
|
||||
} else {
|
||||
//$("#suggest").html("");
|
||||
}else {
|
||||
$("#suggest").html("");
|
||||
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
|
||||
$("#right-side").hide()
|
||||
}
|
||||
return;
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
suggest = "https://" + domain + "/api/v1/search?q=" + q
|
||||
if (suggest != oldSuggest) {
|
||||
console.log(suggest)
|
||||
@@ -58,24 +90,38 @@ input.addEventListener("focus", function() {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json.hashtags[0] && tag[1]) {
|
||||
if (json.hashtags[0] && tag) {
|
||||
if(tag[1]){
|
||||
var tags = "";
|
||||
Object.keys(json.hashtags).forEach(function(key4) {
|
||||
var tag = json.hashtags[key4];
|
||||
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
|
||||
'\')" class="pointer">#' + tag + '</a> ';
|
||||
if(tag!=q){
|
||||
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
|
||||
'\')" class="pointer">#' + tag + '</a><br>';
|
||||
}
|
||||
});
|
||||
$("#suggest").html("Tags:" + tags);
|
||||
$("#right-side").show()
|
||||
$("#suggest").html("Tags:<br>" + tags);
|
||||
$("#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];
|
||||
accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
|
||||
'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a> ';
|
||||
if(acct.acct!=q){
|
||||
accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
|
||||
'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a><br>';
|
||||
}
|
||||
});
|
||||
$("#suggest").html("@:" + accts);
|
||||
$("#right-side").show()
|
||||
$("#suggest").html("@:<br>" + accts);
|
||||
$("#poll").addClass("hide")
|
||||
$("#emoji").addClass("hide")
|
||||
} else {
|
||||
$("#suggest").html("Not Found");
|
||||
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
|
||||
$("#right-side").hide()
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -107,5 +153,37 @@ function tagInsert(code, del) {
|
||||
}
|
||||
$("#textarea").val(newt);
|
||||
$("#textarea").focus();
|
||||
if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
|
||||
$("#right-side").hide()
|
||||
}
|
||||
$("#suggest").html("");
|
||||
}
|
||||
function cgNPs(q){
|
||||
suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
|
||||
if (suggest != oldSuggest) {
|
||||
console.log(suggest)
|
||||
fetch(suggest, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json[0]) {
|
||||
var tags = "";
|
||||
Object.keys(json).forEach(function(key4) {
|
||||
var tag = json[key4];
|
||||
tags = tags + '<a onclick="cgNP(\''+json[key4]+'\')" class="pointer">' + json[key4] + '</a> ';
|
||||
});
|
||||
$("#suggest").html("Cinderella NowPlaying:" + tags);
|
||||
}else{
|
||||
$("#suggest").html("Cinderella NowPlaying:Not Found");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,26 @@
|
||||
/*リプライ*/
|
||||
function re(id,at,acct_id,mode){
|
||||
function re(id,ats_cm,acct_id,mode){
|
||||
clear();
|
||||
var ats=ats_cm.split(',');
|
||||
localStorage.setItem("nohide",true);
|
||||
show();
|
||||
$("#reply").val(id);
|
||||
var te=$("#textarea").val();
|
||||
$("#textarea").val("@"+at+" "+te);
|
||||
$("#rec").text("はい");
|
||||
for(var i=0;i<ats.length;i++){
|
||||
var at=ats[i];
|
||||
var te=$("#textarea").val();
|
||||
$("#textarea").val("@"+at+" "+te);
|
||||
}
|
||||
$("#rec").text(lang.lang_yesno);
|
||||
$("#post-acct-sel").val(acct_id);
|
||||
$("#post-acct-sel").prop("disabled", true);
|
||||
$('select').material_select();
|
||||
$("#textarea").attr("placeholder","返信モードです。クリアするときはCtrl+Shift+Cを押してください。");
|
||||
$("#textarea").attr("placeholder",lang.lang_usetxtbox_reply);
|
||||
$("#textarea").focus();
|
||||
var profimg=localStorage.getItem("prof_"+acct_id);
|
||||
if(!profimg){
|
||||
profimg="../../img/missing.svg";
|
||||
}
|
||||
$("#acct-sel-prof").attr("src",profimg);
|
||||
vis(mode);
|
||||
}
|
||||
function reEx(id){
|
||||
@@ -20,10 +32,14 @@ function reEx(id){
|
||||
}
|
||||
//引用
|
||||
function qt(id,acct_id,at,url){
|
||||
localStorage.setItem("nohide",true);
|
||||
var qt = localStorage.getItem("quote");
|
||||
if(!qt){
|
||||
var qt="simple";
|
||||
}
|
||||
if(qt=="nothing"){
|
||||
return false;
|
||||
}
|
||||
if(qt=="simple"){
|
||||
show();
|
||||
$("#textarea").val("\n"+url);
|
||||
|
||||
@@ -2,17 +2,41 @@
|
||||
//全てのTL処理で呼び出し
|
||||
function additional(acct_id, tlid) {
|
||||
//メンション系
|
||||
$(".mention").attr("href", "#");
|
||||
//$(".mention").attr("href", "");
|
||||
|
||||
$(".mention").addClass("parsed");
|
||||
|
||||
$(".hashtag").each(function(i, elem) {
|
||||
var tags = $(this).attr("href").match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
|
||||
);
|
||||
$(this).attr("href","#");
|
||||
if(tags){
|
||||
if(tags[2]){
|
||||
$(this).attr("onclick",'tagShow(\'' + tags[2] + '\')');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
//トゥートサムネ
|
||||
$("#timeline_" + tlid + " .toot a:not(.parsed)").each(function(i, elem) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var card = localStorage.getItem("card_" + tlid);
|
||||
var text = $(this).attr('href');
|
||||
var urls = text.match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
|
||||
);
|
||||
if(text){
|
||||
if(text.indexOf("twimg.com")=== -1){
|
||||
var urls = text.match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
|
||||
);
|
||||
}
|
||||
}else{
|
||||
var urls =[]
|
||||
}
|
||||
|
||||
//トゥートのURLぽかったら
|
||||
toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
||||
if(toot){
|
||||
@@ -23,36 +47,31 @@ function additional(acct_id, tlid) {
|
||||
if (urls) {
|
||||
$(this).remove();
|
||||
} else if (!card) {
|
||||
|
||||
var id = $(this).parents('.cvo').attr("toot-id");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
|
||||
json.description + "</span>");
|
||||
}
|
||||
if (json.html) {
|
||||
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons" onclick="pip('+id+')">picture_in_picture_alt</i>');
|
||||
}
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
|
||||
$("[toot-id=" + id + "]").addClass("parsed");
|
||||
}
|
||||
});
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/url?url="+text;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
|
||||
json.description + "</span>");
|
||||
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
|
||||
$("[toot-id=" + id + "]").addClass("parsed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}else{
|
||||
$(this).attr("title",text);
|
||||
}
|
||||
@@ -64,7 +83,7 @@ function additional(acct_id, tlid) {
|
||||
var xmlHttpRequest = new XMLHttpRequest();
|
||||
xmlHttpRequest.onreadystatechange = function()
|
||||
{
|
||||
if( this.readyState == 4 && this.status == 200 ) {
|
||||
if( this.readyState === 4 && this.status === 200 ) {
|
||||
if( this.response){
|
||||
var json=this.response;
|
||||
var emojis=json.emojis;
|
||||
@@ -106,7 +125,7 @@ function additional(acct_id, tlid) {
|
||||
|
||||
function additionalIndv(tlid, acct_id, id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var text = $("[toot-id="+id+"] .toot a").attr('href');
|
||||
var urls = text.match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
|
||||
@@ -114,37 +133,81 @@ function additionalIndv(tlid, acct_id, id) {
|
||||
if (urls) {
|
||||
$("[toot-id="+id+"] .toot a").remove();
|
||||
} else {
|
||||
|
||||
var id = $("[toot-id="+id+"] .toot a").parents('.cvo').attr("toot-id");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
"<span class=\"gray\">URLチェック:<br>Title:" + json.title + "<br>" +
|
||||
json.description + "</span>");
|
||||
}
|
||||
if (json.html) {
|
||||
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="ながら観モード">picture_in_picture_alt</i>');
|
||||
|
||||
}
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
|
||||
$("[toot-id=" + id + "]").addClass("parsed");
|
||||
}
|
||||
});
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/url?url="+text;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
|
||||
json.description + "</span>");
|
||||
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
|
||||
$("[toot-id=" + id + "]").addClass("parsed");
|
||||
}
|
||||
});
|
||||
}else{
|
||||
var id = $("[toot-id="+id+"] .toot a").parents('.cvo').attr("toot-id");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
//このリンク鳥やんけ、ってとき
|
||||
console.log(json.provider_name);
|
||||
if (json.provider_name=="Twitter"){
|
||||
if(json.image){
|
||||
var twiImg='<br><img src="'+json.image+'" style="max-width:100%" onclick="imgv(\'twi_'+id+'\', 0, \'twitter\');" id="twi_'+id+'-image-0" data-url="'+json.image+'" data-type="image">';
|
||||
}else{
|
||||
var twiImg='';
|
||||
}
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
'<div class="twitter-tweet"><b>'+escapeHTML(json.author_name)+'</b><br>'+escapeHTML(json.description)+twiImg+'</div>');
|
||||
}else if (json.provider_name=="pixiv"){
|
||||
if(json.image){
|
||||
var pxvImg='<br><img src="'+json.image+'" style="max-width:100%" onclick="imgv(\'pixiv_'+id+'\', 0, \'pixiv\');" id="pixiv_'+id+'-image-0" data-url="'+json.embed_url+'" data-type="image">';
|
||||
}else{
|
||||
var pxvImg='';
|
||||
}
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
'<div class="pixiv-post"><b><a href="'+json.author_url+'" target="_blank">'+escapeHTML(json.author_name)+'</a></b><br>'+escapeHTML(json.title)+pxvImg+'</div>');
|
||||
}else{
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] .additional").html(
|
||||
"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(json.title) + "<br>" +
|
||||
escapeHTML(json.description) + "</span>");
|
||||
}
|
||||
if (json.html) {
|
||||
$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>');
|
||||
|
||||
}
|
||||
}
|
||||
if (json.title) {
|
||||
$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
|
||||
$("[toot-id=" + id + "]").addClass("parsed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,26 +236,37 @@ function cardCheck(tlid) {
|
||||
}
|
||||
}
|
||||
|
||||
function mov(id,tlid){
|
||||
function mov(id,tlid,type){
|
||||
if(tlid=="notf"){
|
||||
var tlide="[data-notf="+acct_id+"]";
|
||||
}else if(tlid=="user"){
|
||||
var tlide="#his-data";
|
||||
}else{
|
||||
var tlide="[tlid="+tlid+"]";
|
||||
}
|
||||
console.log(tlid)
|
||||
var mouseover=localStorage.getItem("mouseover");
|
||||
if(!mouseover){
|
||||
mouseover="";
|
||||
}else if(mouseover=="yes"){
|
||||
}
|
||||
if(mouseover=="yes"){
|
||||
mouseover="hide";
|
||||
}else if(mouseover=="click"){
|
||||
if(type=="mv"){
|
||||
mouseover="";
|
||||
}else{
|
||||
mouseover="hide";
|
||||
}
|
||||
}else if(mouseover=="no"){
|
||||
mouseover="";
|
||||
}
|
||||
if(mouseover=="hide"){
|
||||
$(tlide+" [toot-id="+id+"] .area-actions").removeClass("hide")
|
||||
$(tlide+" [toot-id="+id+"] .area-actions").toggleClass("hide")
|
||||
$(tlide+" [toot-id="+id+"] .area-side").toggleClass("hide")
|
||||
}
|
||||
}
|
||||
|
||||
function resetmv(){
|
||||
function resetmv(type){
|
||||
var mouseover=localStorage.getItem("mouseover");
|
||||
if(!mouseover){
|
||||
mouseover="";
|
||||
@@ -200,9 +274,12 @@ function resetmv(){
|
||||
mouseover="hide";
|
||||
}else if(mouseover=="no"){
|
||||
mouseover="";
|
||||
}else if(mouseover=="click" && type!="mv"){
|
||||
mouseover="hide";
|
||||
}
|
||||
if(mouseover=="hide"){
|
||||
$(".area-actions").addClass("hide");
|
||||
$(".area-side").addClass("hide");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,46 +1,103 @@
|
||||
//トゥートの詳細
|
||||
function details(id, acct_id, tlid) {
|
||||
$(".toot-reset").html("データなし");
|
||||
var html = $("#timeline_"+tlid+" #pub_" + id).html();
|
||||
function details(id, acct_id, tlid, mode) {
|
||||
if(mode=="dm"){
|
||||
$(".dm-hide").hide();
|
||||
}else{
|
||||
$(".dm-hide").show();
|
||||
}
|
||||
$(".toot-reset").html('<span class="no-data">'+lang.lang_details_nodata+'</span>');
|
||||
var html = $("#timeline_"+tlid+" [toot-id=" + id + "]").html();
|
||||
$("#toot-this").html(html);
|
||||
$('#tootmodal').modal('open');
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/notes/show";
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at,
|
||||
noteId:id
|
||||
})
|
||||
}
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if(!$("#timeline_"+tlid+" #pub_" + id).length){
|
||||
var html = parse([json], '', acct_id);
|
||||
$("#toot-this").html(html);
|
||||
jQuery("time.timeago").timeago();
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var url="https://"+domain+"/notes/"+json.id;
|
||||
var scn=json.user.username;
|
||||
if(!json.user.host){
|
||||
var local=true;
|
||||
}else{
|
||||
var local=false;
|
||||
scn=scn+"@"+host;
|
||||
}
|
||||
var rep="";
|
||||
var uid=json.user.id;
|
||||
if(json._replyIds){
|
||||
replyTL(json._replyIds[0], acct_id);
|
||||
}
|
||||
}else{
|
||||
var url=json.url
|
||||
if(json.account.acct==json.account.username){
|
||||
var local=true;
|
||||
}else{
|
||||
var local=false;
|
||||
}
|
||||
var scn=json.account.acct;
|
||||
var uid=json.account.id;
|
||||
if (json["in_reply_to_id"]) {
|
||||
replyTL(json["in_reply_to_id"], acct_id);
|
||||
}
|
||||
}
|
||||
$("#toot-this .fav_ct").text(json.favourites_count);
|
||||
$("#toot-this .rt_ct").text(json.reblogs_count);
|
||||
$("#tootmodal").attr("data-url",json.url);
|
||||
$("#tootmodal").attr("data-url",url);
|
||||
$("#tootmodal").attr("data-id",json.id);
|
||||
if(json.account.acct==json.account.username){
|
||||
$("#tootmodal").attr("data-user",json.account.acct+"@"+domain);
|
||||
if(local){
|
||||
$("#tootmodal").attr("data-user",scn+"@"+domain);
|
||||
}else{
|
||||
$("#tootmodal").attr("data-user",json.account.acct);
|
||||
}
|
||||
if (json.in_reply_to_id) {
|
||||
replyTL(json.in_reply_to_id, acct_id);
|
||||
$("#tootmodal").attr("data-user",scn);
|
||||
}
|
||||
context(id, acct_id);
|
||||
beforeToot(id, acct_id);
|
||||
userToot(id, acct_id, json.account.id);
|
||||
var dom=null;
|
||||
if(!local){
|
||||
dom=scn.replace(/.+@/g,'');
|
||||
}else{
|
||||
dom=domain;
|
||||
}
|
||||
beforeToot(id, acct_id, dom);
|
||||
userToot(id, acct_id, uid);
|
||||
faved(id, acct_id);
|
||||
rted(id, acct_id);
|
||||
if($("#toot-this div").hasClass("cvo")){
|
||||
$("#toot-this").removeClass("cvo");
|
||||
}else{
|
||||
$("#toot-this").addClass("cvo");
|
||||
}
|
||||
if(!$("#activator").hasClass("active")){
|
||||
$('#det-col').collapsible('open', 1);
|
||||
}
|
||||
@@ -51,103 +108,236 @@ function details(id, acct_id, tlid) {
|
||||
//返信タイムライン
|
||||
function replyTL(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/notes/show";
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at,
|
||||
noteId:id
|
||||
})
|
||||
}
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}
|
||||
}
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse([json], '', acct_id);
|
||||
$("#toot-reply").prepend(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
if (json.in_reply_to_id) {
|
||||
replyTL(json.in_reply_to_id, acct_id);
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var templete = misskeyParse([json], '', acct_id,"","",mute);
|
||||
$("#toot-after").prepend(templete);
|
||||
$("#toot-after .hide").html(lang.lang_details_filtered);
|
||||
$("#toot-after .by_filter").css("display","block");
|
||||
$("#toot-after .by_filter").removeClass("hide");
|
||||
var rep="_replyIds";
|
||||
if (json[rep]) {
|
||||
replyTL(json[rep][0], acct_id);
|
||||
}
|
||||
}else{
|
||||
var templete = parse([json], '', acct_id,"","",mute);
|
||||
if(templete!=""){
|
||||
$("#toot-reply .no-data").hide();
|
||||
}
|
||||
$("#toot-reply").prepend(templete);
|
||||
$("#toot-reply .hide").html(lang.lang_details_filtered);
|
||||
$("#toot-reply .by_filter").css("display","block");
|
||||
$("#toot-reply .by_filter").removeClass("hide");
|
||||
jQuery("time.timeago").timeago();
|
||||
var rep="in_reply_to_id";
|
||||
if (json[rep]) {
|
||||
replyTL(json[rep], acct_id);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
//コンテクストってなんですか
|
||||
function context(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain + "/api/notes/conversation";
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at,
|
||||
noteId:id
|
||||
})
|
||||
}
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}
|
||||
}
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json.descendants, '', acct_id);
|
||||
$("#toot-after").html(templete);
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
json.reverse();
|
||||
console.log(json);
|
||||
var templete = misskeyParse(json, '', acct_id,"","",[]);
|
||||
$("#toot-reply").html(templete);
|
||||
$("#toot-reply .hide").html(lang.lang_details_filtered);
|
||||
$("#toot-reply .by_filter").css("display","block");
|
||||
$("#toot-reply .by_filter").removeClass("hide");
|
||||
jQuery("time.timeago").timeago();
|
||||
}else{
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"thread");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
var templete = parse(json.descendants, '', acct_id,"","",mute);
|
||||
if(templete!=""){
|
||||
$("#toot-after .no-data").hide();
|
||||
}
|
||||
$("#toot-after").html(templete);
|
||||
$("#toot-after .hide").html(lang.lang_details_filtered);
|
||||
$("#toot-after .by_filter").css("display","block");
|
||||
$("#toot-after .by_filter").removeClass("hide");
|
||||
jQuery("time.timeago").timeago();
|
||||
}
|
||||
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
|
||||
//前のトゥート(Back TL)
|
||||
function beforeToot(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain +
|
||||
function beforeToot(id, acct_id, domain) {
|
||||
//var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain +
|
||||
"/api/notes/local-timeline"
|
||||
fetch(start, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at,
|
||||
untilID:id
|
||||
})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = misskeyParse(json, 'noauth', acct_id);
|
||||
$("#toot-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}else{
|
||||
var start = "https://" + domain +
|
||||
"/api/v1/timelines/public?local=true&max_id=" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
$("#toot-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, 'noauth', acct_id);
|
||||
if(templete!=""){
|
||||
$("#toot-before .no-data").hide();
|
||||
}
|
||||
$("#toot-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
}
|
||||
//前のユーザーのトゥート
|
||||
function userToot(id, acct_id, user) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
$("#user-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var start = "https://" + domain +
|
||||
"/api/users/notes"
|
||||
fetch(start, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at,
|
||||
untilID:id,
|
||||
userId:user
|
||||
})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = misskeyParse(json, 'noauth', acct_id);
|
||||
$("#user-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
if(templete!=""){
|
||||
$("#user-before .no-data").hide();
|
||||
}
|
||||
$("#user-before").html(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//ふぁぼ一覧
|
||||
function faved(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/favourited_by";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -162,6 +352,9 @@ function faved(id, acct_id) {
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = userparse(json, '', acct_id);
|
||||
if(templete!=""){
|
||||
$("#toot-fav .no-data").hide();
|
||||
}
|
||||
$("#toot-fav").html(templete);
|
||||
});
|
||||
}
|
||||
@@ -169,7 +362,8 @@ function faved(id, acct_id) {
|
||||
//ブースト一覧
|
||||
function rted(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/reblogged_by";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -195,10 +389,10 @@ function cbCopy(mode){
|
||||
if(mode=="emb"){
|
||||
var emb='<iframe src="'+url+'/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://'+domain+'/embed.js" async="async"></script>';
|
||||
execCopy(emb)
|
||||
Materialize.toast("埋め込みHTMLをコピーしました", 1500);
|
||||
Materialize.toast(lang.lang_details_embed, 1500);
|
||||
}else{
|
||||
if(execCopy(url)){
|
||||
Materialize.toast("トゥートURLをコピーしました", 1500);
|
||||
Materialize.toast(lang.lang_details_url, 1500);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -206,29 +400,76 @@ function cbCopy(mode){
|
||||
//本文のコピー
|
||||
function staCopy(id){
|
||||
var html=$("[toot-id="+id+"] .toot").html();
|
||||
html = html.match(/^<p>(.+)<\/p>$/)[1];
|
||||
html = html.replace(/^<p>(.+)<\/p>$/,"$1");
|
||||
html = html.replace(/<br\s?\/?>/, "\n");
|
||||
html = html.replace(/<p>/, "\n");
|
||||
html = html.replace(/<\/p>/, "\n");
|
||||
console.log(html);
|
||||
html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
|
||||
html=$.strip_tags(html);
|
||||
if(execCopy(html)){
|
||||
Materialize.toast("トゥート本文をコピーしました", 1500);
|
||||
Materialize.toast(lang.lang_details_txt, 1500);
|
||||
}
|
||||
|
||||
}
|
||||
//魚拓
|
||||
function shot(){
|
||||
var id=$("#tootmodal").attr("data-id");
|
||||
var w=$("#toot-this").width();
|
||||
var h=$("#toot-this").height()+150;
|
||||
var text=$("#toot-this").html();
|
||||
localStorage.setItem("sc-text",text)
|
||||
var title=$("#tootmodal").attr("data-id");
|
||||
var off = $('#toot-this').offset();
|
||||
var w=$("#toot-this").width()+50;
|
||||
var h=$("#toot-this").height()+50;
|
||||
var electron = require("electron");
|
||||
const fs = require("fs");
|
||||
const os = require('os')
|
||||
const shell = electron.shell;
|
||||
const path = require('path')
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('screen', [w,h,id]);
|
||||
let options = {
|
||||
types: ['screen'],
|
||||
thumbnailSize: {
|
||||
width: window.parent.screen.width,
|
||||
height: window.parent.screen.height
|
||||
}
|
||||
}
|
||||
const desktopCapturer = electron.desktopCapturer;
|
||||
desktopCapturer.getSources(options, function(error, sources) {
|
||||
if (error) return console.log(error)
|
||||
|
||||
sources.forEach(function(source) {
|
||||
if (source.name === 'Screen 1' || source.name === 'TheDesk') {
|
||||
var durl=source.thumbnail.toDataURL();
|
||||
var b64 = durl.match(
|
||||
/data:image\/png;base64,(.+)/
|
||||
);
|
||||
const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
|
||||
const savePath = path.join(os.tmpdir(), 'screenshot.png');
|
||||
var ipc = electron.ipcRenderer;
|
||||
if(localStorage.getItem("savefolder")){
|
||||
var save=localStorage.getItem("savefolder");
|
||||
}else{
|
||||
var save="";
|
||||
}
|
||||
ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title,off.top+50,off.left,save]);
|
||||
if($("#toot-this .img-parsed").length>0){
|
||||
for(i=0;i<$("#toot-this .img-parsed").length;i++){
|
||||
var url=$("#toot-this .img-parsed").eq(i).attr("data-url");
|
||||
if(localStorage.getItem("savefolder")){
|
||||
var save=localStorage.getItem("savefolder");
|
||||
}else{
|
||||
var save="";
|
||||
}
|
||||
ipc.send('shot-img-dl', [url,title+"_img"+i+".png",save]);
|
||||
}
|
||||
}
|
||||
return;
|
||||
const message = `Saved screenshot to: ${screenshotPath}`
|
||||
//screenshotMsg.textContent = message
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//翻訳
|
||||
function trans(tar){
|
||||
function trans(tar,to){
|
||||
var html=$("#toot-this .toot").html();
|
||||
if(html.match(/^<p>(.+)<\/p>$/)){
|
||||
html = html.match(/^<p>(.+)<\/p>$/)[1];
|
||||
@@ -237,18 +478,21 @@ function trans(tar){
|
||||
html = html.replace(/<p>/g, "\n");
|
||||
html = html.replace(/<\/p>/g, "\n");
|
||||
html=$.strip_tags(html);
|
||||
if(~tar.indexOf("zh")){
|
||||
tar="zh";
|
||||
}
|
||||
$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
|
||||
var exec='https://script.google.com/macros/s/AKfycbz0ETqcUxwNlw961GjErNb7vr_X18N2s1AS5Xu5nFTbYXcdcRM/exec?text='+encodeURIComponent(html)+'&source='+tar+'&target=ja'
|
||||
var exec='https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text='+encodeURIComponent(html)+'&source='+tar+'&target='+to
|
||||
console.log(exec);
|
||||
fetch(exec, {
|
||||
method: 'GET',
|
||||
}).then(function(response) {
|
||||
return response.text();
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(text) {
|
||||
$("#toot-this .additional").html('<span class="gray">'+text+'</span>');
|
||||
$("#toot-this .additional").html('<span class="gray">'+text.text+'</span>');
|
||||
});
|
||||
}
|
||||
//ブラウザで開く
|
||||
@@ -262,8 +506,11 @@ function brws(){
|
||||
}
|
||||
//外部からトゥート開く
|
||||
function detEx(url,acct_id){
|
||||
if(acct_id=="main"){
|
||||
acct_id=localStorage.getItem("main");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_"+acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+url
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
|
||||
@@ -15,13 +15,14 @@ function date(str, datetype) {
|
||||
} else {
|
||||
var min = date.getMinutes();
|
||||
}
|
||||
var sec=null;
|
||||
if (date.getSeconds() < 10) {
|
||||
var sec = "0" + date.getSeconds();
|
||||
sec = "0" + date.getSeconds();
|
||||
} else {
|
||||
var sec = date.getSeconds();
|
||||
sec = date.getSeconds();
|
||||
}
|
||||
if (datetype == "full") {
|
||||
var ret = date.getFullYear() + "年" + month + "月" + date.getDate() + "日 " +
|
||||
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + "/ " +
|
||||
date.getHours() + ":" + min + ":" + sec;
|
||||
}
|
||||
if (date.getFullYear() == now.getFullYear()) {
|
||||
@@ -34,15 +35,15 @@ function date(str, datetype) {
|
||||
}
|
||||
|
||||
} else {
|
||||
var ret = month + "月" + date.getDate() + "日 " + date.getHours() + ":" +
|
||||
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" +
|
||||
min + ":" + sec;
|
||||
}
|
||||
} else {
|
||||
var ret = month + "月" + date.getDate() + "日 " + date.getHours() + ":" + min +
|
||||
var ret = month + "/" + date.getDate() + " " + date.getHours() + ":" + min +
|
||||
":" + sec;
|
||||
}
|
||||
} else {
|
||||
var ret = date.getFullYear() + "年" + month + "月" + date.getDate() + "日 " +
|
||||
var ret = date.getFullYear() + "/" + month + "/" + date.getDate() + " " +
|
||||
date.getHours() + ":" + min + ":" + sec;
|
||||
}
|
||||
if (datetype == "double") {
|
||||
@@ -56,14 +57,39 @@ function date(str, datetype) {
|
||||
//特殊フォーマット(インスタンス情報で利用)
|
||||
function crat(str) {
|
||||
var date = new Date(str);
|
||||
|
||||
var mnt=null;
|
||||
if(date.getMonth()<9){
|
||||
mnt="0"+(date.getMonth()+1);
|
||||
}else{
|
||||
mnt=date.getMonth()+1;
|
||||
}
|
||||
if(date.getDate()<10){
|
||||
var dat="0"+date.getDate();
|
||||
}else{
|
||||
var dat=date.getDate();
|
||||
}
|
||||
if(date.getHours()<10){
|
||||
var hrs="0"+date.getHours();
|
||||
}else{
|
||||
var hrs=date.getHours();
|
||||
}
|
||||
if(date.getMinutes()<10){
|
||||
var mns="0"+date.getMinutes();
|
||||
}else{
|
||||
var mns=date.getMinutes();
|
||||
}
|
||||
if(date.getSeconds()<10){
|
||||
var sec="0"+date.getSeconds();
|
||||
}else{
|
||||
var sec=date.getSeconds();
|
||||
}
|
||||
format_str = 'YYYY-MM-DD hh:mm:ss';
|
||||
format_str = format_str.replace(/YYYY/g, date.getFullYear());
|
||||
format_str = format_str.replace(/MM/g, date.getMonth()+1);
|
||||
format_str = format_str.replace(/DD/g, date.getDate());
|
||||
format_str = format_str.replace(/hh/g, date.getHours());
|
||||
format_str = format_str.replace(/mm/g, date.getMinutes());
|
||||
format_str = format_str.replace(/ss/g, date.getSeconds());
|
||||
format_str = format_str.replace(/MM/g, mnt);
|
||||
format_str = format_str.replace(/DD/g, dat);
|
||||
format_str = format_str.replace(/hh/g, hrs);
|
||||
format_str = format_str.replace(/mm/g, mns);
|
||||
format_str = format_str.replace(/ss/g, sec);
|
||||
|
||||
return format_str;
|
||||
}
|
||||
|
||||
523
app/js/tl/dm.js
Normal file
523
app/js/tl/dm.js
Normal file
@@ -0,0 +1,523 @@
|
||||
//DM(Conv) TL
|
||||
function dm(acct_id, tlid, type,delc,voice) {
|
||||
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/conversations";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = '<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){
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
var acct_id = obj[tlid].domain;
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
|
||||
var start = "https://" + domain + "/api/v1/conversations?max_id="+sid;
|
||||
var type="dm";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = '<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オブジェクトパーサー(トゥート)
|
||||
function dmListParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
console.log(obj);
|
||||
var templete = '';
|
||||
if(obj[0]){
|
||||
localStorage.setItem("lastunix_"+ tlid,date(obj[0].created_at, 'unix'));
|
||||
}
|
||||
|
||||
var actb = localStorage.getItem("action_btns");
|
||||
var actb='re,rt,fav,qt,del,pin,red';
|
||||
if(actb){
|
||||
var actb = actb.split(',');
|
||||
var disp={};
|
||||
for(var k=0;k<actb.length;k++){
|
||||
if(k<4){
|
||||
var tp="type-a";
|
||||
}else{
|
||||
var tp="type-b";
|
||||
}
|
||||
disp[actb[k]]=tp;
|
||||
}
|
||||
}
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
var nsfwtype = localStorage.getItem("nsfw");
|
||||
var sent = localStorage.getItem("sentence");
|
||||
var ltr = localStorage.getItem("letters");
|
||||
var gif = localStorage.getItem("gif");
|
||||
var imh = localStorage.getItem("img-height");
|
||||
//独自ロケール
|
||||
var locale = localStorage.getItem("locale");
|
||||
if(locale=="yes"){
|
||||
var locale=false;
|
||||
}
|
||||
//ネイティブ通知
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
//クライアント強調
|
||||
var emp = localStorage.getItem("client_emp");
|
||||
if(emp){
|
||||
var emp = JSON.parse(emp);
|
||||
}
|
||||
//クライアントミュート
|
||||
var mute = localStorage.getItem("client_mute");
|
||||
if(mute){
|
||||
var mute = JSON.parse(mute);
|
||||
}
|
||||
//ユーザー強調
|
||||
var useremp = localStorage.getItem("user_emp");
|
||||
if(useremp){
|
||||
var useremp = JSON.parse(useremp);
|
||||
}
|
||||
//ワード強調
|
||||
var wordemp = localStorage.getItem("word_emp");
|
||||
if(wordemp){
|
||||
var wordemp = JSON.parse(wordemp);
|
||||
}
|
||||
//ワードミュート
|
||||
var wordmute = localStorage.getItem("word_mute");
|
||||
if(wordmute){
|
||||
var wordmute = JSON.parse(wordmute);
|
||||
wordmute = wordmute.concat(mutefilter);
|
||||
}else{
|
||||
wordmute = mutefilter;
|
||||
}
|
||||
//Ticker
|
||||
var tickerck = localStorage.getItem("ticker_ok");
|
||||
if(tickerck){
|
||||
var ticker=true;
|
||||
}else{
|
||||
var ticker=false;
|
||||
}
|
||||
//Cards
|
||||
var card = localStorage.getItem("card_" + tlid);
|
||||
|
||||
if (!sent) {
|
||||
var sent = 500;
|
||||
}
|
||||
if (!ltr) {
|
||||
var ltr = 500;
|
||||
}
|
||||
if (!nsfwtype || nsfwtype == "yes") {
|
||||
var nsfw = "ok";
|
||||
} else {
|
||||
var nsfw;
|
||||
}
|
||||
var cwtype = localStorage.getItem("cw");
|
||||
if (!cwtype || cwtype == "yes") {
|
||||
var cw = "ok";
|
||||
} else {
|
||||
var cw;
|
||||
}
|
||||
if (!datetype) {
|
||||
datetype = "absolute";
|
||||
}
|
||||
if (!gif) {
|
||||
var gif = "yes";
|
||||
}
|
||||
if (!imh) {
|
||||
var imh = "200";
|
||||
}
|
||||
if(!emp){
|
||||
var emp=[];
|
||||
}
|
||||
if(!mute){
|
||||
var mute=[];
|
||||
}
|
||||
if(!useremp){
|
||||
var useremp=[];
|
||||
}
|
||||
if(!wordemp){
|
||||
var wordemp=[];
|
||||
}
|
||||
if(!wordmute){
|
||||
var wordmute=[];
|
||||
}
|
||||
//via通知
|
||||
var viashow=localStorage.getItem("viashow");
|
||||
if(!viashow){
|
||||
viashow="via-hide";
|
||||
}
|
||||
if(viashow=="hide"){
|
||||
viashow="via-hide";
|
||||
}
|
||||
//認証なしTL
|
||||
if(mix=="noauth"){
|
||||
var noauth="hide";
|
||||
var antinoauth="";
|
||||
}else{
|
||||
var noauth="";
|
||||
var antinoauth="hide";
|
||||
}
|
||||
//マウスオーバーのみ
|
||||
var mouseover=localStorage.getItem("mouseover");
|
||||
if(!mouseover){
|
||||
mouseover="";
|
||||
}else if(mouseover=="yes" || mouseover=="click"){
|
||||
mouseover="hide";
|
||||
}else if(mouseover=="no"){
|
||||
mouseover="";
|
||||
}
|
||||
var local = [];
|
||||
var times=[];
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var conv_id=obj[key].id;
|
||||
var toot = obj[key].last_status;
|
||||
var dis_name=escapeHTML(toot.account.display_name);
|
||||
if(toot.account.emojis){
|
||||
var actemojick = toot.account.emojis[0];
|
||||
}else{
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(toot.account.emojis).forEach(function(key5) {
|
||||
var emoji = toot.account.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
|
||||
});
|
||||
}
|
||||
var noticeavatar="";
|
||||
var if_notf="";
|
||||
var uniqueid=toot.id;
|
||||
var notice = "";
|
||||
var boostback = "";
|
||||
//ユーザー強調
|
||||
if(toot.account.username!=toot.account.acct){
|
||||
var fullname=toot.account.acct;
|
||||
}else{
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var fullname=toot.account.acct+"@"+domain;
|
||||
}
|
||||
if(useremp){
|
||||
Object.keys(useremp).forEach(function(key10) {
|
||||
var user = useremp[key10];
|
||||
if(user==fullname){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
});
|
||||
}
|
||||
var id = toot.id;
|
||||
var home = "";
|
||||
if (toot.account.locked) {
|
||||
var locked = ' <i class="fa fa-lock red-text"></i>';
|
||||
} else {
|
||||
var locked = "";
|
||||
}
|
||||
if (!toot.application) {
|
||||
var via = '';
|
||||
viashow="hide";
|
||||
} else {
|
||||
var via = toot.application.name;
|
||||
//強調チェック
|
||||
Object.keys(emp).forEach(function(key6) {
|
||||
var cli = emp[key6];
|
||||
if(cli == via){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
});
|
||||
//ミュートチェック
|
||||
Object.keys(mute).forEach(function(key7) {
|
||||
var cli = mute[key7];
|
||||
if(cli == via){
|
||||
boostback = "hide";
|
||||
}
|
||||
});
|
||||
}
|
||||
if(mix=="pinned"){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
if (toot.spoiler_text && cw) {
|
||||
var content = toot.content;
|
||||
var spoil = escapeHTML(toot.spoiler_text);
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var api_spoil = "gray";
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
|
||||
} else {
|
||||
var ct1 = toot.content.split('</p>').length + toot.content.split('<br />').length -2;
|
||||
var ct2 = toot.content.split('</p>').length + toot.content.split('<br>').length -2;
|
||||
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
|
||||
if ((sent < ct && $.mb_strlen($.strip_tags(toot.content)) > 5) || ($.strip_tags(toot.content).length > ltr && $.mb_strlen($.strip_tags(toot.content)) > 5)) {
|
||||
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + toot.content
|
||||
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
|
||||
toot.content), 0, 100) +
|
||||
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
|
||||
} else {
|
||||
var content = toot.content;
|
||||
var spoil = escapeHTML(toot.spoiler_text);
|
||||
var spoiler = "";
|
||||
var spoiler_show = "";
|
||||
}
|
||||
}
|
||||
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
||||
);
|
||||
if (urls) {
|
||||
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
||||
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
|
||||
} else {
|
||||
var analyze = '';
|
||||
}
|
||||
var viewer = "";
|
||||
var hasmedia = "";
|
||||
var youtube = "";
|
||||
if(toot.emojis){
|
||||
var emojick = toot.emojis[0];
|
||||
}else{
|
||||
var emojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (emojick) {
|
||||
Object.keys(toot.emojis).forEach(function(key5) {
|
||||
var emoji = toot.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
content = content.replace(regExp, emoji_url);
|
||||
spoil = spoil.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//ニコフレ絵文字
|
||||
if(toot.profile_emojis){
|
||||
var nicoemojick = toot.profile_emojis[0];
|
||||
}else{
|
||||
var nicoemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (nicoemojick) {
|
||||
Object.keys(toot.profile_emojis).forEach(function(keynico) {
|
||||
var emoji = toot.profile_emojis[keynico];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
content = content.replace(regExp, emoji_url);
|
||||
spoil = spoil.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//デフォ絵文字
|
||||
content=twemoji.parse(content);
|
||||
if(dis_name){
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}
|
||||
if(spoil){
|
||||
spoil=twemoji.parse(spoil);
|
||||
}
|
||||
var mediack = toot.media_attachments[0];
|
||||
//メディアがあれば
|
||||
var media_ids="";
|
||||
if (mediack) {
|
||||
hasmedia = "hasmedia";
|
||||
var cwdt = 100 / toot.media_attachments.length;
|
||||
Object.keys(toot.media_attachments).forEach(function(key2) {
|
||||
var media = toot.media_attachments[key2];
|
||||
var purl = media.preview_url;
|
||||
media_ids=media_ids+media.id+",";
|
||||
var url = media.url;
|
||||
if (toot.sensitive && nsfw) {
|
||||
var sense = "sensitive"
|
||||
} else {
|
||||
var sense = ""
|
||||
}
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
|
||||
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="' + media.type + '" class="img-parsed"><img src="' +
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
|
||||
});
|
||||
media_ids = media_ids.slice(0, -1) ;
|
||||
} else {
|
||||
viewer = "";
|
||||
hasmedia = "nomedia";
|
||||
}
|
||||
var menck = toot.mentions[0];
|
||||
var mentions = "";
|
||||
//メンションであれば
|
||||
if (menck) {
|
||||
mentions = "";
|
||||
Object.keys(toot.mentions).forEach(function(key3) {
|
||||
var mention = toot.mentions[key3];
|
||||
mentions = mentions + '<a onclick="udg(\'' + mention.id + '\',' +
|
||||
acct_id + ')" class="pointer">@' + mention.acct + '</a> ';
|
||||
});
|
||||
mentions = '<div style="float:right">' + mentions + '</div>';
|
||||
}
|
||||
var tagck = toot.tags[0];
|
||||
var tags = "";
|
||||
//タグであれば
|
||||
if (tagck) {
|
||||
Object.keys(toot.tags).forEach(function(key4) {
|
||||
var tag = toot.tags[key4];
|
||||
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
|
||||
',\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
|
||||
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
|
||||
});
|
||||
tags = '<div style="float:right">' + tags + '</div>';
|
||||
}
|
||||
//アニメ再生
|
||||
if (gif == "yes") {
|
||||
var avatar = toot.account.avatar;
|
||||
} else {
|
||||
var avatar = toot.account.avatar_static;
|
||||
}
|
||||
//ワードミュート
|
||||
if(wordmute){
|
||||
Object.keys(wordmute).forEach(function(key8) {
|
||||
var worde = wordmute[key8];
|
||||
if(worde){
|
||||
if(worde.tag){
|
||||
var word=worde.tag;
|
||||
}else{
|
||||
var word=worde
|
||||
}
|
||||
var regExp = new RegExp( word, "g" ) ;
|
||||
if($.strip_tags(content).match(regExp)){
|
||||
boostback = "hide by_filter";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
//ワード強調
|
||||
if(wordemp){
|
||||
Object.keys(wordemp).forEach(function(key9) {
|
||||
var word = wordemp[key9];
|
||||
if(word){
|
||||
var word=word.tag;
|
||||
var regExp = new RegExp( word, "g" ) ;
|
||||
content=content.replace(regExp,'<span class="emp">'+word+"</span>");
|
||||
}
|
||||
});
|
||||
}
|
||||
//日本語じゃない
|
||||
if(toot.language!="ja"){
|
||||
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
|
||||
}else{
|
||||
var trans="";
|
||||
}
|
||||
if (toot.favourited) {
|
||||
var if_fav = " yellow-text";
|
||||
var fav_app = "faved";
|
||||
} else {
|
||||
var if_fav = "";
|
||||
var fav_app = "";
|
||||
}
|
||||
//Cards
|
||||
if (!card && toot.card) {
|
||||
var cards=toot.card;
|
||||
if (cards.provider_name=="Twitter"){
|
||||
if(cards.image){
|
||||
var twiImg='<br><img src="'+cards.image+'">';
|
||||
}else{
|
||||
var twiImg='';
|
||||
}
|
||||
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
|
||||
}
|
||||
if (cards.title) {
|
||||
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
|
||||
escapeHTML(cards.description) + "</span>";
|
||||
}
|
||||
if (cards.html) {
|
||||
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
|
||||
}
|
||||
|
||||
}
|
||||
//Ticker
|
||||
var tickerdom="";
|
||||
if(ticker){
|
||||
var tickerdata=localStorage.getItem("ticker")
|
||||
if(tickerdata){
|
||||
var tickerdata=JSON.parse(tickerdata);
|
||||
|
||||
var thisdomain=toot.account.acct.split("@");
|
||||
if(thisdomain.length>1){
|
||||
thisdomain=thisdomain[1];
|
||||
}
|
||||
for( var i=0; i<tickerdata.length; i++) {
|
||||
var value=tickerdata[i];
|
||||
if(value.domain==thisdomain){
|
||||
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
|
||||
boostback + ' ' + fav_app +
|
||||
' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
|
||||
key].created_at, 'unix') + '" '+if_notf+' onclick="dmStatus()">' +
|
||||
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
|
||||
'</span></div>' +
|
||||
'<div class="area-icon"><a onclick="udg(\'' + toot.account.id +
|
||||
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
|
||||
'<img src="' + avatar +
|
||||
'" width="40" class="prof-img" user="' + toot.account.acct +
|
||||
'"></a>'+noticeavatar+'</div>' +
|
||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||
dis_name +
|
||||
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
|
||||
toot.account.acct + locked + '</span></div>' +
|
||||
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
|
||||
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
|
||||
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
|
||||
date(toot.created_at, datetype) + '</span>' +
|
||||
'</div></div>' +
|
||||
'<div class="area-toot">'+tickerdom+'<span class="' +
|
||||
api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show +
|
||||
'</span><span class="toot ' + spoiler + '">' + content +
|
||||
'</span>' +
|
||||
'' + viewer + '' +
|
||||
'<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;
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
/*メディアフィルター機能*/
|
||||
//各TL上方のMedia[On/Off]
|
||||
function mediaToggle(tlid) {
|
||||
var media = localStorage.getItem("media_" + tlid);
|
||||
@@ -13,6 +14,29 @@ function mediaToggle(tlid) {
|
||||
$("#timeline_"+tlid).addClass("media-filter")
|
||||
}
|
||||
}
|
||||
//各TL上方のBT[BTOnly/BTExc/Off]
|
||||
function ebtToggle(tlid) {
|
||||
var ebt = localStorage.getItem("ebt_" + tlid);
|
||||
if (ebt=="true") {
|
||||
localStorage.setItem("ebt_" + tlid, "but");
|
||||
$("#sta-bt-" + tlid).text("BT Only");
|
||||
$("#sta-bt-" + tlid).css("color",'#ff9800');
|
||||
$("#timeline_"+tlid).addClass("except-bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("bt-filter")
|
||||
}else if (ebt=="but") {
|
||||
localStorage.removeItem("ebt_" + tlid);
|
||||
$("#sta-bt-" + tlid).text("Off");
|
||||
$("#sta-bt-" + tlid).css("color",'red');
|
||||
$("#timeline_"+tlid).removeClass("bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("except-bt-filter")
|
||||
} else {
|
||||
localStorage.setItem("ebt_" + tlid, "true");
|
||||
$("#sta-bt-" + tlid).text("BT Ex");
|
||||
$("#sta-bt-" + tlid).css("color",'#009688');
|
||||
$("#timeline_"+tlid).addClass("bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("except-bt-filter")
|
||||
}
|
||||
}
|
||||
//各TL上方のMedia[On/Off]をチェック
|
||||
function mediaCheck(tlid) {
|
||||
var media = localStorage.getItem("media_" + tlid);
|
||||
@@ -26,3 +50,390 @@ function mediaCheck(tlid) {
|
||||
$("#timeline_"+tlid).removeClass("media-filter")
|
||||
}
|
||||
}
|
||||
//各TL上方のBT[On/Off]をチェック
|
||||
function ebtCheck(tlid) {
|
||||
var ebt = localStorage.getItem("ebt_" + tlid);
|
||||
if (ebt=="true") {
|
||||
$("#sta-bt-" + tlid).text("BT Ex");
|
||||
$("#sta-bt-" + tlid).css("color",'#009688');
|
||||
$("#timeline_"+tlid).addClass("bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("except-bt-filter")
|
||||
} else if (ebt=="but") {
|
||||
$("#sta-bt-" + tlid).text("BT Only");
|
||||
$("#sta-bt-" + tlid).css("color",'#ff9800');
|
||||
$("#timeline_"+tlid).addClass("except-bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("bt-filter")
|
||||
} else{
|
||||
$("#sta-bt-" + tlid).text("Off");
|
||||
$("#sta-bt-" + tlid).css("color",'red');
|
||||
$("#timeline_"+tlid).removeClass("bt-filter")
|
||||
$("#timeline_"+tlid).removeClass("except-bt-filter")
|
||||
}
|
||||
}
|
||||
/* 削除追跡*/
|
||||
function catchToggle(tlid) {
|
||||
var catchck = localStorage.getItem("catch_" + tlid);
|
||||
if (catchck) {
|
||||
localStorage.removeItem("catch_" + tlid);
|
||||
$("#sta-del-" + tlid).text("Off");
|
||||
$("#sta-del-" + tlid).css("color",'red');
|
||||
parseColumn();
|
||||
} else {
|
||||
localStorage.setItem("catch_" + tlid, "true");
|
||||
$("#sta-del-" + tlid).text("On");
|
||||
$("#sta-del-" + tlid).css("color",'#009688');
|
||||
parseColumn();
|
||||
}
|
||||
}
|
||||
function catchCheck(tlid) {
|
||||
var catchck = localStorage.getItem("catch_" + tlid);
|
||||
if (catchck) {
|
||||
$("#sta-del-" + tlid).text("On");
|
||||
$("#sta-del-" + tlid).css("color",'#009688');
|
||||
} else {
|
||||
$("#sta-del-" + tlid).text("Off");
|
||||
$("#sta-del-" + tlid).css("color",'red');
|
||||
}
|
||||
}
|
||||
function delreset(tlid){
|
||||
$("[tlid=" + tlid + "] .by_delcatch").hide();
|
||||
$("[tlid=" + tlid + "] .by_delcatch").remove();
|
||||
|
||||
}
|
||||
/*ワードフィルター機能*/
|
||||
function filterMenu(){
|
||||
$("#left-menu div").removeClass("active");
|
||||
$("#filterMenu").addClass("active");
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#filter-box").removeClass("hide");
|
||||
}
|
||||
function filter(){
|
||||
$("#filtered-words").html("");
|
||||
$("#filter-edit-id").val("")
|
||||
var acct_id = $("#filter-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/filters"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json) {
|
||||
var filters = "";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var filterword = json[key];
|
||||
var context = filterword.context.join(',');
|
||||
filters = filters + escapeHTML(filterword.phrase)+'<span class="sml">(for '+context+')</span>:<a onclick="filterEdit(\'' + filterword.id + '\',\'' + acct_id +
|
||||
'\')" class="pointer">'+lang.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 makeNewFilter(){
|
||||
var acct_id = $("#filter-acct-sel").val();
|
||||
var phr=$("#filter-add-word").val();
|
||||
var cont=[];
|
||||
if($("#home_filter:checked").val()){
|
||||
cont.push("home");
|
||||
}
|
||||
if($("#local_filter:checked").val()){
|
||||
cont.push("public");
|
||||
}
|
||||
if($("#notf_filter:checked").val()){
|
||||
cont.push("notifications");
|
||||
}
|
||||
if($("#conv_filter:checked").val()){
|
||||
cont.push("thread");
|
||||
}
|
||||
console.log(cont);
|
||||
if(!cont.length){
|
||||
$("#filtered-words").html('Error:'+lang.lang_filter_errordegree);
|
||||
}
|
||||
var exc=$("#except_filter:checked").val();
|
||||
var who=$("#wholeword_filter:checked").val();
|
||||
if(!who){
|
||||
who=false;
|
||||
}
|
||||
var time=$("#days_filter").val()*24*60*60+$("#hours_filter").val()*60*60+$("#mins_filter").val()*60;
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if($("#filter-edit-id").val()){
|
||||
var start = "https://" + domain + "/api/v1/filters/"+$("#filter-edit-id").val();
|
||||
var method="PUT"
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/filters"
|
||||
var method="POST"
|
||||
}
|
||||
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open(method, start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
phrase: phr,
|
||||
context: cont,
|
||||
irreversible: exc,
|
||||
whole_word:who,
|
||||
expires_in:time
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
filter();
|
||||
filterUpdate(acct_id)
|
||||
$("#filter-add-word").val("");
|
||||
$("#home_filter").prop("checked",false);
|
||||
$("#local_filter").prop("checked",false);
|
||||
$("#notf_filter").prop("checked",false);
|
||||
$("#conv_filter").prop("checked",false);
|
||||
$("#except_filter").prop("checked",false);
|
||||
$("#wholeword_filter").prop("checked",false);
|
||||
$("#days_filter").val("0");
|
||||
$("#hours_filter").val("0");
|
||||
$("#mins_filter").val("0");
|
||||
$("#add-filter-btn").text(lang.lang_add);
|
||||
$("#filter-edit-id").val("")
|
||||
}
|
||||
}
|
||||
}
|
||||
function filterEdit(id,acct_id){
|
||||
$("#filter-add-word").val("");
|
||||
$("#home_filter").prop("checked",false);
|
||||
$("#local_filter").prop("checked",false);
|
||||
$("#notf_filter").prop("checked",false);
|
||||
$("#conv_filter").prop("checked",false);
|
||||
$("#except_filter").prop("checked",false);
|
||||
$("#wholeword_filter").prop("checked",false);
|
||||
$("#days_filter").val("0");
|
||||
$("#hours_filter").val("0");
|
||||
$("#mins_filter").val("0");
|
||||
$("#add-filter-btn").text(lang.lang_edit);
|
||||
$("#filter-edit-id").val(id);
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/filters/"+id
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if (json) {
|
||||
var now = new Date() ;
|
||||
now = now.getTime() ;
|
||||
var now = Math.floor(now / 1000 ) ;
|
||||
$("#filter-add-word").val(json.phrase);
|
||||
Object.keys(json.context).forEach(function(key) {
|
||||
var context = json.context[key];
|
||||
$("[value="+context+"]").prop("checked",true);
|
||||
});
|
||||
if(json.irreversible){
|
||||
$("#except_filter").prop("checked",true);
|
||||
}
|
||||
if(json.whole_word){
|
||||
$("#wholeword_filter").prop("checked",true);
|
||||
}
|
||||
var expires=date(json.expires_at, 'unix')-now;
|
||||
var mins=Math.floor(expires/60)%60;
|
||||
var hours=Math.floor(expires/3600)%24;
|
||||
var days=Math.floor(expires/3600/24);
|
||||
$("#days_filter").val(days);
|
||||
$("#hours_filter").val(hours);
|
||||
$("#mins_filter").val(mins);
|
||||
}
|
||||
});
|
||||
}
|
||||
function filterDel(id,acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/filters/"+id;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open("DELETE", start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send();
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
filter();
|
||||
filterUpdate(acct_id)
|
||||
}
|
||||
}
|
||||
}
|
||||
function getFilter(acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
var start = "https://" + domain + "/api/v1/filters"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
|
||||
});
|
||||
}else{
|
||||
localStorage.setItem("filter_"+ acct_id ,JSON.stringify({}));
|
||||
}
|
||||
}
|
||||
function getFilterType(json,type){
|
||||
if(!json){
|
||||
return [];
|
||||
}
|
||||
if(type=="local"){
|
||||
type="public";
|
||||
}else if(type=="list"){
|
||||
type="home";
|
||||
}else if(type=="notf"){
|
||||
type="notifi";
|
||||
}
|
||||
var mutedfilters=[];
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var filterword = json[key];
|
||||
var phrases = filterword.phrase;
|
||||
if(filterword.context.join(",").indexOf(type)!== -1){
|
||||
mutedfilters.push(phrases);
|
||||
}
|
||||
});
|
||||
return mutedfilters;
|
||||
}
|
||||
function filterUpdate(acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/filters"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
localStorage.setItem("filter_"+ acct_id ,JSON.stringify(json));
|
||||
filterUpdateInternal(json,"home");
|
||||
filterUpdateInternal(json,"local");
|
||||
filterUpdateInternal(json,"notf");
|
||||
filterUpdateInternal(json,"pub");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
function filterUpdateInternal(json,type){
|
||||
var home=getFilterType(json,type);
|
||||
var wordmute = localStorage.getItem("word_mute");
|
||||
if(wordmute){
|
||||
var wordmute = JSON.parse(wordmute);
|
||||
home = home.concat(wordmute);
|
||||
}
|
||||
if(home){
|
||||
$("[data-acct="+acct_id+"] [data-type="+type+"] .cvo").each(function(i, elem) {
|
||||
var id=$(elem).attr("toot-id");
|
||||
$("[toot-id="+id+"]").removeClass("hide");
|
||||
var text=$(elem).find('.toot').html();
|
||||
Object.keys(home).forEach(function(key8) {
|
||||
var word = home[key8];
|
||||
var regExp = new RegExp( word, "g" );
|
||||
if($.strip_tags(text).match(regExp)){
|
||||
$("[toot-id="+id+"]").addClass("hide");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
/*
|
||||
<a onclick="catchToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="削除捕捉(削除されても残ります。背景色が変化します。)">delete</i><span id="sta-del-' +
|
||||
key + '">On</span></a>削除捕捉<a onclick="delreset(' + key +
|
||||
')" class="pointer">リセット</a><br>
|
||||
*/
|
||||
//通知フィルター
|
||||
function exclude(key){
|
||||
var excludetxt="";
|
||||
if($('#exc-reply-'+key+':checked').val()){
|
||||
excludetxt="?exclude_types[]=mention"
|
||||
var reply=true
|
||||
}else{
|
||||
var reply=false;
|
||||
}
|
||||
if($('#exc-fav-'+key+':checked').val()){
|
||||
if(reply){
|
||||
excludetxt=excludetxt+"&exclude_types[]=favourite"
|
||||
}else{
|
||||
excludetxt="?exclude_types[]=favourite"
|
||||
}
|
||||
var fav=true
|
||||
}else{
|
||||
var fav=false;
|
||||
}
|
||||
if($('#exc-bt-'+key+':checked').val()){
|
||||
if(reply || fav){
|
||||
excludetxt=excludetxt+"&exclude_types[]=reblog"
|
||||
}else{
|
||||
excludetxt="?exclude_types[]=reblog"
|
||||
}
|
||||
var bt=true
|
||||
}else{
|
||||
var bt=false;
|
||||
}
|
||||
if($('#exc-follow-'+key+':checked').val()){
|
||||
if(reply || bt || fav){
|
||||
excludetxt=excludetxt+"&exclude_types[]=follow"
|
||||
}else{
|
||||
excludetxt="?exclude_types[]=follow"
|
||||
}
|
||||
}else{
|
||||
}
|
||||
localStorage.setItem("exclude-"+key,excludetxt)
|
||||
parseColumn();
|
||||
}
|
||||
function excludeCk(key,target){
|
||||
var exc=localStorage.getItem("exclude-"+key);
|
||||
if(!exc){
|
||||
return "";
|
||||
}
|
||||
if(~exc.indexOf(target)){
|
||||
return "checked"
|
||||
}else{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,18 @@
|
||||
function listToggle(){
|
||||
if ($("#list-box").hasClass("hide")) {
|
||||
$("#list-box").removeClass("hide");
|
||||
$("#list-box").addClass("show");
|
||||
$("#list-box").css("top",$('#list-tgl').offset().top+"px");
|
||||
$("#list-box").css("left",$('#list-tgl').offset().left-410+"px");
|
||||
//リストロード
|
||||
} else {
|
||||
$("#list-box").removeClass("show");
|
||||
$("#list-box").addClass("hide")
|
||||
}
|
||||
}
|
||||
function listMenu(){
|
||||
$("#left-menu div").removeClass("active");
|
||||
$("#listMenu").addClass("active");
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#list-box").removeClass("hide");
|
||||
$('ul.tabs').tabs('select_tab', 'src-sta');
|
||||
$("#src-contents").html("");
|
||||
}
|
||||
|
||||
|
||||
function list(){
|
||||
$("#lists-user").html("");
|
||||
var acct_id = $("#list-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
@@ -35,12 +32,12 @@ function list(){
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var list = json[key];
|
||||
lists = lists + list.title+':<a onclick="listShow(' + list.id + ',\'' + list.title + '\',\'' + acct_id +
|
||||
'\')" class="pointer">表示</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
|
||||
')" class="pointer">ユーザー一覧</a><br> ';
|
||||
'\')" class="pointer">'+lang.lang_list_show+'</a>/<a onclick="listUser(' + list.id + ',' + acct_id +
|
||||
')" class="pointer">'+lang.lang_list_users+'</a><br> ';
|
||||
});
|
||||
$("#lists").html(lists);
|
||||
}else{
|
||||
$("#lists").html("リストはありません");
|
||||
$("#lists").html(lang.lang_list_nodata);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -48,19 +45,19 @@ function makeNewList(){
|
||||
var acct_id = $("#list-acct-sel").val();
|
||||
var text=$("#list-add").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists"
|
||||
console.log(start)
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
title: text
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
list();
|
||||
$("#list-add").val("")
|
||||
@@ -73,7 +70,7 @@ function listShow(id,title,acct_id){
|
||||
}
|
||||
function listUser(id,acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
@@ -92,17 +89,17 @@ function listUser(id,acct_id){
|
||||
var lists = "";
|
||||
var templete = userparse(json,'',acct_id);
|
||||
if(!json[0]){
|
||||
templete="ユーザーはいません";
|
||||
templete=lang.lang_list_nouser;
|
||||
}
|
||||
$("#lists-user").html(templete);
|
||||
}else{
|
||||
$("#lists-user").html("ユーザーはいません");
|
||||
$("#lists-user").html(lang.lang_list_nouser);
|
||||
}
|
||||
});
|
||||
}
|
||||
function hisList(user,acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
@@ -118,15 +115,15 @@ function hisList(user,acct_id){
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json) {
|
||||
var lists = "リストに追加<br>";
|
||||
var lists = lang.lang_list_add+"<br>";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var list = json[key];
|
||||
lists = lists + '<a onclick="listAdd(' + list.id + ',\'' + user + '\',\'' + acct_id +
|
||||
'\')" class="pointer">'+list.title+'</a><br> ';
|
||||
'\')" class="pointer">'+escapeHTML(list.title)+'</a><br> ';
|
||||
});
|
||||
$("#his-lists-a").html(lists);
|
||||
}else{
|
||||
$("#his-lists-a").html('リストはありません');
|
||||
$("#his-lists-a").html(lang.lang_list_nodata);
|
||||
}
|
||||
});
|
||||
var start = "https://" + domain + "/api/v1/accounts/"+user+"/lists"
|
||||
@@ -144,7 +141,7 @@ function hisList(user,acct_id){
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json) {
|
||||
var lists = "リストから削除<br>";
|
||||
var lists = lang.lang_list_remove+"<br>";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var list = json[key];
|
||||
lists = lists + '<a onclick="listRemove(' + list.id + ',\'' + user + '\',\'' + acct_id +
|
||||
@@ -152,25 +149,25 @@ function hisList(user,acct_id){
|
||||
});
|
||||
$("#his-lists-b").html(lists);
|
||||
}else{
|
||||
$("#his-lists-b").html('リストはありません');
|
||||
$("#his-lists-b").html(lang.lang_list_nodata);
|
||||
}
|
||||
});
|
||||
}
|
||||
function listAdd(id,user,acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
|
||||
console.log(start)
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
account_ids: [user]
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
hisList(user,acct_id)
|
||||
}
|
||||
@@ -178,19 +175,19 @@ function listAdd(id,user,acct_id){
|
||||
}
|
||||
function listRemove(id,user,acct_id){
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/lists/"+id+"/accounts"
|
||||
console.log(start)
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('DELETE', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
account_ids: [user]
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
hisList(user,acct_id)
|
||||
}
|
||||
|
||||
872
app/js/tl/misskeyparse.js
Normal file
872
app/js/tl/misskeyparse.js
Normal file
@@ -0,0 +1,872 @@
|
||||
function escapeHTMLtemp(str) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
return str.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
}
|
||||
$.strip_tagstemp = function(str, allowed) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
|
||||
.join('');
|
||||
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
|
||||
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
|
||||
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
|
||||
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
|
||||
});
|
||||
};
|
||||
//オブジェクトパーサー(トゥート)
|
||||
function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
var templete = '';
|
||||
localStorage.setItem("lastunix_"+ tlid,date(obj[0].createdAt, 'unix'));
|
||||
var actb = localStorage.getItem("action_btns");
|
||||
var actb='re,rt,fav,qt,del,pin,red';
|
||||
if(actb){
|
||||
var actb = actb.split(',');
|
||||
var disp={};
|
||||
for(var k=0;k<actb.length;k++){
|
||||
if(k<4){
|
||||
var tp="type-a";
|
||||
}else{
|
||||
var tp="type-b";
|
||||
}
|
||||
disp[actb[k]]=tp;
|
||||
}
|
||||
}
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
var nsfwtype = localStorage.getItem("nsfw");
|
||||
var sent = localStorage.getItem("sentence");
|
||||
var ltr = localStorage.getItem("letters");
|
||||
var gif = localStorage.getItem("gif");
|
||||
var imh = localStorage.getItem("img-height");
|
||||
//ネイティブ通知
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
//クライアント強調
|
||||
var emp = localStorage.getItem("client_emp");
|
||||
if(emp){
|
||||
var emp = JSON.parse(emp);
|
||||
}
|
||||
//クライアントミュート
|
||||
var mute = localStorage.getItem("client_mute");
|
||||
if(mute){
|
||||
var mute = JSON.parse(mute);
|
||||
}
|
||||
//ユーザー強調
|
||||
var useremp = localStorage.getItem("user_emp");
|
||||
if(useremp){
|
||||
var useremp = JSON.parse(useremp);
|
||||
}
|
||||
//ワード強調
|
||||
var wordemp = localStorage.getItem("word_emp");
|
||||
if(wordemp){
|
||||
var wordemp = JSON.parse(wordemp);
|
||||
}
|
||||
//ワードミュート
|
||||
var wordmute = localStorage.getItem("word_mute");
|
||||
if(wordmute){
|
||||
var wordmute = JSON.parse(wordmute);
|
||||
wordmute = wordmute.concat(mutefilter);
|
||||
}else{
|
||||
wordmute = mutefilter;
|
||||
}
|
||||
//Ticker
|
||||
var tickerck = localStorage.getItem("ticker_ok");
|
||||
if(tickerck){
|
||||
var ticker=true;
|
||||
}else{
|
||||
var ticker=false;
|
||||
}
|
||||
if (!sent) {
|
||||
var sent = 500;
|
||||
}
|
||||
if (!ltr) {
|
||||
var ltr = 500;
|
||||
}
|
||||
if (!nsfwtype || nsfwtype == "yes") {
|
||||
var nsfw = "ok";
|
||||
} else {
|
||||
var nsfw;
|
||||
}
|
||||
var cwtype = localStorage.getItem("cw");
|
||||
if (!cwtype || cwtype == "yes") {
|
||||
var cw = "ok";
|
||||
} else {
|
||||
var cw;
|
||||
}
|
||||
if (!datetype) {
|
||||
datetype = "absolute";
|
||||
}
|
||||
if (!gif) {
|
||||
var gif = "yes";
|
||||
}
|
||||
if (!imh) {
|
||||
var imh = "200";
|
||||
}
|
||||
if(!emp){
|
||||
var emp=[];
|
||||
}
|
||||
if(!mute){
|
||||
var mute=[];
|
||||
}
|
||||
if(!useremp){
|
||||
var useremp=[];
|
||||
}
|
||||
if(!wordemp){
|
||||
var wordemp=[];
|
||||
}
|
||||
if(!wordmute){
|
||||
var wordmute=[];
|
||||
}
|
||||
//via通知
|
||||
var viashow=localStorage.getItem("viashow");
|
||||
if(!viashow){
|
||||
viashow="via-hide";
|
||||
}
|
||||
if(viashow=="hide"){
|
||||
viashow="via-hide";
|
||||
}
|
||||
//認証なしTL
|
||||
if(mix=="noauth"){
|
||||
var noauth="hide";
|
||||
var antinoauth="";
|
||||
}else{
|
||||
var noauth="";
|
||||
var antinoauth="hide";
|
||||
}
|
||||
//マウスオーバーのみ
|
||||
var mouseover=localStorage.getItem("mouseover");
|
||||
if(!mouseover){
|
||||
mouseover="";
|
||||
}else if(mouseover=="yes" || mouseover=="click"){
|
||||
mouseover="hide";
|
||||
}else if(mouseover=="no"){
|
||||
mouseover="";
|
||||
}
|
||||
var local = [];
|
||||
var times=[];
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var toot = obj[key];
|
||||
var dis_name=toot.user.name;
|
||||
if(dis_name){
|
||||
dis_name=escapeHTMLtemp(dis_name);
|
||||
}else{
|
||||
disname="";
|
||||
}
|
||||
if (mix == "notf") {
|
||||
if (gif == "yes") {
|
||||
noticeavatar = toot.user.avatarUrl;
|
||||
} else {
|
||||
noticeavatar = toot.user.avatarUrl;
|
||||
}
|
||||
noticeavatar='<a onclick="udg(\'' + toot.user.id +
|
||||
'\',' + acct_id + ');" user="' + toot.user.username + '" class="udg">' +
|
||||
'<img src="' + noticeavatar +
|
||||
'" width="20" class="notf-icon prof-img" user="' + toot.user.username +
|
||||
'"></a>';
|
||||
if (toot.type == "reply") {
|
||||
var what = lang.lang_parse_mentioned;
|
||||
var icon = '<i class="big-text fa fa-share teal-text"></i>';
|
||||
noticeavatar="";
|
||||
} else if (toot.type == "renote") {
|
||||
var what = lang.lang_misskeyparse_renoted;
|
||||
var icon = '<i class="big-text fa fa-retweet light-blue-text"></i>';
|
||||
} else if (toot.type == "quote") {
|
||||
var what = lang.lang_misskeyparse_quoted;
|
||||
var icon = '<i class="big-text fa fa-quote-right orange-text"></i>';
|
||||
} else if (toot.type == "reaction") {
|
||||
var what = lang.lang_misskeyparse_reacted;
|
||||
var reactions={
|
||||
"like":"👍",
|
||||
"love":"💓",
|
||||
"laugh":"😁",
|
||||
"hmm":"🤔",
|
||||
"surprise":"😮",
|
||||
"congrats":"🎉",
|
||||
"amgry":"💢",
|
||||
"confused":"😥",
|
||||
"pudding":"🍮"
|
||||
}
|
||||
var icon=reactions[toot.reaction];
|
||||
var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
|
||||
for(var i=0;i<reactions.length;i++){
|
||||
if(toot.note.reactionCounts[reactions[i]]){
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
|
||||
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
|
||||
}else{
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
|
||||
if($("#pub_" + id +" .reactions").hasClass("fullreact")){
|
||||
$("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
|
||||
}else{
|
||||
$("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
|
||||
}
|
||||
$("#pub_" + id +" .re-"+reactions[i]+"ct").text(toot.note.reactionCounts[reactions[i]])
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var icon = '<i class="big-text material-icons indigo-text" style="font-size:17px">info</i>';
|
||||
}
|
||||
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.createdAt,
|
||||
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
|
||||
datetype) +
|
||||
'</span>'+icon+'<a onclick="udg(\'' + toot.user.username +
|
||||
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
|
||||
"(@" + toot.user.username +
|
||||
")</a>";
|
||||
var notice = noticetext;
|
||||
var memory = localStorage.getItem("notice-mem");
|
||||
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
|
||||
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
|
||||
if (toot.type == "reply") {
|
||||
var replyct=localStorage.getItem("notf-reply_" + acct_id)
|
||||
$(".notf-reply_" + acct_id).text(replyct*1-(-1));
|
||||
localStorage.setItem("notf-reply_" + acct_id,replyct*1-(-1))
|
||||
$(".notf-reply_" + acct_id).removeClass("hide")
|
||||
}else if (toot.type == "renote" || toot.type=="quote") {
|
||||
var btct=localStorage.getItem("notf-bt_" + acct_id)
|
||||
$(".notf-bt_" + acct_id).text(btct*1+1);
|
||||
localStorage.setItem("notf-bt_" + acct_id,btct*1-(-1))
|
||||
$(".notf-bt_" + acct_id).removeClass("hide")
|
||||
}else if (toot.type == "reaction") {
|
||||
var favct=localStorage.getItem("notf-fav_" + acct_id)
|
||||
$(".notf-fav_" + acct_id).text(favct*1-(-1));
|
||||
localStorage.setItem("notf-fav_" + acct_id,favct*1-(-1))
|
||||
$(".notf-fav_" + acct_id).removeClass("hide")
|
||||
}
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(popup>0){
|
||||
Materialize.toast("["+domain+"]"+escapeHTMLtemp(toot.user.name)+what, popup * 1000);
|
||||
}
|
||||
if(native=="yes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
|
||||
icon: toot.account.avatar
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', [
|
||||
'TheDesk:'+domain,
|
||||
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tagstemp(toot.status.content),
|
||||
toot.account.avatar,
|
||||
"toot",
|
||||
acct_id,
|
||||
toot.status.id
|
||||
]);
|
||||
}
|
||||
}
|
||||
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
|
||||
$(".notf-icon_" + acct_id).addClass("red-text");
|
||||
}
|
||||
localStorage.setItem("notice-mem", noticetext);
|
||||
noticetext = "";
|
||||
}
|
||||
var if_notf='data-notfIndv="'+acct_id+"_"+toot.id+'"';
|
||||
var toot = toot.note;
|
||||
var dis_name=escapeHTMLtemp(toot.user.name);
|
||||
}else{
|
||||
var if_notf="";
|
||||
if (toot.renote) {
|
||||
var rebtxt = lang.lang_parse_btedsimple;
|
||||
var rticon = "fa-retweet light-blue-text";
|
||||
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.user.username +
|
||||
")<br>";
|
||||
var boostback = "shared";
|
||||
var uniqueid=toot.id;
|
||||
var toot = toot.renote;
|
||||
var dis_name=escapeHTMLtemp(toot.user.name);
|
||||
var uniqueid=toot.id;
|
||||
var actemojick=false
|
||||
} else {
|
||||
var uniqueid=toot.id;
|
||||
var notice = "";
|
||||
var boostback = "";
|
||||
//ユーザー強調
|
||||
if(toot.user.host){
|
||||
var fullname=toot.user.username+"@"+toot.user.host;
|
||||
}else{
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var fullname=toot.user.username+"@"+domain;
|
||||
}
|
||||
if(useremp){
|
||||
Object.keys(useremp).forEach(function(key10) {
|
||||
var user = useremp[key10];
|
||||
if(user==fullname){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
var id = toot.id;
|
||||
if (mix == "home") {
|
||||
var home = ""
|
||||
var divider = '<div class="divider"></div>';
|
||||
} else {
|
||||
var home = "";
|
||||
var divider = '<div class="divider"></div>';
|
||||
}
|
||||
/*
|
||||
if (toot.account.locked) {
|
||||
var locked = ' <i class="fa fa-lock red-text"></i>';
|
||||
} else {
|
||||
var locked = "";
|
||||
}
|
||||
*/
|
||||
if (!toot.app) {
|
||||
if(toot.viaMobile){
|
||||
var via = '<span style="font-style: italic;">Mobile</span>';
|
||||
}else{
|
||||
var via = '<span style="font-style: italic;">Unknown</span>';
|
||||
}
|
||||
} else {
|
||||
var via = toot.app.name;
|
||||
//強調チェック
|
||||
Object.keys(emp).forEach(function(key6) {
|
||||
var cli = emp[key6];
|
||||
if(cli == via){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
});
|
||||
//ミュートチェック
|
||||
Object.keys(mute).forEach(function(key7) {
|
||||
var cli = mute[key7];
|
||||
if(cli == via){
|
||||
boostback = "hide";
|
||||
}
|
||||
});
|
||||
}
|
||||
if ((toot.cw || toot.cw=="") && cw) {
|
||||
var content = toot.text;
|
||||
var spoil = escapeHTMLtemp(toot.cw);
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var api_spoil = "gray";
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
|
||||
} else {
|
||||
var ct1 = nl2br(toot.text).split('<br />').length -2;
|
||||
var ct2 = nl2br(toot.text).split('<br>').length -2;
|
||||
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
|
||||
if ((sent < ct && $.mb_strlen($.strip_tagstemp(toot.text)) > 5) || ($.strip_tagstemp(toot.text).length > ltr && $.mb_strlen($.strip_tagstemp(toot.text)) > 5)) {
|
||||
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + escapeHTMLtemp(toot.text)
|
||||
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tagstemp(
|
||||
toot.text), 0, 100) +
|
||||
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
|
||||
} else {
|
||||
var content = escapeHTMLtemp(toot.text);
|
||||
if(toot.cw){
|
||||
var spoil = escapeHTMLtemp(toot.cw);
|
||||
}else{
|
||||
var spoil="";
|
||||
}
|
||||
|
||||
var spoiler = "";
|
||||
var spoiler_show = "";
|
||||
}
|
||||
}
|
||||
var analyze = '';
|
||||
var urls = $.strip_tagstemp(content).replace(/\n/g, " ").match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
||||
);
|
||||
if (urls) {
|
||||
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
||||
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
|
||||
} else {
|
||||
var analyze = '';
|
||||
}
|
||||
var viewer = "<br>";
|
||||
var hasmedia = "";
|
||||
var youtube = "";
|
||||
if(toot.emojis){
|
||||
var emojick = toot.emojis[0];
|
||||
}else{
|
||||
var emojick=false;
|
||||
}
|
||||
//デフォ絵文字
|
||||
if(content){
|
||||
//MFM
|
||||
content=content.replace(/^"([^"]+)"$/gmi, '<blockquote>$1</blockquote>')
|
||||
content=content.replace(/`(.+)`/gi, '<code>$1</code>')
|
||||
content=content.replace(/(http(s)?:\/\/[\x21-\x7e]+)/gi, '<a href="$1" target="_blank">$1</a>')
|
||||
content=content.replace(/\(\(\((.+)\)\)\)/gi, '<span class="shake">$1</span>')
|
||||
content=content.replace(/<motion>(.+)<\/motion>/gi, '<span class="shake">$1</span>')
|
||||
content=content.replace(/\*\*\*([^*]+)\*\*\*/gi, '<span class="shake" style="font-size:200%">$1</span>')
|
||||
content=content.replace(/\*\*([^*]+)\*\*/gi, '<b>$1</b>')
|
||||
content=content.replace(/^(.+)\s(検索|search)$/gmi, '<div class="input-field"><i class="material-icons prefix">search</i><input type="text" style="width:calc( 60% - 80px);" name="q" value="$1" id="srcbox_'+toot.id+'"><label for="src" data-trans="src" class="">検索</label><button class="btn waves-effect indigo" style="width:40%;" data-trans-i="src" onclick="goGoogle(\''+toot.id+'\')">検索</button></div>')
|
||||
content=content.replace(/\[(.+)\]\(<a href="(http(s)?:\/\/[\x21-\x7e]+)".+\)/gi,'<a href="$2" target="_blank">$1</a>');
|
||||
|
||||
content=twemoji.parse(content);
|
||||
}else{
|
||||
content="";
|
||||
}
|
||||
|
||||
if(dis_name){
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}else{
|
||||
dis_name="";
|
||||
}
|
||||
if(spoil){
|
||||
spoil=twemoji.parse(spoil);
|
||||
}
|
||||
if(noticetext){
|
||||
noticetext=twemoji.parse(noticetext);
|
||||
}
|
||||
if(notice){
|
||||
notice=twemoji.parse(notice);
|
||||
}
|
||||
|
||||
if(toot.files){
|
||||
var mediack = toot.files[0];
|
||||
var useparam="files";
|
||||
}else{
|
||||
if(toot.media){
|
||||
var mediack = toot.media[0];
|
||||
var useparam="media";
|
||||
}else{
|
||||
var mediack=false;
|
||||
}
|
||||
}
|
||||
//メディアがあれば
|
||||
var media_ids="";
|
||||
if (mediack) {
|
||||
hasmedia = "hasmedia";
|
||||
var cwdt = 100 / toot[useparam].length;
|
||||
Object.keys(toot[useparam]).forEach(function(key2) {
|
||||
var media = toot[useparam][key2];
|
||||
var purl = media.url;
|
||||
media_ids=media_ids+media.id+",";
|
||||
var url = media.url;
|
||||
if (media.isSensitive && nsfw) {
|
||||
var sense = "sensitive"
|
||||
} else {
|
||||
var sense = ""
|
||||
}
|
||||
if(media.type.indexOf("video") !== -1){
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="video" class="img-parsed"><video src="' +
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="max-width:100%;"></a></span>';
|
||||
}else{
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="image" class="img-parsed"><img src="' +
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
|
||||
}
|
||||
|
||||
});
|
||||
media_ids = media_ids.slice(0, -1) ;
|
||||
} else {
|
||||
viewer = "";
|
||||
hasmedia = "nomedia";
|
||||
}
|
||||
var menck = toot.reply;
|
||||
var mentions = "";
|
||||
//メンションであれば
|
||||
if (menck) {
|
||||
mentions = '<div style="float:right"><a onclick="udg(\'' + menck.user.id + '\',' +
|
||||
acct_id + ')" class="pointer">@' + menck.user.username + '</a></div>';
|
||||
}
|
||||
var tagck = toot.tags[0];
|
||||
var tags = "";
|
||||
//タグであれば
|
||||
if (tagck) {
|
||||
Object.keys(toot.tags).forEach(function(key4) {
|
||||
var tag = toot.tags[key4];
|
||||
var tags = '<a onclick="tagShow(\'' + tag + '\')" class="pointer parsed">#' + tag + '</a><span class="hide" data-tag="' + tag + '">#' + tag + ':<a onclick="tl(\'tag\',\'' + tag + '\',' + acct_id +
|
||||
',\'add\')" class="pointer parsed" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag)+ '">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer parsed" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag) + '">Toot</a> '+
|
||||
'<a onclick="tagPin(\'' + tag + '\')" class="pointer parsed" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag)+ '">Pin</a></span> ';
|
||||
content=content.replace("#"+tag,tags);
|
||||
});
|
||||
//tags = '<div style="float:right">' + tags + '</div>';
|
||||
}
|
||||
//公開範囲を取得
|
||||
var vis = "";
|
||||
var visen = toot.visibility;
|
||||
if (visen == "public") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "home") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_home+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "followers") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_misskeyparse_followers+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">people</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "private") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "specified") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_misskeyparse_specified+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
|
||||
var can_rt = "hide";
|
||||
}
|
||||
if (toot.user.username == localStorage.getItem("user_" + acct_id)) {
|
||||
var if_mine = "";
|
||||
var mine_via="type-b";
|
||||
} else {
|
||||
var if_mine = "hide";
|
||||
var mine_via="";
|
||||
}
|
||||
if (toot.myReaction) {
|
||||
var if_fav = " yellow-text";
|
||||
var fav_app = "faved";
|
||||
} else {
|
||||
var if_fav = "";
|
||||
var fav_app = "";
|
||||
}
|
||||
var if_rt = "";
|
||||
var rt_app = "";
|
||||
/*
|
||||
if (toot.reblogged) {
|
||||
var if_rt = "teal-text";
|
||||
var rt_app = "rted";
|
||||
} else {
|
||||
var if_rt = "";
|
||||
var rt_app = "";
|
||||
}
|
||||
*/
|
||||
//アバター
|
||||
var avatar = toot.user.avatarUrl;
|
||||
//ワードミュート
|
||||
if(wordmute){
|
||||
Object.keys(wordmute).forEach(function(key8) {
|
||||
var worde = wordmute[key8];
|
||||
if(worde){
|
||||
if(worde.tag){
|
||||
var word=worde.tag;
|
||||
}else{
|
||||
var word=worde
|
||||
}
|
||||
var regExp = new RegExp( word, "g" ) ;
|
||||
if($.strip_tagstemp(content).match(regExp)){
|
||||
boostback = "hide by_filter";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
//ワード強調
|
||||
if(wordemp){
|
||||
Object.keys(wordemp).forEach(function(key9) {
|
||||
var word = wordemp[key9];
|
||||
if(word){
|
||||
var word=word.tag;
|
||||
var regExp = new RegExp( word, "g" ) ;
|
||||
content=content.replace(regExp,'<span class="emp">'+word+"</span>");
|
||||
}
|
||||
});
|
||||
}
|
||||
//Ticker
|
||||
var tickerdom="";
|
||||
if(ticker){
|
||||
var tickerdata=JSON.parse(localStorage.getItem("ticker"));
|
||||
|
||||
var thisdomain=toot.user.username.split("@");
|
||||
if(thisdomain.length>1){
|
||||
thisdomain=thisdomain[1];
|
||||
}
|
||||
for( var i=0; i<tickerdata.length; i++) {
|
||||
var value=tickerdata[i];
|
||||
if(value.domain==thisdomain){
|
||||
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//Poll
|
||||
var poll="";
|
||||
if(toot.poll){
|
||||
var choices=toot.poll.choices;
|
||||
Object.keys(choices).forEach(function(keyc) {
|
||||
var choice = choices[keyc];
|
||||
if(choice.isVoted){
|
||||
var myvote=twemoji.parse("✅");
|
||||
}else{
|
||||
var myvote="";
|
||||
}
|
||||
poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+toot.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>';
|
||||
});
|
||||
poll='<div class="vote_'+toot.id+'">'+poll+'</div>';
|
||||
}
|
||||
//Reactions
|
||||
if(toot.reactionCounts){
|
||||
if(toot.reactionCounts.like){
|
||||
var like=toot.reactionCounts.like;
|
||||
var likehide="";
|
||||
}else{
|
||||
var like=0;
|
||||
var likehide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.love){
|
||||
var love=toot.reactionCounts.love;
|
||||
var lovehide="";
|
||||
}else{
|
||||
var love=0;
|
||||
var lovehide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.laugh){
|
||||
var laugh=toot.reactionCounts.laugh;
|
||||
var laughhide="";
|
||||
}else{
|
||||
var laugh=0;
|
||||
var laughhide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.hmm){
|
||||
var hmm=toot.reactionCounts.hmm;
|
||||
var hmmhide="";
|
||||
}else{
|
||||
var hmm=0;
|
||||
var hmmhide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.surprise){
|
||||
var surprise=toot.reactionCounts.surprise;
|
||||
var suphide="";
|
||||
}else{
|
||||
var suphide="hide";
|
||||
var surprise=0;
|
||||
}
|
||||
if(toot.reactionCounts.congrats){
|
||||
var congrats=toot.reactionCounts.congrats;
|
||||
var conghide="";
|
||||
}else{
|
||||
var congrats=0;
|
||||
var conghide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.angry){
|
||||
var angry=toot.reactionCounts.angry;
|
||||
var anghide="";
|
||||
}else{
|
||||
var angry=0;
|
||||
var anghide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.confused){
|
||||
var confhide="";
|
||||
var confused=toot.reactionCounts.confused;
|
||||
}else{
|
||||
var confused=0;
|
||||
var confhide="hide";
|
||||
}
|
||||
if(toot.reactionCounts.pudding){
|
||||
var pudding=toot.reactionCounts.pudding;
|
||||
var pudhide="";
|
||||
}else{
|
||||
var pudding=0;
|
||||
var pudhide="hide";
|
||||
}
|
||||
var fullhide="";
|
||||
}else{
|
||||
var like=0;var love=0;var laugh=0;var hmm=0;var surprise=0;var congrats=0;var angry=0;var confused=0;var pudding=0;
|
||||
var likehide="hide";var lovehide="hide";var laughhide="hide";var hmmhide="hide";var suphide="hide";var conghide="hide";var anghide="hide";var confhide="hide";var pudhide="hide";
|
||||
var fullhide="hide";
|
||||
}
|
||||
if(toot.myReaction){
|
||||
var reacted=toot.myReaction;
|
||||
}else{
|
||||
var reacted="";
|
||||
}
|
||||
content=nl2br(content);
|
||||
if(!content || content==""){
|
||||
content='<span class="gray">This post has no content. It may be media-only, private or deleted.</span>';
|
||||
}
|
||||
var trans="";
|
||||
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
|
||||
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + hasmedia + '" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
|
||||
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')" reacted="'+reacted+'">' +
|
||||
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
|
||||
'</span></div>' +
|
||||
'<div class="area-icon"><a onclick="udg(\'' + toot.user.id +
|
||||
'\',' + acct_id + ');" user="' + toot.user.username + '" class="udg">' +
|
||||
'<img src="' + avatar +
|
||||
'" width="40" class="prof-img" user="' + toot.user.username +
|
||||
'"></a></div>' +
|
||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||
dis_name +
|
||||
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
|
||||
toot.user.username + '</span></div>' +
|
||||
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'https://' +domain+"/notes/"+
|
||||
toot.id + '\');" title="' + date(toot.createdAt, 'absolute') +
|
||||
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
|
||||
date(toot.createdAt, datetype) + '</span>' +
|
||||
'</div></div>' +
|
||||
'<div class="area-toot">'+tickerdom+'<span class="toot ' + spoiler + '">' + content +
|
||||
'</span><span class="' +
|
||||
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
|
||||
'</span>' +
|
||||
'' + viewer + '' +
|
||||
'</div><div class="area-additional"><span class="additional">'+analyze+
|
||||
'<div class="reactions '+fullhide+'" style="height: 25px;"><span class="'+likehide+' reaction re-like"><a onclick="reaction(\'like\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat" style="padding:0;margin-left:3px;">'+twemoji.parse("👍")+'</a><span class="re-likect">'+like+
|
||||
'</span></span><span class="'+lovehide+' reaction re-love"><a onclick="reaction(\'love\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("💓")+'</a><span class="re-lovect">'+love+
|
||||
'</span></span><span class="'+laughhide+' reaction re-laugh"><a onclick="reaction(\'laugh\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("😁")+'</a><span class="re-laughct">'+laugh+
|
||||
'</span></span><span class="'+hmmhide+' reaction re-hmm"><a onclick="reaction(\'hmm\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("🤔")+'</a><span class="re-hmmct">'+hmm+
|
||||
'</span></span><span class="'+suphide+' reaction re-surprise"><a onclick="reaction(\'surprise\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("😮")+'</a><span class="re-surprisect">'+surprise+
|
||||
'</span></span><span class="'+conghide+' reaction re-congrats"><a onclick="reaction(\'congrats\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("🎉")+'</a><span class="re-congratsct">'+congrats+
|
||||
'</span></span><span class="'+anghide+' reaction re-angry"><a onclick="reaction(\'angry\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("💢")+'</a><span class="re-angryct">'+angry+
|
||||
'</span></span><span class="'+confhide+' reaction re-confused"><a onclick="reaction(\'confused\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("😥")+'</a><span class="re-confusedct">'+confused+
|
||||
'</span></span><span class="'+pudhide+' reaction re-pudding"><a onclick="reaction(\'pudding\',\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +'\')" class="waves-effect waves-dark btn-flat pointer" style="padding:0;margin-left:3px;">'+twemoji.parse("🍮")+'</a><span class="re-puddingct">'+pudding+
|
||||
'</span></div>'+poll + mentions + tags + '</div>' +
|
||||
'<div class="area-vis"></div>'+
|
||||
'<div class="area-actions '+mouseover+'">' +
|
||||
'<div class="action">'+vis+'</div>'+
|
||||
'<div class="action '+antinoauth+'"><a onclick="detEx(\'https://misskey.xyz/notes/'+toot.id+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
|
||||
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="misskeyreply(\'' + toot.id +
|
||||
'\',\'' + acct_id + '\',' +
|
||||
acct_id + ',\''+visen+
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i></a></div>' +
|
||||
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="renote(\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renote+'"><i class="text-darken-3 fa fa-retweet ' +
|
||||
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct"></span></a></div>' +
|
||||
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+'"><a onclick="renoteqt(\'' + toot.id + '\',' + acct_id +
|
||||
',\'misskey.xyz\',\'misskey.xyz\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_renoteqt+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
|
||||
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="reactiontoggle(\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_misskeyparse_reaction+'"><i class="fa text-darken-3 fa-plus' +
|
||||
if_fav + ' fav_' + toot.id + '"></i></div>' +
|
||||
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
|
||||
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + '"></i></a></div>'
|
||||
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
|
||||
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tagstemp(via)+'\')" title="via ' + $.strip_tagstemp(via) + '">via ' +
|
||||
via +
|
||||
'</span>'+
|
||||
'</div><div class="area-side '+mouseover+'"><div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
|
||||
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
|
||||
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
|
||||
'</div></div>' +
|
||||
'</div></div>';
|
||||
});
|
||||
return templete;
|
||||
}
|
||||
|
||||
//オブジェクトパーサー(ユーザーデータ)
|
||||
function misskeyUserparse(obj, auth, acct_id, tlid, popup) {
|
||||
if(popup > 0 || popup==-1){
|
||||
|
||||
}else{
|
||||
var obj = obj.users;
|
||||
}
|
||||
var templete = '';
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var toot = obj[key];
|
||||
var locked = "";
|
||||
if (auth) {
|
||||
var auth = '<i class="material-icons gray pointer" onclick="misskeyRequest(\'' +
|
||||
toot.id + '\',\'accept\',' + acct_id + ')">person_add</i>';
|
||||
} else {
|
||||
var auth = "";
|
||||
}
|
||||
var ftxt=lang.lang_parse_followed;
|
||||
if(popup > 0 || popup==-1){
|
||||
var notftext='<span class="cbadge"title="' + date(toot.createdAt,
|
||||
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.createdAt,
|
||||
datetype) +
|
||||
'</span>'+ftxt+'<br>';
|
||||
var toot = toot.user;
|
||||
}else{
|
||||
var notftext="";
|
||||
}
|
||||
var memory = localStorage.getItem("notice-mem");
|
||||
if (popup >= 0 && obj.length < 5 && notftext != memory) {
|
||||
Materialize.toast(escapeHTMLtemp(toot.name)+":"+ftxt, popup * 1000);
|
||||
$(".notf-icon_" + tlid).addClass("red-text");
|
||||
localStorage.setItem("notice-mem", notftext);
|
||||
notftext = "";
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
if(native=="yes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: toot.display_name+"(" + toot.acct +")"+ftxt,
|
||||
icon: toot.avatar
|
||||
};
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', [
|
||||
'TheDesk:'+domain,
|
||||
toot.display_name+"(" + toot.acct +")"+ftxt,
|
||||
toot.avatar,
|
||||
"userdata",
|
||||
acct_id,
|
||||
toot.id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(toot.name){
|
||||
var dis_name=escapeHTMLtemp(toot.name);
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}else{
|
||||
var dis_name=toot.name;
|
||||
}
|
||||
templete = templete +
|
||||
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
|
||||
notftext +
|
||||
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
|
||||
acct_id + ');" user="' + toot.username + '" class="udg">' +
|
||||
'<img src="' + toot.avatarUrl + '" width="40" class="prof-img" user="' + toot
|
||||
.username + '"></a></div>' +
|
||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||
dis_name + '</span>' +
|
||||
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
||||
toot.username + auth +'</span>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
|
||||
toot.followingCount +
|
||||
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followersCount +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
|
||||
});
|
||||
return templete;
|
||||
}
|
||||
function goGoogle(id){
|
||||
var val=$("#srcbox_"+id).val();
|
||||
var url="https://google.com/search?q="+val;
|
||||
const {
|
||||
shell
|
||||
} = require('electron');
|
||||
|
||||
shell.openExternal(url);
|
||||
}
|
||||
145
app/js/tl/mix.js
145
app/js/tl/mix.js
@@ -1,12 +1,12 @@
|
||||
//Integrated TL
|
||||
function mixtl(acct_id, tlid, type) {
|
||||
console.log(type);
|
||||
function mixtl(acct_id, tlid, type,delc,voice) {
|
||||
console.log(delc);
|
||||
localStorage.removeItem("morelock")
|
||||
localStorage.setItem("now", type);
|
||||
todo("Integrated TL Loading...(Local)");
|
||||
//まずLocal
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/timelines/public?local=true";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -36,7 +36,7 @@ function mixtl(acct_id, tlid, type) {
|
||||
var homearr=[];
|
||||
var timeline = jsonL.concat(jsonH);
|
||||
timeline.sort(function(a,b){
|
||||
if(date(a.created_at,"unix")>date(b.created_at,"unix")) return -1;
|
||||
if(date(a.created_at,"unix")>=date(b.created_at,"unix")) return -1;
|
||||
if(date(a.created_at,"unix")<date(b.created_at,"unix")) return 1;
|
||||
return 0;
|
||||
});
|
||||
@@ -48,21 +48,25 @@ function mixtl(acct_id, tlid, type) {
|
||||
var pkey=key*1+1;
|
||||
if(pkey<timeline.length){
|
||||
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(type=="integrated"){
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid);
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute, "mix");
|
||||
}else if(type=="plus"){
|
||||
if(timeline[key].account.acct==timeline[key].account.username){
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid);
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid, "", mute, "plus");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$("#landing_" + tlid).hide();
|
||||
$("#timeline_" + tlid).html(templete);
|
||||
mixre(acct_id, tlid, type);
|
||||
mixre(acct_id, tlid, type, mute,delc,voice);
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
todc();
|
||||
@@ -72,38 +76,54 @@ function mixtl(acct_id, tlid, type) {
|
||||
|
||||
|
||||
//Streamingに接続
|
||||
function mixre(acct_id, tlid, TLtype) {
|
||||
function mixre(acct_id, tlid, TLtype, mute,delc,voice,mode) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var startHome = "wss://" + domain +
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("streaming_" + acct_id)){
|
||||
var wss=localStorage.getItem("streaming_" + acct_id)
|
||||
}else{
|
||||
var wss="wss://"+domain
|
||||
}
|
||||
var startHome = wss+
|
||||
"/api/v1/streaming/?stream=user&access_token=" + at;
|
||||
|
||||
var startLocal = "wss://" + domain +
|
||||
var startLocal = wss+
|
||||
"/api/v1/streaming/?stream=public:local&access_token=" + at;
|
||||
var wshid = websocketHome.length;
|
||||
var wslid = websocketLocal.length;
|
||||
websocketHome[wshid] = new WebSocket(startHome);
|
||||
websocketLocal[wslid] = new WebSocket(startLocal);
|
||||
websocketHome[wshid].onopen = function(mess) {
|
||||
console.log("Connect Streaming API(Home)");
|
||||
localStorage.setItem("wssH_" + tlid, wshid);
|
||||
console.log("Connect Streaming API(Integrated:Home)");
|
||||
$("#notice_icon_" + tlid).removeClass("red-text");
|
||||
}
|
||||
websocketLocal[wslid].onopen = function(mess) {
|
||||
console.log("Connect Streaming API(Local)");
|
||||
localStorage.setItem("wssL_" + tlid, wslid);
|
||||
console.log("Connect Streaming API(Integrated:Local)");
|
||||
$("#notice_icon_" + tlid).removeClass("red-text");
|
||||
}
|
||||
websocketLocal[wslid].onmessage = function(mess) {
|
||||
console.log("Receive Streaming API:");
|
||||
console.log("Receive Streaming API:(Integrated:Local)");
|
||||
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
var type = JSON.parse(mess.data).event;
|
||||
if (type == "delete") {
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
if(delc=="true"){
|
||||
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
|
||||
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
|
||||
}else{
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
}
|
||||
|
||||
} else if (type == "update") {
|
||||
var templete = parse([obj], '', acct_id, tlid);
|
||||
if (!$("[toot-id="+obj.id+"]").length) {
|
||||
var templete = parse([obj], '', acct_id, tlid,"",mute);
|
||||
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
|
||||
if(voice){
|
||||
say(obj.content)
|
||||
}
|
||||
var templete = parse([obj], type, acct_id, tlid,"",mute, "mix");
|
||||
var pool = localStorage.getItem("pool_" + tlid);
|
||||
if (pool) {
|
||||
pool = templete + pool;
|
||||
@@ -111,32 +131,52 @@ function mixre(acct_id, tlid, TLtype) {
|
||||
pool = templete
|
||||
}
|
||||
localStorage.setItem("pool_" + tlid, pool);
|
||||
|
||||
scrollck();
|
||||
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
todc();
|
||||
}}
|
||||
}else{
|
||||
todo("二重取得発生中");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
websocketHome[wshid].onmessage = function(mess) {
|
||||
console.log("Receive Streaming API:(Home)");
|
||||
console.log("Receive Streaming API:(Integrated:Home)");
|
||||
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
var type = JSON.parse(mess.data).event;
|
||||
if (type == "delete") {
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
if(del>10){
|
||||
reconnector(tlid,type,acct_id,data)
|
||||
}else{
|
||||
localStorage.setItem("delete",del*1+1)
|
||||
}
|
||||
if(delc=="true"){
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
|
||||
}else{
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
}
|
||||
} else if (type == "update") {
|
||||
localStorage.removeItem("delete");
|
||||
if(TLtype=="integrated"){
|
||||
var templete = parse([obj], '', acct_id, tlid);
|
||||
}else if(TLtype=="plus"){
|
||||
if(obj.account.acct==obj.account.username){
|
||||
var templete = parse([obj], '', acct_id, tlid);
|
||||
var templete = parse([obj], '', acct_id, tlid,"",mute, "mix");
|
||||
}else{
|
||||
var templete="";
|
||||
}
|
||||
}
|
||||
if (!$("[toot-id="+obj.id+"]").length) {
|
||||
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
|
||||
if(voice){
|
||||
say(obj.content)
|
||||
}
|
||||
var templete = parse([obj], type, acct_id, tlid,"",mute,"mix");
|
||||
var pool = localStorage.getItem("pool_" + tlid);
|
||||
if (pool) {
|
||||
pool = templete + pool;
|
||||
@@ -144,18 +184,54 @@ function mixre(acct_id, tlid, TLtype) {
|
||||
pool = templete
|
||||
}
|
||||
localStorage.setItem("pool_" + tlid, pool);
|
||||
|
||||
scrollck();
|
||||
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
}else{
|
||||
todo("二重取得発生中");
|
||||
}
|
||||
}
|
||||
}
|
||||
websocketLocal[wslid].onerror = function(error) {
|
||||
console.error('WebSocket Error ' + error);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Error ' + error);
|
||||
}else{
|
||||
reconnector(tlid,TLtype,acct_id,"","error");
|
||||
}
|
||||
};
|
||||
websocketLocal[wslid].onclose = function() {
|
||||
console.error('WebSocketLocal Closing by error:' + tlid);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Closed');
|
||||
}else{
|
||||
reconnector(tlid,TLtype,acct_id,"","error");
|
||||
}
|
||||
};
|
||||
websocketHome[wshid].onerror = function(error) {
|
||||
console.error('WebSocket Error ' + error);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Error ' + error);
|
||||
}else{
|
||||
reconnector(tlid,TLtype,acct_id,"","error");
|
||||
}
|
||||
};
|
||||
websocketHome[wshid].onclose = function() {
|
||||
console.error('WebSocketHome Closing by error:' + tlid);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Closed');
|
||||
}else{
|
||||
reconnector(tlid,TLtype,acct_id,"","error");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//ある程度のスクロールで発火
|
||||
@@ -165,8 +241,8 @@ function mixmore(tlid,type) {
|
||||
var acct_id = obj[tlid].domain;
|
||||
todo("Integrated TL MoreLoading...(Local)");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
|
||||
|
||||
|
||||
var start = "https://" + domain + "/api/v1/timelines/public?local=true&max_id="+sid;
|
||||
@@ -208,11 +284,16 @@ function mixmore(tlid,type) {
|
||||
var pkey=key*1+1;
|
||||
if(pkey<20){
|
||||
if(date(timeline[key].created_at,"unix")!=date(timeline[pkey].created_at,"unix")){
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"mix");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(type=="integrated"){
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid);
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute,"mix");
|
||||
}else if(type=="plus"){
|
||||
if(timeline[key].account.acct==timeline[key].account.username){
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid);
|
||||
templete = templete+parse([timeline[key]], '', acct_id, tlid,"",mute,"mix");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,224 @@
|
||||
//通知
|
||||
//取得+Streaming接続
|
||||
function notf(acct_id, tlid, sys) {
|
||||
function notf(acct_id, tlid, sys){
|
||||
if (sys == "direct") {
|
||||
notfColumn(acct_id, tlid, sys)
|
||||
} else {
|
||||
notfCommon(acct_id, tlid, sys)
|
||||
}
|
||||
}
|
||||
function notfColumn(acct_id, tlid, sys){
|
||||
todo("Notifications Loading...");
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/notifications";
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
console.log(start)
|
||||
var httpreq = new XMLHttpRequest();
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
var start = "https://" + domain + "/api/i/notifications";
|
||||
httpreq.open(POST, start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
var body=JSON.stringify({
|
||||
i:at
|
||||
});
|
||||
}else{
|
||||
var misskey=false;
|
||||
if(localStorage.getItem("exclude-"+tlid)){
|
||||
var exc=localStorage.getItem("exclude-"+tlid);
|
||||
}else{
|
||||
var exc="";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/notifications"+exc;
|
||||
httpreq.open("GET", start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
var body="";
|
||||
}
|
||||
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(body);
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
|
||||
if(json[0]){
|
||||
var templete="";
|
||||
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
|
||||
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var obj = json[key];
|
||||
if(lastnotf==obj.id && key>0 && native=="yes"){
|
||||
var ct=key;
|
||||
if(key>14){
|
||||
ct="15+";
|
||||
}
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: ct+lang_notf_new[lang],
|
||||
icon: localStorage.getItem("prof_"+acct_id)
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
|
||||
}
|
||||
|
||||
}
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(obj.type!="follow"){
|
||||
if(misskey){
|
||||
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}
|
||||
}else{
|
||||
if(misskey){
|
||||
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
|
||||
$("#timeline_" + tlid).html(templete);
|
||||
$("#landing_" + tlid).hide();
|
||||
jQuery("time.timeago").timeago();
|
||||
}
|
||||
$("#notf-box").addClass("fetched");
|
||||
todc();
|
||||
}
|
||||
}
|
||||
if(!misskey){
|
||||
if(localStorage.getItem("streaming_" + acct_id)){
|
||||
var wss=localStorage.getItem("streaming_" + acct_id)
|
||||
}else{
|
||||
var wss="wss://"+domain
|
||||
}
|
||||
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
|
||||
at;
|
||||
}else{
|
||||
var start = "wss://" + domain + "/?i=" +
|
||||
at;
|
||||
}
|
||||
|
||||
console.log(start);
|
||||
var wsid = websocketNotf.length;
|
||||
websocketNotf[acct_id] = new WebSocket(start);
|
||||
console.log(websocketNotf);
|
||||
websocketNotf[acct_id].onopen = function(mess) {
|
||||
console.log("Connect Streaming API(Notf):");
|
||||
console.log(mess);
|
||||
$("i[data-notf=" + acct_id +"]").removeClass("red-text");
|
||||
|
||||
}
|
||||
websocketNotf[acct_id].onmessage = function(mess) {
|
||||
console.log("Receive Streaming API(Notf):"+acct_id);
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
popup = 0;
|
||||
}
|
||||
console.log(domain)
|
||||
if(misskey){
|
||||
console.log("misskey")
|
||||
console.log(JSON.parse(mess.data));
|
||||
if (JSON.parse(mess.data).type == "notification") {
|
||||
var obj = JSON.parse(mess.data).body;
|
||||
console.log(obj);
|
||||
if(obj.type!="follow"){
|
||||
|
||||
templete = misskeyParse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}else{
|
||||
templete = misskeyUserparse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}
|
||||
if(obj.type=="reaction"){
|
||||
console.log("refresh")
|
||||
reactRefresh(acct_id,obj.note.id)
|
||||
}
|
||||
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
|
||||
$("div[data-notf=" + acct_id +"]").prepend(templete);
|
||||
}
|
||||
jQuery("time.timeago").timeago();
|
||||
}else if(JSON.parse(mess.data).type == "note-updated"){
|
||||
var obj = JSON.parse(mess.data).body.note;
|
||||
reactRefreshCore(obj)
|
||||
}
|
||||
}else{
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
var type = JSON.parse(mess.data).event;
|
||||
if (type == "notification") {
|
||||
var templete="";
|
||||
localStorage.setItem("lastnotf_" + acct_id,obj.id);
|
||||
if(obj.type!="follow"){
|
||||
templete = parse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}else{
|
||||
templete = userparse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}
|
||||
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
|
||||
$(".tl[data-notf=" + acct_id +"]").prepend(templete);
|
||||
}
|
||||
$(".notf-timeline[data-acct=" + acct_id +"]").prepend(templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
} else if (type == "delete") {
|
||||
$("[toot-id=" + obj + "]").hide();
|
||||
$("[toot-id=" + obj + "]").remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
websocketNotf[acct_id].onerror = function(error) {
|
||||
console.error('WebSocket Error ' + error);
|
||||
};
|
||||
}
|
||||
function notfCommon(acct_id, tlid, sys) {
|
||||
todo("Notifications Loading...");
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
var start = "https://" + domain + "/api/i/notifications";
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify({
|
||||
i:at
|
||||
})
|
||||
}
|
||||
}else{
|
||||
var misskey=false;
|
||||
var start = "https://" + domain + "/api/v1/notifications";
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}
|
||||
}
|
||||
fetch(start, i).then(function(response) {
|
||||
console.log(response.headers.get('link'));
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if(json[0]){
|
||||
var templete="";
|
||||
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
|
||||
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
|
||||
@@ -34,49 +231,104 @@ function notf(acct_id, tlid, sys) {
|
||||
}
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('native-notf', ['TheDesk:'+domain,ct+"件の新しい通知",localStorage.getItem("prof_"+acct_id)]);
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: ct+lang_notf_new[lang],
|
||||
icon: localStorage.getItem("prof_"+acct_id)
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', ['TheDesk:'+domain,ct+lang_notf_new[lang],localStorage.getItem("prof_"+acct_id)]);
|
||||
}
|
||||
|
||||
}
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(obj.type!="follow"){
|
||||
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1);
|
||||
if(misskey){
|
||||
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}
|
||||
}else{
|
||||
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
||||
if(misskey){
|
||||
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (sys == "direct") {
|
||||
$("#timeline_" + tlid).html(templete);
|
||||
} else {
|
||||
$("div[data-notf=" + acct_id +"]").html(templete);
|
||||
}
|
||||
|
||||
$("div[data-notf=" + acct_id +"]").html(templete);
|
||||
$("#landing_" + tlid).hide();
|
||||
jQuery("time.timeago").timeago();
|
||||
}
|
||||
$("#notf-box").addClass("fetched");
|
||||
todc();
|
||||
});
|
||||
var start = "wss://" + domain + "/api/v1/streaming/?stream=user&access_token=" +
|
||||
if(!misskey){
|
||||
if(localStorage.getItem("streaming_" + acct_id)){
|
||||
var wss=localStorage.getItem("streaming_" + acct_id)
|
||||
}else{
|
||||
var wss="wss://"+domain
|
||||
}
|
||||
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
|
||||
at;
|
||||
}else{
|
||||
var start = "wss://" + domain + "/?i=" +
|
||||
at;
|
||||
}
|
||||
|
||||
console.log(start);
|
||||
var wsid = websocketNotf.length;
|
||||
websocketNotf[wsid] = new WebSocket(start);
|
||||
websocketNotf[acct_id] = new WebSocket(start);
|
||||
console.log(websocketNotf);
|
||||
websocketNotf[wsid].onopen = function(mess) {
|
||||
websocketNotf[acct_id].onopen = function(mess) {
|
||||
console.log("Connect Streaming API(Notf):");
|
||||
console.log(mess);
|
||||
$("i[data-notf=" + acct_id +"]").removeClass("red-text");
|
||||
}
|
||||
websocketNotf[wsid].onmessage = function(mess) {
|
||||
console.log("Receive Streaming API(Notf):"+acct_id);
|
||||
|
||||
}
|
||||
websocketNotf[acct_id].onmessage = function(mess) {
|
||||
console.log("Receive Streaming API(Notf):"+acct_id);
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
popup = 0;
|
||||
}
|
||||
console.log(domain)
|
||||
if(misskey){
|
||||
console.log("misskey")
|
||||
console.log(JSON.parse(mess.data));
|
||||
if (JSON.parse(mess.data).type == "notification") {
|
||||
var obj = JSON.parse(mess.data).body;
|
||||
console.log(obj);
|
||||
if(obj.type!="follow"){
|
||||
|
||||
templete = misskeyParse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}else{
|
||||
templete = misskeyUserparse([obj], 'notf', acct_id, 'notf', popup);
|
||||
}
|
||||
if(obj.type=="reaction"){
|
||||
console.log("refresh")
|
||||
reactRefresh(acct_id,obj.note.id)
|
||||
}
|
||||
if(!$("div[data-notfIndv=" + acct_id +"_"+obj.id+"]").length){
|
||||
$("div[data-notf=" + acct_id +"]").prepend(templete);
|
||||
}
|
||||
jQuery("time.timeago").timeago();
|
||||
}else if(JSON.parse(mess.data).type == "note-updated"){
|
||||
var obj = JSON.parse(mess.data).body.note;
|
||||
reactRefreshCore(obj)
|
||||
}
|
||||
}else{
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
var type = JSON.parse(mess.data).event;
|
||||
if (type == "notification") {
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
popup = 0;
|
||||
}
|
||||
var templete="";
|
||||
localStorage.setItem("lastnotf_" + acct_id,obj.id);
|
||||
if(obj.type!="follow"){
|
||||
@@ -92,14 +344,16 @@ function notf(acct_id, tlid, sys) {
|
||||
$("[toot-id=" + obj + "]").hide();
|
||||
$("[toot-id=" + obj + "]").remove();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
websocketNotf[wsid].onerror = function(error) {
|
||||
websocketNotf[acct_id].onerror = function(error) {
|
||||
console.error('WebSocket Error ' + error);
|
||||
};
|
||||
}
|
||||
//一定のスクロールで発火
|
||||
function notfmore(tlid) {
|
||||
console.log(moreloading);
|
||||
console.log("kicked");
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
var acct_id = obj[tlid].domain;
|
||||
@@ -108,50 +362,143 @@ function notfmore(tlid) {
|
||||
}else{
|
||||
var data;
|
||||
}
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
|
||||
console.log(sid);
|
||||
if (localStorage.getItem("morelock") != sid) {
|
||||
localStorage.setItem("morelock", sid);
|
||||
localStorage.setItem("now", type);
|
||||
todo("Notfication TL MoreLoading");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/notifications"+
|
||||
"max_id=" + sid;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete="";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var obj = json[key];
|
||||
if(obj.type!="follow"){
|
||||
templete = templete+parse([obj], '', acct_id, tlid, -1);
|
||||
}else{
|
||||
templete = templete+userparse([obj.account], '', acct_id, tlid, -1);
|
||||
}
|
||||
|
||||
});
|
||||
$("#timeline_" + tlid).append(templete);
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
localStorage.removeItem("morelock")
|
||||
todc();
|
||||
var sid = $("#timeline_" + tlid + " .notif-marker").last().attr("data-maxid");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if (sid && !moreloading) {
|
||||
moreloading=true;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
var start = "https://" + domain + "/api/i/notifications";
|
||||
httpreq.open(POST, start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
var body=JSON.stringify({
|
||||
i:at,
|
||||
untilID:sid
|
||||
});
|
||||
}else{
|
||||
var misskey=false;
|
||||
if(localStorage.getItem("exclude-"+tlid)){
|
||||
var exc=localStorage.getItem("exclude-"+tlid)+"&max_id="+sid;
|
||||
}else{
|
||||
var exc="?max_id="+sid;
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/notifications"+exc;
|
||||
httpreq.open("GET", start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
var body="";
|
||||
}
|
||||
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(body);
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
|
||||
if(json[0]){
|
||||
var templete="";
|
||||
var lastnotf=localStorage.getItem("lastnotf_" + acct_id);
|
||||
localStorage.setItem("lastnotf_" + acct_id,json[0].id);
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var obj = json[key];
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),"notif");
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(obj.type!="follow"){
|
||||
if(misskey){
|
||||
templete = templete+misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+parse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}
|
||||
}else{
|
||||
if(misskey){
|
||||
templete = templete+misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
|
||||
}else{
|
||||
templete = templete+userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
moreloading=false;
|
||||
templete=templete+'<div class="hide notif-marker" data-maxid="'+max_id+'"></div>';
|
||||
$("#timeline_" + tlid).append(templete);
|
||||
$("#landing_" + tlid).hide();
|
||||
jQuery("time.timeago").timeago();
|
||||
}
|
||||
$("#notf-box").addClass("fetched");
|
||||
todc();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//通知トグルボタン
|
||||
function notfToggle(acct, tlid) {
|
||||
$("#notf-box_" + tlid).toggleClass("hide");
|
||||
$("#notf-box_" + tlid).toggleClass("show");
|
||||
if($("#notf-box_" + tlid).hasClass("column-hide")){
|
||||
$("#notf-box_" + tlid).css("display","block")
|
||||
$("#notf-box_" + tlid).animate({
|
||||
'height': '400px'
|
||||
},{
|
||||
'duration': 300,
|
||||
'complete': function(){
|
||||
$("#notf-box_" + tlid).css("overflow-y","scroll")
|
||||
$("#notf-box_" + tlid).removeClass("column-hide")
|
||||
}
|
||||
});
|
||||
}else{
|
||||
$("#notf-box_" + tlid).css("overflow-y","hidden")
|
||||
$("#notf-box_" + tlid).animate({
|
||||
'height': '0'
|
||||
},{
|
||||
'duration': 300,
|
||||
'complete': function(){
|
||||
$("#notf-box_" + tlid).addClass("column-hide")
|
||||
$("#notf-box_" + tlid).css("display","none")
|
||||
}
|
||||
});
|
||||
}
|
||||
notfCanceler(acct)
|
||||
}
|
||||
function notfCanceler(acct){
|
||||
$(".notf-reply_" + acct).text(0);
|
||||
localStorage.removeItem("notf-reply_" + acct)
|
||||
$(".notf-reply_" + acct).addClass("hide");
|
||||
$(".notf-fav_" + acct).text(0);
|
||||
localStorage.removeItem("notf-fav_" + acct)
|
||||
$(".notf-fav_" + acct).addClass("hide");
|
||||
$(".notf-bt_" + acct).text(0);
|
||||
localStorage.removeItem("notf-bt_" + acct)
|
||||
$(".notf-bt_" + acct).addClass("hide");
|
||||
$(".notf-follow_" + acct).text(0);
|
||||
localStorage.removeItem("notf-follow_" + acct)
|
||||
$(".notf-follow_" + acct).addClass("hide");
|
||||
$(".notf-icon_" + acct).removeClass("red-text");
|
||||
}
|
||||
function allNotfRead(){
|
||||
console.log(localStorage.getItem("notf-fav_2"));
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [{
|
||||
at: localStorage.getItem("acct_0_at"),
|
||||
name: localStorage.getItem("name_0"),
|
||||
domain: localStorage.getItem("domain_0"),
|
||||
user: localStorage.getItem("user_0"),
|
||||
prof: localStorage.getItem("prof_0"),
|
||||
id: localStorage.getItem("user-id_0")
|
||||
}];
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("multi", json);
|
||||
} else {
|
||||
var obj = JSON.parse(multi);
|
||||
}
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
console.log(key);
|
||||
notfCanceler(key)
|
||||
});
|
||||
}
|
||||
allNotfRead()
|
||||
@@ -5,7 +5,7 @@ function mixtl(acct_id, tlid) {
|
||||
localStorage.setItem("now", type);
|
||||
todo("Integrated TL Loading...(Local)");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
//まずLocal
|
||||
var start = "https://" + domain + "/api/v1/timelines/public?local=true";
|
||||
fetch(start, {
|
||||
@@ -96,7 +96,7 @@ function mixtl(acct_id, tlid) {
|
||||
//Streamingに接続
|
||||
function mixre(acct_id, tlid) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var type = "mix";
|
||||
localStorage.setItem("now", type);
|
||||
var startHome = "wss://" + domain +
|
||||
@@ -180,7 +180,7 @@ function mixmore(tlid) {
|
||||
var acct_id = obj[tlid].domain;
|
||||
todo("Integrated TL MoreLoading...(Local)");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
|
||||
var len = $("#timeline_" + tlid + " .cvo").length
|
||||
var start = "https://" + domain +
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
//オブジェクトパーサー(トゥート)
|
||||
function parse(obj, mix, acct_id, tlid, popup) {
|
||||
function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
var templete = '';
|
||||
var actb = localStorage.getItem("action_btns");
|
||||
var actb='re,rt,fav,qt,del,pin';
|
||||
if(obj[0]){
|
||||
if(tlid===1){
|
||||
console.log("testalive:"+"lastunix_"+ tlid+":"+date(obj[0].created_at, 'unix'))
|
||||
}
|
||||
localStorage.setItem("lastunix_"+ tlid,date(obj[0].created_at, 'unix'));
|
||||
}
|
||||
|
||||
var actb='re,rt,fav,qt,del,pin,red';
|
||||
if(actb){
|
||||
var actb = actb.split(',');
|
||||
var disp={};
|
||||
@@ -15,6 +21,12 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
disp[actb[k]]=tp;
|
||||
}
|
||||
}
|
||||
var qt = localStorage.getItem("quote");
|
||||
if(qt=="nothing" || !qt){
|
||||
var qtClass="hide";
|
||||
}else{
|
||||
var qtClass="";
|
||||
}
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
var nsfwtype = localStorage.getItem("nsfw");
|
||||
var sent = localStorage.getItem("sentence");
|
||||
@@ -55,9 +67,29 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
var wordmute = localStorage.getItem("word_mute");
|
||||
if(wordmute){
|
||||
var wordmute = JSON.parse(wordmute);
|
||||
wordmute = wordmute.concat(mutefilter);
|
||||
}else{
|
||||
wordmute = mutefilter;
|
||||
}
|
||||
//Ticker
|
||||
var tickerck = localStorage.getItem("ticker_ok");
|
||||
if(tickerck){
|
||||
var ticker=true;
|
||||
}else{
|
||||
var ticker=false;
|
||||
}
|
||||
//Animation
|
||||
var anime = localStorage.getItem("animation");
|
||||
if (anime=="yes" || !anime) {
|
||||
var animecss="cvo-anime";
|
||||
}else{
|
||||
var animecss="";
|
||||
}
|
||||
//Cards
|
||||
var card = localStorage.getItem("card_" + tlid);
|
||||
|
||||
if (!sent) {
|
||||
var sent = 500;
|
||||
sent = 500;
|
||||
}
|
||||
if (!ltr) {
|
||||
var ltr = 500;
|
||||
@@ -100,86 +132,224 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
//via通知
|
||||
var viashow=localStorage.getItem("viashow");
|
||||
if(!viashow){
|
||||
viashow="hide";
|
||||
viashow="via-hide";
|
||||
}
|
||||
if(viashow=="hide"){
|
||||
viashow="via-hide";
|
||||
}
|
||||
//認証なしTL
|
||||
if(mix=="noauth"){
|
||||
var noauth="hide";
|
||||
var antinoauth="";
|
||||
}else{
|
||||
var noauth="";
|
||||
var antinoauth="hide";
|
||||
}
|
||||
//DMTL
|
||||
if(type=="dm"){
|
||||
var dmHide="hide";
|
||||
var antidmHide="";
|
||||
}else{
|
||||
var dmHide="";
|
||||
var antidmHide="hide";
|
||||
}
|
||||
|
||||
|
||||
//マウスオーバーのみ
|
||||
var mouseover=localStorage.getItem("mouseover");
|
||||
if(!mouseover){
|
||||
mouseover="";
|
||||
}else if(mouseover=="yes"){
|
||||
}else if(mouseover=="yes" || mouseover=="click"){
|
||||
mouseover="hide";
|
||||
}else if(mouseover=="no"){
|
||||
mouseover="";
|
||||
}
|
||||
//リプカウント
|
||||
var replyct_view=localStorage.getItem("replyct");
|
||||
if(!replyct_view){
|
||||
replyct_view="hidden";
|
||||
}
|
||||
var local = [];
|
||||
var times=[];
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var toot = obj[key];
|
||||
if(type=="dm"){
|
||||
var dmid=toot.id;
|
||||
toot=toot.last_status;
|
||||
}
|
||||
var dis_name=escapeHTML(toot.account.display_name);
|
||||
if(toot.account.emojis){
|
||||
var actemojick = toot.account.emojis[0];
|
||||
}else{
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(toot.account.emojis).forEach(function(key5) {
|
||||
var emoji = toot.account.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
|
||||
});
|
||||
}
|
||||
var noticeavatar="";
|
||||
if (mix == "notf") {
|
||||
if (gif == "yes") {
|
||||
noticeavatar = toot.account.avatar;
|
||||
} else {
|
||||
noticeavatar = toot.account.avatar_static;
|
||||
}
|
||||
noticeavatar='<a onclick="udg(\'' + toot.account.id +
|
||||
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
|
||||
'<img draggable="false" src="' + noticeavatar +
|
||||
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
|
||||
'"></a>';
|
||||
if (toot.type == "mention") {
|
||||
var what = "が返信しました";
|
||||
var what = lang.lang_parse_mentioned;
|
||||
var icon = "fa-share teal-text";
|
||||
noticeavatar="";
|
||||
} else if (toot.type == "reblog") {
|
||||
var what = "がブーストしました";
|
||||
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
|
||||
what = ":「わかるわ」";
|
||||
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
|
||||
what = "がしばきました";
|
||||
var what = lang.lang_parse_bted;
|
||||
var icon = "fa-retweet light-blue-text";
|
||||
if(!locale && localStorage.getItem("bt_" + acct_id)){
|
||||
what = localStorage.getItem("bt_" + acct_id);
|
||||
}
|
||||
} else if (toot.type == "favourite") {
|
||||
var what = "がお気に入り登録しました";
|
||||
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
|
||||
what = "の頭にティンときたようです";
|
||||
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
|
||||
what = "がええやんと言いました";
|
||||
var what = lang.lang_parse_faved;
|
||||
var icon = "fa-star yellow-text";
|
||||
if(!locale && localStorage.getItem("fav_" + acct_id)){
|
||||
what = localStorage.getItem("fav_" + acct_id);
|
||||
}
|
||||
}
|
||||
var noticetext = '<span class="cbadge"title="' + date(toot.created_at,
|
||||
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
|
||||
var noticetext = '<span class="cbadge cbadge-hover"title="' + date(toot.created_at,
|
||||
'absolute') + '('+lang.lang_parse_notftime+')"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
|
||||
datetype) +
|
||||
'</span><a onclick="udg(\'' + toot.account.id +
|
||||
'\',\'' + acct_id + '\')" class="pointer">' + escapeHTML(toot.account.display_name) +
|
||||
"(" + toot.account.acct +
|
||||
")</a>" + what;
|
||||
'</span><i class="big-text fa '+icon+'"></i><a onclick="udg(\'' + toot.account.id +
|
||||
'\',\'' + acct_id + '\')" class="pointer grey-text">' + dis_name +
|
||||
"(@" + toot.account.acct +
|
||||
")</a>";
|
||||
var notice = noticetext;
|
||||
var memory = localStorage.getItem("notice-mem");
|
||||
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
|
||||
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
|
||||
if (toot.type == "mention") {
|
||||
var replyct=localStorage.getItem("notf-reply_" + acct_id)
|
||||
$(".notf-reply_" + acct_id).text(replyct*1-(-1));
|
||||
localStorage.setItem("notf-reply_" + acct_id,replyct*1-(-1))
|
||||
$(".notf-reply_" + acct_id).removeClass("hide")
|
||||
}else if (toot.type == "reblog") {
|
||||
var btct=localStorage.getItem("notf-bt_" + acct_id)
|
||||
$(".notf-bt_" + acct_id).text(btct*1-(-1));
|
||||
localStorage.setItem("notf-bt_" + acct_id,btct*1-(-1))
|
||||
$(".notf-bt_" + acct_id).removeClass("hide")
|
||||
}else if (toot.type == "favourite") {
|
||||
var favct=localStorage.getItem("notf-fav_" + acct_id)
|
||||
$(".notf-fav_" + acct_id).text(favct*1-(-1));
|
||||
localStorage.setItem("notf-fav_" + acct_id,favct*1-(-1))
|
||||
$(".notf-fav_" + acct_id).removeClass("hide")
|
||||
}
|
||||
}
|
||||
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(popup>0){
|
||||
if(native=="yes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('native-notf', ['TheDesk:'+domain,toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),toot.account.avatar]);
|
||||
}
|
||||
Materialize.toast("["+domain+"より]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
|
||||
Materialize.toast("["+domain+"]"+escapeHTML(toot.account.display_name)+what, popup * 1000);
|
||||
}
|
||||
if(native=="yes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
|
||||
icon: toot.account.avatar
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', [
|
||||
'TheDesk:'+domain,
|
||||
toot.account.display_name+"(" + toot.account.acct +")"+what+"\n\n"+$.strip_tags(toot.status.content),
|
||||
toot.account.avatar,
|
||||
"toot",
|
||||
acct_id,
|
||||
toot.status.id
|
||||
]);
|
||||
}
|
||||
}
|
||||
if(localStorage.getItem("hasNotfC_" + acct_id)!="true"){
|
||||
$(".notf-icon_" + acct_id).addClass("red-text");
|
||||
}
|
||||
$(".notf-icon_" + acct_id).addClass("red-text");
|
||||
localStorage.setItem("notice-mem", noticetext);
|
||||
noticetext = "";
|
||||
}
|
||||
var if_notf='data-notfIndv="'+acct_id+"_"+toot.id+'"';
|
||||
var toot = toot.status;
|
||||
var dis_name=escapeHTML(toot.account.display_name);
|
||||
if(toot.account.emojis){
|
||||
var actemojick = toot.account.emojis[0];
|
||||
}else{
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(toot.account.emojis).forEach(function(key5) {
|
||||
var emoji = toot.account.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
}else{
|
||||
var if_notf="";
|
||||
if (toot.reblog) {
|
||||
var rebtxt = "がブースト";
|
||||
if (gif == "yes") {
|
||||
noticeavatar = toot.account.avatar;
|
||||
} else {
|
||||
noticeavatar = toot.account.avatar_static;
|
||||
}
|
||||
noticeavatar='<a onclick="udg(\'' + toot.account.id +
|
||||
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
|
||||
'<img draggable="false" src="' + noticeavatar +
|
||||
'" width="20" class="notf-icon prof-img" user="' + toot.account.acct +
|
||||
'"></a>';
|
||||
var rebtxt = lang.lang_parse_btedsimple;
|
||||
var rticon = "fa-retweet light-blue-text";
|
||||
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
|
||||
rebtxt = ":「わかるわ」";
|
||||
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
|
||||
rebtxt = "がしばいた";
|
||||
}
|
||||
var notice = escapeHTML(toot.account.display_name) + "(" + toot.account.acct +
|
||||
")"+rebtxt+"<br>";
|
||||
var notice = '<i class="big-text fa '+rticon+'"></i>'+ dis_name + "(@" + toot.account.acct +
|
||||
")<br>";
|
||||
var boostback = "shared";
|
||||
var uniqueid=toot.id;
|
||||
var toot = toot.reblog;
|
||||
var dis_name=escapeHTML(toot.account.display_name);
|
||||
if(toot.account.emojis){
|
||||
var actemojick = toot.account.emojis[0];
|
||||
}else{
|
||||
var uniqueid=toot.id;
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(toot.account.emojis).forEach(function(key5) {
|
||||
var emoji = toot.account.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
var uniqueid=toot.id;
|
||||
var notice = "";
|
||||
var boostback = "";
|
||||
var boostback = "unshared";
|
||||
//ユーザー強調
|
||||
if(toot.account.username!=toot.account.acct){
|
||||
var fullname=toot.account.acct;
|
||||
@@ -211,7 +381,8 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
var locked = "";
|
||||
}
|
||||
if (!toot.application) {
|
||||
var via = '<span style="font-style: italic;">Unknown</span>';
|
||||
var via = '';
|
||||
viashow="hide";
|
||||
} else {
|
||||
var via = toot.application.name;
|
||||
//強調チェック
|
||||
@@ -229,25 +400,28 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
}
|
||||
});
|
||||
}
|
||||
if(mix=="pinned"){
|
||||
boostback = "emphasized";
|
||||
}
|
||||
if (toot.spoiler_text && cw) {
|
||||
var content = toot.content;
|
||||
var spoil = escapeHTML(toot.spoiler_text);
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var api_spoil = "gray";
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">見る</a><br>';
|
||||
'\')" class="nex parsed">'+lang.lang_parse_cwshow+'</a><br>';
|
||||
} else {
|
||||
var ct1 = toot.content.split('</p>').length + toot.content.split('<br />').length -2;
|
||||
var ct2 = toot.content.split('</p>').length + toot.content.split('<br>').length -2;
|
||||
if(ct1>ct2){ var ct= ct1; }else{ var ct= ct2; }
|
||||
if ((sent < ct && $.mb_strlen($.strip_tags(toot.content)) > 5) || ($.strip_tags(toot.content).length > ltr && $.mb_strlen($.strip_tags(toot.content)) > 5)) {
|
||||
var content = '<span class="gray">以下全文</span><br>' + toot.content
|
||||
var content = '<span class="gray">'+lang.lang_parse_fulltext+'</span><br>' + toot.content
|
||||
var spoil = '<span class="cw-long-' + toot.id + '">' + $.mb_substr($.strip_tags(
|
||||
toot.content), 0, 100) +
|
||||
'</span><span class="gray">自動折りたたみ</span>';
|
||||
'</span><span class="gray">'+lang.lang_parse_autofold+'</span>';
|
||||
var spoiler = "cw cw_hide_" + toot.id;
|
||||
var spoiler_show = '<a href="#" onclick="cw_show(\'' + toot.id +
|
||||
'\')" class="nex parsed">続き…</a><br>';
|
||||
'\')" class="nex parsed">'+lang.lang_parse_more+'</a><br>';
|
||||
} else {
|
||||
var content = toot.content;
|
||||
var spoil = escapeHTML(toot.spoiler_text);
|
||||
@@ -260,7 +434,7 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
);
|
||||
if (urls) {
|
||||
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
||||
',\'' + id + '\')" class="add-show pointer">URL解析</a><br>';
|
||||
',\'' + id + '\')" class="add-show pointer">'+lang.lang_parse_url+'</a><br>';
|
||||
} else {
|
||||
var analyze = '';
|
||||
}
|
||||
@@ -277,48 +451,68 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
Object.keys(toot.emojis).forEach(function(key5) {
|
||||
var emoji = toot.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'">';
|
||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
content = content.replace(regExp, emoji_url);
|
||||
spoil = spoil.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//ニコフレ絵文字
|
||||
if(toot.profile_emojis){
|
||||
var nicoemojick = toot.profile_emojis[0];
|
||||
}else{
|
||||
var nicoemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (nicoemojick) {
|
||||
Object.keys(toot.profile_emojis).forEach(function(keynico) {
|
||||
var emoji = toot.profile_emojis[keynico];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
content = content.replace(regExp, emoji_url);
|
||||
spoil = spoil.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
var dis_name=escapeHTML(toot.account.display_name);
|
||||
//デフォ絵文字
|
||||
content=emojione.unicodeToImage(content);
|
||||
content=twemoji.parse(content);
|
||||
if(dis_name){
|
||||
dis_name=emojione.unicodeToImage(dis_name);
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}
|
||||
if(spoil){
|
||||
spoil=emojione.unicodeToImage(spoil);
|
||||
spoil=twemoji.parse(spoil);
|
||||
}
|
||||
if(noticetext){
|
||||
noticetext=emojione.unicodeToImage(noticetext);
|
||||
noticetext=twemoji.parse(noticetext);
|
||||
}
|
||||
if(notice){
|
||||
notice=emojione.unicodeToImage(notice);
|
||||
notice=twemoji.parse(notice);
|
||||
}
|
||||
var mediack = toot.media_attachments[0];
|
||||
//メディアがあれば
|
||||
var media_ids="";
|
||||
if (mediack) {
|
||||
hasmedia = "hasmedia";
|
||||
var cwdt = 100 / toot.media_attachments.length
|
||||
var cwdt = 100 / toot.media_attachments.length;
|
||||
Object.keys(toot.media_attachments).forEach(function(key2) {
|
||||
var media = toot.media_attachments[key2];
|
||||
var purl = media.preview_url;
|
||||
media_ids=media_ids+media.id+",";
|
||||
var url = media.url;
|
||||
if (toot.sensitive && nsfw) {
|
||||
var sense = "sensitive"
|
||||
} else {
|
||||
var sense = ""
|
||||
}
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="' + media.type + '" class="img-parsed"><img src="' +
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
|
||||
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="' + media.type + '" class="img-parsed"><img draggable="false" src="' +
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="width:' + cwdt + '%; height:'+imh+'px;"></a></span>';
|
||||
});
|
||||
media_ids = media_ids.slice(0, -1) ;
|
||||
} else {
|
||||
viewer = "";
|
||||
hasmedia = "nomedia";
|
||||
@@ -327,47 +521,68 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
var mentions = "";
|
||||
//メンションであれば
|
||||
if (menck) {
|
||||
mentions = "Links: ";
|
||||
mentions = "";
|
||||
var to_mention=[];
|
||||
Object.keys(toot.mentions).forEach(function(key3) {
|
||||
var mention = toot.mentions[key3];
|
||||
mentions = mentions + '<a onclick="udg(\'' + mention.id + '\',' +
|
||||
acct_id + ')" class="pointer">@' + mention.acct + '</a> ';
|
||||
//自分は除外
|
||||
//自インスタンスかどうかを確認し、IDの一致
|
||||
if(mention.acct==mention.username && mention.id==localStorage.getItem("user-id_" + acct_id)){
|
||||
//自分
|
||||
}else{
|
||||
//そのトゥの人NG
|
||||
if(toot.account.acct!=mention.acct){
|
||||
to_mention.push(mention.acct);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
to_mention.push(toot.account.acct);
|
||||
mentions = '<div style="float:right">' + mentions + '</div>';
|
||||
}else{
|
||||
var to_mention=[toot.account.acct];
|
||||
}
|
||||
var tagck = toot.tags[0];
|
||||
var tags = "";
|
||||
//タグであれば
|
||||
if (tagck) {
|
||||
if (!menck) {
|
||||
tags = "Links: ";
|
||||
}
|
||||
Object.keys(toot.tags).forEach(function(key4) {
|
||||
var tag = toot.tags[key4];
|
||||
tags = tags + '<a onclick="tagShow(\'' + tag.name + '\')" class="pointer">#' + tag.name + '</a><span class="hide" data-tag="' + tag.name + '"> <a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
|
||||
',\'add\')" class="pointer" title="#' + tag.name + 'のタイムライン">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="#' + tag.name + 'でトゥート">Toot</a> '+
|
||||
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="#' + tag.name + 'をよく使うタグへ">Pin</a></span> ';
|
||||
tags = tags + '<span class="hide" data-tag="' + tag.name + '">#' + tag.name + ':<a onclick="tl(\'tag\',\'' + tag.name + '\',' + acct_id +
|
||||
',\'add\')" class="pointer" title="' +lang.lang_parse_tagTL.replace("{{tag}}" ,'#'+tag.name)+ '">TL</a> <a onclick="brInsert(\'#' + tag.name + '\')" class="pointer" title="' + lang.lang_parse_tagtoot.replace("{{tag}}" ,'#'+tag.name) + '">Toot</a> '+
|
||||
'<a onclick="tagPin(\'' + tag.name + '\')" class="pointer" title="' +lang.lang_parse_tagpin.replace("{{tag}}" ,'#'+tag.name)+ '">Pin</a></span> ';
|
||||
});
|
||||
tags = '<div style="float:right">' + tags + '</div>';
|
||||
}
|
||||
//リプ数
|
||||
if(toot.replies_count || toot.replies_count===0){
|
||||
var replyct=toot.replies_count;
|
||||
if(replyct_view=="hidden" && replyct>1){
|
||||
replyct="1+";
|
||||
}
|
||||
}else{
|
||||
var replyct="";
|
||||
}
|
||||
//公開範囲を取得
|
||||
var vis = "";
|
||||
var visen = toot.visibility;
|
||||
if (visen == "public") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="公開(クリックして本文コピー)" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
|
||||
'<i class="text-darken-3 material-icons gray sml vis-data pointer" title="'+lang.lang_parse_public+'('+lang.lang_parse_clickcopy+')" data-vis="public" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">public</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "unlisted") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="未収載(クリックして本文コピー)" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
|
||||
'<i class="text-darken-3 material-icons blue-text vis-data pointer" title="'+lang.lang_parse_unlisted+'('+lang.lang_parse_clickcopy+')" data-vis="unlisted" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock_open</i>';
|
||||
var can_rt = "";
|
||||
} else if (visen == "private") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="非公開(クリックして本文コピー)" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
|
||||
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="'+lang.lang_parse_private+'('+lang.lang_parse_clickcopy+')" data-vis="private" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">lock</i>';
|
||||
var can_rt = "hide";
|
||||
} else if (visen == "direct") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="ダイレクト(クリックして本文コピー)" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
|
||||
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="'+lang.lang_parse_direct+'('+lang.lang_parse_clickcopy+')" data-vis="direct" onclick="staCopy(\''+id+'\')" style="font-size:1rem;">mail</i>';
|
||||
var can_rt = "hide";
|
||||
}
|
||||
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
|
||||
@@ -409,10 +624,14 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
Object.keys(wordmute).forEach(function(key8) {
|
||||
var worde = wordmute[key8];
|
||||
if(worde){
|
||||
var word=worde.tag;
|
||||
if(worde.tag){
|
||||
var word=worde.tag;
|
||||
}else{
|
||||
var word=worde
|
||||
}
|
||||
var regExp = new RegExp( word, "g" ) ;
|
||||
if(content.match(regExp)){
|
||||
boostback = "hide";
|
||||
if($.strip_tags(content).match(regExp)){
|
||||
boostback = "hide by_filter";
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -429,71 +648,153 @@ function parse(obj, mix, acct_id, tlid, popup) {
|
||||
});
|
||||
}
|
||||
//日本語じゃない
|
||||
if(toot.language!="ja"){
|
||||
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを日本語に翻訳"><i class="material-icons">g_translate</i></a></div>';
|
||||
if(toot.language!=lang.language && toot.language){
|
||||
var trans='<div class="action pin"><a onclick="trans(\''+toot.language+'\',\''+lang.language+'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_trans+'"><i class="material-icons">g_translate</i></a></div>';
|
||||
}else{
|
||||
var trans="";
|
||||
}
|
||||
//Cards
|
||||
if (!card && toot.card) {
|
||||
var cards=toot.card;
|
||||
if (cards.provider_name=="Twitter"){
|
||||
if(cards.image){
|
||||
var twiImg='<br><img draggable="false" src="'+cards.image+'">';
|
||||
}else{
|
||||
var twiImg='';
|
||||
}
|
||||
analyze='<blockquote class="twitter-tweet"><b>'+escapeHTML(cards.author_name)+'</b><br>'+escapeHTML(cards.description)+twiImg+'</blockquote>';
|
||||
}
|
||||
if (cards.title) {
|
||||
analyze="<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(cards.title) + "<br>" +
|
||||
escapeHTML(cards.description) + "</span>";
|
||||
}
|
||||
if (cards.html) {
|
||||
analyze=cards.html+'<i class="material-icons" onclick="pip('+id+')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>';
|
||||
}
|
||||
|
||||
}
|
||||
//Ticker
|
||||
var tickerdom="";
|
||||
if(ticker){
|
||||
var tickerdata=localStorage.getItem("ticker")
|
||||
if(tickerdata){
|
||||
var tickerdata=JSON.parse(tickerdata);
|
||||
|
||||
var thisdomain=toot.account.acct.split("@");
|
||||
if(thisdomain.length>1){
|
||||
thisdomain=thisdomain[1];
|
||||
}
|
||||
for( var i=0; i<tickerdata.length; i++) {
|
||||
var value=tickerdata[i];
|
||||
if(value.domain==thisdomain){
|
||||
var tickerdom='<div style="background:linear-gradient(to left,transparent, '+value.bg+' 96%) !important; color:'+value.text+';width:100%; height:0.9rem; font-size:0.8rem;"><img draggable="false" src="'+value.image+'" style="height:100%;"><span style="position:relative; top:-0.2rem;"> '+value.name+'</span></div>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Poll
|
||||
var poll="";
|
||||
if(toot.poll){
|
||||
var choices=toot.poll.options;
|
||||
if(toot.poll.voted){
|
||||
var myvote=lang.lang_parse_voted;
|
||||
var result_hide="";
|
||||
}else{
|
||||
myvote='<a onclick="voteMastodon(\''+acct_id+'\',\''+toot.poll.id+'\')" class="votebtn">'+lang.lang_parse_vote+'</a><br>';
|
||||
if(choices[0].votes_count===0 || choices[0].votes_count>0){
|
||||
myvote=myvote+'<a onclick="showResult(\''+acct_id+'\',\''+toot.poll.id+'\')" class="pointer">'+lang.lang_parse_unvoted+"</a>";
|
||||
}
|
||||
var result_hide="hide";
|
||||
}
|
||||
if(toot.poll.expired){
|
||||
var ended=lang.lang_parse_endedvote;
|
||||
}else{
|
||||
var ended=date(toot.poll.expires_at, datetype);
|
||||
}
|
||||
Object.keys(choices).forEach(function(keyc) {
|
||||
var choice = choices[keyc];
|
||||
if(!toot.poll.voted && !toot.poll.expired){
|
||||
var votesel='voteSelMastodon(\''+acct_id+'\',\''+toot.poll.id+'\','+keyc+','+toot.poll.multiple+')';
|
||||
var voteclass="pointer waves-effect waves-light";
|
||||
}else{
|
||||
var votesel="";
|
||||
var voteclass="";
|
||||
}
|
||||
poll=poll+'<div class="'+voteclass+' vote vote_'+acct_id+'_'+toot.poll.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+toot.poll.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
|
||||
});
|
||||
poll='<div class="vote_'+acct_id+'_'+toot.poll.id+'">'+poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(toot.poll.expires_at, 'absolute') +
|
||||
'"><i class="fa fa-calendar-times-o"></i>' +
|
||||
ended+ '</span></div>';
|
||||
}
|
||||
templete = templete + '<div id="pub_' + toot.id + '" class="cvo ' +
|
||||
boostback + ' ' + fav_app + ' ' + rt_app + ' ' + pin_app +
|
||||
' ' + hasmedia + '" toot-id="' + id + '" unixtime="' + date(obj[
|
||||
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\')" onmouseout="resetmv()">' +
|
||||
' ' + hasmedia + ' '+animecss+'" toot-id="' + id + '" unique-id="' + uniqueid + '" data-medias="'+media_ids+' " unixtime="' + date(obj[
|
||||
key].created_at, 'unix') + '" '+if_notf+' onmouseover="mov(\'' + toot.id + '\',\''+tlid+'\',\'mv\')" onclick="mov(\'' + toot.id + '\',\''+tlid+'\',\'cl\')" onmouseout="resetmv(\'mv\')">' +
|
||||
'<div class="area-notice"><span class="gray sharesta">' + notice + home +
|
||||
'</span></div>' +
|
||||
'<div class="area-icon"><a onclick="udg(\'' + toot.account.id +
|
||||
'\',' + acct_id + ');" user="' + toot.account.acct + '" class="udg">' +
|
||||
'<img src="' + avatar +
|
||||
'<img draggable="false" src="' + avatar +
|
||||
'" width="40" class="prof-img" user="' + toot.account.acct +
|
||||
'"></a></div>' +
|
||||
'<div class="area-display_name"><span class="user">' +
|
||||
'"></a>'+noticeavatar+'</div>' +
|
||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||
dis_name +
|
||||
'</span><span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis; cursor:text;"> @' +
|
||||
toot.account.acct + locked + '</span></div>' +
|
||||
'<div class="area-acct"><div><span class="cbadge pointer waves-effect" onclick="tootUriCopy(\'' +
|
||||
'<div class="flex-time"><span class="cbadge cbadge-hover pointer waves-effect" onclick="tootUriCopy(\'' +
|
||||
toot.url + '\');" title="' + date(toot.created_at, 'absolute') +
|
||||
'(クリックでトゥートURLをコピー)"><i class="fa fa-clock-o"></i>' +
|
||||
date(toot.created_at, datetype) + '</span><span style="padding:0;">' +
|
||||
vis + '</span></div></div>' +
|
||||
'<div class="area-toot"><span class="toot ' + spoiler + '">' + content +
|
||||
'</span><span class="' +
|
||||
api_spoil + ' cw_text_' + toot.id + '">' + spoil + spoiler_show +
|
||||
'('+lang.lang_parse_clickcopyurl+')"><i class="fa fa-clock-o"></i>' +
|
||||
date(toot.created_at, datetype) + '</span>' +
|
||||
'</div></div>' +
|
||||
'<div class="area-toot">'+tickerdom+'<span class="' +
|
||||
api_spoil + ' cw_text_' + toot.id + '"><span class="cw_text">' + spoil + "</span>" + spoiler_show +
|
||||
'</span><span class="toot ' + spoiler + '">' + content +
|
||||
'</span>' +
|
||||
'' + viewer + '' +
|
||||
'</div><div class="area-additional"><span class="additional">' + analyze +
|
||||
'</span>' +
|
||||
'' + mentions + tags + '</div>' +
|
||||
'' +poll+ mentions + tags + '</div>' +
|
||||
'<div class="area-vis"></div>'+
|
||||
'<div class="area-actions '+noauth+' '+mouseover+'" style="padding:0; margin:0; top:-20px; display:flex; justify-content:space-around; max-width:100%; ">' +
|
||||
'<div class="action '+disp["re"]+'"><a onclick="re(\'' + toot.id +
|
||||
'\',\'' + toot.account.acct + '\',' +
|
||||
'<div class="area-actions '+mouseover+'">' +
|
||||
'<div class="action">'+vis+'</div>'+
|
||||
'<div class="action '+antinoauth+'"><a onclick="detEx(\''+toot.url+'\',\'main\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_det+'</a></div>' +
|
||||
'<div class="action '+antidmHide+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +',\''+tlid+'\',\'normal\')" class="waves-effect waves-dark details" style="padding:0">'+lang.lang_parse_thread+'</a></div>' +
|
||||
'<div class="action '+disp["re"]+' '+noauth+'"><a onclick="re(\'' + toot.id +
|
||||
'\',\'' + to_mention + '\',' +
|
||||
acct_id + ',\''+visen+
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートに返信"><i class="fa fa-share"></i></a></div>' +
|
||||
'<div class="action '+can_rt+' '+disp["rt"]+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_replyto+'"><i class="fa fa-share"></i><span class="rep_ct">' + replyct +
|
||||
'</a></span></a></div>' +
|
||||
'<div class="action '+can_rt+' '+disp["rt"]+' '+noauth+'"><a onclick="rt(\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをブースト"><i class="text-darken-3 fa fa-retweet ' +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_bt+'"><i class="fa fa-retweet ' +
|
||||
if_rt + ' rt_' + toot.id + '"></i><span class="rt_ct">' + toot.reblogs_count +
|
||||
'</span></a></div>' +
|
||||
'<div class="action '+can_rt+' '+disp["qt"]+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
|
||||
'<div class="action '+can_rt+' '+disp["qt"]+' '+noauth+' '+qtClass+'"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + toot.account.acct +'\',\''+toot.url+
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを引用"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
|
||||
'<div class="action '+disp["fav"]+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_quote+'"><i class="text-darken-3 fa fa-quote-right"></i></a></div>' +
|
||||
'<div class="action '+disp["fav"]+' '+noauth+'"><a onclick="fav(\'' + toot.id + '\',' + acct_id +
|
||||
',\'' + tlid +
|
||||
'\')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをお気に入り登録"><i class="fa text-darken-3 fa-star' +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="'+lang.lang_parse_fav+'"><i class="fa text-darken-3 fa-star' +
|
||||
if_fav + ' fav_' + toot.id + '"></i><span class="fav_ct">' + toot.favourites_count +
|
||||
'</a></span></div>' +
|
||||
'<div class="' + if_mine + ' action '+disp["del"]+'"><a onclick="del(\'' + toot.id + '\',' +
|
||||
'<div class="' + if_mine + ' action '+disp["del"]+' '+noauth+'"><a onclick="del(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートを削除"><i class="fa fa-trash-o"></i></a></div>' +
|
||||
'<div class="' + if_mine + ' action pin '+disp["pin"]+'"><a onclick="pin(\'' + toot.id + '\',' +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_del+'"><i class="fa fa-trash-o"></i></a></div>' +
|
||||
'<div class="' + if_mine + ' action pin '+disp["pin"]+' '+noauth+'"><a onclick="pin(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="このトゥートをピン留め"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>' +trans+
|
||||
'<div class="action ' + if_mine + '"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
|
||||
'<div class="action"><a onclick="details(\'' + toot.id + '\',' + acct_id +
|
||||
',\''+tlid+'\')" class="waves-effect waves-dark btn-flat details" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
|
||||
'<span class="cbadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_pin+'"><i class="fa fa-map-pin pin_' + toot.id + ' '+if_pin+'"></i></a></div>'
|
||||
+'<div class="' + if_mine + ' action '+disp["red"]+' '+noauth+'"><a onclick="redraft(\'' + toot.id + '\',' +
|
||||
acct_id +
|
||||
')" class="waves-effect waves-dark btn-flat" style="padding:0" title="'+lang.lang_parse_redraft+'"><i class="material-icons">redo</i></a></div>'+trans+
|
||||
'<span class="cbadge viabadge waves-effect '+viashow+' '+mine_via+'" onclick="client(\''+$.strip_tags(via)+'\')" title="via ' + $.strip_tags(via) + '">via ' +
|
||||
via +
|
||||
'</span></div></div>' +
|
||||
'</div></div>' + divider;
|
||||
'</span>'+
|
||||
'</div><div class="area-side '+mouseover+'"><div class="action ' + if_mine + ' '+noauth+'"><a onclick="toggleAction(\'' + toot.id + '\',\''+tlid+'\',\''+acct_id+'\')" class="waves-effect waves-dark btn-flat" style="padding:0"><i class="text-darken-3 material-icons act-icon">expand_more</i></a></div>' +
|
||||
'<div class="action '+noauth+'"><a onclick="details(\'' + toot.id + '\',' + acct_id +
|
||||
',\''+tlid+'\',\'normal\')" class="waves-effect waves-dark btn-flat details '+dmHide+'" style="padding:0"><i class="text-darken-3 material-icons">more_vert</i></a></div>' +
|
||||
'</div></div>' +
|
||||
'</div></div>';
|
||||
});
|
||||
if (mix == "mix") {
|
||||
return [templete, local, times]
|
||||
@@ -513,6 +814,13 @@ function userparse(obj, auth, acct_id, tlid, popup) {
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var toot = obj[key];
|
||||
if(!toot.username){
|
||||
var raw=toot;
|
||||
toot=toot.account;
|
||||
var notf=true;
|
||||
}else{
|
||||
var notf=false;
|
||||
}
|
||||
if (toot.locked) {
|
||||
var locked = ' <i class="fa fa-lock red-text"></i>';
|
||||
} else {
|
||||
@@ -524,45 +832,98 @@ function userparse(obj, auth, acct_id, tlid, popup) {
|
||||
} else {
|
||||
var auth = "";
|
||||
}
|
||||
var ftxt="フォローされました";
|
||||
if(localStorage.getItem("domain_" + acct_id)=="imastodon.net" && !locale){
|
||||
ftxt = "名刺をいただきました";
|
||||
}else if(localStorage.getItem("domain_" + acct_id)=="mstdn.osaka" && !locale){
|
||||
ftxt = "ツルまれました";
|
||||
var ftxt=lang.lang_parse_followed;
|
||||
if(!locale && localStorage.getItem("followlocale_" + acct_id)){
|
||||
ftxt = localStorage.getItem("followlocale_" + acct_id);
|
||||
}
|
||||
if(popup > 0 || popup==-1){
|
||||
var notftext='<span class="cbadge"title="' + date(toot.created_at,
|
||||
'absolute') + '(通知された時間)"><i class="fa fa-clock-o"></i>' + date(toot.created_at,
|
||||
datetype) +
|
||||
'</span>'+ftxt+'。<br>';
|
||||
if(popup > 0 || popup==-1 || notf){
|
||||
var notftext=ftxt+'<br>';
|
||||
}else{
|
||||
var notftext="";
|
||||
}
|
||||
var memory = localStorage.getItem("notice-mem");
|
||||
if (popup >= 0 && obj.length < 5 && noticetext != memory) {
|
||||
Materialize.toast(escapeHTML(toot.display_name)+"に"+ftxt, popup * 1000);
|
||||
if (popup >= 0 && obj.length < 5 && notftext != memory) {
|
||||
Materialize.toast(escapeHTML(toot.display_name)+":"+ftxt, popup * 1000);
|
||||
$(".notf-icon_" + tlid).addClass("red-text");
|
||||
localStorage.setItem("notice-mem", noticetext);
|
||||
noticetext = "";
|
||||
localStorage.setItem("notice-mem", notftext);
|
||||
notftext = "";
|
||||
var native=localStorage.getItem("nativenotf");
|
||||
if(!native){
|
||||
native="yes";
|
||||
}
|
||||
if(native=="yes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: toot.display_name+"(" + toot.acct +")"+ftxt,
|
||||
icon: toot.avatar
|
||||
};
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk:'+domain, options);
|
||||
}else{
|
||||
ipc.send('native-notf', [
|
||||
'TheDesk:'+domain,
|
||||
toot.display_name+"(" + toot.acct +")"+ftxt,
|
||||
toot.avatar,
|
||||
"userdata",
|
||||
acct_id,
|
||||
toot.id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(toot.display_name){
|
||||
var dis_name=escapeHTML(toot.display_name);
|
||||
}else{
|
||||
var dis_name=toot.username;
|
||||
}
|
||||
//ネイティブ通知
|
||||
|
||||
if(toot.emojis){
|
||||
var actemojick = toot.emojis[0];
|
||||
}else{
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(toot.emojis).forEach(function(key5) {
|
||||
var emoji = toot.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img draggable="false" src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'" alt=" :'+shortcode+': ">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
if(dis_name){
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}
|
||||
if(toot.avatar){
|
||||
var avatar=toot.avatar;
|
||||
}else{
|
||||
var avatar="../../img/missing.svg";
|
||||
}
|
||||
|
||||
templete = templete +
|
||||
'<div class="" style="padding-top:5px;" user-id="' + toot.id + '">' +
|
||||
'<div class="cvo" style="padding-top:5px;" user-id="' + toot.id + '"><div class="area-notice">' +
|
||||
notftext +
|
||||
'<div style="padding:0; margin:0; width:400px; max-width:100%; display:flex; align-items:flex-end;">' +
|
||||
'<div style="flex-basis:40px;"><a onclick="udg(\'' + toot.id + '\',' +
|
||||
'</div><div class="area-icon"><a onclick="udg(\'' + toot.id + '\',' +
|
||||
acct_id + ');" user="' + toot.acct + '" class="udg">' +
|
||||
'<img src="' + toot.avatar + '" width="40" class="prof-img" user="' + toot
|
||||
'<img draggable="false" src="' + avatar + '" width="40" class="prof-img" user="' + toot
|
||||
.acct + '"></a></div>' +
|
||||
'<div style="flex-grow:3; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"><big>' +
|
||||
escapeHTML(toot.display_name) + '</big></div>' +
|
||||
'<div class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
||||
toot.acct + locked + '</div>' +
|
||||
'</div>' + auth +
|
||||
'<div style="justify-content:space-around"> <div class="cbadge" style="width:100px;">Follows:' +
|
||||
'<div class="area-display_name"><div class="flex-name"><span class="user">' +
|
||||
dis_name + '</span>' +
|
||||
'<span class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
||||
toot.acct + locked + auth +'</span>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div style="justify-content:space-around" class="area-toot"> <div class="cbadge" style="width:100px;">Follows:' +
|
||||
toot.following_count +
|
||||
'</div><div class="cbadge" style="width:100px;">Followers:' + toot.followers_count +
|
||||
'</div>' +
|
||||
'<div class="divider"></div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
|
||||
@@ -579,18 +940,18 @@ function client(name) {
|
||||
var dialog=remote.dialog;
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: 'クライアント処理',
|
||||
message: name+"に対する処理を選択してください。",
|
||||
buttons: ['何もしない','強調表示/解除', 'ミュート']
|
||||
title: lang.lang_parse_clientop,
|
||||
message: name+lang.lang_parse_clienttxt,
|
||||
buttons: [lang.lang_parse_clientno,lang.lang_parse_clientemp, lang.lang_parse_clientmute]
|
||||
}
|
||||
dialog.showMessageBox(options, function(arg) {
|
||||
if(arg==1){
|
||||
if(arg===1){
|
||||
var cli = localStorage.getItem("client_emp");
|
||||
var obj = JSON.parse(cli);
|
||||
if(!obj){
|
||||
var obj=[];
|
||||
obj.push(name);
|
||||
Materialize.toast(name+"を強調表示します。", 2000);
|
||||
Materialize.toast(name+lang.lang_status_emphas, 2000);
|
||||
}else{
|
||||
var can;
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
@@ -600,19 +961,19 @@ function client(name) {
|
||||
}else{
|
||||
can=true;
|
||||
obj.splice(key, 1);
|
||||
Materialize.toast(name+"の強調表示を解除しました。", 2000);
|
||||
Materialize.toast(name+lang.lang_status_unemphas, 2000);
|
||||
}
|
||||
});
|
||||
if(!can){
|
||||
obj.push(name);
|
||||
Materialize.toast(name+"を強調表示します。", 2000);
|
||||
Materialize.toast(name+lang.lang_status_emphas, 2000);
|
||||
}else{
|
||||
|
||||
}
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_emp", json);
|
||||
}else if(arg==2){
|
||||
}else if(arg===2){
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
if(!obj){
|
||||
@@ -621,7 +982,7 @@ function client(name) {
|
||||
obj.push(name);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_mute", json);
|
||||
Materialize.toast(name+"をミュートします。設定から削除できます。", 2000);
|
||||
Materialize.toast(name+lang.lang_parse_mute, 2000);
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
|
||||
119
app/js/tl/poll.js
Normal file
119
app/js/tl/poll.js
Normal file
@@ -0,0 +1,119 @@
|
||||
//アンケートのトグル
|
||||
function pollToggle() {
|
||||
if ($("#poll").hasClass("hide")) {
|
||||
$("#right-side").show()
|
||||
$("#poll").removeClass("hide")
|
||||
} else {
|
||||
$("#right-side").hide()
|
||||
$("#emoji").addClass("hide")
|
||||
$("#poll").addClass("hide")
|
||||
}
|
||||
}
|
||||
function pollProviderCk(){
|
||||
$(".poll-provider").addClass("hide");
|
||||
$("#"+$("#poll-sel").val()).removeClass("hide");
|
||||
}
|
||||
/*
|
||||
function pollAddtime(num){
|
||||
var last=$("#expires_in").val();
|
||||
last=last*1-(num*-1);
|
||||
$("#expires_in").val(last);
|
||||
pollCalc();
|
||||
}
|
||||
*/
|
||||
function pollCalc(){
|
||||
var days=$("#days_poll").val();
|
||||
var hrs=$("#hours_poll").val();
|
||||
var mins=$("#mins_poll").val();
|
||||
console.log(days*86400+hrs*3600+mins*60)
|
||||
return days*86400+hrs*3600+mins*60;
|
||||
|
||||
}
|
||||
//Vote
|
||||
function voteSelMastodon(acct_id,id,to,mul){
|
||||
console.log('.vote_'+acct_id+'_'+id+'_'+to);
|
||||
if($('.vote_'+acct_id+'_'+id+'_'+to).hasClass("sel")){
|
||||
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","transparent")
|
||||
$('.vote_'+acct_id+'_'+id+'_'+to).removeClass("sel");
|
||||
}else{
|
||||
if(!mul){
|
||||
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
|
||||
if(i==to){
|
||||
$(this).css("background-color","var(--emphasized)");
|
||||
$(this).addClass("sel");
|
||||
}else{
|
||||
$(this).css("background-color","transparent")
|
||||
$(this).removeClass("sel");
|
||||
}
|
||||
});
|
||||
}else{
|
||||
$('.vote_'+acct_id+'_'+id+'_'+to).css("background-color","var(--emphasized)")
|
||||
$('.vote_'+acct_id+'_'+id+'_'+to).addClass("sel");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
function voteMastodon(acct_id,id){
|
||||
var choice=[];
|
||||
$('.vote_'+acct_id+'_'+id+' div' ).each(function(i, elem) {
|
||||
if($(this).hasClass("sel")){
|
||||
choice.push(i+"");
|
||||
}
|
||||
});
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/polls/"+id+"/votes";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
return false;
|
||||
}
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({choices:choice}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
voteMastodonrefresh(acct_id,id)
|
||||
}
|
||||
}
|
||||
function showResult(acct_id,id){
|
||||
$('.vote_'+acct_id+'_'+id+'_result').toggleClass("hide")
|
||||
}
|
||||
function voteMastodonrefresh(acct_id,id){
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
if (!datetype) {
|
||||
datetype = "absolute";
|
||||
}
|
||||
var httpreqd = new XMLHttpRequest();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/polls/"+id;
|
||||
httpreqd.open('GET', start, true);
|
||||
httpreqd.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreqd.responseType = 'json';
|
||||
httpreqd.send(JSON.stringify({i:at,noteId:id}));
|
||||
httpreqd.onreadystatechange = function() {
|
||||
if (httpreqd.readyState == 4) {
|
||||
var json = httpreqd.response;
|
||||
console.log(json);
|
||||
if(!json){
|
||||
return false;
|
||||
}
|
||||
var poll="";
|
||||
var choices=json.options;
|
||||
var myvote=lang.lang_parse_voted;
|
||||
var result_hide="";
|
||||
Object.keys(choices).forEach(function(keyc) {
|
||||
var choice = choices[keyc];
|
||||
if(!json.voted){
|
||||
votesel='voteSelMastodon(\''+acct_id+'\',\''+json.id+'\','+keyc+','+json.multiple+')';
|
||||
}
|
||||
poll=poll+'<div class="pointer vote vote_'+acct_id+'_'+json.id+'_'+keyc+'" onclick="'+votesel+'">'+choice.title+'<span class="vote_'+acct_id+'_'+json.id+'_result '+result_hide+'">('+choice.votes_count+')</span></div>';
|
||||
});
|
||||
poll=poll+myvote+'<span class="cbadge cbadge-hover" title="' + date(json.expires_at, 'absolute') +
|
||||
'"><i class="fa fa-calendar-times-o"></i>' +
|
||||
date(json.expires_at, datetype) + '</span>';
|
||||
$('.vote_'+acct_id+'_'+json.id).html(poll)
|
||||
}
|
||||
}
|
||||
}
|
||||
109
app/js/tl/speech.js
Normal file
109
app/js/tl/speech.js
Normal file
@@ -0,0 +1,109 @@
|
||||
$voise = null;
|
||||
$voiseName = lang.lang_speech;
|
||||
$voices = speechSynthesis.getVoices();
|
||||
$synthes = new SpeechSynthesisUtterance();
|
||||
$voise = $.grep($voices, function(n, i){return n.name == $voiseName})[0];
|
||||
$synthes.voice = $voise; // 音声の設定
|
||||
localStorage.removeItem("voicebank");
|
||||
speechSynthesis.cancel()
|
||||
if(!localStorage.getItem("voice_vol")){
|
||||
localStorage.setItem("voice_vol",1)
|
||||
}
|
||||
$synthes.rate=localStorage.getItem("voice_speed");
|
||||
$synthes.pitch=localStorage.getItem("voice_pitch");
|
||||
$synthes.volume=localStorage.getItem("voice_vol");
|
||||
function say(msgr){
|
||||
msg=voiceParse(msgr);
|
||||
var voice=localStorage.getItem("voicebank");
|
||||
var obj = JSON.parse(voice);
|
||||
if(!obj){
|
||||
var json = JSON.stringify([msg]);
|
||||
localStorage.setItem("voicebank", json);
|
||||
}else{
|
||||
obj.push([msg]);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("voicebank", json);
|
||||
}
|
||||
|
||||
}
|
||||
$repeat = setInterval(function() {
|
||||
if(!speechSynthesis.speaking){
|
||||
var voice=localStorage.getItem("voicebank");
|
||||
if(voice){
|
||||
var obj = JSON.parse(voice);
|
||||
if(obj[0]){
|
||||
$synthes.text = obj[0];
|
||||
console.log($synthes);
|
||||
speechSynthesis.speak($synthes);
|
||||
obj.splice(0, 1);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("voicebank", json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 300);
|
||||
function voiceParse(msg){
|
||||
msg = $.strip_tags(msg);
|
||||
msg = msg.replace(/#/g, "");
|
||||
msg = msg.replace(/'/g, "");
|
||||
msg = msg.replace(/"/g, "");
|
||||
msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?%&-]+/g, "");
|
||||
return msg;
|
||||
}
|
||||
function voiceToggle(tlid) {
|
||||
var voiceck = localStorage.getItem("voice_" + tlid);
|
||||
if (voiceck) {
|
||||
localStorage.removeItem("voice_" + tlid);
|
||||
speechSynthesis.cancel()
|
||||
$("#sta-voice-" + tlid).text("Off");
|
||||
$("#sta-voice-" + tlid).css("color",'red');
|
||||
parseColumn();
|
||||
} else {
|
||||
localStorage.setItem("voice_" + tlid, "true");
|
||||
$("#sta-voice-" + tlid).text("On");
|
||||
$("#sta-voice-" + tlid).css("color",'#009688');
|
||||
parseColumn();
|
||||
}
|
||||
}
|
||||
function voiceCheck(tlid) {
|
||||
var voiceck = localStorage.getItem("voice_" + tlid);
|
||||
if (voiceck) {
|
||||
$("#sta-voice-" + tlid).text("On");
|
||||
$("#sta-voice-" + tlid).css("color",'#009688');
|
||||
} else {
|
||||
$("#sta-voice-" + tlid).text("Off");
|
||||
$("#sta-voice-" + tlid).css("color",'red');
|
||||
}
|
||||
}
|
||||
function voicePlay(){
|
||||
if(speechSynthesis.speaking){
|
||||
speechSynthesis.cancel()
|
||||
}else{
|
||||
$synthes.text = $("#voicetxt").val();
|
||||
$synthes.rate = $("#voicespeed").val()/10;
|
||||
$synthes.pitch = $("#voicepitch").val()/50;
|
||||
$synthes.volume = $("#voicevol").val()/100;
|
||||
speechSynthesis.speak($synthes);
|
||||
}
|
||||
}
|
||||
|
||||
function voiceSettings(){
|
||||
localStorage.setItem("voice_speed", $("#voicespeed").val()/10);
|
||||
localStorage.setItem("voice_pitch", $("#voicepitch").val()/50);
|
||||
localStorage.setItem("voice_vol", $("#voicevol").val()/100);
|
||||
Materialize.toast(lang.lang_speech_refresh, 3000);
|
||||
}
|
||||
function voiceSettingLoad(){
|
||||
var speed=localStorage.getItem("voice_speed");
|
||||
var pitch=localStorage.getItem("voice_pitch");
|
||||
var vol=localStorage.getItem("voice_vol");
|
||||
if(speed){
|
||||
$("#voicespeed").val(speed*10);
|
||||
}
|
||||
if(pitch){
|
||||
$("#voicepitch").val(pitch*50);
|
||||
}
|
||||
if(vol){
|
||||
$("#voicevol").val(vol*100);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
//検索
|
||||
//検索ボックストグル
|
||||
function srcToggle() {
|
||||
$("#src-box").toggleClass("hide");
|
||||
$("#src-box").toggleClass("show");
|
||||
$("#src-box").css("top",$('#src-tgl').offset().top+"px");
|
||||
$("#src-box").css("left",$('#src-tgl').offset().left-410+"px");
|
||||
function searchMenu() {
|
||||
$("#left-menu div").removeClass("active");
|
||||
$("#searchMenu").addClass("active");
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#src-box").removeClass("hide");
|
||||
$('ul.tabs').tabs('select_tab', 'src-sta');
|
||||
$("#src-contents").html("");
|
||||
}
|
||||
|
||||
//検索取得
|
||||
function src() {
|
||||
function src(mode) {
|
||||
$("#src-contents").html("");
|
||||
var q = $("#src").val();
|
||||
var acct_id = $("#src-acct-sel").val();
|
||||
if(acct_id=="tootsearch"){
|
||||
@@ -19,11 +20,17 @@ function src() {
|
||||
}
|
||||
localStorage.setItem("last-use", acct_id);
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var m = q.match(/^#(.+)$/);
|
||||
if(m){q=m[1];}
|
||||
if (user == "--now") {
|
||||
var user = $('#his-data').attr("user-id");
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/search?q=" + q
|
||||
if(!mode){
|
||||
var start = "https://" + domain + "/api/v2/search?q=" + q
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/search?q=" + q
|
||||
}
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -34,9 +41,25 @@ function src() {
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
src("v1")
|
||||
return false;
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
//ハッシュタグ
|
||||
if (json.hashtags[0]) {
|
||||
var tags = "";
|
||||
Object.keys(json.hashtags).forEach(function(key4) {
|
||||
var tag = json.hashtags[key4];
|
||||
if(mode){
|
||||
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + tag + '</a><br> ';
|
||||
}else{
|
||||
tags=tags+graphDraw(tag);
|
||||
}
|
||||
|
||||
});
|
||||
$("#src-contents").append("Tags<br>" + tags);
|
||||
}
|
||||
//トゥート
|
||||
if (json.statuses[0]) {
|
||||
var templete = parse(json.statuses,'',acct_id);
|
||||
@@ -47,16 +70,6 @@ function src() {
|
||||
var templete = userparse(json.accounts,'',acct_id);
|
||||
$("#src-contents").append("Accounts<br>" + templete);
|
||||
}
|
||||
//ハッシュタグ
|
||||
if (json.hashtags[0]) {
|
||||
var tags = "";
|
||||
Object.keys(json.hashtags).forEach(function(key4) {
|
||||
var tag = json.hashtags[key4];
|
||||
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + tag + '</a><br> ';
|
||||
});
|
||||
$("#src-contents").append("Tags<br>" + tags);
|
||||
}
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
@@ -81,13 +94,43 @@ function tootsearch(q){
|
||||
var toot = json[key5]["_source"];
|
||||
console.log(toot);
|
||||
if(toot && toot.account){
|
||||
templete = templete+parse([toot],'');
|
||||
templete = templete+parse([toot],'noauth');
|
||||
}
|
||||
});
|
||||
if(!templete){
|
||||
templete="データはありません。";
|
||||
templete=lang.lang_details_nodata;
|
||||
}
|
||||
$("#src-contents").html("Tootsearch(時系列)<br>" + templete);
|
||||
$("#src-contents").html("Tootsearch("+lang.lang_src_ts+")<br>" + templete);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
}
|
||||
function graphDraw(tag){
|
||||
var tags="";
|
||||
var his=tag.history;
|
||||
console.log(his);
|
||||
var max=Math.max.apply(null, [his[0].uses,his[1].uses,his[2].uses,his[3].uses,his[4].uses,his[5].uses,his[6].uses]);
|
||||
var six=50-(his[6].uses/max*50);
|
||||
var five=50-(his[5].uses/max*50);
|
||||
var four=50-(his[4].uses/max*50);
|
||||
var three=50-(his[3].uses/max*50);
|
||||
var two=50-(his[2].uses/max*50);
|
||||
var one=50-(his[1].uses/max*50);
|
||||
var zero=50-(his[0].uses/max*50);
|
||||
if(max===0){
|
||||
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
|
||||
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots <a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + tag.name + '</a> '+his[0].accounts+lang.lang_src_people;
|
||||
}else{
|
||||
tags = '<br><br><svg version="1.1" viewbox="0 0 60 50" width="60" height="50">'+
|
||||
'<g><path d="M0,'+six+' L10,'+five+' 20,'+four+' 30,'+three+' 40,'+two+' 50,'+one+' 60,'+zero+'" style="stroke: #9e9e9e; stroke-width: 1;fill: none;"></path></g>'+
|
||||
'</svg><span style="font-size:200%">'+his[0].uses+'</span>toots <a onclick="tl(\'tag\',\'' + tag.name + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + tag.name + '</a> '+his[0].accounts+lang.lang_src_people;
|
||||
}
|
||||
|
||||
return tags;
|
||||
}
|
||||
/*
|
||||
<svg version="1.1" viewbox="0 0 50 300" width="100%" height="50">
|
||||
<path d="M0,0 L10,0 20,10 20,50" fill="#3F51B5"></path>
|
||||
</svg>
|
||||
*/
|
||||
@@ -4,12 +4,13 @@ if(location.search){
|
||||
var mode=m[1];
|
||||
var codex=m[2];
|
||||
if(mode=="tag"){
|
||||
tl('tag',decodeURI(codex),0,'add');
|
||||
var acct_id=localStorage.getItem("main");
|
||||
tl('tag',decodeURI(codex),acct_id,'add');
|
||||
}
|
||||
}
|
||||
//よく使うタグ
|
||||
function tagShow(tag){
|
||||
$("[data-tag="+tag+"]").toggleClass("hide");
|
||||
$("[data-tag="+decodeURI(tag)+"]").toggleClass("hide");
|
||||
}
|
||||
//タグ追加
|
||||
function tagPin(tag){
|
||||
@@ -45,6 +46,7 @@ function tagRemove(key) {
|
||||
favTag();
|
||||
}
|
||||
function favTag(){
|
||||
$("#taglist").html("");
|
||||
var tagarr = localStorage.getItem("tag");
|
||||
if(!tagarr){
|
||||
var obj=[];
|
||||
@@ -52,18 +54,75 @@ function favTag(){
|
||||
var obj = JSON.parse(tagarr);
|
||||
}
|
||||
var tags="";
|
||||
var nowPT=localStorage.getItem("stable")
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var tag = obj[key];
|
||||
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a> '+
|
||||
'<a onclick="tagRemove(\'' + key + '\')" class="pointer" title="#' + tag + 'をよく使うタグから削除">Unpin</a></span> ';
|
||||
if(nowPT!=tag){
|
||||
console.log(nowPT+"/"+tag);
|
||||
var ptt=lang.lang_tags_realtime;
|
||||
var nowon="";
|
||||
}else{
|
||||
var ptt=lang.lang_tags_unrealtime;
|
||||
var nowon="("+lang.lang_tags_realtime+")";
|
||||
}
|
||||
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> '+
|
||||
'<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){
|
||||
$("#suggest").append("My Tags:" + tags);
|
||||
$("#taglist").append("My Tags:" + tags);
|
||||
}else{
|
||||
$("#suggest").append("");
|
||||
$("#taglist").append("");
|
||||
}
|
||||
}
|
||||
function trendTag(){
|
||||
$(".trendtag").remove();
|
||||
var domain="imastodon.net"
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/trend_tags"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json) {
|
||||
var tags="";
|
||||
json=json.score;
|
||||
Object.keys(json).forEach(function(tag) {
|
||||
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span> ';
|
||||
});
|
||||
$("#taglist").append('<div class="trendtag">アイマストドントレンドタグ<i class="material-icons pointer" onclick="trendTag()" style="font-size:12px">refresh</i>:' + tags+'</div>');
|
||||
trendintervalset()
|
||||
}else{
|
||||
$("#taglist").html("");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function trendintervalset(){
|
||||
setTimeout(trendTag, 6000000);
|
||||
}
|
||||
function tagTL(a,b,c,d){
|
||||
var acct_id = $("#post-acct-sel").val();
|
||||
tl(a,b,acct_id,d);
|
||||
}
|
||||
function autoToot(tag){
|
||||
var nowPT=localStorage.getItem("stable")
|
||||
if(nowPT==tag){
|
||||
localStorage.removeItem("stable");
|
||||
Materialize.toast(lang.lang_tags_unrealtime,3000);
|
||||
}else{
|
||||
localStorage.setItem("stable",tag);
|
||||
Materialize.toast(lang.lang_tags_tagwarn.replace("{{tag}}" ,tag).replace("{{tag}}" ,tag),3000);
|
||||
brInsert('#' + tag+" ")
|
||||
}
|
||||
favTag();
|
||||
}
|
||||
537
app/js/tl/tl.js
537
app/js/tl/tl.js
@@ -1,5 +1,6 @@
|
||||
//TL取得
|
||||
function tl(type, data, acct_id, tlid) {
|
||||
moreloading=false;
|
||||
function tl(type, data, acct_id, tlid, delc, voice, mode) {
|
||||
scrollevent();
|
||||
localStorage.removeItem("morelock");
|
||||
localStorage.removeItem("pool");
|
||||
@@ -31,31 +32,38 @@ function tl(type, data, acct_id, tlid) {
|
||||
var type = "local";
|
||||
}
|
||||
}
|
||||
if (type == "mix") {
|
||||
if (type == "mix" && localStorage.getItem("mode_" + domain)!="misskey") {
|
||||
//Integratedなら飛ばす
|
||||
$("#notice_" + tlid).text("Integrated TL(" + localStorage.getItem(
|
||||
"user_" + acct_id) + "@" + domain + ")");
|
||||
$("#notice_icon_" + tlid).text("merge_type");
|
||||
mixtl(acct_id, tlid, "integrated");
|
||||
mixtl(acct_id, tlid, "integrated",delc,voice);
|
||||
return;
|
||||
}else if (type == "plus") {
|
||||
//Local+なら飛ばす
|
||||
$("#notice_" + tlid).text("Local+ TL(" + localStorage.getItem(
|
||||
"user_" + acct_id) + "@" + domain + ")");
|
||||
$("#notice_icon_" + tlid).text("people_outline");
|
||||
mixtl(acct_id, tlid, "plus");
|
||||
mixtl(acct_id, tlid, "plus",delc,voice);
|
||||
return;
|
||||
}else if (type == "notf") {
|
||||
//通知なら飛ばす
|
||||
//notf(acct_id, tlid, 'direct');
|
||||
notf(acct_id, tlid, 'direct');
|
||||
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
|
||||
"user_" + acct_id) + "@" + domain + ")");
|
||||
$("#notice_icon_" + tlid).text("notifications");
|
||||
return;
|
||||
}
|
||||
}/*else if (type == "dm") {
|
||||
//DMなら飛ばす
|
||||
dm(acct_id, tlid, "plus",delc,voice);
|
||||
$("#notice_" + tlid).text(cap(type, data, acct_id) + "(" + localStorage.getItem(
|
||||
"user_" + acct_id) + "@" + domain + ")");
|
||||
$("#notice_icon_" + tlid).text("mail_outline");
|
||||
return;
|
||||
}*/
|
||||
localStorage.setItem("now", type);
|
||||
todo(cap(type) + " TL Loading...");
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(type!="noauth"){
|
||||
var hdr={
|
||||
'content-type': 'application/json',
|
||||
@@ -71,72 +79,163 @@ function tl(type, data, acct_id, tlid) {
|
||||
$("#notice_" + tlid).text("Glance TL(" + domain + ")");
|
||||
}
|
||||
$("#notice_icon_" + tlid).text(icon(type));
|
||||
var url=com(type, data);
|
||||
if(type=="tag"){
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if(tag=="local"){
|
||||
url=url+"local=true";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
var url=misskeycom(type, data);
|
||||
var start = "https://" + domain + "/api/notes/"+url;
|
||||
var method="POST";
|
||||
var req={};
|
||||
if(type!="noauth"){
|
||||
req.i=at;
|
||||
}
|
||||
|
||||
if(type=="local-media"||type=="pub-media"){
|
||||
req.mediaOnly=true;
|
||||
}
|
||||
if(type=="tag"){
|
||||
req.tag=data;
|
||||
}
|
||||
if(type=="list"){
|
||||
req.listId=data;
|
||||
}
|
||||
req.limit=20;
|
||||
var i={
|
||||
method: method,
|
||||
headers: hdr,
|
||||
body: JSON.stringify(req),
|
||||
}
|
||||
}else{
|
||||
var misskey=false;
|
||||
var url=com(type, data);
|
||||
if(type=="tag"){
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if(tag=="local"){
|
||||
url=url+"local=true";
|
||||
}
|
||||
}
|
||||
if(type=="dm"){
|
||||
var start = "https://" + domain + "/api/v1/conversations";
|
||||
}else{
|
||||
var start = "https://" + domain + "/api/v1/timelines/" + url;
|
||||
}
|
||||
var method="GET";
|
||||
var i={
|
||||
method: method,
|
||||
headers: hdr
|
||||
};
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/timelines/" + url;
|
||||
|
||||
console.log(start);
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: hdr,
|
||||
}).then(function(response) {
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, type, acct_id, tlid);
|
||||
console.log(json)
|
||||
$("#landing_" + tlid).hide();
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
if(misskey){
|
||||
var templete = misskeyParse(json, type, acct_id, tlid, "", mute);
|
||||
}else{
|
||||
var templete = parse(json, type, acct_id, tlid, "", mute, type);
|
||||
localStorage.setItem("lastobj_"+ tlid,json[0].id)
|
||||
}
|
||||
$("#timeline_" + tlid).html(templete);
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
todc();
|
||||
reload(type, '', acct_id, tlid, data);
|
||||
reload(type, '', acct_id, tlid, data, mute, delc,voice);
|
||||
$(window).scrollTop(0);
|
||||
});
|
||||
}
|
||||
|
||||
//Streaming接続
|
||||
function reload(type, cc, acct_id, tlid, data) {
|
||||
function reload(type, cc, acct_id, tlid, data, mute, delc, voice, mode) {
|
||||
if (!type) {
|
||||
var type = localStorage.getItem("now");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
localStorage.setItem("now", type);
|
||||
if (type == "home") {
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=user&access_token=" + at;
|
||||
} else if (type == "pub") {
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=public&access_token=" + at;
|
||||
} else if (type == "local") {
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=public:local&access_token=" + at;
|
||||
} else if (type == "tag") {
|
||||
if(type=="tag"){
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if(tag=="local"){
|
||||
data=data+"&local=true";
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
if (type == "home") {
|
||||
var start = "wss://" + domain +
|
||||
"/?i=" + at;
|
||||
} else if (type == "pub") {
|
||||
var start = "wss://" + domain +
|
||||
"/global-timeline?i=" + at;
|
||||
} else if (type == "pub-media") {
|
||||
var start = "wss://" + domain +
|
||||
"/global-timeline?i=" + at;
|
||||
} else if (type == "local") {
|
||||
var start = "wss://" + domain +
|
||||
"/local-timeline?i=" + at;
|
||||
} else if (type == "local-media") {
|
||||
var start = "wss://" + domain +
|
||||
"/local-timeline?i=" + at;
|
||||
} else if (type == "mix") {
|
||||
var start = "wss://" + domain +
|
||||
"/hybrid-timeline?i=" + at;
|
||||
} else if (type == "tag") {
|
||||
Materialize.toast(lang_misskeyparse_tagnostr[lang], 1000);
|
||||
} else if (type == "noauth") {
|
||||
var start = "wss://" + acct_id +
|
||||
"/local-timeline?i=" + at;
|
||||
} else if (type=="list"){
|
||||
Materialize.toast(lang_misskeyparse_listnostr[lang], 1000);
|
||||
}
|
||||
}else{
|
||||
var misskey=false;
|
||||
if(localStorage.getItem("streaming_" + acct_id)){
|
||||
var wss=localStorage.getItem("streaming_" + acct_id)
|
||||
}else{
|
||||
var wss="wss://"+domain
|
||||
}
|
||||
if (type == "home") {
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=user&access_token=" + at;
|
||||
} else if (type == "pub") {
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=public&access_token=" + at;
|
||||
} else if (type == "pub-media") {
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=public:media&access_token=" + at;
|
||||
} else if (type == "local") {
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=public:local&access_token=" + at;
|
||||
} else if (type == "local-media") {
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=public:local:media&only_media=true&access_token=" + at;
|
||||
} else if (type == "tag") {
|
||||
if(type=="tag"){
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if(tag=="local"){
|
||||
data=data+"&local=true";
|
||||
}
|
||||
}
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at;
|
||||
} else if (type == "noauth") {
|
||||
var start = "wss://" + acct_id+
|
||||
"/api/v1/streaming/?stream=public:local";
|
||||
} else if (type=="list"){
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=list&list=" + data +"&access_token=" + at;
|
||||
} else if (type=="dm"){
|
||||
var start = wss +
|
||||
"/api/v1/streaming/?stream=direct&access_token=" + at;
|
||||
}
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at;
|
||||
} else if (type == "noauth") {
|
||||
var start = "wss://" + acct_id +
|
||||
"/api/v1/streaming/?stream=public:local";
|
||||
} else if (type=="list"){
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=list&list=" + data +"&access_token=" + at;
|
||||
} else if (type=="dm"){
|
||||
var start = "wss://" + domain +
|
||||
"/api/v1/streaming/?stream=direct&access_token=" + at;
|
||||
}
|
||||
|
||||
console.log(start);
|
||||
var wsid = websocket.length;
|
||||
localStorage.setItem("wss_" + tlid, wsid);
|
||||
websocket[wsid] = new WebSocket(start);
|
||||
websocket[wsid].onopen = function(mess) {
|
||||
console.log(tlid + ":Connect Streaming API:" + type);
|
||||
@@ -145,19 +244,18 @@ function reload(type, cc, acct_id, tlid, data) {
|
||||
}
|
||||
websocket[wsid].onmessage = function(mess) {
|
||||
console.log(tlid + ":Receive Streaming API:");
|
||||
console.log(mess);
|
||||
|
||||
|
||||
var typeA = JSON.parse(mess.data).event;
|
||||
if (typeA == "delete") {
|
||||
var obj = JSON.parse(mess.data).payload;
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
} else if (typeA == "update") {
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
|
||||
var templete = parse([obj], type, acct_id, tlid);
|
||||
console.log(JSON.parse(mess.data));
|
||||
if(misskey){
|
||||
if (JSON.parse(mess.data).type == "note") {
|
||||
var obj = JSON.parse(mess.data).body;
|
||||
if(voice){
|
||||
say(obj.text)
|
||||
}
|
||||
websocketNotf[acct_id].send(JSON.stringify({
|
||||
type: 'capture',
|
||||
id: obj.id
|
||||
}))
|
||||
var templete = misskeyParse([obj], type, acct_id, tlid,"",mute);
|
||||
var pool = localStorage.getItem("pool_" + tlid);
|
||||
if (pool) {
|
||||
pool = templete + pool;
|
||||
@@ -165,24 +263,93 @@ function reload(type, cc, acct_id, tlid, data) {
|
||||
pool = templete
|
||||
}
|
||||
localStorage.setItem("pool_" + tlid, pool);
|
||||
|
||||
scrollck();
|
||||
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
}else{
|
||||
todo("二重取得発生中");
|
||||
}
|
||||
|
||||
todc();
|
||||
}
|
||||
websocket[wsid].onclose = function(mess) {
|
||||
console.log("Close Streaming API:" + type);
|
||||
}else{
|
||||
var typeA = JSON.parse(mess.data).event;
|
||||
if (typeA == "delete") {
|
||||
var del=localStorage.getItem("delete");
|
||||
if(del>10){
|
||||
reconnector(tlid,type,acct_id,data)
|
||||
}else{
|
||||
localStorage.setItem("delete",del*1+1)
|
||||
}
|
||||
var obj = JSON.parse(mess.data).payload;
|
||||
if(delc=="true"){
|
||||
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized");
|
||||
$("#timeline_"+tlid+" [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch");
|
||||
}else{
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
|
||||
$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
|
||||
}
|
||||
|
||||
} else if (typeA == "update" || typeA == "conversation") {
|
||||
localStorage.removeItem("delete");
|
||||
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
||||
console.log(obj);
|
||||
if($("#timeline_" + tlid +" [toot-id=" + obj.id + "]").length < 1){
|
||||
if(voice){
|
||||
say(obj.content)
|
||||
}
|
||||
var templete = parse([obj], type, acct_id, tlid,"",mute, type);
|
||||
if ($("timeline_box_"+tlid+"_box .tl-box").scrollTop() === 0) {
|
||||
$("#timeline_" + tlid).prepend(templete);
|
||||
}else{
|
||||
var pool = localStorage.getItem("pool_" + tlid);
|
||||
if (pool) {
|
||||
pool = templete + pool;
|
||||
} else {
|
||||
pool = templete
|
||||
}
|
||||
localStorage.setItem("pool_" + tlid, pool);
|
||||
}
|
||||
scrollck();
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
}else{
|
||||
todo("二重取得発生中");
|
||||
}
|
||||
|
||||
todc();
|
||||
}else if(typeA=="filters_changed"){
|
||||
filterUpdate(acct_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
websocket[wsid].onerror = function(error) {
|
||||
console.error('WebSocket Error ' + error);
|
||||
console.error("Error closing");
|
||||
console.error(error);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Error ' + error);
|
||||
}else{
|
||||
var errorct=localStorage.getItem("wserror_" + tlid)*1+1;
|
||||
localStorage.setItem("wserror_" + tlid,errorct);
|
||||
if(errorct<3){
|
||||
reconnector(tlid,type,acct_id,data,"error");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
websocket[wsid].onclose = function() {
|
||||
console.error("Closing");
|
||||
console.error(tlid);
|
||||
if(mode=="error"){
|
||||
$("#notice_icon_" + tlid).addClass("red-text");
|
||||
todo('WebSocket Closed');
|
||||
}else{
|
||||
var errorct=localStorage.getItem("wserror_" + tlid)*1+1;
|
||||
localStorage.setItem("wserror_" + tlid,errorct);
|
||||
if(errorct<3){
|
||||
reconnector(tlid,type,acct_id,data,"error");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//一定のスクロールで発火
|
||||
@@ -204,42 +371,94 @@ function moreload(type, tlid) {
|
||||
}else if(type=="list"){
|
||||
var data=obj[tlid].data;
|
||||
}
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("toot-id");
|
||||
if (localStorage.getItem("morelock") != sid) {
|
||||
localStorage.setItem("morelock", sid);
|
||||
if (type == "mix") {
|
||||
var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id");
|
||||
if (sid && !moreloading) {
|
||||
if (type == "mix" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
|
||||
mixmore(tlid,"integrated");
|
||||
return;
|
||||
}else if (type == "plus") {
|
||||
}else if (type == "plus" && localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))!="misskey") {
|
||||
mixmore(tlid,"plus");
|
||||
return;
|
||||
}else if (type == "notf") {
|
||||
notfmore(tlid);
|
||||
return;
|
||||
}
|
||||
moreloading=true;
|
||||
localStorage.setItem("now", type);
|
||||
todo(cap(type) + " TL MoreLoading");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
|
||||
"max_id=" + sid;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
if(type!="noauth"){
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var hdr={
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
};
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
}else{
|
||||
var hdr={
|
||||
'content-type': 'application/json'
|
||||
};
|
||||
domain=acct_id;
|
||||
}
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var misskey=true;
|
||||
hdr={
|
||||
'content-type': 'application/json'
|
||||
};
|
||||
var url=misskeycom(type, data);
|
||||
var start = "https://" + domain + "/api/notes/"+url;
|
||||
var method="POST";
|
||||
var req={};
|
||||
if(type!="noauth"){
|
||||
req.i=at;
|
||||
}
|
||||
if(type=="local-media"||type=="pub-media"){
|
||||
req.mediaOnly=true;
|
||||
}
|
||||
if(type=="tag"){
|
||||
req.tag=data;
|
||||
}
|
||||
if(type=="list"){
|
||||
req.listId=data;
|
||||
}
|
||||
req.untilId=sid;
|
||||
req.limit=20;
|
||||
var i={
|
||||
method: method,
|
||||
headers: hdr,
|
||||
body: JSON.stringify(req),
|
||||
}
|
||||
}else{
|
||||
var misskey=false;
|
||||
var start = "https://" + domain + "/api/v1/timelines/" + com(type,data) +
|
||||
"max_id=" + sid;
|
||||
if(type=="dm"){
|
||||
var start = "https://" + domain + "/api/v1/conversations?" +
|
||||
"max_id=" + sid;
|
||||
}
|
||||
var method="GET";
|
||||
var i={
|
||||
method: method,
|
||||
headers: hdr
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id, tlid);
|
||||
console.log(json);
|
||||
if(misskey){
|
||||
var templete = misskeyParse(json, '', acct_id, tlid,"",mute);
|
||||
}else{
|
||||
var templete = parse(json, '', acct_id, tlid,"",mute, type);
|
||||
}
|
||||
$("#timeline_" + tlid).append(templete);
|
||||
additional(acct_id, tlid);
|
||||
jQuery("time.timeago").timeago();
|
||||
localStorage.removeItem("morelock")
|
||||
moreloading=false;
|
||||
todc();
|
||||
});
|
||||
}
|
||||
@@ -283,7 +502,7 @@ function tlCloser() {
|
||||
}
|
||||
|
||||
});
|
||||
websocketLocal = [];
|
||||
websocketNotf = [];
|
||||
}
|
||||
|
||||
//TLのタイトル
|
||||
@@ -305,12 +524,24 @@ function cap(type, data, acct_id) {
|
||||
}else{
|
||||
var response="Local TL";
|
||||
}
|
||||
} else if (type == "local-media") {
|
||||
if(localStorage.getItem("local_" + acct_id) && !locale){
|
||||
var response=localStorage.getItem("local_" + acct_id)+"("+lang.lang_tl_media +")";
|
||||
}else{
|
||||
var response="Local TL(Media)";
|
||||
}
|
||||
} else if (type == "pub") {
|
||||
if(localStorage.getItem("public_" + acct_id) && !locale){
|
||||
var response=localStorage.getItem("public_" + acct_id);
|
||||
}else{
|
||||
var response="Federated TL";
|
||||
}
|
||||
} else if (type == "pub-media") {
|
||||
if(localStorage.getItem("public_" + acct_id) && !locale){
|
||||
var response=localStorage.getItem("public_" + acct_id)+"("+lang.lang_tl_media +")";
|
||||
}else{
|
||||
var response="Federated TL(Media)";
|
||||
}
|
||||
} else if (type == "tag") {
|
||||
var response= "#" + data
|
||||
} else if (type == "list") {
|
||||
@@ -326,6 +557,16 @@ function cap(type, data, acct_id) {
|
||||
var response= "Glance TL"
|
||||
} else if (type == "dm") {
|
||||
var response= "DM"
|
||||
} else if (type == "mix") {
|
||||
if(localStorage.getItem("mode_" + localStorage.getItem("domain_" + acct_id))=="misskey"){
|
||||
var response= "Social TL"
|
||||
}else{
|
||||
var response= "Integrated"
|
||||
}
|
||||
} else if (type == "plus") {
|
||||
var response= "Local+"
|
||||
}else if (type == "webview") {
|
||||
var response="Twitter"
|
||||
}
|
||||
return response;
|
||||
}
|
||||
@@ -336,32 +577,128 @@ function com(type, data) {
|
||||
return "home?"
|
||||
} else if (type == "local" || type == "noauth") {
|
||||
return "public?local=true&"
|
||||
} else if (type == "local-media") {
|
||||
return "public?local=true&only_media=true&"
|
||||
} else if (type == "pub") {
|
||||
return "public?"
|
||||
} else if (type == "pub-media") {
|
||||
return "public?only_media=true&"
|
||||
} else if (type == "tag") {
|
||||
return "tag/" + data + "?"
|
||||
}else if (type == "list") {
|
||||
return "list/" + data + "?"
|
||||
}else if (type="dm") {
|
||||
}else if (type=="dm") {
|
||||
return "direct?"
|
||||
}
|
||||
}
|
||||
function misskeycom(type, data) {
|
||||
if (type == "home") {
|
||||
return "timeline"
|
||||
}else if (type == "mix") {
|
||||
return "hybrid-timeline"
|
||||
} else if (type == "local" || type == "noauth") {
|
||||
return "local-timeline"
|
||||
} else if (type == "local-media") {
|
||||
return "local-timeline"
|
||||
} else if (type == "pub") {
|
||||
return "global-timeline"
|
||||
} else if (type == "pub-media") {
|
||||
return "global-timeline"
|
||||
} else if (type == "tag") {
|
||||
return "search_by_tag"
|
||||
}else if (type == "list") {
|
||||
return "user-list-timeline"
|
||||
}
|
||||
}
|
||||
|
||||
//TLのアイコン
|
||||
function icon(type) {
|
||||
if (type == "home") {
|
||||
return "home"
|
||||
} else if (type == "local" || type == "noauth") {
|
||||
return "people_outline"
|
||||
var response="home";
|
||||
} else if (type == "local") {
|
||||
var response="people_outline";
|
||||
} else if (type == "local-media") {
|
||||
var response="people_outline";
|
||||
} else if (type == "pub") {
|
||||
return "language"
|
||||
var response="language";
|
||||
} else if (type == "pub-media") {
|
||||
var response="language";
|
||||
} else if (type == "tag") {
|
||||
return "search"
|
||||
var response="search";
|
||||
} else if (type == "list") {
|
||||
return "view_headline"
|
||||
}else if (type == "list") {
|
||||
return "subject"
|
||||
}else if (type == "dm") {
|
||||
return "mail"
|
||||
var response="view_headline";
|
||||
} else if (type == "notf") {
|
||||
var response="notifications";
|
||||
} else if (type == "noauth") {
|
||||
var response="people_outline";
|
||||
} else if (type == "dm") {
|
||||
var response="mail_outline";
|
||||
} else if (type == "mix") {
|
||||
var response="merge_type";
|
||||
} else if (type == "plus") {
|
||||
var response="merge_type";
|
||||
}else if (type == "webview") {
|
||||
var response="language";
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
function strAlive(){
|
||||
var date = new Date() ;
|
||||
var a = date.getTime() ;
|
||||
var unix = Math.floor( a / 1000 ) ;
|
||||
var col = localStorage.getItem("column");
|
||||
if(col){
|
||||
var obj = JSON.parse(col);
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
if($("#notice_icon_" + key).hasClass("red-text")){
|
||||
var type=obj[key].type;
|
||||
var acct_id=obj[key].domain;
|
||||
var data=obj[key].data;
|
||||
localStorage.removeItem("wserror_" + tlid)
|
||||
reconnector(key,type,acct_id,data,"error");
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function strAliveInt(){
|
||||
setTimeout(strAlive, 10000);
|
||||
}
|
||||
function reconnector(tlid,type,acct_id,data,mode){
|
||||
console.log("Reconnector:"+mode)
|
||||
if(type=="mix" || type=="plus"){
|
||||
if(localStorage.getItem("voice_" + tlid)){
|
||||
var voice=true;
|
||||
}else{
|
||||
var voice=false;
|
||||
}
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
var wssh=localStorage.getItem("wssH_" + tlid);
|
||||
websocketHome[wssh].close();
|
||||
var wssh=localStorage.getItem("wssL_" + tlid);
|
||||
websocketLocal[wssl].close();
|
||||
mixre(acct_id, tlid, type, mute,"",voice,mode);
|
||||
}else if(type=="notf"){
|
||||
}else{
|
||||
var wss=localStorage.getItem("wss_" + tlid);
|
||||
websocket[wss].close();
|
||||
if(localStorage.getItem("voice_" + tlid)){
|
||||
var voice=true;
|
||||
}else{
|
||||
var voice=false;
|
||||
}
|
||||
if(localStorage.getItem("filter_"+ acct_id)!="undefined"){
|
||||
var mute=getFilterType(JSON.parse(localStorage.getItem("filter_"+ acct_id)),type);
|
||||
}else{
|
||||
var mute=[];
|
||||
}
|
||||
reload(type, '', acct_id, tlid, data, mute, "",voice,mode);
|
||||
}
|
||||
Materialize.toast(lang.lang_tl_reconnect, 2000);
|
||||
}
|
||||
strAliveInt()
|
||||
183
app/js/ui/img.js
183
app/js/ui/img.js
@@ -2,13 +2,15 @@
|
||||
//postのimg.jsとは異なります。
|
||||
function imgv(id, key, acct_id) {
|
||||
$("#imgprog").text(0);
|
||||
$('#imgmodal').attr('src', './img/loading.svg');
|
||||
$('#imgmodal').hide();
|
||||
$('#imgmodal').attr('src', '../../img/loading.svg');
|
||||
var murl = $("#" + id + "-image-" + key).attr("data-url");
|
||||
var type = $("#" + id + "-image-" + key).attr("data-type");
|
||||
$("#imagemodal").attr("data-id",id);
|
||||
$("#imagemodal").attr("data-acct",acct_id);
|
||||
$(document).ready(function() {
|
||||
if (type == "image") {
|
||||
$('#imagemodal').modal('open');
|
||||
xhr = new XMLHttpRequest;
|
||||
xhr.open('GET', murl, true);
|
||||
xhr.addEventListener('progress', function (event) {
|
||||
@@ -16,24 +18,25 @@ function imgv(id, key, acct_id) {
|
||||
var total=event.total;
|
||||
var now=event.loaded;
|
||||
var per=now/total*100;
|
||||
$("#imgprog").text(per);
|
||||
$("#imgprog").text(Math.floor(per));
|
||||
}
|
||||
}, false);
|
||||
xhr.addEventListener('loadend', function (event) {
|
||||
var total=event.total;
|
||||
var now=event.loaded;
|
||||
var per=now/total*100;
|
||||
$("#imgprog").text(per);
|
||||
$("#imgprog").text(Math.floor(per));
|
||||
}, false);
|
||||
xhr.send();
|
||||
$('#imgmodal').attr('src', murl);
|
||||
$('#imagewrap').dragScroll(); // ドラッグスクロール設定
|
||||
$('#imagemodal').modal('open');
|
||||
$('#imgmodal').show();
|
||||
$('#imagemodal').attr('data-key', key);
|
||||
$('#imagemodal').attr('data-id', id);
|
||||
} else if (type == "video" || type == "gifv") {
|
||||
$('#video').attr('src', murl);
|
||||
$('#videomodal').modal('open');
|
||||
$('#imgmodal').show();
|
||||
}
|
||||
var element = new Image();
|
||||
var width;
|
||||
@@ -42,61 +45,31 @@ function imgv(id, key, acct_id) {
|
||||
var height = element.naturalHeight;
|
||||
var windowH = $(window).height();
|
||||
var windowW = $(window).width();
|
||||
//小さい画像
|
||||
if(width<(windowW - 50) && height<(windowH-1000)){
|
||||
$("#imgmodal").css('height',height+"px");
|
||||
$("#imgmodal").css('width',width+"px");
|
||||
$("#imagewrap").css('height',height+"px");
|
||||
$("#imagemodal").css('height',height+100+"px");
|
||||
$("#imagewrap").css('width',width+"px");
|
||||
$("#imagemodal").css('width',width+"px");
|
||||
$("#imagemodal").css('margin-top',(windowH /2) - (height / 2) +"px");
|
||||
}else{
|
||||
$("#imagemodal").css('margin-top',0);
|
||||
var aspect = width/height;
|
||||
if (aspect < 2.8 && aspect > 0.3){
|
||||
//moderate
|
||||
if(windowW > windowH){
|
||||
//画面が横長(縦幅基準)
|
||||
$("#imgmodal").css('height',windowH/1.2-70+"px");
|
||||
var imgW = (windowH/1.2-70)/height*width;
|
||||
$("#imgmodal").css('width',imgW+"px");
|
||||
$("#imagewrap").css('height',windowH/1.2-60+"px");
|
||||
$("#imagemodal").css('height',windowH/1.2+"px");
|
||||
$("#imagewrap").css('width',imgW+50+"px");
|
||||
$("#imagemodal").css('width',imgW+50+"px");
|
||||
}else{
|
||||
//画面が縦長・正方形(横幅基準)
|
||||
$("#imgmodal").css('width',windowW/1.2-30+"px");
|
||||
var imgH = (windowW/1.2-30)/width*height;
|
||||
$("#imgmodal").css('height',imgH+"px");
|
||||
$("#imagewrap").css('width',windowW/1.2+"px");
|
||||
$("#imagemodal").css('width',windowW/1.2+"px");
|
||||
$("#imagewrap").css('height',imgH+60+"px");
|
||||
$("#imagemodal").css('height',imgH+120+"px");
|
||||
}
|
||||
$("#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{
|
||||
//極端な画像
|
||||
if(height > width){
|
||||
//縦長
|
||||
$("#imgmodal").css('height',windowH-60+"px");
|
||||
var imgW = (windowH-50)/height*width;
|
||||
$("#imgmodal").css('width',imgW+"px");
|
||||
$("#imagewrap").css('height',windowH-50+"px");
|
||||
$("#imagemodal").css('height',windowH+"px");
|
||||
$("#imagewrap").css('width',imgW+50+"px");
|
||||
$("#imagemodal").css('width',imgW+50+"px");
|
||||
}else{
|
||||
//横長・正方形
|
||||
$("#imgmodal").css('width',windowW-30+"px");
|
||||
var imgH = (windowW-50)/width*height;
|
||||
$("#imgmodal").css('height',imgH+"px");
|
||||
$("#imagewrap").css('width',windowW+"px");
|
||||
$("#imagemodal").css('width',windowW+"px");
|
||||
$("#imagewrap").css('height',imgH+60+"px");
|
||||
$("#imagemodal").css('height',imgH+120+"px");
|
||||
}
|
||||
$("#imagemodal").css("width",width+"px")
|
||||
}
|
||||
}else{
|
||||
console.log("long")
|
||||
$("#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)")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -125,25 +98,26 @@ function imgCont(type) {
|
||||
}
|
||||
var murl = $("#" + id + "-image-" + key).attr("data-url");
|
||||
if(murl){
|
||||
$('#imgmodal').attr('src', './img/loading.svg');
|
||||
$('#imgmodal').attr('src', '../../img/loading.svg');
|
||||
var type = $("#" + id + "-image-" + key).attr("data-type");
|
||||
$(document).ready(function() {
|
||||
if (type == "image") {
|
||||
xhr = new XMLHttpRequest;
|
||||
xhr.open('GET', murl, true);
|
||||
xhr.responseType = "arraybuffer";
|
||||
xhr.addEventListener('progress', function (event) {
|
||||
if (event.lengthComputable) {
|
||||
var total=event.total;
|
||||
var now=event.loaded;
|
||||
var per=now/total*100;
|
||||
$("#imgprog").text(per);
|
||||
$("#imgprog").text(Math.floor(per));
|
||||
}
|
||||
}, false);
|
||||
xhr.addEventListener('loadend', function (event) {
|
||||
var total=event.total;
|
||||
var now=event.loaded;
|
||||
var per=now/total*100;
|
||||
$("#imgprog").text(per);
|
||||
$("#imgprog").text(Math.floor(per));
|
||||
}, false);
|
||||
xhr.send();
|
||||
$('#imgmodal').attr('src', murl);
|
||||
@@ -161,70 +135,40 @@ function imgCont(type) {
|
||||
var height = element.naturalHeight;
|
||||
var windowH = $(window).height();
|
||||
var windowW = $(window).width();
|
||||
//小さい画像
|
||||
if(width<(windowW - 50) && height<(windowH-1000)){
|
||||
$("#imgmodal").css('height',height+"px");
|
||||
$("#imgmodal").css('width',width+"px");
|
||||
$("#imagewrap").css('height',height+"px");
|
||||
$("#imagemodal").css('height',height+100+"px");
|
||||
$("#imagewrap").css('width',width+"px");
|
||||
$("#imagemodal").css('width',width+"px");
|
||||
$("#imagemodal").css('margin-top',(windowH /2) - (height / 2) +"px");
|
||||
}else{
|
||||
$("#imagemodal").css('margin-top',0);
|
||||
var aspect = width/height;
|
||||
if (aspect < 2.8 && aspect > 0.3){
|
||||
//moderate
|
||||
if(windowW > windowH){
|
||||
//画面が横長(縦幅基準)
|
||||
$("#imgmodal").css('height',windowH/1.2-70+"px");
|
||||
var imgW = (windowH/1.2-70)/height*width;
|
||||
$("#imgmodal").css('width',imgW+"px");
|
||||
$("#imagewrap").css('height',windowH/1.2-60+"px");
|
||||
$("#imagemodal").css('height',windowH/1.2+"px");
|
||||
$("#imagewrap").css('width',imgW+50+"px");
|
||||
$("#imagemodal").css('width',imgW+50+"px");
|
||||
}else{
|
||||
//画面が縦長・正方形(横幅基準)
|
||||
$("#imgmodal").css('width',windowW/1.2-30+"px");
|
||||
var imgH = (windowW/1.2-30)/width*height;
|
||||
$("#imgmodal").css('height',imgH+"px");
|
||||
$("#imagewrap").css('width',windowW/1.2+"px");
|
||||
$("#imagemodal").css('width',windowW/1.2+"px");
|
||||
$("#imagewrap").css('height',imgH+60+"px");
|
||||
$("#imagemodal").css('height',imgH+120+"px");
|
||||
}
|
||||
$("#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{
|
||||
//極端な画像
|
||||
if(height > width){
|
||||
//縦長
|
||||
$("#imgmodal").css('height',windowH-60+"px");
|
||||
var imgW = (windowH-50)/height*width;
|
||||
$("#imgmodal").css('width',imgW+"px");
|
||||
$("#imagewrap").css('height',windowH-50+"px");
|
||||
$("#imagemodal").css('height',windowH+"px");
|
||||
$("#imagewrap").css('width',imgW+50+"px");
|
||||
$("#imagemodal").css('width',imgW+50+"px");
|
||||
}else{
|
||||
//横長・正方形
|
||||
$("#imgmodal").css('width',windowW-30+"px");
|
||||
var imgH = (windowW-50)/width*height;
|
||||
$("#imgmodal").css('height',imgH+"px");
|
||||
$("#imagewrap").css('width',windowW+"px");
|
||||
$("#imagemodal").css('width',windowW+"px");
|
||||
$("#imagewrap").css('height',imgH+60+"px");
|
||||
$("#imagemodal").css('height',imgH+120+"px");
|
||||
}
|
||||
$("#imagemodal").css("width",width+"px")
|
||||
}
|
||||
}else{
|
||||
console.log("long")
|
||||
$("#imagemodal img").css("width","auto")
|
||||
var widthS=windowH/height*width;
|
||||
if(widthS<windowW){
|
||||
$("#imagemodal").css("width",widthS+"px")
|
||||
}else{
|
||||
$("#imagemodal").css("width","100vw")
|
||||
}
|
||||
|
||||
$("#imagemodal").css("height","100vh")
|
||||
$("#imagemodal img").css("height","calc(100vh - 60px)")
|
||||
}
|
||||
}
|
||||
if ($("#" + id + "-image-" + (key * 1 + 1)).length == 0) {
|
||||
if ($("#" + id + "-image-" + (key * 1 + 1)).length === 0) {
|
||||
$("#image-next").prop("disabled", true);
|
||||
} else {
|
||||
$("#image-next").prop("disabled", false);
|
||||
}
|
||||
console.log("#" + id + "-image-" + (key * 1 - 1));
|
||||
if ($("#" + id + "-image-" + (key * 1 - 1)).length == 0) {
|
||||
if ($("#" + id + "-image-" + (key * 1 - 1)).length === 0) {
|
||||
$("#image-prev").prop("disabled", true);
|
||||
} else {
|
||||
$("#image-prev").prop("disabled", false);
|
||||
@@ -285,7 +229,7 @@ function zoom(z) {
|
||||
'cursor': 'move'
|
||||
}); //指が触れたか検知
|
||||
$(this).on('touchmove', function(event) {
|
||||
if ($(target).data('down') == true) {
|
||||
if ($(target).data('down') === true) {
|
||||
// スクロール
|
||||
console.log($(target).data('x'));
|
||||
target.scrollLeft($(target).data('scrollLeft') + $(target).data('x') -
|
||||
@@ -333,7 +277,12 @@ function dlImg(){
|
||||
var url=$("#imgmodal").attr("src");
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('general-dl', [url,false]);
|
||||
if(localStorage.getItem("savefolder")){
|
||||
var save=localStorage.getItem("savefolder");
|
||||
}else{
|
||||
var save="";
|
||||
}
|
||||
ipc.send('general-dl', [url,save,false]);
|
||||
ipc.on('general-dl-prog', function (event, arg) {
|
||||
console.log(arg);
|
||||
})
|
||||
|
||||
@@ -7,15 +7,21 @@ var websocketLocal = [];
|
||||
var websocketNotf = [];
|
||||
|
||||
//カラム追加ボックストグル
|
||||
function addToggle() {
|
||||
$("#add-box").toggleClass("hide");
|
||||
function addColumnMenu() {
|
||||
$("#left-menu div").removeClass("active");
|
||||
$("#addColumnMenu").addClass("active");
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#add-box").removeClass("hide");
|
||||
addselCk()
|
||||
$("#add-box").css("top",$('#add-tgl').offset().top+"px");
|
||||
$("#add-box").css("left",$('#add-tgl').offset().left-410+"px");
|
||||
$("#add-box").toggleClass("show");
|
||||
}
|
||||
$('.type').click(function() {
|
||||
$(".type").removeClass("active");
|
||||
$(this).addClass("active");
|
||||
$("#type-sel").val($(this).attr("data-type"))
|
||||
})
|
||||
//最初、カラム変更時に発火
|
||||
function parseColumn() {
|
||||
console.log("parse");
|
||||
var size = localStorage.getItem("size");
|
||||
if (size) {
|
||||
$("#timeline-container").css("font-size", size + "px");
|
||||
@@ -39,22 +45,25 @@ function parseColumn() {
|
||||
localStorage.setItem("user-id_" + key, acct.id);
|
||||
localStorage.setItem("prof_" + key, acct.prof);
|
||||
localStorage.setItem("domain_" + key, acct.domain);
|
||||
localStorage.setItem(acct.domain + "_at", acct.at);
|
||||
localStorage.setItem("acct_"+ key + "_at", acct.at);
|
||||
notf(key, 0);
|
||||
ckdb(key);
|
||||
//フィルターデータ読もう
|
||||
getFilter(key);
|
||||
});
|
||||
}
|
||||
var xed=localStorage.getItem("xed");
|
||||
var acctlist=obj;
|
||||
console.log(obj);
|
||||
/*var xed=localStorage.getItem("xed");
|
||||
if(xed){
|
||||
xpand();
|
||||
}
|
||||
}*/
|
||||
var col = localStorage.getItem("column");
|
||||
if (!col) {
|
||||
var obj = [{
|
||||
domain: 0,
|
||||
type: 'local'
|
||||
}];
|
||||
localStorage.setItem("card_0","true");
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
} else {
|
||||
@@ -67,13 +76,20 @@ function parseColumn() {
|
||||
var acct = obj[key];
|
||||
if(acct.type=="notf"){
|
||||
var notf_attr=' data-notf='+acct.domain;
|
||||
var if_notf="hide";
|
||||
}else{
|
||||
var notf_attr='';
|
||||
var if_notf="";
|
||||
}
|
||||
if(localStorage.getItem("notification_" + acct.domain)){
|
||||
var unique_notf=localStorage.getItem("notification_" + acct.domain);
|
||||
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,localStorage.getItem("notification_" + acct.domain));
|
||||
}else{
|
||||
var unique_notf="通知";
|
||||
if(lang.language=="ja"){
|
||||
var notflocale="通知";
|
||||
}else if(lang.language=="en"){
|
||||
var notflocale="Notification";
|
||||
}
|
||||
var unique_notf=lang.lang_layout_thisacct.replace("{{notf}}" ,notflocale);
|
||||
}
|
||||
var insert="";
|
||||
var icnsert="";
|
||||
@@ -88,30 +104,77 @@ function parseColumn() {
|
||||
var txhex="ffffff";
|
||||
var ichex="eeeeee"
|
||||
}
|
||||
insert=' style="background-color:#'+acct.background+'; color: #'+txhex+'" ';
|
||||
insert='background-color:#'+acct.background+'; color: #'+txhex+'; ';
|
||||
icnsert=' style="color: #'+ichex+'" ';
|
||||
}
|
||||
}
|
||||
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
|
||||
'"><div class="notice-box z-depth-2" id="menu_'+key+'"'+insert+'>'+
|
||||
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。"></i></div>'+
|
||||
console.log(acct.domain);
|
||||
if(acctlist[acct.domain]){
|
||||
if(acctlist[acct.domain].background!="def"){
|
||||
insert=insert+" border-bottom:medium solid #"+acctlist[acct.domain].background+";";
|
||||
}
|
||||
}
|
||||
if(acct.type=="notf" && localStorage.getItem("setasread")=="no"){
|
||||
localStorage.setItem("hasNotfC_" + acct.domain,"true");
|
||||
}else{
|
||||
localStorage.removeItem("hasNotfC_" + acct.domain);
|
||||
}
|
||||
if(acct.type=="webview"){
|
||||
if(localStorage.getItem("fixwidth")){
|
||||
var fixwidth=localStorage.getItem("fixwidth");
|
||||
var css=" min-width:"+fixwidth+"px;"
|
||||
}else{
|
||||
var css="";
|
||||
}
|
||||
var html =webview("https://tweetdeck.twitter.com",key,insert,icnsert,css);
|
||||
$("#timeline-container").append(html);
|
||||
}else{
|
||||
var width = localStorage.getItem("width");
|
||||
if (width) {
|
||||
var css=" min-width:"+width+"px;"
|
||||
}
|
||||
var anime = localStorage.getItem("animation");
|
||||
if (anime=="yes" || !anime) {
|
||||
var animecss="box-anime";
|
||||
}else{
|
||||
var animecss="";
|
||||
}
|
||||
if(acct.type=="notf"){
|
||||
var exclude=lang.lang_excluded+':<br><input type="checkbox" class="filled-in" id="exc-reply-'+key+'" '+excludeCk(key,"mention")+' /><label for="exc-reply-'+key+'" class="exc-chb"><i class="fa fa-share exc-icons"></i></label> '+
|
||||
'<input type="checkbox" class="filled-in" id="exc-fav-'+key+'" '+excludeCk(key,"favourite")+' /><label for="exc-fav-'+key+'" class="exc-chb"><i class="fa fa-star exc-icons"></i></label> '+
|
||||
'<input type="checkbox" class="filled-in" id="exc-bt-'+key+'" '+excludeCk(key,"reblog")+' /><label for="exc-bt-'+key+'" class="exc-chb" ><i class="fa fa-retweet exc-icons"></i></label> '+
|
||||
'<input type="checkbox" class="filled-in" id="exc-follow-'+key+'" '+excludeCk(key,"follow")+' /><label for="exc-follow-'+key+'" class="exc-chb" ><i class="fa fa-users exc-icons"></i></label> '+
|
||||
'<button class="btn waves-effect" style="width:60px; padding:0;" onclick="exclude('+key+')">Filter</button><br>';
|
||||
}else if(acct.type=="home"){
|
||||
var exclude='<a onclick="ebtToggle(' + key +
|
||||
')" class="setting nex"><i class="fa fa-retweet waves-effect nex" title="'+lang.lang_layout_excludingbt +'" style="font-size:24px"></i><span id="sta-bt-' +
|
||||
key + '">Off</span></a>'+lang.lang_layout_excludingbt+'<br>';
|
||||
}else{
|
||||
var exclude="";
|
||||
}
|
||||
var html = '<div style="'+css+'" class="box '+animecss+'" id="timeline_box_' + key + '_box" tlid="' + key +
|
||||
'" data-acct="'+acct.domain+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+' ">'+
|
||||
'<div class="area-notice"><i class="material-icons waves-effect red-text" id="notice_icon_' + key + '"'+notf_attr+' style="font-size:40px; padding-top:25%;" onclick="goTop(' + key + ')" title="'+lang.lang_layout_gotop +'"></i></div>'+
|
||||
'<div class="area-notice_name"><span id="notice_' + key + '" class="tl-title"></span></div>'+
|
||||
'<div class="area-a1"><a onclick="notfToggle(' + acct.domain + ',' + key +
|
||||
')" class="setting nex" title="このアカウントの'+unique_notf+'"'+icnsert+'><i class="material-icons waves-effect nex notf-icon_' +
|
||||
acct.domain + '">notifications</i></a></div>'+
|
||||
')" class="setting nex '+if_notf+'" title="'+unique_notf+'"'+icnsert+'><i class="material-icons waves-effect nex notf-icon_' +
|
||||
acct.domain + '">notifications</i></div><div class="area-sta"><span class="new badge teal notf-reply_'+acct.domain+' hide" data-badge-caption="Reply">0</span><span class="new badge yellow black-text notf-fav_'+acct.domain+' hide" data-badge-caption="Fav">0</span><span class="new badge blue notf-bt_'+acct.domain+' hide" data-badge-caption="BT">0</span><span class="new badge orange notf-follow_'+acct.domain+' hide" data-badge-caption="Follow">0</span></a></div>'+
|
||||
'<div class="area-a2"><a onclick="removeColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除"'+icnsert+'>cancel</i></a></div>'+
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
|
||||
'<div class="area-a3"><a onclick="setToggle(' + key +
|
||||
')" class="setting nex" title="このカラムの設定"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
|
||||
'<div class="hide notf-indv-box z-depth-4" id="notf-box_' + key +
|
||||
')" class="setting nex" title="'+lang.lang_layout_setthis +'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
|
||||
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
|
||||
'"><div id="notifications_' + key +
|
||||
'" data-notf="' + acct.domain + '"></div></div><div class="hide notf-indv-box" id="util-box_' + key +
|
||||
'" style="padding:5px;"><a onclick="mediaToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="メディアフィルター">perm_media</i><span id="sta-media-' +
|
||||
key + '">On</span></a>メディアフィルター<br><a onclick="cardToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="リンクの解析を切り替え(OFFで制限を回避出来る場合があります)">link</i><span id="sta-card-' +
|
||||
key + '">On</span></a>リンク解析<br>TLヘッダーの色<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
|
||||
'" class="tl" tlid="' + key + '"'+notf_attr+'><div style="text-align:center">[ここにトゥートはありません。]<br>F5で再読込できます。</div></div></div></div>';
|
||||
'" data-notf="' + acct.domain + '" data-type="notf"></div></div><div class="column-hide notf-indv-box" id="util-box_' + key +
|
||||
'" style="padding:5px;">'+exclude+'<a onclick="mediaToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_mediafil +'">perm_media</i><span id="sta-media-' +
|
||||
key + '">On</span></a>'+lang.lang_layout_mediafil +'<br><a onclick="cardToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_linkanades +'">link</i><span id="sta-card-' +
|
||||
key + '">On</span></a>'+lang.lang_layout_linkana +'<br><a onclick="voiceToggle(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_tts +'">hearing</i><span id="sta-voice-' +
|
||||
key + '">On</span></a>'+lang.lang_layout_tts +'TL<br><a onclick="reconnector(' + key +
|
||||
',\''+acct.type+'\',\''+acct.domain+'\',\''+acct.data+'\')" class="setting nex '+if_notf+'"><i class="material-icons waves-effect nex '+if_notf+'" title="'+lang.lang_layout_reconnect+'">low_priority</i></a><span class="'+if_notf+'">'+lang.lang_layout_reconnect+'</span><br>'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '"><div id="timeline_' + key +
|
||||
'" class="tl '+acct.type+'-timeline " tlid="' + key + '" data-type="' + acct.type + '" data-acct="'+acct.domain+'"><div id="landing_'+key+'" style="text-align:center">'+lang.lang_layout_nodata +'</div></div></div></div>';
|
||||
$("#timeline-container").append(html);
|
||||
localStorage.removeItem("pool_" + key);
|
||||
if (acct.data) {
|
||||
@@ -119,24 +182,72 @@ function parseColumn() {
|
||||
} else {
|
||||
var data = "";
|
||||
}
|
||||
tl(acct.type, data, acct.domain, key);
|
||||
if(localStorage.getItem("catch_" + key)){
|
||||
var delc="true";
|
||||
}else{
|
||||
var delc="false";
|
||||
}
|
||||
|
||||
if(localStorage.getItem("voice_" + key)){
|
||||
var voice=true;
|
||||
}else{
|
||||
var voice=false;
|
||||
}
|
||||
tl(acct.type, data, acct.domain, key, delc,voice,"");
|
||||
cardCheck(key);
|
||||
ebtCheck(key);
|
||||
mediaCheck(key);
|
||||
catchCheck(key);
|
||||
voiceCheck(key);
|
||||
}
|
||||
});
|
||||
var width = localStorage.getItem("width");
|
||||
if (width) {
|
||||
$(".box").css("min-width", width + "px");
|
||||
}
|
||||
var box = localStorage.getItem("box");
|
||||
if (box == "yes") {
|
||||
$("#post-box").addClass("hidenbox");
|
||||
$("#post-box").fadeOut();
|
||||
$("#menu-btn").fadeIn();
|
||||
}else if (box == "hide"){
|
||||
$("body").addClass("mini-post");
|
||||
$(".mini-btn").text("expand_less");
|
||||
if (box == "absolute") {
|
||||
setTimeout(show, 1000);
|
||||
}
|
||||
if(localStorage.getItem("reverse")){
|
||||
$("#bottom").removeClass("reverse");
|
||||
$(".leftside").removeClass("reverse");
|
||||
}
|
||||
if(localStorage.getItem("sec") && localStorage.getItem("sec")!="nothing"){
|
||||
secvis(localStorage.getItem("sec"));
|
||||
}
|
||||
favTag();
|
||||
var cw = localStorage.getItem("always-cw");
|
||||
if (cw == "yes") {
|
||||
if(!$("#cw").hasClass("cw-avail")){
|
||||
$("#cw-text").show();
|
||||
$("#cw").addClass("yellow-text");
|
||||
$("#cw").addClass("cw-avail");
|
||||
var cwt=localStorage.getItem("cw-text");
|
||||
if(cwt){
|
||||
$("#cw-text").val(cwt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//セカンダリートゥートボタン
|
||||
function secvis(set){
|
||||
if(set=="public"){
|
||||
$("#toot-sec-icon").text("public");
|
||||
$("#toot-sec-btn").addClass("purple");
|
||||
}else if(set=="unlisted"){
|
||||
$("#toot-sec-icon").text("lock_open");
|
||||
$("#toot-sec-btn").addClass("blue");
|
||||
}else if(set=="private"){
|
||||
$("#toot-sec-icon").text("lock");
|
||||
$("#toot-sec-btn").addClass("orange");
|
||||
}else if(set=="direct"){
|
||||
$("#toot-sec-icon").text("mail");
|
||||
$("#toot-sec-btn").addClass("red");
|
||||
}else if(set=="limited"){
|
||||
$("#toot-sec-icon").text("group");
|
||||
$("#toot-sec-btn").addClass("teal");
|
||||
}else if(set=="local"){
|
||||
$("#toot-sec-icon").text("visibility");
|
||||
$("#toot-sec-btn").addClass("light-blue");
|
||||
}
|
||||
$("#toot-sec-btn").removeClass("hide");
|
||||
}
|
||||
//カラム追加
|
||||
function addColumn() {
|
||||
@@ -146,6 +257,9 @@ function addColumn() {
|
||||
if(acct=="noauth"){
|
||||
acct=$("#noauth-url").val();
|
||||
type="noauth"
|
||||
}else if(acct=="webview"){
|
||||
acct="";
|
||||
type="webview"
|
||||
}
|
||||
var add = {
|
||||
domain: acct,
|
||||
@@ -155,12 +269,10 @@ function addColumn() {
|
||||
var obj = JSON.parse(multi);
|
||||
if(!obj){
|
||||
var leng=0;
|
||||
localStorage.setItem("card_" + leng,"true");
|
||||
var json = JSON.stringify([add]);
|
||||
localStorage.setItem("column", json);
|
||||
}else{
|
||||
var leng=obj.length;
|
||||
localStorage.setItem("card_" + leng,"true");
|
||||
obj.push(add);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
@@ -171,23 +283,29 @@ function addColumn() {
|
||||
function addselCk(){
|
||||
var acct = $("#add-acct-sel").val();
|
||||
var domain=localStorage.getItem("domain_" + acct);
|
||||
if(acct=="noauth"){
|
||||
if(acct=="webview"){
|
||||
$("#auth").addClass("hide");
|
||||
$("#noauth").addClass("hide");
|
||||
$("#webview-add").removeClass("hide");
|
||||
}else if(acct=="noauth"){
|
||||
$("#auth").addClass("hide");
|
||||
$("#noauth").removeClass("hide");
|
||||
$("#webview-add").addClass("hide");
|
||||
}else{
|
||||
$("#auth").removeClass("hide");
|
||||
$("#noauth").addClass("hide");
|
||||
$("#webview-add").addClass("hide");
|
||||
}
|
||||
if(domain=="knzk.me" || domain=="mstdn.y-zu.org"){
|
||||
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">ダイレクトメッセージ</option>');
|
||||
$('#type-sel').material_select('update');
|
||||
$("#type-sel").append('<option value="dm" data-trans="dm" id="direct-add">'+lang.layout_dm +'</option>');
|
||||
}else{
|
||||
$("#direct-add").remove();
|
||||
$('#type-sel').material_select('update');
|
||||
}
|
||||
}
|
||||
//カラム削除
|
||||
function removeColumn(tlid) {
|
||||
$("#sort-box").addClass("hide");
|
||||
$("#sort-box").removeClass("show");
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
//聞く
|
||||
@@ -196,9 +314,13 @@ function removeColumn(tlid) {
|
||||
ipc.send('column-del', "");
|
||||
ipc.on('column-del-reply', function (event, arg) {
|
||||
console.log(arg);
|
||||
if(arg==1){
|
||||
if(arg===1){
|
||||
localStorage.removeItem("card_" + tlid);
|
||||
obj.splice(tlid, 1);
|
||||
for(var i=0;i<obj.length;i++){
|
||||
localStorage.setItem("card_" + i,"true");
|
||||
localStorage.removeItem("catch_" + i);
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
parseColumn();
|
||||
@@ -210,8 +332,29 @@ function removeColumn(tlid) {
|
||||
//設定トグル
|
||||
function setToggle(tlid) {
|
||||
colorpicker(tlid);
|
||||
$("#util-box_" + tlid).toggleClass("hide");
|
||||
$("#util-box_" + tlid).toggleClass("show");
|
||||
if($("#util-box_" + tlid).hasClass("column-hide")){
|
||||
$("#util-box_" + tlid).css("display","block")
|
||||
$("#util-box_" + tlid).animate({
|
||||
'height': '200px'
|
||||
},{
|
||||
'duration': 300,
|
||||
'complete': function(){
|
||||
$("#util-box_" + tlid).css("overflow-y","scroll")
|
||||
$("#util-box_" + tlid).removeClass("column-hide")
|
||||
}
|
||||
});
|
||||
}else{
|
||||
$("#util-box_" + tlid).css("overflow-y","hidden")
|
||||
$("#util-box_" + tlid).animate({
|
||||
'height': '0'
|
||||
},{
|
||||
'duration': 300,
|
||||
'complete': function(){
|
||||
$("#util-box_" + tlid).addClass("column-hide")
|
||||
$("#util-box_" + tlid).css("display","none")
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
function colorpicker(key){
|
||||
temp=
|
||||
@@ -249,7 +392,8 @@ function coloradd(key,bg,txt){
|
||||
var json = JSON.stringify(o);
|
||||
localStorage.setItem("column", json);
|
||||
if(txt=="def"){
|
||||
$("#menu_"+key).attr("style","")
|
||||
$("#menu_"+key).css("background-color","");
|
||||
$("#menu_"+key).css("color","");
|
||||
}else{
|
||||
$("#menu_"+key).css('background-color','#'+bg);
|
||||
if(txt=="black"){
|
||||
@@ -262,4 +406,22 @@ function coloradd(key,bg,txt){
|
||||
$("#menu_"+key+" .nex").css('color','#'+ichex);
|
||||
$("#menu_"+key).css('color','#'+bghex);
|
||||
}
|
||||
}
|
||||
//禁断のTwitter
|
||||
function webview(url,key,insert,icnsert,css){
|
||||
var html = '<div class="box" id="timeline_box_' + key + '_box" tlid="' + key +
|
||||
'" style="'+css+'"><div class="notice-box z-depth-2" id="menu_'+key+'" style="'+insert+'">'+
|
||||
'<div class="area-notice"><i class="fa fa-twitter waves-effect" id="notice_icon_' + key + '" style="font-size:40px; padding-top:25%;"></i></div>'+
|
||||
'<div class="area-notice_name tl-title">WebView('+url+')</div>'+
|
||||
'<div class="area-sta"><input type="checkbox" id="webviewsel" value="true" class="filled-in"><label for="webviewsel">'+lang.lang_layout_webviewmode +'</label></div>'+
|
||||
'<div class="area-a2"><a onclick="removeColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_layout_delthis +'"'+icnsert+'>cancel</i></a></div>'+
|
||||
'<div class="area-a3"><a onclick="setToggle(' + key +
|
||||
')" class="setting nex" title="'+lang.lang_layout_setthis +'"'+icnsert+'><i class="material-icons waves-effect nex">settings</i></a></div></div>'+
|
||||
'<div class="column-hide notf-indv-box z-depth-4" id="notf-box_' + key +
|
||||
'"></div><div class="column-hide notf-indv-box" id="util-box_' + key +
|
||||
'" style="padding:5px;">'+lang.lang_layout_headercolor +'<br><div id="picker_'+key+'" class="color-picker"></div></div><div class="tl-box" tlid="' + key + '" style="width:100%;height:calc(100% - 110px);"><div id="timeline_' + key +
|
||||
'" class="tl" tlid="' + key + '" data-type="webview" style="width:100%;height:100%;"><webview src="'+url+'" style="width:100%;height:100%;" id="webview" preload="./js/platform/twitter.js"></webview></div></div></div>';
|
||||
|
||||
return html;
|
||||
}
|
||||
51
app/js/ui/menu.js
Normal file
51
app/js/ui/menu.js
Normal file
@@ -0,0 +1,51 @@
|
||||
function menu(){
|
||||
if(!$("#menu").hasClass("appear")){
|
||||
$("#menu").addClass("appear")
|
||||
var left=localStorage.getItem("menu-left");
|
||||
if(left>$('body').width()-$('#menu').width()){
|
||||
left=$('body').width()-$('#menu').width();
|
||||
}else if(left<0){
|
||||
left=0;
|
||||
}
|
||||
var top=localStorage.getItem("menu-top");
|
||||
if(top>$('body').height()-$('#menu').height()){
|
||||
top=$('body').height()-$('#menu').height();
|
||||
}else if(top<0){
|
||||
top=0;
|
||||
}
|
||||
$('#menu').css("left",left+"px")
|
||||
$('#menu').css("top",top+"px")
|
||||
$('#menu').fadeIn();
|
||||
$("#menu-bar").html("TheDesk "+localStorage.getItem("ver"));
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#add-box").removeClass("hide");
|
||||
}else{
|
||||
$('#menu').fadeOut()
|
||||
$("#menu").removeClass("appear")
|
||||
}
|
||||
|
||||
}
|
||||
$(function() {
|
||||
$( "#menu" ).draggable({handle: "#menu-bar",
|
||||
stop: function() {
|
||||
var left=$('#menu').offset().left;
|
||||
if(left>$('body').width()-$('#menu').width()){
|
||||
left=$('body').width()-$('#menu').width();
|
||||
}else if(left<0){
|
||||
left=0;
|
||||
}
|
||||
var top=$('#menu').offset().top;
|
||||
if(top>$('body').height()-$('#menu').height()){
|
||||
top=$('body').height()-$('#menu').height();
|
||||
}else if(top<0){
|
||||
top=0;
|
||||
}
|
||||
localStorage.setItem("menu-left",left);
|
||||
localStorage.setItem("menu-top",top);
|
||||
}
|
||||
});
|
||||
});
|
||||
function help(){
|
||||
const {shell} = require('electron');
|
||||
shell.openExternal("https://docs.thedesk.top");
|
||||
}
|
||||
@@ -1,21 +1,10 @@
|
||||
/*ささやきボックス(Cr民並感)*/
|
||||
//もっとボタン
|
||||
function more() {
|
||||
$(".more-show").show();
|
||||
$(".more-hide").hide();
|
||||
$("#post-box").addClass("post-more");
|
||||
}
|
||||
//閉じるボタン
|
||||
function less() {
|
||||
$(".more-show").hide();
|
||||
$(".more-hide").show();
|
||||
$("#post-box").removeClass("post-more");
|
||||
}
|
||||
//✕隠す
|
||||
function hide() {
|
||||
$("#post-box").addClass("hidenbox");
|
||||
$("#post-box").fadeOut();
|
||||
$("#menu-btn").fadeIn();
|
||||
$("#right-side").hide()
|
||||
$('#post-box').fadeOut()
|
||||
$("#post-box").removeClass("appear")
|
||||
$("#emoji").addClass("hide")
|
||||
}
|
||||
//最小化
|
||||
function mini() {
|
||||
@@ -28,43 +17,46 @@ function mini() {
|
||||
}
|
||||
//最小化時に展開
|
||||
function show() {
|
||||
$("#post-box").removeClass("hidenbox");
|
||||
$("#post-box").fadeIn();
|
||||
$("#menu-btn").fadeOut();
|
||||
}
|
||||
//横幅
|
||||
function zoomBox() {
|
||||
if ($("#post-box").hasClass("bigbox")) {
|
||||
$("#post-box").css('width', '350px');
|
||||
$("#post-box").removeClass("bigbox")
|
||||
} else {
|
||||
$("#post-box").css('width', '50vw');
|
||||
$("#post-box").addClass("bigbox")
|
||||
$("#post-box").addClass("appear")
|
||||
$("#textarea").focus();
|
||||
console.log("show"+localStorage.getItem("postbox-left"));
|
||||
var left=localStorage.getItem("postbox-left");
|
||||
if(left>$('body').width()-$('#post-box').width()){
|
||||
left=$('body').width()-$('#post-box').width();
|
||||
}else if(left<0){
|
||||
left=0;
|
||||
}
|
||||
}
|
||||
//サイドバー開閉
|
||||
function xpand() {
|
||||
if ($("#sidebar").hasClass("xed")) {
|
||||
$(".side-label").show();
|
||||
$("#sidebar").css('width', '75px');
|
||||
$("#post-box").css('right', '78px');
|
||||
$("#sidebar").css('min-width', '75px');
|
||||
$("#sidebar .big-menu i").addClass('big-icon');
|
||||
$("#sidebar").removeClass("xed");
|
||||
$("#x-btn").text("keyboard_arrow_right");
|
||||
localStorage.removeItem("xed");
|
||||
} else {
|
||||
$("#sidebar").css('width', '24px');
|
||||
$("#sidebar").css('min-width', '24px');
|
||||
$("#post-box").css('right', '27px');
|
||||
$("#sidebar").addClass("xed");
|
||||
$("#sidebar .big-menu i").removeClass('big-icon');
|
||||
$(".side-label").hide();
|
||||
$("#x-btn").text("keyboard_arrow_left");
|
||||
localStorage.setItem("xed","true");
|
||||
var top=localStorage.getItem("postbox-top");
|
||||
if(top>$('body').height()-$('#post-box').height()){
|
||||
top=$('body').height()-$('#post-box').height();
|
||||
}else if(top<0){
|
||||
top=0;
|
||||
}
|
||||
$('#post-box').css("left",left+"px")
|
||||
$('#post-box').css("top",top+"px")
|
||||
$('#post-box').fadeIn();
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$( "#post-box" ).draggable({handle: "#post-bar",
|
||||
stop: function() {
|
||||
var left=$('#post-box').offset().left;
|
||||
if(left>$('body').width()-$('#post-box').width()){
|
||||
left=$('body').width()-$('#post-box').width();
|
||||
}else if(left<0){
|
||||
left=0;
|
||||
}
|
||||
var top=$('#post-box').offset().top;
|
||||
if(top>$('body').height()-$('#post-box').height()){
|
||||
top=$('body').height()-$('#post-box').height();
|
||||
}else if(top<0){
|
||||
top=0;
|
||||
}
|
||||
localStorage.setItem("postbox-left",left);
|
||||
localStorage.setItem("postbox-top",top);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//コード受信
|
||||
if(location.search){
|
||||
@@ -79,4 +71,28 @@ if(location.search){
|
||||
$("body").removeClass("mini-post");
|
||||
$(".mini-btn").text("expand_less");
|
||||
}
|
||||
}
|
||||
}
|
||||
$('#posttgl').click(function(e) {
|
||||
if(!$('#post-box').hasClass("appear")){
|
||||
show();
|
||||
}else{
|
||||
hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#timeline-container,#group").click(function(e) {
|
||||
|
||||
if(localStorage.getItem("box")!="absolute"){
|
||||
if($('#post-box').hasClass("appear") && !localStorage.getItem("nohide")){
|
||||
hide();
|
||||
}
|
||||
}
|
||||
localStorage.removeItem("nohide")
|
||||
});
|
||||
$('#textarea,#cw-text').focusout(function(e) {
|
||||
localStorage.setItem("nohide",true)
|
||||
var countup = function(){
|
||||
localStorage.removeItem("nohide")
|
||||
}
|
||||
//setTimeout(remove, 100);
|
||||
});
|
||||
@@ -10,7 +10,7 @@ function scrollck() {
|
||||
$(".tl-box").each(function(i, elem) {
|
||||
var tlid = $(this).attr('tlid');
|
||||
//一番上ならためていた新しいトゥートを表示
|
||||
if ($(this).scrollTop() == 0) {
|
||||
if ($(this).scrollTop() === 0) {
|
||||
var pool = localStorage.getItem("pool_" + tlid);
|
||||
if (pool) {
|
||||
$("#timeline_" + tlid).prepend(pool);
|
||||
@@ -18,8 +18,8 @@ function scrollck() {
|
||||
localStorage.removeItem("pool_" + tlid);
|
||||
}
|
||||
//自動リフレッシュ
|
||||
if( $("#timeline_" + tlid+" .cvo").length > 100 ){
|
||||
for(var i=100;i<$("#timeline_" + tlid +" .cvo").length;i++){
|
||||
if( $("#timeline_" + tlid+" .cvo").length > 30 ){
|
||||
for(var i=30;i<$("#timeline_" + tlid +" .cvo").length;i++){
|
||||
$("#timeline_" + tlid +" .cvo").eq(i).remove();
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ function scrollck() {
|
||||
var scrt = $(this).find(".tl").height() - $(window).height();
|
||||
var scr = $(this).scrollTop();
|
||||
if (scr > scrt) {
|
||||
console.log("kicked");
|
||||
moreload('', tlid);
|
||||
}
|
||||
});
|
||||
@@ -40,6 +41,8 @@ function goTop(id){
|
||||
$("#timeline_box_"+id+"_box .tl-box").animate({scrollTop:0});
|
||||
}
|
||||
function goColumn(key){
|
||||
$("#sort-box").addClass("hide");
|
||||
$("#sort-box").removeClass("show");
|
||||
if($('[tlid='+key+']').length){
|
||||
console.log($('[tlid='+key+']').offset().left);
|
||||
$("#timeline-container").animate({scrollLeft:$("#timeline-container").scrollLeft()+$('[tlid='+key+']').offset().left});
|
||||
|
||||
@@ -1,295 +1,139 @@
|
||||
//設定(setting.html)で読む
|
||||
var envView = new Vue({
|
||||
el: '#envView',
|
||||
data: {config:envConstruction},
|
||||
methods: {
|
||||
complete: function (i,val) {
|
||||
var ls=envView.config[i].storage;
|
||||
Materialize.toast("Complete", 3000);
|
||||
if(!val){
|
||||
var id=envView.config[i].id;
|
||||
var val=$("#"+id).val()
|
||||
}
|
||||
localStorage.setItem(ls,val)
|
||||
if(ls=="ha"){
|
||||
hardwareAcceleration(val)
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
});
|
||||
var tlView = new Vue({
|
||||
el: '#tlView',
|
||||
data: {config:tlConstruction},
|
||||
methods: {
|
||||
complete: function (i,val) {
|
||||
var ls=tlView.config[i].storage;
|
||||
if(!val){
|
||||
var id=tlView.config[i].id;
|
||||
var val=$("#"+id).val()
|
||||
}
|
||||
Materialize.toast("Complete", 3000);
|
||||
localStorage.setItem(ls,val)
|
||||
return true
|
||||
}
|
||||
}
|
||||
});
|
||||
var postView = new Vue({
|
||||
el: '#postView',
|
||||
data: {config:postConstruction,kirishima:localStorage.getItem('kirishima')},
|
||||
methods: {
|
||||
complete: function (i,val) {
|
||||
var ls=postView.config[i].storage;
|
||||
Materialize.toast("Complete", 3000);
|
||||
if(!val){
|
||||
var id=postView.config[i].id;
|
||||
var val=$("#"+id).val()
|
||||
}
|
||||
localStorage.setItem(ls,val)
|
||||
return true
|
||||
}
|
||||
}
|
||||
});
|
||||
//設定ボタン押した。
|
||||
function settings() {
|
||||
var dd = $("[name=time]:checked").val();
|
||||
var dt = $("[for="+dd+"]").text();
|
||||
if (dd != localStorage.getItem("datetype")) {
|
||||
Materialize.toast("時間設定を" + dt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("datetype", dd);
|
||||
|
||||
var cd = $("[name=theme]:checked").val();
|
||||
var ct = $("[for="+cd+"]").text();
|
||||
if (cd != localStorage.getItem("theme")) {
|
||||
Materialize.toast("テーマ設定を" + ct + "に設定しました。", 3000);
|
||||
var ct = $("[for="+cd+"]").html();
|
||||
if(cd=="custom" && !$("#custom-sel-sel").val()){
|
||||
var theme = localStorage.getItem("theme");
|
||||
if (!theme) {
|
||||
var theme = "white";
|
||||
}
|
||||
$("#" + theme).prop("checked", true);
|
||||
}else{
|
||||
if (cd != localStorage.getItem("theme")) {
|
||||
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
|
||||
}
|
||||
//テーマはこの場で設定
|
||||
themes(cd);
|
||||
localStorage.setItem("theme", cd);
|
||||
}
|
||||
//テーマはこの場で設定
|
||||
themes(cd);
|
||||
localStorage.setItem("theme", cd);
|
||||
|
||||
var nd = $("[name=nsfw]:checked").val();
|
||||
var nt = $("[for=n_"+nd+"]").text();
|
||||
if (nd != localStorage.getItem("nsfw")) {
|
||||
Materialize.toast("画像表示設定を" + nt + "に設定しました。", 3000);
|
||||
var fontd = $("#font").val();
|
||||
if(fontd){
|
||||
if (fontd != localStorage.getItem("font")) {
|
||||
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,fontd), 3000);
|
||||
}
|
||||
localStorage.setItem("font", fontd);
|
||||
themes();
|
||||
}else{
|
||||
if(localStorage.getItem("font")){
|
||||
localStorage.removeItem("font");
|
||||
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,lang.lang_setting_default), 3000);
|
||||
themes();
|
||||
}
|
||||
}
|
||||
localStorage.setItem("nsfw", nd);
|
||||
|
||||
var cwd = $("[name=cw]:checked").val();
|
||||
var cwt = $("[for=c_"+cwd+"]").text();
|
||||
if (cwd != localStorage.getItem("cw")) {
|
||||
Materialize.toast("テキスト表示設定を" + cwt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("cw", cwd);
|
||||
|
||||
var cwtd = $("#cw-text").val();
|
||||
if (cwtd != localStorage.getItem("cw-text")) {
|
||||
Materialize.toast("デフォルトの警告文を「" + cwtd + "」に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("cw-text", cwtd);
|
||||
|
||||
var visd = $("[name=vis]:checked").val();
|
||||
var vist = $("[for="+visd+"]").text();
|
||||
if (visd != localStorage.getItem("vis")) {
|
||||
Materialize.toast("デフォルトの公開設定を" + vist + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("vis", visd);
|
||||
|
||||
var popd = $("#popup").val();
|
||||
if (popd > 0 && popd != localStorage.getItem("popup")) {
|
||||
Materialize.toast("ポップアップお知らせを" + popd + "秒に設定しました。", 3000);
|
||||
} else if (popd != localStorage.getItem("popup")) {
|
||||
Materialize.toast("ポップアップお知らせをオフに設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("popup", popd);
|
||||
|
||||
var boxd = $("[name=box]:checked").val();
|
||||
var boxt = $("[for=b_"+boxd+"]").text();
|
||||
if (boxd != localStorage.getItem("box")) {
|
||||
Materialize.toast("デフォルトでのボックスの挙動を" + boxt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("box", boxd);
|
||||
|
||||
var gifd = $("[name=gif]:checked").val();
|
||||
var gift = $("[for=g_"+gifd+"]").text();
|
||||
if (gifd != localStorage.getItem("gif")) {
|
||||
Materialize.toast("アイコンアニメーション再生を" + gift + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("gif", gifd);
|
||||
|
||||
var sentd = $("#sentence").val();
|
||||
var ltrd = $("#letters").val();
|
||||
if (sentd != localStorage.getItem("sentence") || ltrd != localStorage.getItem("letters")) {
|
||||
Materialize.toast(sentd + "行以上または"+ltrd+"文字以上でテキストを隠します。", 3000);
|
||||
}
|
||||
localStorage.setItem("sentence", sentd);
|
||||
localStorage.setItem("letters", ltrd);
|
||||
|
||||
var widthd = $("#width").val();
|
||||
if (widthd != localStorage.getItem("width")) {
|
||||
Materialize.toast("横幅最低を" + widthd + "pxに設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("width", widthd);
|
||||
|
||||
var imgd = $("[name=img]:checked").val();
|
||||
var imgt = $("[for=i_"+imgd+"]").text();
|
||||
if (imgd != localStorage.getItem("img")) {
|
||||
Materialize.toast("画像投稿後の設定を「" + imgt + "」に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("img", imgd);
|
||||
|
||||
var sized = $("#size").val();
|
||||
if (sized != localStorage.getItem("size")) {
|
||||
Materialize.toast("フォントサイズを" + sized + "pxに設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("size", sized);
|
||||
|
||||
var heid = $("#img-height").val();
|
||||
if (heid != localStorage.getItem("img-height")) {
|
||||
Materialize.toast("画像高さを" + heid + "pxに設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("img-height", heid);
|
||||
|
||||
var tagd = $("[name=tag]:checked").val();
|
||||
var tagt = $("[for=t_"+tagd+"]").text();
|
||||
if (tagd != localStorage.getItem("tag-range")) {
|
||||
Materialize.toast("タグの取得範囲を「" + tagt + "」に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("tag-range", tagd);
|
||||
|
||||
var uld = $("[name=ul]:checked").val();
|
||||
var ult = $("[for=ul_"+uld+"]").text();
|
||||
if (uld != localStorage.getItem("locale")) {
|
||||
Materialize.toast("独自ロケール設定を" + ult + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("locale", uld);
|
||||
|
||||
var ntd = $("[name=notf]:checked").val();
|
||||
var ntt = $("[for=ntf_"+ntd+"]").text();
|
||||
if (ntd != localStorage.getItem("nativenotf")) {
|
||||
Materialize.toast("ネイティブ通知を" + ntt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("nativenotf", ntd);
|
||||
|
||||
var qtd = $("[name=quote]:checked").val();
|
||||
var qtt = $("[for=q_"+qtd+"]").text();
|
||||
if (qtd != localStorage.getItem("quote")) {
|
||||
Materialize.toast("引用形式を" + qtt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("quote", qtd);
|
||||
|
||||
var viad = $("[name=via]:checked").val();
|
||||
var viat = $("[for=via_"+viad+"]").text();
|
||||
if (viad != localStorage.getItem("viashow")) {
|
||||
Materialize.toast("via表示を" + viat + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("viashow", viad);
|
||||
|
||||
var movd = $("[name=mov]:checked").val();
|
||||
var movt = $("[for=mov_"+movd+"]").text();
|
||||
if (movd != localStorage.getItem("mouseover")) {
|
||||
Materialize.toast("マウスオーバー・ヒディングを" + movt + "に設定しました。", 3000);
|
||||
}
|
||||
localStorage.setItem("mouseover", movd);
|
||||
|
||||
}
|
||||
|
||||
//読み込み時の設定ロード
|
||||
function load() {
|
||||
if(localStorage.getItem("kirishima")){
|
||||
var max=envView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=envView.config[i].storage;
|
||||
if(localStorage.getItem(ls)){
|
||||
envView.config[i].setValue=localStorage.getItem(ls)
|
||||
}
|
||||
}
|
||||
var max=tlView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=tlView.config[i].storage;
|
||||
if(localStorage.getItem(ls)){
|
||||
tlView.config[i].setValue=localStorage.getItem(ls)
|
||||
}
|
||||
}
|
||||
var max=postView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=postView.config[i].storage;
|
||||
if(localStorage.getItem(ls)){
|
||||
postView.config[i].setValue=localStorage.getItem(ls)
|
||||
}
|
||||
}
|
||||
if(localStorage.getItem("imas")){
|
||||
$(".imas").removeClass("hide");
|
||||
}
|
||||
var prof = localStorage.getItem("prof");
|
||||
$("#my-prof").attr("src", prof);
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
if (!datetype) {
|
||||
var datetype = "absolute";
|
||||
if(localStorage.getItem("kirishima")){
|
||||
$(".kirishima").removeClass("hide");
|
||||
}
|
||||
$("#" + datetype).prop("checked", true);
|
||||
|
||||
var theme = localStorage.getItem("theme");
|
||||
if (!theme) {
|
||||
var theme = "white";
|
||||
}
|
||||
$("#" + theme).prop("checked", true);
|
||||
|
||||
var nsfw = localStorage.getItem("nsfw");
|
||||
if (!nsfw) {
|
||||
var nsfw = "yes";
|
||||
var font = localStorage.getItem("font");
|
||||
if (!font) {
|
||||
var font = "";
|
||||
}
|
||||
$("#n_" + nsfw).prop("checked", true);
|
||||
|
||||
var cw = localStorage.getItem("cw");
|
||||
if (!cw) {
|
||||
var cw = "yes";
|
||||
}
|
||||
$("#c_" + cw).prop("checked", true);
|
||||
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
var popup = "0";
|
||||
}
|
||||
$("#popup").val(popup);
|
||||
|
||||
var box = localStorage.getItem("box");
|
||||
if (!box) {
|
||||
var box = "no";
|
||||
}
|
||||
$("#b_" + box).prop("checked", true);
|
||||
|
||||
var gif = localStorage.getItem("gif");
|
||||
if (!gif) {
|
||||
var gif = "yes";
|
||||
}
|
||||
$("#g_" + gif).prop("checked", true);
|
||||
|
||||
var sent = localStorage.getItem("sentence");
|
||||
if (!sent) {
|
||||
var sent = "500";
|
||||
}
|
||||
$("#sentence").val(sent);
|
||||
var ltrs = localStorage.getItem("letters");
|
||||
if (!ltrs) {
|
||||
var ltrs = "500";
|
||||
}
|
||||
$("#letters").val(ltrs);
|
||||
|
||||
var width = localStorage.getItem("width");
|
||||
if (!width) {
|
||||
var width = "300";
|
||||
}
|
||||
$("#width").val(width);
|
||||
|
||||
var cwt = localStorage.getItem("cw-text");
|
||||
if (!cwt) {
|
||||
var cwt = "";
|
||||
}
|
||||
$("#cw-text").val(cwt);
|
||||
|
||||
var vis = localStorage.getItem("vis");
|
||||
if (!vis) {
|
||||
var vis = "public";
|
||||
}
|
||||
$("#" + vis).prop("checked", true);
|
||||
|
||||
var img = localStorage.getItem("img");
|
||||
if (!img) {
|
||||
var img = "no-act";
|
||||
}
|
||||
$("#i_" + img).prop("checked", true);
|
||||
|
||||
var size = localStorage.getItem("size");
|
||||
if (!size) {
|
||||
var size = "13";
|
||||
}
|
||||
$("#size").val(size);
|
||||
|
||||
var imh = localStorage.getItem("img-height");
|
||||
if (!imh) {
|
||||
var imh = "200";
|
||||
}
|
||||
$("#img-height").val(imh);
|
||||
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if (!tag) {
|
||||
var tag = "all";
|
||||
}
|
||||
$("#t_" + tag).prop("checked", true);
|
||||
|
||||
var uld = localStorage.getItem("locale");
|
||||
if (!uld) {
|
||||
var uld = "yes";
|
||||
}
|
||||
$("#ul_" + uld).prop("checked", true);
|
||||
|
||||
var nnd = localStorage.getItem("nativenotf");
|
||||
if (!nnd) {
|
||||
var nnd = "yes";
|
||||
}
|
||||
$("#ntf_" + nnd).prop("checked", true);
|
||||
|
||||
var qt = localStorage.getItem("quote");
|
||||
if (!qt) {
|
||||
var qt = "simple";
|
||||
}
|
||||
$("#q_" + qt).prop("checked", true);
|
||||
|
||||
var viat = localStorage.getItem("viashow");
|
||||
if (!viat) {
|
||||
var viat = "hide";
|
||||
}
|
||||
$("#via_" + viat).prop("checked", true);
|
||||
|
||||
var movt = localStorage.getItem("mouseover");
|
||||
if (!movt) {
|
||||
var movt = "no";
|
||||
}
|
||||
$("#mov_" + movt).prop("checked", true);
|
||||
$("#font").val(font);
|
||||
}
|
||||
//最初に読む
|
||||
load();
|
||||
climute();
|
||||
wordmute();
|
||||
wordemp();
|
||||
checkSpotify();
|
||||
|
||||
function climute(){
|
||||
//クライアントミュート
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
if(!obj){
|
||||
$("#mute-cli").html("ミュートしているクライアントはありません。");
|
||||
$("#mute-cli").html(lang.lang_setting_nomuting);
|
||||
}else{
|
||||
if(!obj[0]){
|
||||
$("#mute-cli").html("ミュートしているクライアントはありません。");
|
||||
$("#mute-cli").html(lang.lang_setting_nomuting);
|
||||
return;
|
||||
}
|
||||
var templete;
|
||||
@@ -299,7 +143,7 @@ function climute(){
|
||||
templete = '<div class="acct" id="acct_' + key + '">' + list +
|
||||
'.' +
|
||||
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
|
||||
key + ')">削除</button><br></div>';
|
||||
key + ')">'+lang.lang_del+'</button><br></div>';
|
||||
$("#mute-cli").append(templete);
|
||||
});
|
||||
}
|
||||
@@ -337,4 +181,470 @@ function wordempSave(){
|
||||
var word=$('#wordemp').material_chip('data');
|
||||
var json = JSON.stringify(word);
|
||||
localStorage.setItem("word_emp", json);
|
||||
}
|
||||
}
|
||||
function notftest(){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',
|
||||
icon: localStorage.getItem("prof_0")
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk'+lang.lang_setting_notftest, options);
|
||||
}else{
|
||||
ipc.send('native-notf', ['TheDesk'+lang.lang_setting_notftest,lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',localStorage.getItem('prof_0'),"",""]);
|
||||
}
|
||||
|
||||
}
|
||||
function oks(no){
|
||||
var txt=$("#oks-"+no).val();
|
||||
localStorage.setItem("oks-"+no, txt);
|
||||
Materialize.toast(lang.lang_setting_ksref, 3000);
|
||||
}
|
||||
function oksload(){
|
||||
if(localStorage.getItem("oks-1")){$("#oks-1").val(localStorage.getItem("oks-1"))}
|
||||
if(localStorage.getItem("oks-2")){$("#oks-2").val(localStorage.getItem("oks-2"))}
|
||||
if(localStorage.getItem("oks-3")){$("#oks-3").val(localStorage.getItem("oks-3"))}
|
||||
}
|
||||
function changelang(lang){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('lang',lang);
|
||||
ipc.on('langres', function (event, arg) {
|
||||
location.href="../"+lang+"/setting.html"
|
||||
});
|
||||
}
|
||||
function exportSettings(){
|
||||
if(!confirm(lang.lang_setting_exportwarn)){
|
||||
return false;
|
||||
}
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var ipc = electron.ipcRenderer;
|
||||
dialog.showSaveDialog(null, {
|
||||
title: 'Export',
|
||||
properties: ['openFile', 'createDirectory'],
|
||||
defaultPath: "export.thedeskconfigv2"
|
||||
}, (savedFiles) => {
|
||||
console.log(savedFiles);
|
||||
if(!savedFiles){
|
||||
return false;
|
||||
}
|
||||
var exp={};
|
||||
//Accounts
|
||||
var multi = localStorage.getItem("multi");
|
||||
var acct = JSON.parse(multi);
|
||||
exp.accts=acct;
|
||||
//Columns
|
||||
var multi = localStorage.getItem("column");
|
||||
var column = JSON.parse(multi);
|
||||
exp.columns=column;
|
||||
//Themes
|
||||
var config={};
|
||||
config.theme=localStorage.getItem("theme");
|
||||
//Other configs
|
||||
var max=envView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=envView.config[i].storage;
|
||||
config[ls]=localStorage.getItem(ls)
|
||||
}
|
||||
var max=tlView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=tlView.config[i].storage;
|
||||
config[ls]=localStorage.getItem(ls)
|
||||
}
|
||||
var max=postView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=postView.config[i].storage;
|
||||
config[ls]=localStorage.getItem(ls)
|
||||
}
|
||||
//Font
|
||||
config.font=localStorage.getItem("font");
|
||||
exp.config=config;
|
||||
//keysc
|
||||
exp.ksc=[
|
||||
localStorage.getItem("oks-1"),
|
||||
localStorage.getItem("oks-2"),
|
||||
localStorage.getItem("oks-3")
|
||||
];
|
||||
//climu
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var climu = JSON.parse(cli);
|
||||
exp.clientMute=climu;
|
||||
//wordmu
|
||||
var wdm = localStorage.getItem("word_mute");
|
||||
var wordmu = JSON.parse(wdm);
|
||||
exp.wordMute=wordmu;
|
||||
//spotify
|
||||
exp.spotifyArtwork=localStorage.getItem("artwork")
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(content || content=="" || content=="null"){
|
||||
exp.spotifyTemplete=content;
|
||||
}else{
|
||||
exp.spotifyTemplete=null;
|
||||
}
|
||||
//tags
|
||||
var tagarr = localStorage.getItem("tag");
|
||||
var favtag = JSON.parse(tagarr);
|
||||
exp.favoriteTags=favtag;
|
||||
console.log(exp);
|
||||
ipc.send('export', [savedFiles,JSON.stringify(exp)]);
|
||||
alert("Done.")
|
||||
//cards
|
||||
//lang
|
||||
});
|
||||
}
|
||||
function importSettings(){
|
||||
if(!confirm(lang.lang_setting_importwarn)){
|
||||
return false;
|
||||
}
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var ipc = electron.ipcRenderer;
|
||||
dialog.showOpenDialog(null, {
|
||||
title: 'Import',
|
||||
properties: ['openFile'],
|
||||
filters: [
|
||||
{name: 'TheDesk Config', extensions: ['thedeskconfig','thedeskconfigv2']},
|
||||
]
|
||||
}, (fileNames) => {
|
||||
console.log(fileNames);
|
||||
if(!fileNames){
|
||||
return false;
|
||||
}
|
||||
ipc.send('import', fileNames[0]);
|
||||
ipc.on('config', function (event, arg) {
|
||||
var obj = JSON.parse(arg);
|
||||
if(obj){
|
||||
localStorage.clear();
|
||||
localStorage.setItem("multi",JSON.stringify(obj.accts));
|
||||
for(var key=0;key<obj.accts.length;key++){
|
||||
var acct=obj.accts[key];
|
||||
localStorage.setItem("name_" + key, acct.name);
|
||||
localStorage.setItem("user_" + key, acct.user);
|
||||
localStorage.setItem("user-id_" + key, acct.id);
|
||||
localStorage.setItem("prof_" + key, acct.prof);
|
||||
localStorage.setItem("domain_" + key, acct.domain);
|
||||
localStorage.setItem("acct_"+ key + "_at", acct.at);
|
||||
}
|
||||
localStorage.setItem("column",JSON.stringify(obj.columns));
|
||||
if(obj.config){
|
||||
//Version 2
|
||||
var max=envView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=envView.config[i].storage;
|
||||
if(obj.config[ls]){
|
||||
localStorage.setItem(ls,obj.config[ls])
|
||||
}
|
||||
}
|
||||
var max=tlView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=tlView.config[i].storage;
|
||||
if(obj.config[ls]){
|
||||
localStorage.setItem(ls,obj.config[ls])
|
||||
}
|
||||
}
|
||||
var max=postView.config.length;
|
||||
for(var i=0;i<max;i++){
|
||||
var ls=postView.config[i].storage;
|
||||
if(obj.config[ls]){
|
||||
localStorage.setItem(ls,obj.config[ls])
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//Version 1
|
||||
localStorage.setItem("theme",obj.theme);
|
||||
if(obj.width){
|
||||
console.log(obj.width)
|
||||
localStorage.setItem("width",obj.width);
|
||||
}
|
||||
if(obj.font){
|
||||
localStorage.setItem("font",obj.font);
|
||||
}
|
||||
if(obj.size){
|
||||
localStorage.setItem("size",obj.size);
|
||||
}
|
||||
themes(obj.theme);
|
||||
if(obj.imgheight){
|
||||
localStorage.setItem("img-height",obj.imgheight);
|
||||
}
|
||||
localStorage.setItem("mainuse",obj.mainuse);
|
||||
if(obj.cw){
|
||||
localStorage.setItem("cwtext",obj.cw);
|
||||
}
|
||||
localStorage.setItem("vis",obj.vis);
|
||||
//End
|
||||
}
|
||||
if(obj.ksc[0]){
|
||||
localStorage.setItem("oks-1",obj.ksc[0]);
|
||||
}
|
||||
if(obj.ksc[1]){
|
||||
localStorage.setItem("oks-2",obj.ksc[1]);
|
||||
}
|
||||
if(obj.ksc[2]){
|
||||
localStorage.setItem("oks-3",obj.ksc[2]);
|
||||
}
|
||||
if(obj.clientMute){
|
||||
localStorage.setItem("client_mute",JSON.stringify(obj.clientMute));
|
||||
}
|
||||
if(obj.wordMute){
|
||||
localStorage.setItem("word_mute",JSON.stringify(obj.wordMute));
|
||||
}
|
||||
if(obj.favoriteTags){
|
||||
localStorage.setItem("tag",JSON.stringify(obj.favoriteTags));
|
||||
}
|
||||
|
||||
localStorage.setItem("np-temp",obj.spotifyTemplete);
|
||||
for(var i=0;i<obj.columns.length;i++){
|
||||
localStorage.setItem("card_" + i,"true");
|
||||
localStorage.removeItem("catch_" + i);
|
||||
}
|
||||
location.href="language.html";
|
||||
}else{
|
||||
alert("Error.")
|
||||
}
|
||||
})
|
||||
//cards
|
||||
//lang
|
||||
});
|
||||
}
|
||||
function savefolder(){
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
dialog.showOpenDialog(null, {
|
||||
title: 'Save folder',
|
||||
properties: ['openDirectory'],
|
||||
}, (fileNames) => {
|
||||
localStorage.setItem("savefolder",fileNames[0]);
|
||||
});
|
||||
}
|
||||
|
||||
function font(){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('fonts', []);
|
||||
ipc.on('font-list', function (event, arg) {
|
||||
$("#fonts").removeClass("hide");
|
||||
for( var i=0; i<arg.length; i++) {
|
||||
var font=arg[i];
|
||||
$("#fonts").append('<div class="font pointer" style="font-family:'+font.family+'" onclick="insertFont(\''+font.family+'\')">'+font.family+"</div>")
|
||||
}
|
||||
});
|
||||
}
|
||||
function insertFont(name){
|
||||
$("#font").val(name);
|
||||
}
|
||||
$(".color-picker").each(function(i, elem) {
|
||||
pickerDefine(i,"fff");
|
||||
});
|
||||
function pickerDefine(i,color){
|
||||
var pickr = new Pickr({
|
||||
el: '#color-picker'+i,
|
||||
default: color,
|
||||
showAlways: true,
|
||||
appendToBody: true,
|
||||
closeWithKey: 'Escape',
|
||||
comparison: false,
|
||||
components: {
|
||||
preview: true, // Left side color comparison
|
||||
opacity: false, // Opacity slider
|
||||
hue: true, // Hue slider
|
||||
interaction: {
|
||||
rgba: false, // rgba option (red green blue and alpha)
|
||||
input: true, // input / output element
|
||||
}
|
||||
},
|
||||
strings: {
|
||||
save: 'Save', // Default for save button
|
||||
clear: 'Clear' // Default for clear button
|
||||
}
|
||||
});
|
||||
pickr.on('change', (...args) => {
|
||||
var rgb='rgb('+args[0].toRGBA()[0]+','+args[0].toRGBA()[1]+','+args[0].toRGBA()[2]+')';
|
||||
$("#color-picker"+i+"_value").val(rgb)
|
||||
});
|
||||
}
|
||||
function customComp(){
|
||||
var nameC=$("#custom_name").val();
|
||||
if(!nameC){return false;}
|
||||
var descC=$("#custom_desc").val();
|
||||
var primaryC=$("#color-picker0_value").val();
|
||||
if(!primaryC){primaryC="rgb(255,255,255)"}
|
||||
var secondaryC=$("#color-picker1_value").val();
|
||||
if(!secondaryC){secondaryC="rgb(255,255,255)"}
|
||||
var textC=$("#color-picker2_value").val();
|
||||
if(!textC){textC="rgb(255,255,255)"}
|
||||
var accentC=$("#color-picker3_value").val();
|
||||
if(!accentC){accentC="rgb(255,255,255)"}
|
||||
var multi = localStorage.getItem("multi");
|
||||
var my=JSON.parse(multi)[0].name;
|
||||
var id=$("#custom-edit-sel").val();
|
||||
if(id=="add_new"){
|
||||
id=makeCID();
|
||||
}
|
||||
var json={
|
||||
"name": nameC,
|
||||
"author": my,
|
||||
"desc": descC,
|
||||
"base": $("[name=direction]:checked").val(),
|
||||
"vars": {
|
||||
"primary": primaryC,
|
||||
"secondary": secondaryC,
|
||||
"text": textC
|
||||
},
|
||||
"props": {
|
||||
"TheDeskAccent": accentC
|
||||
},
|
||||
"id": id
|
||||
}
|
||||
$("#custom_json").val(JSON.stringify(json));
|
||||
themes();
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
ipc.send('theme-json-create', JSON.stringify(json));
|
||||
}
|
||||
function deleteIt(){
|
||||
var id=$("#custom-sel-sel").val();
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
ipc.on('theme-json-delete-complete', function (event, args) {
|
||||
ctLoad()
|
||||
});
|
||||
ipc.send('theme-json-delete', id);
|
||||
}
|
||||
function ctLoad(){
|
||||
ipc.send('theme-json-list', "");
|
||||
ipc.on('theme-json-list-response', function (event, args) {
|
||||
console.log(args);
|
||||
var templete="";
|
||||
Object.keys(args).forEach(function(key) {
|
||||
var theme = args[key];
|
||||
var themeid=theme.id
|
||||
templete = templete+'<option value="'+themeid+'">' + theme.name +'</option>';
|
||||
});
|
||||
if(args[0]){
|
||||
localStorage.setItem("customtheme-id",args[0].id)
|
||||
}
|
||||
$("#custom-sel-sel").html(templete);
|
||||
templete='<option value="add_new">'+$("#edit-selector").attr("data-add")+'</option>'+templete;
|
||||
$("#custom-edit-sel").html(templete);
|
||||
$('select').material_select('update');
|
||||
});
|
||||
}
|
||||
function customSel(){
|
||||
var id=$("#custom-sel-sel").val();
|
||||
localStorage.setItem("customtheme-id",id)
|
||||
}
|
||||
function custom(){
|
||||
var id=$("#custom-edit-sel").val();
|
||||
if(id=="add_new"){
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
$("#delTheme").addClass("disabled")
|
||||
}else{
|
||||
$("#delTheme").removeClass("disabled")
|
||||
ipc.send('theme-json-request', id);
|
||||
ipc.on('theme-json-response', function (event, args) {
|
||||
console.log(args);
|
||||
$("#custom_name").val(args.name);
|
||||
$("#custom_desc").val(args.desc);
|
||||
$("#"+args.base).prop("checked", true);
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
pickerDefine(0,rgbToHex(args.vars.primary))
|
||||
$("#color-picker0_value").val(args.vars.primary);
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
pickerDefine(1,rgbToHex(args.vars.secondary))
|
||||
$("#color-picker1_value").val(args.vars.secondary);
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker2_value").val(args.vars.text);
|
||||
pickerDefine(2,rgbToHex(args.vars.text))
|
||||
if(args.props){
|
||||
if(args.props.TheDeskAccent){
|
||||
var accent=args.props.TheDeskAccent;
|
||||
}else{
|
||||
var accent=args.vars.secondary;
|
||||
}
|
||||
}else{
|
||||
var accent=args.vars.secondary;
|
||||
}
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
pickerDefine(3,rgbToHex(accent))
|
||||
$("#custom_json").val(JSON.stringify(args));
|
||||
});
|
||||
}
|
||||
}
|
||||
function customImp(){
|
||||
var json=$("#custom_import").val();
|
||||
if(JSON5.parse(json)){
|
||||
ipc.send('theme-json-create', json);
|
||||
}else{
|
||||
alert("Error")
|
||||
}
|
||||
}
|
||||
function hardwareAcceleration(had){
|
||||
console.log("ha");
|
||||
ipc.send('ha', had);
|
||||
}
|
||||
|
||||
ipc.on('theme-json-create-complete', function (event, args) {
|
||||
$("#custom_import").val("");
|
||||
ctLoad()
|
||||
});
|
||||
window.onload = function() {
|
||||
//最初に読む
|
||||
load();
|
||||
climute();
|
||||
wordmute();
|
||||
wordemp();
|
||||
checkSpotify();
|
||||
voiceSettingLoad();
|
||||
oksload();
|
||||
npprovider();
|
||||
ctLoad()
|
||||
};
|
||||
|
||||
953
app/js/ui/settings.old.js
Normal file
953
app/js/ui/settings.old.js
Normal file
@@ -0,0 +1,953 @@
|
||||
//設定(setting.html)で読む
|
||||
var envView = new Vue({
|
||||
el: '#env-view',
|
||||
data: {config:envConstruction,value:envValue},
|
||||
method: {
|
||||
settings: function (index) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//設定ボタン押した。
|
||||
function settings() {
|
||||
var dd = $("[name=time]:checked").val();
|
||||
var dt = $("[for="+dd+"]").text();
|
||||
if (dd != localStorage.getItem("datetype")) {
|
||||
Materialize.toast(lang.lang_setting_time.replace("{{set}}" ,dt), 3000);
|
||||
}
|
||||
localStorage.setItem("datetype", dd);
|
||||
|
||||
var cd = $("[name=theme]:checked").val();
|
||||
var ct = $("[for="+cd+"]").html();
|
||||
if(cd=="custom" && !$("#custom-sel-sel").val()){
|
||||
var theme = localStorage.getItem("theme");
|
||||
if (!theme) {
|
||||
var theme = "white";
|
||||
}
|
||||
$("#" + theme).prop("checked", true);
|
||||
}else{
|
||||
if (cd != localStorage.getItem("theme")) {
|
||||
Materialize.toast(lang.lang_setting_theme.replace("{{set}}" ,ct), 3000);
|
||||
}
|
||||
//テーマはこの場で設定
|
||||
themes(cd);
|
||||
localStorage.setItem("theme", cd);
|
||||
}
|
||||
|
||||
var nd = $("[name=nsfw]:checked").val();
|
||||
var nt = $("[for=n_"+nd+"]").text();
|
||||
if (nd != localStorage.getItem("nsfw")) {
|
||||
Materialize.toast(lang.lang_setting_nsfw.replace("{{set}}" ,nt), 3000);
|
||||
}
|
||||
localStorage.setItem("nsfw", nd);
|
||||
|
||||
var cwd = $("[name=cw]:checked").val();
|
||||
var cwt = $("[for=c_"+cwd+"]").text();
|
||||
if (cwd != localStorage.getItem("cw")) {
|
||||
Materialize.toast(lang.lang_setting_cw.replace("{{set}}" ,cwt), 3000);
|
||||
}
|
||||
localStorage.setItem("cw", cwd);
|
||||
|
||||
var cwtd = $("#cw-text").val();
|
||||
if (cwtd != localStorage.getItem("cw-text")) {
|
||||
Materialize.toast(lang.lang_setting_cwtext.replace("{{set}}" ,cwtd), 3000);
|
||||
}
|
||||
localStorage.setItem("cw-text", cwtd);
|
||||
|
||||
var cwsd = $("[name=cws]:checked").val();
|
||||
var cwst = $("[for=cws_"+cwsd+"]").text();
|
||||
if (cwsd != localStorage.getItem("always-cw")) {
|
||||
Materialize.toast(lang.lang_setting_cws.replace("{{set}}" ,cwst), 3000);
|
||||
}
|
||||
localStorage.setItem("always-cw", cwsd);
|
||||
|
||||
var rpd = $("[name=rp]:checked").val();
|
||||
var rpt = $("[for=c_"+cwd+"]").text();
|
||||
if (rpd != localStorage.getItem("replyct")) {
|
||||
Materialize.toast(lang.lang_setting_rp.replace("{{set}}" ,rpt), 3000);
|
||||
}
|
||||
localStorage.setItem("replyct", rpd);
|
||||
|
||||
var visd = $("[name=vis]:checked").val();
|
||||
var vist = $("[for="+visd+"]").text();
|
||||
if (visd != localStorage.getItem("vis")) {
|
||||
Materialize.toast(lang.lang_setting_vis.replace("{{set}}" ,vist), 3000);
|
||||
}
|
||||
localStorage.setItem("vis", visd);
|
||||
|
||||
var popd = $("#popup").val();
|
||||
if (popd > 0 && popd != localStorage.getItem("popup")) {
|
||||
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,popd+lang.lang_setting_s), 3000);
|
||||
} else if (popd != localStorage.getItem("popup")) {
|
||||
Materialize.toast(lang.lang_setting_popup.replace("{{set}}" ,lang.lang_setting_off), 3000);
|
||||
}
|
||||
localStorage.setItem("popup", popd);
|
||||
|
||||
var gifd = $("[name=gif]:checked").val();
|
||||
var gift = $("[for=g_"+gifd+"]").text();
|
||||
if (gifd != localStorage.getItem("gif")) {
|
||||
Materialize.toast(lang.lang_setting_gif.replace("{{set}}" ,gift), 3000);
|
||||
}
|
||||
localStorage.setItem("gif", gifd);
|
||||
|
||||
var sentd = $("#sentence").val();
|
||||
var ltrd = $("#letters").val();
|
||||
if (sentd != localStorage.getItem("sentence") || ltrd != localStorage.getItem("letters")) {
|
||||
Materialize.toast(lang.lang_setting_selt.replace("{{set1}}" ,sentd).replace("{{set2}}" ,ltrd), 3000);
|
||||
}
|
||||
localStorage.setItem("sentence", sentd);
|
||||
localStorage.setItem("letters", ltrd);
|
||||
|
||||
var csentd = $("#cw_sentence").val();
|
||||
var cltrd = $("#cw_letters").val();
|
||||
if (csentd != localStorage.getItem("cw_sentence") || cltrd != localStorage.getItem("cw_letters")) {
|
||||
Materialize.toast(lang.lang_setting_autocw.replace("{{set1}}" ,csentd).replace("{{set2}}" ,cltrd), 3000);
|
||||
}
|
||||
localStorage.setItem("cw_sentence", csentd);
|
||||
localStorage.setItem("cw_letters", cltrd);
|
||||
|
||||
var widthd = $("#width").val();
|
||||
if (widthd != localStorage.getItem("width")) {
|
||||
Materialize.toast(lang.lang_setting_width.replace("{{set}}" ,widthd), 3000);
|
||||
}
|
||||
localStorage.setItem("width", widthd);
|
||||
|
||||
var fwidthd = $("#fixwidth").val();
|
||||
if (fwidthd != localStorage.getItem("fixwidth")) {
|
||||
Materialize.toast(lang.lang_setting_fixwidth.replace("{{set}}" ,fwidthd), 3000);
|
||||
}
|
||||
localStorage.setItem("fixwidth", fwidthd);
|
||||
|
||||
var imgd = $("[name=img]:checked").val();
|
||||
var imgt = $("[for=i_"+imgd+"]").text();
|
||||
if (imgd != localStorage.getItem("img")) {
|
||||
Materialize.toast(lang.lang_setting_img.replace("{{set}}" ,imgt), 3000);
|
||||
}
|
||||
localStorage.setItem("img", imgd);
|
||||
|
||||
var fontd = $("#font").val();
|
||||
if(fontd){
|
||||
if (fontd != localStorage.getItem("font")) {
|
||||
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,fontd), 3000);
|
||||
}
|
||||
localStorage.setItem("font", fontd);
|
||||
themes();
|
||||
}else{
|
||||
if(localStorage.getItem("font")){
|
||||
localStorage.removeItem("font");
|
||||
Materialize.toast(lang.lang_setting_font.replace("{{set}}" ,lang.lang_setting_default), 3000);
|
||||
themes();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var sized = $("#size").val();
|
||||
if (sized != localStorage.getItem("size")) {
|
||||
Materialize.toast(lang.lang_setting_size.replace("{{set}}" ,sized), 3000);
|
||||
}
|
||||
localStorage.setItem("size", sized);
|
||||
|
||||
var heid = $("#img-height").val();
|
||||
if (heid != localStorage.getItem("img-height")) {
|
||||
Materialize.toast(lang.lang_setting_imgheight.replace("{{set}}" ,heid), 3000);
|
||||
}
|
||||
localStorage.setItem("img-height", heid);
|
||||
|
||||
var tckrd = $("[name=ticker]:checked").val();
|
||||
var tckrt = $("[for=ticker_"+tckrd+"]").text();
|
||||
if (tckrd != localStorage.getItem("ticker_ok")) {
|
||||
Materialize.toast(lang.lang_setting_ticker.replace("{{set}}" ,tckrt), 3000);
|
||||
}
|
||||
localStorage.setItem("ticker_ok", tckrd);
|
||||
|
||||
var animed = $("[name=anime]:checked").val();
|
||||
var animet = $("[for=anime_"+animed+"]").text();
|
||||
if (animed != localStorage.getItem("animation")) {
|
||||
Materialize.toast(lang.lang_setting_animation.replace("{{set}}" ,animet), 3000);
|
||||
}
|
||||
localStorage.setItem("animation", animed);
|
||||
|
||||
var boxd = $("[name=box]:checked").val();
|
||||
var boxt = $("[for=bx_"+boxd+"]").text();
|
||||
if (boxd != localStorage.getItem("box")) {
|
||||
Materialize.toast(lang.lang_setting_boxConfirm.replace("{{set}}" ,boxt), 3000);
|
||||
}
|
||||
localStorage.setItem("box", boxd);
|
||||
|
||||
var tagd = $("[name=tag]:checked").val();
|
||||
var tagt = $("[for=t_"+tagd+"]").text();
|
||||
if (tagd != localStorage.getItem("tag-range")) {
|
||||
Materialize.toast(lang.lang_setting_tag.replace("{{set}}" ,tagt), 3000);
|
||||
}
|
||||
localStorage.setItem("tag-range", tagd);
|
||||
|
||||
var uld = $("[name=ul]:checked").val();
|
||||
var ult = $("[for=ul_"+uld+"]").text();
|
||||
if (uld != localStorage.getItem("locale")) {
|
||||
Materialize.toast(lang.lang_setting_ul.replace("{{set}}" ,ult), 3000);
|
||||
}
|
||||
localStorage.setItem("locale", uld);
|
||||
|
||||
var ntd = $("[name=notf]:checked").val();
|
||||
var ntt = $("[for=ntf_"+ntd+"]").text();
|
||||
if (ntd != localStorage.getItem("nativenotf")) {
|
||||
Materialize.toast(lang.lang_setting_notf.replace("{{set}}" ,ntt), 3000);
|
||||
}
|
||||
localStorage.setItem("nativenotf", ntd);
|
||||
|
||||
var qtd = $("[name=quote]:checked").val();
|
||||
var qtt = $("[for=q_"+qtd+"]").text();
|
||||
if (qtd != localStorage.getItem("quote")) {
|
||||
Materialize.toast(lang.lang_setting_quote.replace("{{set}}" ,qtt), 3000);
|
||||
}
|
||||
localStorage.setItem("quote", qtd);
|
||||
|
||||
var viad = $("[name=via]:checked").val();
|
||||
var viat = $("[for=via_"+viad+"]").text();
|
||||
if (viad != localStorage.getItem("viashow")) {
|
||||
Materialize.toast(lang.lang_setting_via.replace("{{set}}" ,viat), 3000);
|
||||
}
|
||||
localStorage.setItem("viashow", viad);
|
||||
|
||||
var notfmd = $("[name=notfm]:checked").val();
|
||||
var notfmt = $("[for=notfm_"+notfmd+"]").text();
|
||||
if (notfmd != localStorage.getItem("setasread")) {
|
||||
Materialize.toast(lang.lang_setting_setasread.replace("{{set}}" ,notfmt), 3000);
|
||||
}
|
||||
localStorage.setItem("setasread", notfmd);
|
||||
|
||||
var movd = $("[name=mov]:checked").val();
|
||||
var movt = $("[for=mov_"+movd+"]").text();
|
||||
if (movd != localStorage.getItem("mouseover")) {
|
||||
Materialize.toast(lang.lang_setting_mov.replace("{{set}}" ,movt), 3000);
|
||||
}
|
||||
localStorage.setItem("mouseover", movd);
|
||||
|
||||
var maind = $("[name=main]:checked").val();
|
||||
var maint = $("[for=mn_"+maind+"]").text();
|
||||
if (maind != localStorage.getItem("mainuse")) {
|
||||
Materialize.toast(lang.lang_setting_main.replace("{{set}}" ,maint), 3000);
|
||||
}
|
||||
localStorage.setItem("mainuse", maind);
|
||||
|
||||
var secd = $("[name=sec]:checked").val();
|
||||
var sect = $("[for=sec-"+secd+"]").text();
|
||||
if (secd != localStorage.getItem("sec")) {
|
||||
Materialize.toast(lang.lang_setting_sec.replace("{{set}}" ,sect), 3000);
|
||||
}
|
||||
localStorage.setItem("sec", secd);
|
||||
}
|
||||
|
||||
//読み込み時の設定ロード
|
||||
function load() {
|
||||
if(localStorage.getItem("imas")){
|
||||
$(".imas").removeClass("hide");
|
||||
}
|
||||
if(localStorage.getItem("kirishima")){
|
||||
$(".kirishima").removeClass("hide");
|
||||
}
|
||||
var prof = localStorage.getItem("prof");
|
||||
$("#my-prof").attr("src", prof);
|
||||
var datetype = localStorage.getItem("datetype");
|
||||
if (!datetype) {
|
||||
var datetype = "absolute";
|
||||
}
|
||||
$("#" + datetype).prop("checked", true);
|
||||
|
||||
var theme = localStorage.getItem("theme");
|
||||
if (!theme) {
|
||||
var theme = "white";
|
||||
}
|
||||
$("#" + theme).prop("checked", true);
|
||||
|
||||
var ha = localStorage.getItem("ha");
|
||||
if (!ha) {
|
||||
var ha = "false";
|
||||
}
|
||||
$("#ha_" + ha).prop("checked", true);
|
||||
|
||||
var nsfw = localStorage.getItem("nsfw");
|
||||
if (!nsfw) {
|
||||
var nsfw = "yes";
|
||||
}
|
||||
$("#n_" + nsfw).prop("checked", true);
|
||||
|
||||
var cw = localStorage.getItem("cw");
|
||||
if (!cw) {
|
||||
var cw = "yes";
|
||||
}
|
||||
$("#c_" + cw).prop("checked", true);
|
||||
|
||||
var cws = localStorage.getItem("always-cw");
|
||||
if (!cws) {
|
||||
var cws = "no";
|
||||
}
|
||||
$("#cws_" + cws).prop("checked", true);
|
||||
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
var popup = "0";
|
||||
}
|
||||
$("#popup").val(popup);
|
||||
|
||||
var box = localStorage.getItem("box");
|
||||
if (!box) {
|
||||
var box = "no";
|
||||
}
|
||||
if(box=="absolute"){
|
||||
var box = "abs";
|
||||
}
|
||||
$("#bx_" + box).prop("checked", true);
|
||||
|
||||
var gif = localStorage.getItem("gif");
|
||||
if (!gif) {
|
||||
var gif = "yes";
|
||||
}
|
||||
$("#g_" + gif).prop("checked", true);
|
||||
|
||||
var sent = localStorage.getItem("sentence");
|
||||
if (!sent) {
|
||||
var sent = "500";
|
||||
}
|
||||
$("#sentence").val(sent);
|
||||
var ltrs = localStorage.getItem("letters");
|
||||
if (!ltrs) {
|
||||
var ltrs = "500";
|
||||
}
|
||||
$("#letters").val(ltrs);
|
||||
|
||||
var csent = localStorage.getItem("cw_sentence");
|
||||
if (!csent) {
|
||||
var csent = "500";
|
||||
}
|
||||
$("#cw_sentence").val(csent);
|
||||
var cltrs = localStorage.getItem("cw_letters");
|
||||
if (!cltrs) {
|
||||
var cltrs = "500";
|
||||
}
|
||||
$("#cw_letters").val(cltrs);
|
||||
|
||||
var width = localStorage.getItem("width");
|
||||
if (!width) {
|
||||
var width = "300";
|
||||
}
|
||||
$("#width").val(width);
|
||||
|
||||
var fwidth = localStorage.getItem("fixwidth");
|
||||
if (!fwidth) {
|
||||
var fwidth = "300";
|
||||
}
|
||||
$("#fixwidth").val(fwidth);
|
||||
|
||||
var cwt = localStorage.getItem("cw-text");
|
||||
if (!cwt) {
|
||||
var cwt = "";
|
||||
}
|
||||
$("#cw-text").val(cwt);
|
||||
|
||||
var cws = localStorage.getItem("always-cw");
|
||||
if (!cws) {
|
||||
var cws = "no";
|
||||
}
|
||||
$("#cws_" + cws).prop("checked", true);
|
||||
|
||||
var rps = localStorage.getItem("replyct");
|
||||
if (!rps) {
|
||||
var rps = "hidden";
|
||||
}
|
||||
$("#rp_" + rps).prop("checked", true);
|
||||
|
||||
var vis = localStorage.getItem("vis");
|
||||
if (!vis) {
|
||||
var vis = "public";
|
||||
}
|
||||
$("#" + vis).prop("checked", true);
|
||||
|
||||
var img = localStorage.getItem("img");
|
||||
if (!img) {
|
||||
var img = "no-act";
|
||||
}
|
||||
$("#i_" + img).prop("checked", true);
|
||||
|
||||
var font = localStorage.getItem("font");
|
||||
if (!font) {
|
||||
var font = "";
|
||||
}
|
||||
$("#font").val(font);
|
||||
|
||||
var size = localStorage.getItem("size");
|
||||
if (!size) {
|
||||
var size = "13";
|
||||
}
|
||||
$("#size").val(size);
|
||||
|
||||
var imh = localStorage.getItem("img-height");
|
||||
if (!imh) {
|
||||
var imh = "200";
|
||||
}
|
||||
$("#img-height").val(imh);
|
||||
|
||||
var ticker = localStorage.getItem("ticker_ok");
|
||||
if (!ticker) {
|
||||
var ticker = "no";
|
||||
}
|
||||
$("#ticker_" + ticker).prop("checked", true);
|
||||
|
||||
var animation = localStorage.getItem("animation");
|
||||
if (!animation) {
|
||||
var animation = "yes";
|
||||
}
|
||||
$("#anime_" + animation).prop("checked", true);
|
||||
|
||||
var tag = localStorage.getItem("tag-range");
|
||||
if (!tag) {
|
||||
var tag = "all";
|
||||
}
|
||||
$("#t_" + tag).prop("checked", true);
|
||||
|
||||
var box = localStorage.getItem("box");
|
||||
if (!box) {
|
||||
var box = "yes";
|
||||
}
|
||||
$("#bx_" + box).prop("checked", true);
|
||||
|
||||
var uld = localStorage.getItem("locale");
|
||||
if (!uld) {
|
||||
var uld = "yes";
|
||||
}
|
||||
$("#ul_" + uld).prop("checked", true);
|
||||
|
||||
var nnd = localStorage.getItem("nativenotf");
|
||||
if (!nnd) {
|
||||
var nnd = "yes";
|
||||
}
|
||||
$("#ntf_" + nnd).prop("checked", true);
|
||||
|
||||
var qt = localStorage.getItem("quote");
|
||||
if (!qt) {
|
||||
var qt = "simple";
|
||||
}
|
||||
$("#q_" + qt).prop("checked", true);
|
||||
|
||||
var viat = localStorage.getItem("viashow");
|
||||
if (!viat) {
|
||||
var viat = "hide";
|
||||
}
|
||||
$("#via_" + viat).prop("checked", true);
|
||||
|
||||
var movt = localStorage.getItem("mouseover");
|
||||
if (!movt) {
|
||||
var movt = "no";
|
||||
}
|
||||
$("#mov_" + movt).prop("checked", true);
|
||||
|
||||
var notfmt = localStorage.getItem("setasread");
|
||||
if (!notfmt) {
|
||||
var notfmt = "yes";
|
||||
}
|
||||
$("#notfm_" + notfmt).prop("checked", true);
|
||||
|
||||
var maint = localStorage.getItem("mainuse");
|
||||
if (!maint) {
|
||||
var maint = "remain";
|
||||
}
|
||||
$("#mn_" + maint).prop("checked", true);
|
||||
|
||||
var sect = localStorage.getItem("sec");
|
||||
if (!sect) {
|
||||
var sect = "nothing";
|
||||
}
|
||||
$("#sec-" + sect).prop("checked", true);
|
||||
|
||||
}
|
||||
|
||||
function climute(){
|
||||
//クライアントミュート
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
if(!obj){
|
||||
$("#mute-cli").html(lang.lang_setting_nomuting);
|
||||
}else{
|
||||
if(!obj[0]){
|
||||
$("#mute-cli").html(lang.lang_setting_nomuting);
|
||||
return;
|
||||
}
|
||||
var templete;
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
var cli = obj[key];
|
||||
var list = key * 1 + 1;
|
||||
templete = '<div class="acct" id="acct_' + key + '">' + list +
|
||||
'.' +
|
||||
cli + '<button class="btn waves-effect red disTar" onclick="cliMuteDel(' +
|
||||
key + ')">'+lang.lang_del+'</button><br></div>';
|
||||
$("#mute-cli").append(templete);
|
||||
});
|
||||
}
|
||||
}
|
||||
function cliMuteDel(key){
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
obj.splice(key, 1);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_mute", json);
|
||||
mute();
|
||||
}
|
||||
|
||||
function wordmute(){
|
||||
var word = localStorage.getItem("word_mute");
|
||||
var obj = JSON.parse(word);
|
||||
$('#wordmute').material_chip({
|
||||
data: obj,
|
||||
});
|
||||
}
|
||||
function wordmuteSave(){
|
||||
var word=$('#wordmute').material_chip('data');
|
||||
var json = JSON.stringify(word);
|
||||
localStorage.setItem("word_mute", json);
|
||||
}
|
||||
|
||||
function wordemp(){
|
||||
var word = localStorage.getItem("word_emp");
|
||||
var obj = JSON.parse(word);
|
||||
$('#wordemp').material_chip({
|
||||
data: obj,
|
||||
});
|
||||
}
|
||||
function wordempSave(){
|
||||
var word=$('#wordemp').material_chip('data');
|
||||
var json = JSON.stringify(word);
|
||||
localStorage.setItem("word_emp", json);
|
||||
}
|
||||
function notftest(){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var os = electron.remote.process.platform;
|
||||
var options = {
|
||||
body: lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',
|
||||
icon: localStorage.getItem("prof_0")
|
||||
};
|
||||
if(os=="darwin"){
|
||||
var n = new Notification('TheDesk'+lang.lang_setting_notftest, options);
|
||||
}else{
|
||||
ipc.send('native-notf', ['TheDesk'+lang.lang_setting_notftest,lang.lang_setting_notftest+'('+lang.lang_setting_notftestprof+')',localStorage.getItem('prof_0'),"",""]);
|
||||
}
|
||||
|
||||
}
|
||||
function oks(no){
|
||||
var txt=$("#oks-"+no).val();
|
||||
localStorage.setItem("oks-"+no, txt);
|
||||
Materialize.toast(lang.lang_setting_ksref, 3000);
|
||||
}
|
||||
function oksload(){
|
||||
if(localStorage.getItem("oks-1")){$("#oks-1").val(localStorage.getItem("oks-1"))}
|
||||
if(localStorage.getItem("oks-2")){$("#oks-2").val(localStorage.getItem("oks-2"))}
|
||||
if(localStorage.getItem("oks-3")){$("#oks-3").val(localStorage.getItem("oks-3"))}
|
||||
}
|
||||
function changelang(lang){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('lang',lang);
|
||||
ipc.on('langres', function (event, arg) {
|
||||
location.href="../"+lang+"/setting.html"
|
||||
});
|
||||
}
|
||||
function exportSettings(){
|
||||
if(!confirm(lang.lang_setting_exportwarn)){
|
||||
return false;
|
||||
}
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var ipc = electron.ipcRenderer;
|
||||
dialog.showSaveDialog(null, {
|
||||
title: 'Export',
|
||||
properties: ['openFile', 'createDirectory'],
|
||||
defaultPath: "export.thedeskconfig"
|
||||
}, (savedFiles) => {
|
||||
console.log(savedFiles);
|
||||
if(!savedFiles){
|
||||
return false;
|
||||
}
|
||||
var exp={};
|
||||
//Accounts
|
||||
var multi = localStorage.getItem("multi");
|
||||
var acct = JSON.parse(multi);
|
||||
exp.accts=acct;
|
||||
//Columns
|
||||
var multi = localStorage.getItem("column");
|
||||
var column = JSON.parse(multi);
|
||||
exp.columns=column;
|
||||
//Themes
|
||||
exp.theme=localStorage.getItem("theme");
|
||||
//Min width
|
||||
exp.minwidth=localStorage.getItem("width");
|
||||
//Font
|
||||
exp.font=localStorage.getItem("font");
|
||||
exp.size=localStorage.getItem("size");
|
||||
//Img height
|
||||
exp.imgheight=localStorage.getItem("img-height");
|
||||
//Main
|
||||
exp.mainuse=localStorage.getItem("mainuse");
|
||||
//CW text
|
||||
exp.cw=localStorage.getItem("cw-text");
|
||||
//vis
|
||||
exp.vis=localStorage.getItem("vis");
|
||||
//keysc
|
||||
exp.ksc=[
|
||||
localStorage.getItem("oks-1"),
|
||||
localStorage.getItem("oks-2"),
|
||||
localStorage.getItem("oks-3")
|
||||
];
|
||||
//climu
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var climu = JSON.parse(cli);
|
||||
exp.clientMute=climu;
|
||||
//wordmu
|
||||
var wdm = localStorage.getItem("word_mute");
|
||||
var wordmu = JSON.parse(wdm);
|
||||
exp.wordMute=wordmu;
|
||||
//spotify
|
||||
exp.spotifyArtwork=localStorage.getItem("artwork")
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(content || content=="" || content=="null"){
|
||||
exp.spotifyTemplete=content;
|
||||
}else{
|
||||
exp.spotifyTemplete=null;
|
||||
}
|
||||
//tags
|
||||
var tagarr = localStorage.getItem("tag");
|
||||
var favtag = JSON.parse(tagarr);
|
||||
exp.favoriteTags=favtag;
|
||||
console.log(exp);
|
||||
ipc.send('export', [savedFiles,JSON.stringify(exp)]);
|
||||
alert("Done.")
|
||||
//cards
|
||||
//lang
|
||||
});
|
||||
}
|
||||
function importSettings(){
|
||||
if(!confirm(lang.lang_setting_importwarn)){
|
||||
return false;
|
||||
}
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
var ipc = electron.ipcRenderer;
|
||||
dialog.showOpenDialog(null, {
|
||||
title: 'Import',
|
||||
properties: ['openFile'],
|
||||
filters: [
|
||||
{name: 'TheDesk Config', extensions: ['thedeskconfig']},
|
||||
]
|
||||
}, (fileNames) => {
|
||||
console.log(fileNames);
|
||||
if(!fileNames){
|
||||
return false;
|
||||
}
|
||||
ipc.send('import', fileNames[0]);
|
||||
ipc.on('config', function (event, arg) {
|
||||
var obj = JSON.parse(arg);
|
||||
if(obj){
|
||||
localStorage.clear();
|
||||
localStorage.setItem("multi",JSON.stringify(obj.accts));
|
||||
for(var key=0;key<obj.accts.length;key++){
|
||||
var acct=obj.accts[key];
|
||||
localStorage.setItem("name_" + key, acct.name);
|
||||
localStorage.setItem("user_" + key, acct.user);
|
||||
localStorage.setItem("user-id_" + key, acct.id);
|
||||
localStorage.setItem("prof_" + key, acct.prof);
|
||||
localStorage.setItem("domain_" + key, acct.domain);
|
||||
localStorage.setItem("acct_"+ key + "_at", acct.at);
|
||||
}
|
||||
localStorage.setItem("column",JSON.stringify(obj.columns));
|
||||
localStorage.setItem("theme",obj.theme);
|
||||
if(obj.width){
|
||||
console.log(obj.width)
|
||||
localStorage.setItem("width",obj.width);
|
||||
}
|
||||
if(obj.font){
|
||||
localStorage.setItem("font",obj.font);
|
||||
}
|
||||
if(obj.size){
|
||||
localStorage.setItem("size",obj.size);
|
||||
}
|
||||
themes(obj.theme);
|
||||
if(obj.imgheight){
|
||||
localStorage.setItem("img-height",obj.imgheight);
|
||||
}
|
||||
localStorage.setItem("mainuse",obj.mainuse);
|
||||
if(obj.cw){
|
||||
localStorage.setItem("cwtext",obj.cw);
|
||||
}
|
||||
localStorage.setItem("vis",obj.vis);
|
||||
if(obj.ksc[0]){
|
||||
localStorage.setItem("oks-1",obj.ksc[0]);
|
||||
}
|
||||
if(obj.ksc[1]){
|
||||
localStorage.setItem("oks-2",obj.ksc[1]);
|
||||
}
|
||||
if(obj.ksc[2]){
|
||||
localStorage.setItem("oks-3",obj.ksc[2]);
|
||||
}
|
||||
if(obj.clientMute){
|
||||
localStorage.setItem("client_mute",JSON.stringify(obj.clientMute));
|
||||
}
|
||||
if(obj.wordMute){
|
||||
localStorage.setItem("word_mute",JSON.stringify(obj.wordMute));
|
||||
}
|
||||
if(obj.favoriteTags){
|
||||
localStorage.setItem("tag",JSON.stringify(obj.favoriteTags));
|
||||
}
|
||||
|
||||
localStorage.setItem("np-temp",obj.spotifyTemplete);
|
||||
for(var i=0;i<obj.columns.length;i++){
|
||||
localStorage.setItem("card_" + i,"true");
|
||||
localStorage.removeItem("catch_" + i);
|
||||
}
|
||||
location.href="language.html";
|
||||
}else{
|
||||
alert("Error.")
|
||||
}
|
||||
})
|
||||
//cards
|
||||
//lang
|
||||
});
|
||||
}
|
||||
function savefolder(){
|
||||
var electron = require("electron");
|
||||
var remote=electron.remote;
|
||||
var dialog=remote.dialog;
|
||||
dialog.showOpenDialog(null, {
|
||||
title: 'Save folder',
|
||||
properties: ['openDirectory'],
|
||||
}, (fileNames) => {
|
||||
localStorage.setItem("savefolder",fileNames[0]);
|
||||
});
|
||||
}
|
||||
|
||||
function font(){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('fonts', []);
|
||||
ipc.on('font-list', function (event, arg) {
|
||||
$("#fonts").removeClass("hide");
|
||||
for( var i=0; i<arg.length; i++) {
|
||||
var font=arg[i];
|
||||
$("#fonts").append('<div class="font pointer" style="font-family:'+font.family+'" onclick="insertFont(\''+font.family+'\')">'+font.family+"</div>")
|
||||
}
|
||||
});
|
||||
}
|
||||
function insertFont(name){
|
||||
$("#font").val(name);
|
||||
}
|
||||
$(".color-picker").each(function(i, elem) {
|
||||
pickerDefine(i,"fff");
|
||||
});
|
||||
function pickerDefine(i,color){
|
||||
var pickr = new Pickr({
|
||||
el: '#color-picker'+i,
|
||||
default: color,
|
||||
showAlways: true,
|
||||
appendToBody: true,
|
||||
closeWithKey: 'Escape',
|
||||
comparison: false,
|
||||
components: {
|
||||
preview: true, // Left side color comparison
|
||||
opacity: false, // Opacity slider
|
||||
hue: true, // Hue slider
|
||||
interaction: {
|
||||
rgba: false, // rgba option (red green blue and alpha)
|
||||
input: true, // input / output element
|
||||
}
|
||||
},
|
||||
strings: {
|
||||
save: 'Save', // Default for save button
|
||||
clear: 'Clear' // Default for clear button
|
||||
}
|
||||
});
|
||||
pickr.on('change', (...args) => {
|
||||
var rgb='rgb('+args[0].toRGBA()[0]+','+args[0].toRGBA()[1]+','+args[0].toRGBA()[2]+')';
|
||||
$("#color-picker"+i+"_value").val(rgb)
|
||||
});
|
||||
}
|
||||
function customComp(){
|
||||
var nameC=$("#custom_name").val();
|
||||
if(!nameC){return false;}
|
||||
var descC=$("#custom_desc").val();
|
||||
var primaryC=$("#color-picker0_value").val();
|
||||
if(!primaryC){primaryC="rgb(255,255,255)"}
|
||||
var secondaryC=$("#color-picker1_value").val();
|
||||
if(!secondaryC){secondaryC="rgb(255,255,255)"}
|
||||
var textC=$("#color-picker2_value").val();
|
||||
if(!textC){textC="rgb(255,255,255)"}
|
||||
var accentC=$("#color-picker3_value").val();
|
||||
if(!accentC){accentC="rgb(255,255,255)"}
|
||||
var multi = localStorage.getItem("multi");
|
||||
var my=JSON.parse(multi)[0].name;
|
||||
var id=$("#custom-edit-sel").val();
|
||||
if(id=="add_new"){
|
||||
id=makeCID();
|
||||
}
|
||||
var json={
|
||||
"name": nameC,
|
||||
"author": my,
|
||||
"desc": descC,
|
||||
"base": $("[name=direction]:checked").val(),
|
||||
"vars": {
|
||||
"primary": primaryC,
|
||||
"secondary": secondaryC,
|
||||
"text": textC
|
||||
},
|
||||
"props": {
|
||||
"TheDeskAccent": accentC
|
||||
},
|
||||
"id": id
|
||||
}
|
||||
$("#custom_json").val(JSON.stringify(json));
|
||||
themes();
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
ipc.send('theme-json-create', JSON.stringify(json));
|
||||
}
|
||||
function deleteIt(){
|
||||
var id=$("#custom-sel-sel").val();
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
ipc.on('theme-json-delete-complete', function (event, args) {
|
||||
ctLoad()
|
||||
});
|
||||
ipc.send('theme-json-delete', id);
|
||||
}
|
||||
function ctLoad(){
|
||||
ipc.send('theme-json-list', "");
|
||||
ipc.on('theme-json-list-response', function (event, args) {
|
||||
console.log(args);
|
||||
var templete="";
|
||||
Object.keys(args).forEach(function(key) {
|
||||
var theme = args[key];
|
||||
var themeid=theme.id
|
||||
templete = templete+'<option value="'+themeid+'">' + theme.name +'</option>';
|
||||
});
|
||||
if(args[0]){
|
||||
localStorage.setItem("customtheme-id",args[0].id)
|
||||
}
|
||||
$("#custom-sel-sel").html(templete);
|
||||
templete='<option value="add_new">'+$("#edit-selector").attr("data-add")+'</option>'+templete;
|
||||
$("#custom-edit-sel").html(templete);
|
||||
$('select').material_select('update');
|
||||
});
|
||||
}
|
||||
function customSel(){
|
||||
var id=$("#custom-sel-sel").val();
|
||||
localStorage.setItem("customtheme-id",id)
|
||||
}
|
||||
function custom(){
|
||||
var id=$("#custom-edit-sel").val();
|
||||
if(id=="add_new"){
|
||||
$("#custom_name").val("");
|
||||
$("#custom_desc").val("");
|
||||
$("#dark").prop("checked", true);
|
||||
$("#custom_json").val("");
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
$("#color-picker0_value").val("");
|
||||
$("#color-picker1_value").val("");
|
||||
$("#color-picker2_value").val("");
|
||||
$("#color-picker3_value").val("");
|
||||
pickerDefine(0,"fff");
|
||||
pickerDefine(1,"fff");
|
||||
pickerDefine(2,"fff");
|
||||
pickerDefine(3,"fff");
|
||||
$("#delTheme").addClass("disabled")
|
||||
}else{
|
||||
$("#delTheme").removeClass("disabled")
|
||||
ipc.send('theme-json-request', id);
|
||||
ipc.on('theme-json-response', function (event, args) {
|
||||
console.log(args);
|
||||
$("#custom_name").val(args.name);
|
||||
$("#custom_desc").val(args.desc);
|
||||
$("#"+args.base).prop("checked", true);
|
||||
$("#color-picker0-wrap").html('<div class="color-picker" id="color-picker0"></div>')
|
||||
pickerDefine(0,rgbToHex(args.vars.primary))
|
||||
$("#color-picker0_value").val(args.vars.primary);
|
||||
$("#color-picker1-wrap").html('<div class="color-picker" id="color-picker1"></div>')
|
||||
pickerDefine(1,rgbToHex(args.vars.secondary))
|
||||
$("#color-picker1_value").val(args.vars.secondary);
|
||||
$("#color-picker2-wrap").html('<div class="color-picker" id="color-picker2"></div>')
|
||||
$("#color-picker2_value").val(args.vars.text);
|
||||
pickerDefine(2,rgbToHex(args.vars.text))
|
||||
if(args.props){
|
||||
if(args.props.TheDeskAccent){
|
||||
var accent=args.props.TheDeskAccent;
|
||||
}else{
|
||||
var accent=args.vars.secondary;
|
||||
}
|
||||
}else{
|
||||
var accent=args.vars.secondary;
|
||||
}
|
||||
$("#color-picker3-wrap").html('<div class="color-picker" id="color-picker3"></div>')
|
||||
pickerDefine(3,rgbToHex(accent))
|
||||
$("#custom_json").val(JSON.stringify(args));
|
||||
});
|
||||
}
|
||||
}
|
||||
function customImp(){
|
||||
var json=$("#custom_import").val();
|
||||
if(JSON5.parse(json)){
|
||||
ipc.send('theme-json-create', json);
|
||||
}else{
|
||||
alert("Error")
|
||||
}
|
||||
}
|
||||
function hardwareAcceleration(){
|
||||
var had = $("[name=ha]:checked").val();
|
||||
localStorage.setItem("ha", had);
|
||||
console.log("ha");
|
||||
ipc.send('ha', had);
|
||||
}
|
||||
|
||||
ipc.on('theme-json-create-complete', function (event, args) {
|
||||
$("#custom_import").val("");
|
||||
ctLoad()
|
||||
});
|
||||
//最初に読む
|
||||
load();
|
||||
climute();
|
||||
wordmute();
|
||||
wordemp();
|
||||
checkSpotify();
|
||||
voiceSettingLoad();
|
||||
oksload();
|
||||
npprovider();
|
||||
ctLoad()
|
||||
@@ -24,16 +24,24 @@ function sortload(){
|
||||
insert=' style="background-color:#'+acct.background+'; color: #'+txhex+'" ';
|
||||
}
|
||||
}
|
||||
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><a onclick="goColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムへ">forward</i></a>'+localStorage.getItem("user_" + acct.domain)+"@"+localStorage.getItem("domain_" + acct.domain)+" "+cap(acct.type, acct.data)+' TL <a onclick="removeColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></li>';
|
||||
var user=localStorage.getItem("user_" + acct.domain);
|
||||
var domain=localStorage.getItem("domain_" + acct.domain);
|
||||
if(!user || !domain){
|
||||
var acctdata="";
|
||||
}else{
|
||||
var acctdata=user+"@"+domain;
|
||||
}
|
||||
|
||||
var html='<li class="drag-content" data-id="'+key+'" data-flag="'+flag+'"'+insert+'><div class="sorticon"><i class="material-icons">'+icon(acct.type)+'</i></div><div class="sorttitle">'+cap(acct.type, acct.data,acct.domain)+'</div><div class="sortaction"><a onclick="goColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="'+lang.lang_sort_gothis+'">forward</i></a> <a onclick="removeColumn(' + key +
|
||||
')" class="setting nex"><i class="material-icons waves-effect nex" title="このカラムを削除">cancel</i></a></div><div class="sortacct">'+acctdata+'</div></li>';
|
||||
$("#sort").append(html);
|
||||
});
|
||||
drag();
|
||||
}
|
||||
|
||||
//TLのタイトル
|
||||
function cap(type, data) {
|
||||
function Scap(type, data) {
|
||||
if (type == "home") {
|
||||
return "Home"
|
||||
} else if (type == "local") {
|
||||
@@ -48,6 +56,10 @@ function cap(type, data) {
|
||||
return "Notification"
|
||||
} else if (type == "mix") {
|
||||
return "Integrated"
|
||||
}else if (type == "webview") {
|
||||
return "Twitter"
|
||||
}else{
|
||||
console.log(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +87,9 @@ function sort(){
|
||||
var add = {
|
||||
domain: data.domain,
|
||||
type: data.type,
|
||||
data:data.data
|
||||
data:data.data,
|
||||
background:data.background,
|
||||
text:data.text
|
||||
};
|
||||
newobj.push(add);
|
||||
if(flags[i]=="true"){
|
||||
@@ -90,19 +104,14 @@ function sort(){
|
||||
Materialize.toast("並べ替え完了。", 3000);
|
||||
sortload();
|
||||
parseColumn();
|
||||
sortMenu()
|
||||
}
|
||||
//ソートボタントグル
|
||||
function sortToggle(){
|
||||
function sortMenu(){
|
||||
$("#left-menu div").removeClass("active");
|
||||
$("#sortMenu").addClass("active");
|
||||
$(".menu-content").addClass("hide");
|
||||
$("#sort-box").removeClass("hide");
|
||||
$("#sort").html("");
|
||||
if ($("#sort-box").hasClass("hide")) {
|
||||
$("#sort-box").removeClass("hide");
|
||||
$("#sort-box").addClass("show");
|
||||
$("#sort-box").css("top",$('#sort-tgl').offset().top+"px");
|
||||
$("#sort-box").css("left",$('#sort-tgl').offset().left-410+"px");
|
||||
//並べ替え
|
||||
sortload();
|
||||
} else {
|
||||
$("#sort-box").addClass("hide");
|
||||
$("#sort-box").removeClass("show");
|
||||
}
|
||||
sortload();
|
||||
}
|
||||
@@ -42,10 +42,26 @@ function checkSpotify(){
|
||||
$("#spotify-disable").addClass("disabled");
|
||||
}
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(!content || content==""){
|
||||
if(!content || content=="" || content=="null"){
|
||||
var content="#NowPlaying {song} / {album} / {artist}\n{url} #SpotifyWithTheDesk";
|
||||
}
|
||||
$("#np-temp").val(content);
|
||||
var flag=localStorage.getItem("artwork");
|
||||
if(flag){
|
||||
$("#awk_yes").prop("checked", true);
|
||||
}else{
|
||||
$("#awk_no").prop("checked", true);
|
||||
}
|
||||
}
|
||||
function spotifyFlagSave(){
|
||||
var awk = $("[name=awk]:checked").val();
|
||||
if(awk=="yes"){
|
||||
localStorage.setItem("artwork","yes");
|
||||
Materialize.toast(lang.lang_spotify_img, 3000);
|
||||
}else{
|
||||
localStorage.removeItem("artwork");
|
||||
Materialize.toast(lang.lang_spotify_imgno, 3000);
|
||||
}
|
||||
}
|
||||
function nowplaying(mode){
|
||||
if(mode=="spotify"){
|
||||
@@ -64,9 +80,19 @@ function nowplaying(mode){
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if(json.length<1){
|
||||
return false;
|
||||
}
|
||||
var item=json.item;
|
||||
var img=item.album.images[0].url;
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var flag=localStorage.getItem("artwork");
|
||||
if(flag){
|
||||
ipc.send('bmp-image', [img,0]);
|
||||
}
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(!content || content==""){
|
||||
if(!content || content=="" || content=="null"){
|
||||
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
|
||||
}
|
||||
var regExp = new RegExp("{song}", "g");
|
||||
@@ -77,25 +103,37 @@ function nowplaying(mode){
|
||||
content = content.replace(regExp, item.artists[0].name);
|
||||
var regExp = new RegExp("{url}", "g");
|
||||
content = content.replace(regExp, item.external_urls.spotify);
|
||||
var regExp = new RegExp("{composer}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{hz}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{bitRate}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{lyricist}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{bpm}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{genre}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
$("#textarea").val(content);
|
||||
});
|
||||
}else{
|
||||
alert("アカウント連携設定をして下さい。");
|
||||
alert(lang.lang_spotify_acct);
|
||||
}
|
||||
}else if(mode=="itunes"){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('itunes', "");
|
||||
ipc.on('itunesRes', function (event, arg) {
|
||||
ipc.on('itunes-np', function (event, arg) {
|
||||
console.log(arg);
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(!content || content==""){
|
||||
if(!content || content=="" || content=="null"){
|
||||
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
|
||||
}
|
||||
var str_array=arg.artist.split('');//1文字ずつ配列に入れる
|
||||
var utf8Array=Encoding.convert(str_array, 'SJIS', 'AUTO');//UTF-8に変換
|
||||
console.log(utf8Array);
|
||||
var convert=Encoding.codeToString( utf8Array );
|
||||
console.log(convert);
|
||||
var flag=localStorage.getItem("artwork");
|
||||
if(flag && arg.path){
|
||||
media(arg.path,"image/png","new");
|
||||
}
|
||||
var regExp = new RegExp("{song}", "g");
|
||||
content = content.replace(regExp, arg.name);
|
||||
var regExp = new RegExp("{album}", "g");
|
||||
@@ -104,6 +142,18 @@ function nowplaying(mode){
|
||||
content = content.replace(regExp, arg.artist);
|
||||
var regExp = new RegExp("{url}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{composer}", "g");
|
||||
content = content.replace(regExp, arg.composer);
|
||||
var regExp = new RegExp("{hz}", "g");
|
||||
var regExp = new RegExp("{lyricist}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{bpm}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
content = content.replace(regExp, arg.sampleRate/1000+"kHz");
|
||||
var regExp = new RegExp("{bitRate}", "g");
|
||||
content = content.replace(regExp, arg.bitRate+"kbps");
|
||||
var regExp = new RegExp("{genre}", "g");
|
||||
content = content.replace(regExp, arg.genre);
|
||||
$("#textarea").val(content);
|
||||
})
|
||||
}
|
||||
@@ -112,7 +162,26 @@ function nowplaying(mode){
|
||||
function spotifySave(){
|
||||
var temp=$("#np-temp").val();
|
||||
localStorage.setItem("np-temp", temp);
|
||||
Materialize.toast("NowPlaying文章を更新しました。", 3000);
|
||||
Materialize.toast(lang.lang_spotify_np, 3000);
|
||||
}
|
||||
function npprovider(){
|
||||
var provd = $("[name=npp]:checked").val();
|
||||
if(!provd){
|
||||
if (localStorage.getItem("np_provider")) {
|
||||
$("[value="+localStorage.getItem("np_provider")+"]").prop("checked", true);
|
||||
}else{
|
||||
$("[value=AIMP]").prop("checked", true);
|
||||
localStorage.setItem("np_provider", "AIMP");
|
||||
}
|
||||
}else{
|
||||
if (provd != localStorage.getItem("np_provider")) {
|
||||
Materialize.toast(lang.lang_setting_npprovide.replace("{{set}}" ,provd), 3000);
|
||||
}
|
||||
localStorage.setItem("np_provider", provd);
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('itunes', ["set",provd]);
|
||||
}
|
||||
}
|
||||
if(location.search){
|
||||
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
|
||||
@@ -126,4 +195,57 @@ if(location.search){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
$("#npbtn").click(function() {
|
||||
nowplaying('spotify');
|
||||
});
|
||||
$("#npbtn").bind('contextmenu', function() {
|
||||
nowplaying('itunes');
|
||||
return false;
|
||||
});
|
||||
/*cinderella NP*/
|
||||
function cgNP(q){
|
||||
suggest = "https://cg.toot.app/api/v1/?song=" + q
|
||||
console.log(suggest)
|
||||
fetch(suggest, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
var flag=localStorage.getItem("artwork");
|
||||
if(flag){
|
||||
var img=json.album.artwork;
|
||||
ipc.send('bmp-image', [img,0]);
|
||||
}
|
||||
var content=localStorage.getItem("np-temp");
|
||||
if(!content || content==""){
|
||||
var content="#NowPlaying {song} / {album} / {artist}\n{url}";
|
||||
}
|
||||
var regExp = new RegExp("{song}", "g");
|
||||
content = content.replace(regExp, json.name);
|
||||
var regExp = new RegExp("{album}", "g");
|
||||
content = content.replace(regExp, json.album.name);
|
||||
var regExp = new RegExp("{artist}", "g");
|
||||
content = content.replace(regExp, json.artist.text);
|
||||
var regExp = new RegExp("{composer}", "g");
|
||||
content = content.replace(regExp, json.composer);
|
||||
var regExp = new RegExp("{lyricist}", "g");
|
||||
content = content.replace(regExp, json.lyricist);
|
||||
var regExp = new RegExp("{bpm}", "g");
|
||||
content = content.replace(regExp, json.bpm);
|
||||
var regExp = new RegExp("{genre}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
var regExp = new RegExp("{url}", "g");
|
||||
content = content.replace(regExp, "");
|
||||
$("#textarea").val(content);
|
||||
});
|
||||
}
|
||||
@@ -7,32 +7,22 @@ function themes(theme) {
|
||||
localStorage.setItem("theme","black");
|
||||
}
|
||||
}
|
||||
if (theme == "black") {
|
||||
$("html").removeClass("indigotheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("browntheme");
|
||||
$("html").addClass("blacktheme");
|
||||
} else if (theme == "indigo") {
|
||||
$("html").removeClass("blacktheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("browntheme");
|
||||
$("html").addClass("indigotheme");
|
||||
} else if (theme == "green") {
|
||||
$("html").removeClass("indigotheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("browntheme");
|
||||
$("html").removeClass("blacktheme");
|
||||
$("html").addClass("greentheme");
|
||||
} else if (theme == "brown") {
|
||||
$("html").removeClass("indigotheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("blacktheme");
|
||||
$("html").addClass("browntheme");
|
||||
} else{
|
||||
$("html").removeClass("indigotheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("browntheme");
|
||||
$("html").removeClass("blacktheme");
|
||||
$("html").removeClass("indigotheme");
|
||||
$("html").removeClass("greentheme");
|
||||
$("html").removeClass("browntheme");
|
||||
$("html").removeClass("blacktheme");
|
||||
$("html").removeClass("customtheme");
|
||||
$("html").addClass(theme+"theme");
|
||||
var font = localStorage.getItem("font");
|
||||
if(font){
|
||||
$("html").css("font-family",font);
|
||||
}else{
|
||||
$("html").css("font-family","");
|
||||
}
|
||||
if(theme=="custom"){
|
||||
if(localStorage.getItem("customtheme-id")){
|
||||
ipc.send('theme-css-request', localStorage.getItem("customtheme-id"));
|
||||
}
|
||||
}
|
||||
}
|
||||
themes();
|
||||
@@ -1,8 +1,203 @@
|
||||
//左下のメッセージ
|
||||
var todcTrigger=null;
|
||||
function todo(mes){
|
||||
clearInterval(todcTrigger);
|
||||
$('#message').text(mes);
|
||||
$('#message').fadeIn();
|
||||
todcTrigger=setTimeout(todc, 4000);
|
||||
}
|
||||
function todc(){
|
||||
$('#message').fadeOut();
|
||||
}
|
||||
//reverse
|
||||
function bottomReverse(){
|
||||
$("#bottom").toggleClass("reverse");
|
||||
$(".leftside").toggleClass("reverse");
|
||||
if($("#bottom").hasClass("reverse")){
|
||||
localStorage.removeItem("reverse")
|
||||
}else{
|
||||
localStorage.setItem("reverse","true")
|
||||
}
|
||||
}
|
||||
function tips(mode){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('endmem', "");
|
||||
clearInterval(clockint);
|
||||
clearInterval(spotStart);
|
||||
if(mode=="ver"){
|
||||
tipsToggle()
|
||||
$("#tips-text").html('<img src="../../img/desk.png" width="20" onclick="todo(\'!TheDesk! It\\\'s a nice client!\')"><span style="font-size:20px">TheDesk</span> '+localStorage.getItem("ver")+'[<i class="material-icons" style="font-size:1.2rem;top: 3px;position: relative;">supervisor_account</i><span id="persons">1+</span>]')
|
||||
localStorage.setItem("tips","ver")
|
||||
}else if(mode=="clock"){
|
||||
tipsToggle()
|
||||
localStorage.setItem("tips","clock")
|
||||
clock()
|
||||
}else if(mode=="memory"){
|
||||
tipsToggle()
|
||||
localStorage.setItem("tips","memory")
|
||||
startmem();
|
||||
}else if(mode=="trend"){
|
||||
tipsToggle()
|
||||
localStorage.setItem("tips","trend")
|
||||
trendTagonTip()
|
||||
}else if(mode=="spotify"){
|
||||
tipsToggle()
|
||||
localStorage.setItem("tips","spotify")
|
||||
var json=nowplaying("spotifytips")
|
||||
spotifytips(json)
|
||||
}
|
||||
}
|
||||
//メモリ
|
||||
function startmem(){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
ipc.send('startmem', "");
|
||||
ipc.on('memory', function (event, arg) {
|
||||
var use=arg[0];
|
||||
var cpu=arg[1];
|
||||
var total=arg[2]
|
||||
$("#tips-text").html(cpu+"<br>Memory:"+Math.floor(use/1024/1024/102.4)/10+"/"+Math.floor(total/1024/1024/102.4)/10+"GB("+Math.floor(use/total*100)+"%)")
|
||||
})
|
||||
}
|
||||
//トレンドタグ
|
||||
function trendTagonTip(){
|
||||
$(".trendtag").remove();
|
||||
var domain="imastodon.net"
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/trend_tags"
|
||||
console.log(start)
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if (json) {
|
||||
var tags="";
|
||||
json=json.score;
|
||||
Object.keys(json).forEach(function(tag) {
|
||||
tags = tags + '<a onclick="tagShow(\'' + tag + '\')" class="pointer">#' + tag + '</a><span class="hide" data-tag="' + tag + '"> <a onclick="tagTL(\'tag\',\'' + tag + '\',false,\'add\')" class="pointer" title="#' + tag + 'のタイムライン">TL</a> <a onclick="show();brInsert(\'#' + tag + '\')" class="pointer" title="#' + tag + 'でトゥート">Toot</a></span><br>';
|
||||
});
|
||||
$("#tips-text").html('<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' + tags+'</div>');
|
||||
trendTagonTipInterval()
|
||||
}else{
|
||||
$("#tips-text").html("");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
//Spotify
|
||||
function spotifytips(){
|
||||
var start = "https://thedesk.top/now-playing?at="+localStorage.getItem("spotify")+"&rt="+localStorage.getItem("spotify-refresh");
|
||||
var at = localStorage.getItem("spotify");
|
||||
if(at){
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
var ms=json.progress_ms;
|
||||
var last=1000-ms%1000;
|
||||
var item=json.item;
|
||||
var img=item.album.images[0].url;
|
||||
var artisttxt="";
|
||||
for(i=0;i<item.artists.length;i++){
|
||||
if(i>0){
|
||||
artisttxt=artisttxt+","+item.artists[i].name;
|
||||
}else{
|
||||
artisttxt=item.artists[0].name;
|
||||
}
|
||||
}
|
||||
artisttxt=escapeHTML(artisttxt);
|
||||
sleep(last);
|
||||
var tms=item.duration_ms;
|
||||
var per=ms/item.duration_ms*100;
|
||||
ms=ms/1000;
|
||||
tms=tms/1000;
|
||||
var s=Math.round(ms)%60;
|
||||
if(s<10){
|
||||
s="0"+s;
|
||||
}
|
||||
var m=(Math.round(ms)-Math.round(ms)%60)/60;
|
||||
var ts=Math.round(tms)%60;
|
||||
if(ts<10){
|
||||
ts="0"+ts;
|
||||
}
|
||||
var tm=(Math.round(tms)-Math.round(tms)%60)/60;
|
||||
$("#tips-text").html('<div id="spot-box"><i class="material-icons pointer" onclick="spotifytips()" style="font-size:12px">refresh</i><img src="'+img+'" width="20" id="spot-img">'+escapeHTML(item.name)+'<span class="gray sml" id="spot-art">'+artisttxt+'</span><span id="spot-m">'+m+'</span>:<span id="spot-s">'+s+'</span>/'+tm+":"+ts+'</span></div><div class="progress grey"><div class="determinate spotify-prog grey lighten-2" style="width: '+per+'%" data-s="'+Math.round(ms)+'" data-total="'+item.duration_ms+'"></div></div>');
|
||||
spotint=setInterval(spotStart, 1000);
|
||||
});
|
||||
}else{
|
||||
alert(lang.lang_spotify_acct);
|
||||
}
|
||||
}
|
||||
function spotStart(){
|
||||
var total=$(".spotify-prog").attr("data-total");
|
||||
var s=$(".spotify-prog").attr("data-s");
|
||||
var news=s*1+1;
|
||||
var per=news*100000/total;
|
||||
var ns=news%60;
|
||||
var nm=(news-ns)/60;
|
||||
if(ns<10){
|
||||
ns="0"+ns;
|
||||
}
|
||||
if(per>=100){
|
||||
clearInterval(spotStart);
|
||||
spotifytips()
|
||||
}else{
|
||||
$("#spot-m").text(nm);
|
||||
$("#spot-s").text(ns);
|
||||
}
|
||||
$(".spotify-prog").attr("data-s",news);
|
||||
$(".spotify-prog").css("width",per+"%");
|
||||
}
|
||||
|
||||
|
||||
function trendTagonTipInterval(){
|
||||
setTimeout(trendTagonTip, 6000000);
|
||||
}
|
||||
//時計
|
||||
var clockint;
|
||||
function clock(){
|
||||
var now=new Date();
|
||||
var last=1000-now.getTime()%1000;
|
||||
sleep(last);
|
||||
clockint=setInterval(clockStart, 1000);
|
||||
}
|
||||
function clockStart(){
|
||||
var nowTime = new Date(); // 現在日時を得る
|
||||
var nowHour = nowTime.getHours(); // 時を抜き出す
|
||||
if(nowHour<10){nowHour="0"+nowHour }
|
||||
var nowMin = nowTime.getMinutes(); // 分を抜き出す
|
||||
if(nowMin<10){nowMin="0"+nowMin }
|
||||
var nowSec = nowTime.getSeconds(); // 秒を抜き出す
|
||||
if(nowSec<10){nowSec="0"+nowSec }
|
||||
var msg = nowTime.getFullYear()+"/"+(nowTime.getMonth()+1)+"/"+nowTime.getDate()+'<span style="font-size:20px; font-family:Open Sans">'+nowHour + ":" + nowMin + ":" + nowSec+"</span>";
|
||||
$("#tips-text").html(msg);
|
||||
}
|
||||
function sleep(waitMsec) {
|
||||
var startMsec = new Date();
|
||||
while (new Date() - startMsec < waitMsec);
|
||||
}
|
||||
function tipsToggle(){
|
||||
$("#tips").toggleClass("hide");
|
||||
$("#tips-menu").toggleClass("hide");
|
||||
}
|
||||
if(localStorage.getItem("tips")){
|
||||
tips(localStorage.getItem("tips"));
|
||||
}
|
||||
|
||||
@@ -5,40 +5,64 @@ function utl(user, more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (user == "--now") {
|
||||
var user = $('#his-data').attr("user-id");
|
||||
}
|
||||
if (more) {
|
||||
var sid = $("#his-tl .cvo").last().attr("toot-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
if (more) {
|
||||
var sid = $("#his-tl .cvo").last().attr("toot-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses" +
|
||||
plus;
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-tl .cvo").last().attr("toot-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
req.userId=user;
|
||||
var start = "https://" + domain + "/api/users/notes"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses" +
|
||||
plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var templete = misskeyParse(json, '', acct_id, 'user');
|
||||
}else{
|
||||
var templete = parse(json, '', acct_id, 'user');
|
||||
}
|
||||
if(!json[0]){
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
var height = $("#his-data-content").height() - 245;
|
||||
$(".tab-content").css('height', height);
|
||||
if (more) {
|
||||
$("#his-tl-contents").append(templete);
|
||||
} else {
|
||||
pinutl(templete,user, acct_id)
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
pinutl(templete,user, acct_id)
|
||||
}else{
|
||||
$("#his-tl-contents").html(templete);
|
||||
}
|
||||
}
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
@@ -49,7 +73,7 @@ function pinutl(before,user, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (user == "--now") {
|
||||
var user = $('#his-data').attr("user-id");
|
||||
}
|
||||
@@ -68,13 +92,11 @@ function pinutl(before,user, acct_id) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
var templete = parse(json, 'pinned', acct_id,'user');
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete="";
|
||||
}
|
||||
var height = $("#his-data-content").height() - 245;
|
||||
$(".tab-content").css('height', height);
|
||||
$("#his-tl-contents").html(templete+before);
|
||||
$("#his-tl-contents").html(templete+before);
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
@@ -85,33 +107,55 @@ function flw(user, more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (user == "--now") {
|
||||
var user = $('#his-data').attr("user-id");
|
||||
}
|
||||
if (more) {
|
||||
var sid = $("#his-follow-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-follow-list .cvo").last().attr("user-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
req.userId=user;
|
||||
var start = "https://" + domain + "/api/users/following"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}else{
|
||||
if (more) {
|
||||
var sid = $("#his-follow-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/following" +
|
||||
plus
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/following" +
|
||||
plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
fetch(start,i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = userparse(json,'',acct_id);
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var templete = misskeyUserparse(json,'',acct_id);
|
||||
}else{
|
||||
var templete = userparse(json,'',acct_id);
|
||||
}
|
||||
if(templete==""){
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
if (more) {
|
||||
$("#his-follow-list-contents").append(templete);
|
||||
@@ -129,33 +173,55 @@ function fer(user, more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (user == "--now") {
|
||||
var user = $('#his-data').attr("user-id");
|
||||
}
|
||||
if (more) {
|
||||
var sid = $("#his-follower-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-follower-list .cvo").last().attr("user-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
req.userId=user;
|
||||
var start = "https://" + domain + "/api/users/followers"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}else{
|
||||
if (more) {
|
||||
var sid = $("#his-follower-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/followers" +
|
||||
plus
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user + "/followers" +
|
||||
plus;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = userparse(json,'',acct_id);
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var templete = misskeyUserparse(json,'',acct_id);
|
||||
}else{
|
||||
var templete = userparse(json,'',acct_id);
|
||||
}
|
||||
if(templete==""){
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
if (more) {
|
||||
$("#his-follower-list-contents").append(templete);
|
||||
@@ -173,29 +239,51 @@ function showFav(more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
if (more) {
|
||||
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/favourites" + plus
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-fav-list .cvo").last().attr("toot-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
var start = "https://" + domain + "/api/i/favorites"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/favourites" + plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
|
||||
fetch(start, i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = parse(json, '', acct_id);
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
var templete = parse(json, '', acct_id,'user');
|
||||
}else{
|
||||
var templete = misskeyParse(json, '', acct_id,'user');
|
||||
}
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
if (more) {
|
||||
$("#his-fav-list-contents").append(templete);
|
||||
@@ -212,28 +300,46 @@ function showMut(more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-muting-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-muting-list .cvo").last().attr("user-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
var start = "https://" + domain + "/api/mute/list"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}else{
|
||||
if (more) {
|
||||
var sid = $("#his-muting-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/mutes" + plus
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/mutes" + plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
|
||||
fetch(start,i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
var templete = userparse(json,'',acct_id);
|
||||
if (more) {
|
||||
@@ -251,7 +357,11 @@ function showBlo(more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
$("#his-blocking-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
|
||||
return false;
|
||||
}
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-blocking-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
@@ -272,7 +382,7 @@ function showBlo(more, acct_id) {
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
var templete = userparse(json,'',acct_id);
|
||||
if (more) {
|
||||
@@ -286,33 +396,56 @@ function showBlo(more, acct_id) {
|
||||
|
||||
//フォロリクリスト
|
||||
function showReq(more, acct_id) {
|
||||
|
||||
if (!acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-request-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var req={i:at}
|
||||
if (more) {
|
||||
var sid = $("#his-request-list .cvo").last().attr("user-id");
|
||||
req.maxId=sid;
|
||||
}
|
||||
var start = "https://" + domain + "/following/requests/list"
|
||||
var i={
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body:JSON.stringify(req)
|
||||
}
|
||||
}else{
|
||||
if (more) {
|
||||
var sid = $("#his-request-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/follow_requests" + plus
|
||||
var i={
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
}
|
||||
}
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/follow_requests" + plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
fetch(start,i).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var templete = userparse(json, 'true',acct_id);
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
var templete = userparse(json, 'true',acct_id);
|
||||
}else{
|
||||
var templete = misskeyUserparse(json, 'true',acct_id);
|
||||
}
|
||||
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
if (more) {
|
||||
$("#his-request-list-contents").append(templete);
|
||||
@@ -329,7 +462,11 @@ function showDom(more, acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
$("#his-domain-list-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
|
||||
return false;
|
||||
}
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-domain-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
@@ -352,7 +489,7 @@ function showDom(more, acct_id) {
|
||||
}).then(function(json) {
|
||||
var templete = "";
|
||||
if(!json[0]){
|
||||
templete="データはありません<br>";
|
||||
templete=lang.lang_details_nodata+"<br>";
|
||||
}
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var domain = json[key];
|
||||
@@ -370,3 +507,94 @@ function showDom(more, acct_id) {
|
||||
});
|
||||
}
|
||||
|
||||
//フォローレコメンデーションリスト
|
||||
function showFrl(more, acct_id) {
|
||||
if (!acct_id) {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
$("#his-follow-recom-contents").html(lang.lang_hisdata_notonmisskey+"<br>");
|
||||
return false;
|
||||
}
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
if (more) {
|
||||
var sid = $("#his-follow-recom-list .cvo").last().attr("user-id");
|
||||
var plus = "?max_id=" + sid;
|
||||
} else {
|
||||
var plus = "";
|
||||
}
|
||||
var start = "https://" + domain + "/api/v1/suggestions" + plus
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
$("#his-follow-recom-contents").html(lang.lang_details_nodata+"("+lang.lang_hisdata_frcreq+")<br>");
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
if(!json[0]){
|
||||
console.log("No data");
|
||||
templete=lang.lang_details_nodata+"("+lang.lang_hisdata_frcwarn+")<br>";
|
||||
}else{
|
||||
var templete = userparse(json,'',acct_id);
|
||||
}
|
||||
|
||||
if (more) {
|
||||
$("#his-follow-recom-contents").append(templete);
|
||||
} else {
|
||||
$("#his-follow-recom-contents").html(templete);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
//ユーザーマッチングリスト
|
||||
function showMat() {
|
||||
|
||||
$("#his-matching-list-contents").html(lang.lang_hisdata_taketime);
|
||||
var full=$("#his-acct").attr("fullname");
|
||||
var acct_id=$("#his-data").attr("use-acct");
|
||||
full=full.split("@");
|
||||
var start = "https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-filtered-api.cgi?"+full[1]+"+" + full[0];
|
||||
console.log(start);
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
},
|
||||
//body: JSON.stringify({})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
var templete="";
|
||||
Object.keys(json).forEach(function(key) {
|
||||
var user = json[key];
|
||||
templete = templete +
|
||||
'<div class="" style="padding-top:5px;">' +
|
||||
'<div style="padding:0; margin:0; width:400px; max-width:100%; display:flex; align-items:flex-end;">' +
|
||||
'<div style="flex-basis:40px;"><a onclick="udgEx(\'' + user.user + '\',' +
|
||||
acct_id + ');" user="' + user.user + '" class="udg">' +
|
||||
'<img src="' + user.avatar + '" width="40" class="prof-img" user="' + user.user + '"></a></div>' +
|
||||
'<div style="flex-grow:3; overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"><big>' +
|
||||
escapeHTML(user.screen_name) + '</big></div>' +
|
||||
'<div class="sml gray" style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;user-select:auto; cursor:text;"> @' +
|
||||
user.user + '@'+user.host+'</div>' +
|
||||
'</div>' +
|
||||
'<div class="divider"></div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
});
|
||||
$("#his-matching-list").css("height",$("#his-float-data").height()-$("#his-basic-prof").height()-$("#his-des").height()-$("#his-plus-action").height()+"px");
|
||||
$("#his-matching-list-contents").html(templete);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ function profedit() {
|
||||
var acct_id = $('#his-data').attr("use-acct");
|
||||
todo("Updating...");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/update_credentials";
|
||||
var name = $("#his-name-val").val();
|
||||
var des = $("#his-des-val").val();
|
||||
@@ -12,13 +12,13 @@ function profedit() {
|
||||
httpreq.open('PATCH', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
display_name: name,
|
||||
note: des
|
||||
note: des,
|
||||
}));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
$('#his-data').modal('close');
|
||||
todc();
|
||||
}
|
||||
@@ -41,16 +41,16 @@ function imgChange(imgfile, target) {
|
||||
var fd = new FormData();
|
||||
fd.append(target, blob);
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/update_credentials";
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('PATCH', start, true);
|
||||
httpreq.upload.addEventListener("progress", progshow, false);
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = 'json';
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(fd);
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState == 4) {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
console.log(json);
|
||||
$('#his-data').modal('close');
|
||||
|
||||
@@ -6,7 +6,7 @@ if(location.search){
|
||||
var mode=m[1];
|
||||
var codex=m[2];
|
||||
if(mode=="user"){
|
||||
udgEx(codex,0);
|
||||
udgEx(codex,'main');
|
||||
}
|
||||
}
|
||||
function udgEx(user,acct_id){
|
||||
@@ -16,9 +16,13 @@ function udgEx(user,acct_id){
|
||||
if(acct_id=="selector"){
|
||||
acct_id = $("#user-acct-sel").val();
|
||||
}
|
||||
if(acct_id=="main"){
|
||||
acct_id = localStorage.getItem("main");
|
||||
}
|
||||
console.log(user);
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){ return false; }
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/search?resolve=true&q="+user
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -32,10 +36,17 @@ function udgEx(user,acct_id){
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
var id=json.accounts[0].id;
|
||||
udg(id,acct_id);
|
||||
console.log(json);
|
||||
if(json.accounts){
|
||||
var id=json.accounts[0].id;
|
||||
udg(id,acct_id);
|
||||
}else{
|
||||
var url="https://"+user.split('@')[1]+"/@"+user.split('@')[0];
|
||||
const {shell} = require('electron');
|
||||
shell.openExternal(url);
|
||||
}
|
||||
});
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
function udg(user, acct_id) {
|
||||
reset();
|
||||
@@ -45,7 +56,11 @@ function udg(user, acct_id) {
|
||||
}
|
||||
todo("User Data Loading...");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
if(localStorage.getItem("mode_" + domain)=="misskey"){
|
||||
misskeyUdg(user, acct_id)
|
||||
return;
|
||||
}
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/" + user;
|
||||
console.log(start);
|
||||
fetch(start, {
|
||||
@@ -60,6 +75,7 @@ function udg(user, acct_id) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
//一つ前のユーザーデータ
|
||||
if (!localStorage.getItem("history")){
|
||||
$("#his-history-btn").prop("disabled",true);
|
||||
@@ -70,9 +86,9 @@ function udg(user, acct_id) {
|
||||
//moved設定時
|
||||
if (json.moved) {
|
||||
Materialize.toast(
|
||||
'このアカウントは移行します<button class="btn-flat toast-action" onclick="udg(\"' +
|
||||
json.moved + ','+acct_id+'\")">移行先を見る</button>', 4000)
|
||||
} else {
|
||||
lang.lang_showontl_movetxt+'<button class="btn-flat toast-action" onclick="udg(\'' +
|
||||
json.moved.id + '\',\''+acct_id+'\')">'+lang.lang_showontl_movebtn+'</button>', 4000)
|
||||
}
|
||||
$('#his-data').modal('open');
|
||||
$('#his-data').attr("user-id", user);
|
||||
$('#his-data').attr("use-acct", acct_id);
|
||||
@@ -87,32 +103,62 @@ function udg(user, acct_id) {
|
||||
utl(json.id, '', acct_id);
|
||||
flw(json.id, '', acct_id);
|
||||
fer(json.id, '', acct_id);
|
||||
$("#his-name").text(json.display_name);
|
||||
var dis_name=escapeHTML(json.display_name);
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
var note=json.note;
|
||||
if(json.emojis){
|
||||
var actemojick = json.emojis[0];
|
||||
}else{
|
||||
var actemojick=false;
|
||||
}
|
||||
//絵文字があれば
|
||||
if (actemojick) {
|
||||
Object.keys(json.emojis).forEach(function(key5) {
|
||||
var emoji = json.emojis[key5];
|
||||
var shortcode = emoji.shortcode;
|
||||
var emoji_url = '<img src="' + emoji.url +
|
||||
'" class="emoji-img" data-emoji="'+shortcode+'">';
|
||||
var regExp = new RegExp(":" + shortcode + ":", "g");
|
||||
dis_name = dis_name.replace(regExp, emoji_url);
|
||||
note = note.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
$("#his-name").html(dis_name);
|
||||
$("#his-acct").text(json.acct);
|
||||
$("#his-acct").attr("fullname",fullname);
|
||||
$("#his-prof").attr("src", json.avatar);
|
||||
$('#his-data').css('background-image', 'url(' + json.header + ')');
|
||||
$("#his-sta").text(json.statuses_count);
|
||||
$("#his-follow").text(json.following_count);
|
||||
$("#his-follower").text(json.followers_count);
|
||||
var flerc=json.followers_count;
|
||||
if(flerc<0){
|
||||
flerc="-";
|
||||
}
|
||||
$("#his-follower").text(flerc);
|
||||
$("#his-since").text(crat(json.created_at));
|
||||
$("#his-openin").attr("data-href", json.url);
|
||||
if(json.fields){
|
||||
if(json.fields.length>0){
|
||||
var note=json.note+'My Fields<br><table style="vertical-align: baseline; text-align:center; padding:0;">'
|
||||
note=note+'<table id="his-field">'
|
||||
for(var i=0;i<json.fields.length;i++){
|
||||
var fname=json.fields[i].name;
|
||||
var fval=json.fields[i].value;
|
||||
note=note+'<tr style="height:1.5rem; padding:0;"><td style="height:1.5rem; padding:0; background-color:#757575; text-align:center; ">'+fname+'</td><td style="height:1.5rem; padding:0; padding-left:5px;">'+fval+'</td></tr>';
|
||||
fval=twemoji.parse(fval);
|
||||
note=note+'<tr><td class="his-field-title">'+fname+'</td><td class="his-field-content">'+fval+'</td></tr>';
|
||||
}
|
||||
note=note+'</table>'
|
||||
$("#his-des").html(note);
|
||||
$("#his-des").html(twemoji.parse(note));
|
||||
}else{
|
||||
$("#his-des").html(json.note);
|
||||
$("#his-des").html(twemoji.parse(note));
|
||||
}
|
||||
}else{
|
||||
$("#his-des").html(json.note);
|
||||
$("#his-des").html(twemoji.parse(note));
|
||||
}
|
||||
if(json.bot){
|
||||
$("#his-bot").html(lang.lang_showontl_botacct);
|
||||
}
|
||||
$('#his-data').css('background-size', 'cover');
|
||||
$("#his-data .tab-content").css("height",$("#his-float-timeline").height()-70+"px")
|
||||
localStorage.setItem("history" , user);
|
||||
//自分の時
|
||||
if (json.acct == localStorage.getItem("user_"+acct_id)) {
|
||||
@@ -121,7 +167,14 @@ function udg(user, acct_id) {
|
||||
showMut('', acct_id);
|
||||
showDom('', acct_id);
|
||||
showReq('', acct_id);
|
||||
showFrl('', acct_id);
|
||||
$("#his-name-val").val(json.display_name);
|
||||
if(json.fields.length>0){
|
||||
$("#his-f1-name").val(json.fields[0].name); $("#his-f1-val").val($.strip_tags(json.fields[0].value));
|
||||
$("#his-f2-name").val(json.fields[1].name); $("#his-f2-val").val($.strip_tags(json.fields[1].value));
|
||||
$("#his-f3-name").val(json.fields[2].name); $("#his-f3-val").val($.strip_tags(json.fields[2].value));
|
||||
$("#his-f4-name").val(json.fields[3].name); $("#his-f4-val").val($.strip_tags(json.fields[3].value));
|
||||
}
|
||||
var des = json.note;
|
||||
des = des.replace(/<br \/>/g, "\n")
|
||||
des = $.strip_tags(des);
|
||||
@@ -136,11 +189,128 @@ function udg(user, acct_id) {
|
||||
$(".only-his-data").hide();
|
||||
} else {
|
||||
relations(user, acct_id);
|
||||
hisList(user,acct_id);
|
||||
$(".only-my-data").hide();
|
||||
$(".only-his-data").show();
|
||||
}
|
||||
todc();
|
||||
});
|
||||
}
|
||||
function misskeyUdg(user, acct_id) {
|
||||
reset();
|
||||
if (!user) {
|
||||
user = localStorage.getItem("user-id_"+acct_id);
|
||||
console.log(user);
|
||||
}
|
||||
todo("User Data Loading...");
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
if(localStorage.getItem("mode_" + domain)!="misskey"){
|
||||
udg(user, acct_id)
|
||||
return;
|
||||
}
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/users/show";
|
||||
console.log(user);
|
||||
fetch(start, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
i:at,
|
||||
userId:user
|
||||
})
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).catch(function(error) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function(json) {
|
||||
console.log(json);
|
||||
//一つ前のユーザーデータ
|
||||
if (!localStorage.getItem("history")){
|
||||
$("#his-history-btn").prop("disabled",true);
|
||||
}else{
|
||||
$("#his-history-btn").prop("disabled",false);
|
||||
$('#his-data').attr("history", localStorage.getItem("history"));
|
||||
}
|
||||
$('#his-data').modal('open');
|
||||
$('#his-data').attr("user-id", user);
|
||||
$('#his-data').attr("use-acct", acct_id);
|
||||
if(json.host){
|
||||
//Remote
|
||||
$('#his-data').attr("remote", "false");
|
||||
var fullname=json.username+"@"+json.host;
|
||||
}else{
|
||||
$('#his-data').attr("remote", "false");
|
||||
var fullname=json.acct+"@"+domain;
|
||||
}
|
||||
utl(json.id, '', acct_id);
|
||||
flw(json.id, '', acct_id);
|
||||
fer(json.id, '', acct_id);
|
||||
if(json.name){
|
||||
var dis_name=escapeHTML(json.name);
|
||||
dis_name=twemoji.parse(dis_name);
|
||||
}else{
|
||||
var dis_name=json.name
|
||||
}
|
||||
$("#his-name").html(dis_name);
|
||||
$("#his-acct").text(json.username);
|
||||
$("#his-acct").attr("fullname",fullname);
|
||||
$("#his-prof").attr("src", json.avatarUrl);
|
||||
$('#his-data').css('background-image', 'url(' + json.bannerUrl + ')');
|
||||
$("#his-sta").text(json.notesCount);
|
||||
$("#his-follow").text(json.followingCount);
|
||||
$("#his-follower").text(json.followersCount);
|
||||
$("#his-since").text(crat(json.createdAt));
|
||||
var note=json.description;
|
||||
$("#his-des").html(twemoji.parse(note));
|
||||
if(json.isCat){
|
||||
$("#his-bot").html("Cat"+twemoji.parse("😺"));
|
||||
}
|
||||
$('#his-data').css('background-size', 'cover');
|
||||
localStorage.setItem("history" , user);
|
||||
//自分の時
|
||||
if (json.username == localStorage.getItem("user_"+acct_id) && !json.host) {
|
||||
//showFav('', acct_id);
|
||||
//showMut('', acct_id);
|
||||
//showReq('', acct_id);
|
||||
showFrl('', acct_id);
|
||||
$("#his-name-val").val(json.name);
|
||||
var des = json.note;
|
||||
des = nl2br(des)
|
||||
des = $.strip_tags(des);
|
||||
$("#his-des-val").val(des);
|
||||
$("#his-follow-btn").hide();
|
||||
$("#his-block-btn").hide();
|
||||
$("#his-mute-btn").hide();
|
||||
$("#his-notf-btn").hide();
|
||||
$("#his-domain-btn").hide();
|
||||
$("#his-emp-btn").hide();
|
||||
$(".only-my-data").show();
|
||||
$(".only-his-data").hide();
|
||||
} else {
|
||||
if (json.isFollowing) {
|
||||
//自分がフォローしている
|
||||
$("#his-data").addClass("following");
|
||||
$("#his-follow-btn").text(lang.lang_status_unfollow);
|
||||
hisList(user,acct_id);
|
||||
}else{
|
||||
$("#his-follow-btn").text(lang.lang_status_follow);
|
||||
}
|
||||
if (json.isFollowed) {
|
||||
//フォローされてる
|
||||
$("#his-relation").text(lang.lang_showontl_followed);
|
||||
}
|
||||
$("#his-block-btn").hide();
|
||||
if (json.isMuted) {
|
||||
$("#his-data").addClass("muting");
|
||||
$("#his-mute-btn").text(lang.lang_status_unmute);
|
||||
}else{
|
||||
$("#his-mute-btn").text(lang.lang_status_mute);
|
||||
}
|
||||
$(".only-my-data").hide();
|
||||
$(".only-his-data").show();
|
||||
}
|
||||
todc();
|
||||
});
|
||||
}
|
||||
@@ -156,12 +326,13 @@ function profShow(){
|
||||
var user = localStorage.getItem("user-id_"+acct_id);
|
||||
console.log("user-id_"+acct_id+":"+user);
|
||||
udg(user, acct_id)
|
||||
hide();
|
||||
}
|
||||
|
||||
//FF関係取得
|
||||
function relations(user, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem(domain + "_at");
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/accounts/relationships?id=" + user;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
@@ -180,42 +351,55 @@ function relations(user, acct_id) {
|
||||
if (json.following) {
|
||||
//自分がフォローしている
|
||||
$("#his-data").addClass("following");
|
||||
$("#his-follow-btn").text("フォロー解除");
|
||||
$("#his-follow-btn").text(lang.lang_status_unfollow);
|
||||
hisList(user,acct_id);
|
||||
}else{
|
||||
$("#his-follow-btn").text("フォロー");
|
||||
$("#his-follow-btn").text(lang.lang_status_follow);
|
||||
}
|
||||
if (json.followed_by) {
|
||||
//フォローされてる
|
||||
$("#his-relation").text("フォローされています");
|
||||
$("#his-relation").text(lang.lang_showontl_followed);
|
||||
}
|
||||
if (json.blocking) {
|
||||
$("#his-data").addClass("blocking");
|
||||
$("#his-block-btn").text("ブロック解除");
|
||||
$("#his-block-btn").text(lang.lang_status_unblock);
|
||||
}else{
|
||||
$("#his-block-btn").text("ブロック");
|
||||
$("#his-block-btn").text(lang.lang_status_block);
|
||||
}
|
||||
if (json.muting) {
|
||||
$("#his-data").addClass("muting");
|
||||
$("#his-mute-btn").text("ミュート解除");
|
||||
$("#his-mute-btn").text(lang.lang_status_unmute);
|
||||
}else{
|
||||
$("#his-mute-btn").text("ミュート");
|
||||
$("#his-mute-btn").text(lang.lang_status_mute);
|
||||
}
|
||||
if (json.muting_notifications) {
|
||||
$("#his-data").addClass("mutingNotf");
|
||||
$("#his-notf-btn").text("通知ミュート解除");
|
||||
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_unmute);
|
||||
}else{
|
||||
$("#his-notf-btn").text("通知ミュート");
|
||||
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
|
||||
}
|
||||
if (json.domain_blocking) {
|
||||
$("#his-data").addClass("blockingDom");
|
||||
$("#his-domain-btn").text("ドメインブロック解除");
|
||||
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_unblock);
|
||||
}else{
|
||||
$("#his-domain-btn").text("ドメインブロック");
|
||||
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
|
||||
}
|
||||
//Endorsed
|
||||
if(json.endorsed){
|
||||
$("#his-end-btn").addClass("endorsed");
|
||||
$("#his-end-btn").text(lang.lang_status_unendorse)
|
||||
}else{
|
||||
$("#his-end-btn").removeClass("endorsed");
|
||||
$("#his-end-btn").text(lang.lang_status_endorse)
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function profbrws(){
|
||||
const {shell} = require('electron');
|
||||
var url=$("#his-openin").attr("data-href")
|
||||
shell.openExternal(url);
|
||||
}
|
||||
//オールリセット
|
||||
function hisclose() {
|
||||
$('#his-data').modal('close');
|
||||
@@ -226,10 +410,12 @@ function hisclose() {
|
||||
function reset(){
|
||||
$(".tab-content:eq(0)").show();
|
||||
$(".tab-content:gt(0)").hide();
|
||||
$(".active-back").removeClass("active-back");
|
||||
$(".column-first").addClass("active-back");
|
||||
$("#his-name").text("Loading");
|
||||
$("#his-acct").text("");
|
||||
$("#his-prof").attr("src", "./img/loading.svg");
|
||||
$('#his-data').css('background-image', 'url(./img/loading.svg)');
|
||||
$("#his-prof").attr("src", "../../img/loading.svg");
|
||||
$('#his-data').css('background-image', 'url(../../img/loading.svg)');
|
||||
$("#his-sta").text("");
|
||||
$("#his-follow").text("");
|
||||
$("#his-follower").text("");
|
||||
@@ -241,20 +427,32 @@ function reset(){
|
||||
$("#his-data").removeClass("blocking");
|
||||
$("#his-data").removeClass("mutingNotf");
|
||||
$("#his-data").removeClass("blockingDom");
|
||||
$("#his-end-btn").removeClass("endorsed");
|
||||
$("#his-bot").html("");
|
||||
$("#his-follow-btn").show();
|
||||
$("#his-block-btn").show();
|
||||
$("#his-mute-btn").show();
|
||||
$("#his-notf-btn").show();
|
||||
$("#his-domain-btn").show();
|
||||
$("#his-emp-btn").show();
|
||||
$("#his-follow-btn").text("フォロー");
|
||||
$("#his-mute-btn").text("ミュート");
|
||||
$("#his-block-btn").text("ブロック");
|
||||
$("#his-notf-btn").text("通知ミュート");
|
||||
$("#his-domain-btn").text("ドメインブロック");
|
||||
$("#his-follow-btn").text(lang.lang_status_follow);
|
||||
$("#his-mute-btn").text(lang.lang_status_mute);
|
||||
$("#his-block-btn").text(lang.lang_status_block);
|
||||
$("#his-notf-btn").text(lang.lang_showontl_notf+lang.lang_status_mute);
|
||||
$("#his-domain-btn").text(lang.lang_showontl_domain+lang.lang_status_block);
|
||||
$("#his-relation").text("");
|
||||
$(".cont-series").html("");
|
||||
$("#domainblock").val("");
|
||||
$("#his-lists-a").html(lang.lang_showontl_listwarn);
|
||||
$("#his-lists-b").html('');
|
||||
$("#his-name-val").val("");
|
||||
$("#his-des-val").val("");
|
||||
$("#his-f1-name").val(""); $("#his-f1-val").val("");
|
||||
$("#his-f2-name").val(""); $("#his-f2-val").val("");
|
||||
$("#his-f3-name").val(""); $("#his-f3-val").val("");
|
||||
$("#his-f4-name").val(""); $("#his-f4-val").val("");
|
||||
$("#his-endorse").html("");
|
||||
$("#his-openin").attr("data-href", "");
|
||||
}
|
||||
$('#my-data-nav .custom-tab').on('click',function(){
|
||||
var target=$(this).find("a").attr("go");
|
||||
|
||||
75
app/language.html
Normal file
75
app/language.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<!doctype html>
|
||||
<html lang="ja">
|
||||
<head>
|
||||
<title>Languages - TheDesk</title>
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
|
||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body style="max-width:100vw; width:500px; padding:10px;">
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first.js"></script>
|
||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
|
||||
<script type="text/javascript" src="./js/lang/lang.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
|
||||
<h3 id="language"></h3>
|
||||
<select id="language-sel" style="color:black" onchange="btn();"></select>
|
||||
<button class="btn waves-effect indigo nex" style="width:100%; max-width:200px;" onclick="sel()" id="sel"></button>
|
||||
<a href="index.html" class="btn waves-effect orange nex" style="width:100%; max-width:200px;" id="back"></a><br>
|
||||
<br>
|
||||
<span id="notice"></span>
|
||||
<script>
|
||||
//コード受信
|
||||
if(location.search){
|
||||
var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)/);
|
||||
var mode=m[1];
|
||||
if(mode=="redirect"){
|
||||
if(localStorage.getItem("lang")){
|
||||
changelang(localStorage.getItem("lang"))
|
||||
}
|
||||
}
|
||||
}
|
||||
var fstlang="";
|
||||
var langtxt="";
|
||||
var addit="";
|
||||
Object.keys(lang_lang).forEach(function(i) {
|
||||
if(langtxt==""){
|
||||
langtxt=lang_lang[i];
|
||||
$("#sel").text(lang_set[i]);
|
||||
$("#back").text(lang_back[i]);
|
||||
}else{
|
||||
langtxt=langtxt+"/"+lang_lang[i];
|
||||
}
|
||||
addit=addit+"<br>"+lang_langadd[i];
|
||||
var loc=lang_langlocale[i];
|
||||
$("#language-sel").append('<option value="'+i+'">'+loc+'</option>');
|
||||
});
|
||||
|
||||
$("#language").text(langtxt)
|
||||
$("#notice").html(addit)
|
||||
$('select').material_select('update');
|
||||
function sel(){
|
||||
var val=$("#language-sel").val();
|
||||
changelang(val);
|
||||
}
|
||||
function changelang(val){
|
||||
var electron = require("electron");
|
||||
var ipc = electron.ipcRenderer;
|
||||
localStorage.setItem("lang",val);
|
||||
ipc.send('lang', val);
|
||||
ipc.on('langres', function (event, arg) {
|
||||
location.href="index.html";
|
||||
})
|
||||
|
||||
}
|
||||
function btn(){
|
||||
var val=$("#language-sel").val();
|
||||
$("#sel").text(lang_set[val]);
|
||||
$("#back").text(lang_back[val]);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="./js/platform/end.js"></script>
|
||||
155
app/language.js
Normal file
155
app/language.js
Normal file
@@ -0,0 +1,155 @@
|
||||
// Create the Application's main menu
|
||||
function templete(lang,mainWindow){
|
||||
const electron = require("electron");
|
||||
const app = electron.app;
|
||||
const BrowserWindow = electron.BrowserWindow;
|
||||
const dict={
|
||||
"application":{
|
||||
"ja":"アプリケーション",
|
||||
"en":"Application"
|
||||
},
|
||||
"about":{
|
||||
"ja":"TheDeskについて",
|
||||
"en":"About TheDesk"
|
||||
},
|
||||
"quit":{
|
||||
"ja":"終了",
|
||||
"en":"Quit"
|
||||
},
|
||||
"edit":{
|
||||
"ja":"編集",
|
||||
"en":"Edit"
|
||||
},
|
||||
"undo":{
|
||||
"ja":"元に戻す",
|
||||
"en":"Undo"
|
||||
},
|
||||
"redo":{
|
||||
"ja":"やり直す",
|
||||
"en":"Redo"
|
||||
},
|
||||
"cut":{
|
||||
"ja":"切り取り",
|
||||
"en":"Cut"
|
||||
},
|
||||
"copy":{
|
||||
"ja":"コピー",
|
||||
"en":"Copy"
|
||||
},
|
||||
"paste":{
|
||||
"ja":"貼り付け",
|
||||
"en":"Paste"
|
||||
},
|
||||
"selall":{
|
||||
"ja":"すべて選択",
|
||||
"en":"Select All"
|
||||
},
|
||||
"view":{
|
||||
"ja":"表示",
|
||||
"en":"View"
|
||||
},
|
||||
"reload":{
|
||||
"ja":"再読み込み",
|
||||
"en":"Reload"
|
||||
},
|
||||
"window":{
|
||||
"ja":"ウィンドウ",
|
||||
"en":"Window"
|
||||
},
|
||||
"minimun":{
|
||||
"ja":"最小化",
|
||||
"en":"Minimarize"
|
||||
},
|
||||
"close":{
|
||||
"ja":"閉じる",
|
||||
"en":"Close"
|
||||
}
|
||||
}
|
||||
const menu = [{
|
||||
label: dict.application[lang],
|
||||
submenu: [
|
||||
{ label: dict.about[lang], click: function() {
|
||||
var ver=app.getVersion()
|
||||
var window = new BrowserWindow({width: 300, height: 460,
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": false });
|
||||
window.loadURL('file://' + __dirname + '/about.html?ver='+ver);
|
||||
} },
|
||||
{ type: "separator" },
|
||||
{ label: dict.quit[lang], accelerator: "Command+Q", click: function() { app.quit(); }}
|
||||
|
||||
]}, {
|
||||
label: dict.edit[lang],
|
||||
submenu: [
|
||||
{ label: dict.undo[lang], accelerator: "CmdOrCtrl+Z", selector: "undo:" },
|
||||
{ label: dict.redo[lang], accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
|
||||
{ type: "separator" },
|
||||
{ label: dict.cut[lang], accelerator: "CmdOrCtrl+X", selector: "cut:" },
|
||||
{ label: dict.copy[lang], accelerator: "CmdOrCtrl+C", selector: "copy:" },
|
||||
{ label: dict.paste[lang], accelerator: "CmdOrCtrl+V", selector: "paste:" },
|
||||
{ label: dict.selall[lang], accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
|
||||
]},{
|
||||
label: dict.view[lang],
|
||||
submenu: [
|
||||
{
|
||||
label: 'Toggle Developer Tools',
|
||||
accelerator: 'Alt+Command+I',
|
||||
click: function() { mainWindow.toggleDevTools(); }
|
||||
},
|
||||
{
|
||||
label: dict.reload[lang],
|
||||
accelerator: 'CmdOrCtrl+R',
|
||||
click: function() { mainWindow.webContents.send('reload', " "); }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: dict.window[lang],
|
||||
role: 'window',
|
||||
submenu: [
|
||||
{
|
||||
label: dict.minimun[lang],
|
||||
accelerator: 'CmdOrCtrl+M',
|
||||
role: 'minimize'
|
||||
},
|
||||
{
|
||||
label: dict.close[lang],
|
||||
accelerator: 'CmdOrCtrl+W',
|
||||
role: 'close'
|
||||
},
|
||||
]
|
||||
}
|
||||
];
|
||||
return menu;
|
||||
}
|
||||
function delsel(lang){
|
||||
const dict={
|
||||
"delete":{
|
||||
"ja":"カラム削除",
|
||||
"en":"Delete this column"
|
||||
},
|
||||
"mess":{
|
||||
"ja":"カラムを削除しますか?(すべてのカラムのリンク解析がOFFになります。)",
|
||||
"en":"Delete this column(URL analyzes of all windows will be disabled.)"
|
||||
},
|
||||
"yes":{
|
||||
"ja":"はい",
|
||||
"en":"Yes"
|
||||
},
|
||||
"no":{
|
||||
"ja":"いいえ",
|
||||
"en":"No"
|
||||
}
|
||||
}
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: dict.delete[lang],
|
||||
message: dict.mess[lang],
|
||||
buttons: [dict.no[lang], dict.yes[lang]]
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
exports.template = templete;
|
||||
exports.delsel = delsel;
|
||||
575
app/main.js
575
app/main.js
@@ -8,29 +8,34 @@ var Jimp = require("jimp");
|
||||
const shell = electron.shell;
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
const fm = require('font-manager');
|
||||
const language = require('./language.js');
|
||||
const Menu=electron.Menu
|
||||
var updatewin=null;
|
||||
const join = require('path').join;
|
||||
var JSON5 = require('json5');
|
||||
// アプリケーションをコントロールするモジュール
|
||||
const app = electron.app;
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
const WindowsToaster = require('node-notifier').WindowsToaster;
|
||||
var notifier = new WindowsToaster({
|
||||
withFallback: false, // Fallback to Growl or Balloons?
|
||||
customPath: void 0 // Relative path if you want to use your fork of toast.exe
|
||||
});
|
||||
}
|
||||
// ウィンドウを作成するモジュール
|
||||
const BrowserWindow = electron.BrowserWindow;
|
||||
const {
|
||||
download
|
||||
} = require('electron-dl');
|
||||
const join = require('path').join;
|
||||
// メインウィンドウはGCされないようにグローバル宣言
|
||||
let mainWindow;
|
||||
var info_path = join(app.getPath("userData"), "window-size.json");
|
||||
var max_info_path = join(app.getPath("userData"), "max-window-size.json");
|
||||
var lang_path=join(app.getPath("userData"), "language");
|
||||
var customcss=join(app.getPath("userData"), "custom.css");
|
||||
var tmp_img = join(app.getPath("userData"), "tmp.png");
|
||||
var ha_path=join(app.getPath("userData"), "hardwareAcceleration");
|
||||
try{
|
||||
fs.readFileSync(ha_path, 'utf8');
|
||||
app.disableHardwareAcceleration()
|
||||
console.log("disabled: HA");
|
||||
}catch{
|
||||
console.log("enabled: HA");
|
||||
}
|
||||
var window_size;
|
||||
try {
|
||||
window_size = JSON.parse(fs.readFileSync(info_path, 'utf8'));
|
||||
@@ -40,6 +45,31 @@ try {
|
||||
height: 750
|
||||
}; // デフォルトバリュー
|
||||
}
|
||||
var max_window_size;
|
||||
try {
|
||||
max_window_size = JSON.parse(fs.readFileSync(max_info_path, 'utf8'));
|
||||
} catch (e) {
|
||||
max_window_size = {
|
||||
width: "string",
|
||||
height: "string",
|
||||
x: "string",
|
||||
y: "string"
|
||||
|
||||
}; // デフォルトバリュー
|
||||
}
|
||||
try {
|
||||
var lang = fs.readFileSync(lang_path, 'utf8');
|
||||
} catch (e) {
|
||||
var langs=app.getLocale();
|
||||
if(~langs.indexOf("ja")){
|
||||
lang="ja";
|
||||
}else{
|
||||
lang="en";
|
||||
}
|
||||
fs.writeFileSync(lang_path,lang);
|
||||
}
|
||||
console.log(app.getLocale());
|
||||
console.log("launch:"+lang);
|
||||
// 全てのウィンドウが閉じたら終了
|
||||
app.on('window-all-closed', function() {
|
||||
if (process.platform != 'darwin') {
|
||||
@@ -53,9 +83,11 @@ function createWindow() {
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="linux"){
|
||||
var arg={width:window_size.width,height:window_size.height,icon: __dirname + '/thedesk.ico'}
|
||||
}else{
|
||||
var arg=window_size
|
||||
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,icon: __dirname + '/desk.png'}
|
||||
}else if(platform=="win32"){
|
||||
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
|
||||
}else if(platform=="darwin"){
|
||||
var arg={width:window_size.width,height:window_size.height,x:window_size.x,y:window_size.y,simpleFullscreen:true}
|
||||
}
|
||||
mainWindow = new BrowserWindow(arg);
|
||||
electron.session.defaultSession.clearCache(() => {})
|
||||
@@ -65,48 +97,48 @@ function createWindow() {
|
||||
if(m){
|
||||
var mode=m[1];
|
||||
var code=m[2];
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html?mode='+mode+'&code='+code);
|
||||
var plus='?mode='+mode+'&code='+code;
|
||||
}else{
|
||||
//mainWindow.loadURL('file://' + __dirname + '/index.html?mode=share&code=日本語');
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
||||
var plus="";
|
||||
}
|
||||
}else{
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
||||
var plus="";
|
||||
}
|
||||
|
||||
}else{
|
||||
mainWindow.loadURL('file://' + __dirname + '/index.html');
|
||||
var plus="";
|
||||
}
|
||||
mainWindow.loadURL('file://' + __dirname + '/view/'+lang+'/index.html'+plus);
|
||||
if(!window_size.x && !window_size.y){
|
||||
mainWindow.center();
|
||||
}
|
||||
if(window_size.max){
|
||||
mainWindow.maximize();
|
||||
}
|
||||
// ウィンドウが閉じられたらアプリも終了
|
||||
mainWindow.on('closed', function() {
|
||||
mainWindow = null;
|
||||
});
|
||||
mainWindow.on('close', function() {
|
||||
fs.writeFileSync(info_path, JSON.stringify(mainWindow.getBounds()));
|
||||
if(
|
||||
max_window_size.width==mainWindow.getBounds().width &&
|
||||
max_window_size.height==mainWindow.getBounds().height &&
|
||||
max_window_size.x==mainWindow.getBounds().x &&
|
||||
max_window_size.y==mainWindow.getBounds().y
|
||||
){
|
||||
var size={width:mainWindow.getBounds().width,height:mainWindow.getBounds().height,x:mainWindow.getBounds().x,y:mainWindow.getBounds().y,max:true}
|
||||
}else{
|
||||
var size={width:mainWindow.getBounds().width,height:mainWindow.getBounds().height,x:mainWindow.getBounds().x,y:mainWindow.getBounds().y}
|
||||
}
|
||||
fs.writeFileSync(info_path, JSON.stringify(size));
|
||||
});
|
||||
// Create the Application's main menu
|
||||
var template = [{
|
||||
label: "アプリケーション",
|
||||
submenu: [
|
||||
{ label: "TheDeskについて", click: function() { about(); } },
|
||||
{ type: "separator" },
|
||||
{ label: "終了", accelerator: "Command+Q", click: function() { app.quit(); }}
|
||||
]}, {
|
||||
label: "編集",
|
||||
submenu: [
|
||||
{ label: "元に戻す", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
|
||||
{ label: "やり直し", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
|
||||
{ type: "separator" },
|
||||
{ label: "切り取り", accelerator: "CmdOrCtrl+X", selector: "cut:" },
|
||||
{ label: "コピー", accelerator: "CmdOrCtrl+C", selector: "copy:" },
|
||||
{ label: "貼り付け", accelerator: "CmdOrCtrl+V", selector: "paste:" },
|
||||
{ label: "すべて選択", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
|
||||
]}
|
||||
];
|
||||
mainWindow.on('maximize', function() {
|
||||
fs.writeFileSync(max_info_path, JSON.stringify(mainWindow.getBounds()));
|
||||
});
|
||||
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="darwin"){
|
||||
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
|
||||
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang,mainWindow)));
|
||||
}
|
||||
}
|
||||
// Electronの初期化完了後に実行
|
||||
@@ -114,134 +146,229 @@ app.on('ready', createWindow);
|
||||
var onError = function(err,response){
|
||||
console.error(err,response);
|
||||
};
|
||||
|
||||
var ipc = electron.ipcMain;
|
||||
ipc.on('minimize', function(e, args) {
|
||||
mainWindow.minimize();
|
||||
});
|
||||
ipc.on('maximize', function(e, args) {
|
||||
mainWindow.isMaximized() ? mainWindow.unmaximize() : mainWindow.maximize();
|
||||
});
|
||||
ipc.on('native-notf', function(e, args) {
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
const notifier = require('node-notifier')
|
||||
var tmp_imge=tmp_img;
|
||||
Jimp.read(args[2], function (err, lenna) {
|
||||
if (err) throw err;
|
||||
lenna.write(tmp_img);
|
||||
if(!err && lenna){
|
||||
lenna.write(tmp_img);
|
||||
var tmp_imge=tmp_img;
|
||||
}else{
|
||||
var tmp_imge="";
|
||||
}
|
||||
notifier.notify({
|
||||
appID: "top.thedesk",
|
||||
message: args[1],
|
||||
title: args[0],
|
||||
sound: false,//"Bottle",
|
||||
icon : tmp_img,
|
||||
wait:false
|
||||
}, function(error, response) {
|
||||
});
|
||||
icon : tmp_imge,
|
||||
sound: false,
|
||||
wait: true,
|
||||
},
|
||||
function(err, response) {
|
||||
console.log(err, response)
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
//言語
|
||||
ipc.on('lang', function(e, arg) {
|
||||
console.log("set:"+arg);
|
||||
fs.writeFileSync(lang_path,arg);
|
||||
mainWindow.webContents.send('langres', "");
|
||||
})
|
||||
//CSS
|
||||
ipc.on('custom-css-create', function(e, arg) {
|
||||
fs.writeFileSync(customcss,arg);
|
||||
mainWindow.webContents.send('custom-css-create-complete', "");
|
||||
})
|
||||
ipc.on('custom-css-request', function(e, arg) {
|
||||
try {
|
||||
var css = fs.readFileSync(customcss, 'utf8');
|
||||
} catch (e) {
|
||||
var css="";
|
||||
}
|
||||
mainWindow.webContents.send('custom-css-response', css);
|
||||
})
|
||||
ipc.on('theme-json-create', function(e, arg) {
|
||||
var themecss=join(app.getPath("userData"), JSON5.parse(arg)["id"]+".thedesktheme");
|
||||
fs.writeFileSync(themecss,JSON.stringify(JSON5.parse(arg)));
|
||||
if(JSON5.parse(arg)["id"]){
|
||||
mainWindow.webContents.send('theme-json-create-complete', "");
|
||||
}else{
|
||||
mainWindow.webContents.send('theme-json-create-complete', "error");
|
||||
}
|
||||
})
|
||||
ipc.on('theme-json-delete', function(e, arg) {
|
||||
var themecss=join(app.getPath("userData"), arg+".thedesktheme");
|
||||
console.log(themecss);
|
||||
fs.unlink(themecss, function (err) {
|
||||
mainWindow.webContents.send('theme-json-delete-complete', "");
|
||||
});
|
||||
})
|
||||
ipc.on('theme-json-request', function(e, arg) {
|
||||
var themecss=join(app.getPath("userData"), arg+".thedesktheme");
|
||||
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
|
||||
mainWindow.webContents.send('theme-json-response', json);
|
||||
})
|
||||
ipc.on('theme-css-request', function(e, arg) {
|
||||
var themecss=join(app.getPath("userData"), arg+".thedesktheme");
|
||||
try {
|
||||
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
|
||||
|
||||
var primary=json.vars.primary;
|
||||
var secondary=json.vars.secondary;
|
||||
var text=json.vars.text;
|
||||
if(json.base=="light"){
|
||||
var drag="rgba(255, 255, 255, 0.8)";
|
||||
var beforehover="#757575";
|
||||
}else{
|
||||
var drag="rgba(0, 0, 0, 0.8)";
|
||||
var beforehover="#9e9e9e";
|
||||
}
|
||||
if(json.props){
|
||||
if(json.props.TheDeskAccent){
|
||||
var emphasized=json.props.TheDeskAccent
|
||||
}else{
|
||||
var emphasized=secondary;
|
||||
}
|
||||
}else{
|
||||
var emphasized=primary;
|
||||
}
|
||||
|
||||
var css=".customtheme {--bg:"+secondary+";--drag:"+drag+";"+
|
||||
"--color:"+text+";--beforehover:"+beforehover+";--modal:"+secondary+";--subcolor:"+primary+";--box:"+primary+";--sidebar:"+primary+";--shared:"+emphasized+";"+
|
||||
"--notfbox:"+secondary+";--emphasized:"+primary+";--his-data:"+secondary+
|
||||
"--active:"+primary+";--postbox:"+primary+";--modalfooter:"+primary+";}.blacktheme #imagemodal{background: url(\"../img/pixel.svg\");}";
|
||||
mainWindow.webContents.send('theme-css-response', css);
|
||||
} catch (e) {
|
||||
var css="";
|
||||
}
|
||||
|
||||
})
|
||||
ipc.on('theme-json-list', function(e, arg) {
|
||||
fs.readdir(app.getPath("userData"), function(err, files){
|
||||
if (err) throw err;
|
||||
var fileList = files.filter(function(file){
|
||||
var tfile=join(app.getPath("userData"), file);
|
||||
return fs.statSync(tfile).isFile() && /.*\.thedesktheme$/.test(tfile); //絞り込み
|
||||
})
|
||||
var themes=[];
|
||||
for(var i=0;i<fileList.length;i++){
|
||||
var themecss=join(app.getPath("userData"), fileList[i]);
|
||||
var json = JSON.parse(fs.readFileSync(themecss, 'utf8'));
|
||||
themes.push({
|
||||
name:json.name,
|
||||
id:json.id
|
||||
})
|
||||
}
|
||||
mainWindow.webContents.send('theme-json-list-response', themes);
|
||||
});
|
||||
})
|
||||
//ハードウェアアクセラレーションの無効化
|
||||
ipc.on('ha', function(e, arg) {
|
||||
if(arg=="true"){
|
||||
fs.writeFileSync(ha_path,arg);
|
||||
}else{
|
||||
fs.unlink(ha_path, function (err) {});
|
||||
}
|
||||
app.relaunch()
|
||||
app.exit()
|
||||
})
|
||||
|
||||
ipc.on('update', function(e, x, y) {
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform!="darwin"){
|
||||
if(platform!="others"){
|
||||
updatewin = new BrowserWindow({
|
||||
width: 600,
|
||||
height: 400,
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": false
|
||||
"resizable": false,
|
||||
"modal":true
|
||||
});
|
||||
updatewin.loadURL('file://' + __dirname + '/update.html');
|
||||
var lang = fs.readFileSync(lang_path, 'utf8');
|
||||
updatewin.loadURL('file://' + __dirname + '/view/'+lang+'/update.html');
|
||||
|
||||
return "true"
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
})
|
||||
|
||||
ipc.on('screen', function(e, args) {
|
||||
var window = new BrowserWindow({
|
||||
width: args[0],
|
||||
height: args[1],
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": true
|
||||
});
|
||||
window.loadURL('file://' + __dirname + '/screenshot.html?id='+args[2]);
|
||||
window.setAlwaysOnTop(true);
|
||||
window.setPosition(0, 0);
|
||||
return "true"
|
||||
})
|
||||
//Web魚拓
|
||||
ipc.on('shot', function(e, args) {
|
||||
console.log(args[0]);
|
||||
console.log("link:"+args[0]+" width:"+args[1]+" height:"+args[2]+" title:"+args[4]+" top:"+args[5]+" left:"+args[6]);
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
var dir=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\"+args[4]+"-toot.png";
|
||||
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
|
||||
}else if(platform=="linux" || platform=="darwin" ){
|
||||
var dir=app.getPath('home')+"/Pictures/TheDesk/Screenshots/"+args[4]+"-toot.png";
|
||||
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
|
||||
if(args[7]==""){
|
||||
if(platform=="win32"){
|
||||
var dir=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\"+args[4]+"-toot.png";
|
||||
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
|
||||
}else if(platform=="linux" || platform=="darwin" ){
|
||||
var dir=app.getPath('home')+"/Pictures/TheDesk/Screenshots/"+args[4]+"-toot.png";
|
||||
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
|
||||
}
|
||||
}else{
|
||||
var folder=args[7];
|
||||
var dir=folder+args[4]+"-toot.png";
|
||||
}
|
||||
|
||||
Jimp.read(Buffer.from( args[3],'base64'), function (err, lenna) {
|
||||
if (err) throw err;
|
||||
lenna.crop( 0, 0, args[1], args[2] ).write(dir);
|
||||
lenna.crop( args[6], args[5], args[1], args[2] ).write(dir);
|
||||
});
|
||||
shell.showItemInFolder(folder);
|
||||
})
|
||||
ipc.on('shot-img-dl', (e, args) => {
|
||||
Jimp.read(args[0], function (err, lenna) {
|
||||
if (err) throw err;
|
||||
if(args[1]==""){
|
||||
if(process.platform=="win32"){
|
||||
var folder=app.getPath('home')+"\\Pictures\\TheDesk\\Screenshots\\";
|
||||
}else if(process.platform=="linux" || process.platform=="darwin" ){
|
||||
var folder=app.getPath('home')+"/Pictures/TheDesk/Screenshots/";
|
||||
}
|
||||
}else{
|
||||
var folder=args[2];
|
||||
}
|
||||
|
||||
lenna.write(folder+args[1]);
|
||||
});
|
||||
|
||||
});
|
||||
})
|
||||
//アプデDL
|
||||
ipc.on('download-btn', (e, args) => {
|
||||
//console.log(args[1]);
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
if(bit=="x64"){
|
||||
var zip="TheDesk-win32-x64.zip";
|
||||
}else if(bit=="ia32"){
|
||||
var zip="TheDesk-win32-ia32.zip";
|
||||
}
|
||||
}else if(platform=="linux" || platform=="darwin" ){
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: 'Linux Supporting System',
|
||||
message: "thedesk.topをブラウザで開きます。",
|
||||
buttons: ['OK']
|
||||
}
|
||||
dialog.showMessageBox(options, function(index) {
|
||||
shell.openExternal("https://thedesk.top");
|
||||
})
|
||||
return;
|
||||
if(bit=="x64"){
|
||||
var zip="TheDesk-linux-x64.zip";
|
||||
}else if(bit=="ia32"){
|
||||
var zip="TheDesk-linux-ia32.zip";
|
||||
}
|
||||
}
|
||||
var ver=args[1];
|
||||
if(args[0]=="true"){
|
||||
dialog.showSaveDialog(null, {
|
||||
title: '保存',
|
||||
properties: ['openFile', 'createDirectory'],
|
||||
defaultPath: zip
|
||||
title: 'Save',
|
||||
defaultPath: app.getPath('home')+"/"+args[1]
|
||||
}, (savedFiles) => {
|
||||
console.log(savedFiles);
|
||||
if(!savedFiles){
|
||||
return false;
|
||||
}
|
||||
var m = savedFiles.match(/(.+)\\(.+)$/);
|
||||
if(platform=="win32"){
|
||||
var m = savedFiles.match(/(.+)\\(.+)$/);
|
||||
}else{
|
||||
var m = savedFiles.match(/(.+)\/(.+)$/);
|
||||
}
|
||||
//console.log(m);
|
||||
if(isExistFile(savedFiles)){
|
||||
fs.statSync(savedFiles);
|
||||
fs.unlink(savedFiles);
|
||||
fs.unlinkSync(savedFiles);
|
||||
}
|
||||
console.log(m[1]+":"+savedFiles)
|
||||
dl(ver,m[1],savedFiles);
|
||||
dl(args[0],args[1],m[1]);
|
||||
});
|
||||
}else{
|
||||
dl(ver);
|
||||
}
|
||||
|
||||
});
|
||||
function isExistFile(file) {
|
||||
try {
|
||||
@@ -251,38 +378,10 @@ function isExistFile(file) {
|
||||
if(err.code === 'ENOENT') return false
|
||||
}
|
||||
}
|
||||
function dl(ver,files,fullname){
|
||||
console.log(files);
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
if(bit=="x64"){
|
||||
var zip="TheDesk-win32-x64.zip";
|
||||
}else if(bit=="ia32"){
|
||||
var zip="TheDesk-win32-ia32.zip";
|
||||
}
|
||||
}else if(platform=="linux"){
|
||||
if(bit=="x64"){
|
||||
var zip="TheDesk-linux-x64.zip";
|
||||
}else if(bit=="ia32"){
|
||||
var zip="TheDesk-linux-ia32.zip";
|
||||
}
|
||||
}
|
||||
zip=zip+"?"+ver;
|
||||
var l = 8;
|
||||
|
||||
// 生成する文字列に含める文字セット
|
||||
var c = "abcdefghijklmnopqrstuvwxyz0123456789";
|
||||
|
||||
var cl = c.length;
|
||||
var r = "";
|
||||
for(var i=0; i<l; i++){
|
||||
r += c[Math.floor(Math.random()*cl)];
|
||||
}
|
||||
zip=zip+r;
|
||||
function dl(url,file,dir){
|
||||
updatewin.webContents.send('mess', "ダウンロードを開始します。");
|
||||
const opts = {
|
||||
directory:files,
|
||||
directory:dir,
|
||||
openFolderWhenDone: true,
|
||||
onProgress: function(e) {
|
||||
updatewin.webContents.send('prog', e);
|
||||
@@ -290,10 +389,11 @@ function dl(ver,files,fullname){
|
||||
saveAs: false
|
||||
};
|
||||
download(BrowserWindow.getFocusedWindow(),
|
||||
'https://dl.thedesk.top/'+zip, opts)
|
||||
url, opts)
|
||||
.then(dl => {
|
||||
updatewin.webContents.send('mess', "ダウンロードが完了しました。");
|
||||
app.quit();
|
||||
|
||||
})
|
||||
.catch(console.error);
|
||||
}
|
||||
@@ -301,12 +401,15 @@ ipc.on('general-dl', (e, args) => {
|
||||
var name="";
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="win32"){
|
||||
var dir=app.getPath('home')+"\\Pictures\\TheDesk";
|
||||
}else if(platform=="linux" || platform=="darwin" ){
|
||||
var dir=app.getPath('home')+"/Pictures/TheDesk";
|
||||
}
|
||||
|
||||
if(args[1]==""){
|
||||
if(platform=="win32"){
|
||||
var dir=app.getPath('home')+"\\Pictures\\TheDesk";
|
||||
}else if(platform=="linux" || platform=="darwin" ){
|
||||
var dir=app.getPath('home')+"/Pictures/TheDesk";
|
||||
}
|
||||
}else{
|
||||
var dir=args[1];
|
||||
}
|
||||
mainWindow.webContents.send('general-dl-message', "ダウンロードを開始します。");
|
||||
const opts = {
|
||||
directory: dir,
|
||||
@@ -333,13 +436,72 @@ ipc.on('about', (e, args) => {
|
||||
function about(){
|
||||
var ver=app.getVersion()
|
||||
var window = new BrowserWindow({width: 300, height: 460,
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": false });
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": false });
|
||||
window.loadURL('file://' + __dirname + '/about.html?ver='+ver);
|
||||
return "true"
|
||||
}
|
||||
//
|
||||
|
||||
ipc.on('itunes', (e, args) => {
|
||||
console.log("Access");
|
||||
if(args[0]=="set"){
|
||||
var {NowPlaying,PlayerName} = require("nowplaying-node");
|
||||
var nppath=join(app.getPath("userData"), "nowplaying");
|
||||
var npProvider;
|
||||
try {
|
||||
npProvider = args[1];
|
||||
} catch (e) {
|
||||
npProvider="AIMP";
|
||||
}
|
||||
var myAIMP = new NowPlaying({
|
||||
fetchCover: true,
|
||||
player: PlayerName[npProvider],
|
||||
});
|
||||
fs.writeFileSync(nppath, npProvider);
|
||||
}else{
|
||||
var platform=process.platform;
|
||||
var bit=process.arch;
|
||||
if(platform=="darwin"){
|
||||
const nowplaying = require("itunes-nowplaying-mac")
|
||||
nowplaying.getRawData().then(function (value) {
|
||||
mainWindow.webContents.send('itunes-np', value);
|
||||
}).catch(function (error) {
|
||||
// 非同期処理失敗。呼ばれない
|
||||
console.log(error);
|
||||
});
|
||||
}else{
|
||||
var {NowPlaying,PlayerName} = require("nowplaying-node");
|
||||
var nppath=join(app.getPath("userData"), "nowplaying");
|
||||
var npProvider;
|
||||
try {
|
||||
npProvider = fs.readFileSync(nppath, 'utf8');
|
||||
} catch (e) {
|
||||
npProvider="AIMP";
|
||||
}
|
||||
var myAIMP = new NowPlaying({
|
||||
fetchCover: true,
|
||||
player: PlayerName[npProvider],
|
||||
});
|
||||
myAIMP.update();
|
||||
var path=myAIMP.getCoverPath();
|
||||
if(path){
|
||||
var bin = fs.readFileSync(path, 'base64');
|
||||
}else{
|
||||
var bin=false;
|
||||
}
|
||||
|
||||
var value={
|
||||
name:myAIMP.getTitle(),
|
||||
artist:myAIMP.getArtist(),
|
||||
album:myAIMP.getAlbum(),
|
||||
path:bin
|
||||
}
|
||||
mainWindow.webContents.send('itunes-np', value);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
ipc.on('file-select', (e, args) => {
|
||||
dialog.showOpenDialog(null, {
|
||||
properties: ['openFile', 'multiSelections'],
|
||||
@@ -364,12 +526,8 @@ ipc.on('file-select', (e, args) => {
|
||||
});
|
||||
|
||||
ipc.on('column-del', (e, args) => {
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: 'カラム削除',
|
||||
message: "カラムを削除しますか?",
|
||||
buttons: ['いいえ', 'はい']
|
||||
}
|
||||
console.log(lang);
|
||||
var options=language.delsel(lang)
|
||||
dialog.showMessageBox(options, function(index) {
|
||||
mainWindow.webContents.send('column-del-reply', index);
|
||||
})
|
||||
@@ -385,25 +543,36 @@ ipc.on('bmp-image', (e, args) => {
|
||||
|
||||
});
|
||||
ipc.on('nano', function (e, x, y) {
|
||||
var window = new BrowserWindow({width: 300, height: 200,
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
var nano_info_path = join(app.getPath("userData"), "nano-window-position.json");
|
||||
var window_pos;
|
||||
try {
|
||||
window_pos = JSON.parse(fs.readFileSync(nano_info_path, 'utf8'));
|
||||
} catch (e) {
|
||||
window_pos = [0,0]; // デフォルトバリュー
|
||||
}
|
||||
var nanowindow = new BrowserWindow({width: 350, height: 200,
|
||||
"transparent": false, // ウィンドウの背景を透過
|
||||
"frame": false, // 枠の無いウィンドウ
|
||||
"resizable": false });
|
||||
window.loadURL('file://' + __dirname + '/nano.html');
|
||||
window.setAlwaysOnTop(true);
|
||||
window.setPosition(0, 0);
|
||||
return "true"
|
||||
nanowindow.loadURL('file://' + __dirname + '/nano.html');
|
||||
nanowindow.setAlwaysOnTop(true);
|
||||
|
||||
nanowindow.setPosition(window_pos[0], window_pos[1]);
|
||||
nanowindow.on('close', function() {
|
||||
fs.writeFileSync(nano_info_path, JSON.stringify(nanowindow.getPosition()));
|
||||
});
|
||||
return true;
|
||||
})
|
||||
ipc.on('adobe', (e, arg) => {
|
||||
if(!arg){
|
||||
const options = {
|
||||
type: 'info',
|
||||
title: 'Adobeフォトエディタ',
|
||||
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。",
|
||||
message: "「許可」または「永続的に許可」をクリックするとTheDeskとAdobeで情報を共有します。\n次のウィンドウを開いている時以外は一切提供しません。",
|
||||
buttons: ['拒否', '許可','永続的に許可']
|
||||
}
|
||||
dialog.showMessageBox(options, function(index) {
|
||||
if(index==2){
|
||||
if(index===2){
|
||||
mainWindow.webContents.send('adobeagree', "true");
|
||||
}
|
||||
if(index>0){
|
||||
@@ -421,6 +590,76 @@ function adobeWindow(){
|
||||
});
|
||||
window.loadURL('file://' + __dirname + '/adobe.html');
|
||||
}
|
||||
var cbTimer1;
|
||||
ipc.on('startmem', (e, arg) => {
|
||||
cbTimer1 = setInterval(mems, 1000);
|
||||
});
|
||||
ipc.on('endmem', (e, arg) => {
|
||||
if(cbTimer1){
|
||||
clearInterval(cbTimer1);
|
||||
}
|
||||
});
|
||||
function mems(){
|
||||
var mem=os.totalmem()-os.freemem();
|
||||
if(mainWindow){
|
||||
mainWindow.webContents.send('memory', [mem,os.cpus()[0].model,os.totalmem()]);
|
||||
}
|
||||
}
|
||||
ipc.on('mkc', (e, arg) => {
|
||||
var platform=process.platform;
|
||||
if(platform=="linux" || platform=="win32" ){
|
||||
var mkc = fs.readFileSync(__dirname + '/.tkn', 'utf8');
|
||||
|
||||
}else{
|
||||
var mkc = "";
|
||||
}
|
||||
mainWindow.webContents.send('mkcr', mkc);
|
||||
});
|
||||
ipc.on('export', (e, args) => {
|
||||
fs.writeFileSync(args[0], args[1]);
|
||||
});
|
||||
ipc.on('import', (e, arg) => {
|
||||
mainWindow.webContents.send('config', fs.readFileSync(arg, 'utf8'));
|
||||
});
|
||||
//フォント
|
||||
function object_array_sort(data,key,order,fn){
|
||||
//デフォは降順(DESC)
|
||||
var num_a = -1;
|
||||
var num_b = 1;
|
||||
|
||||
if(order === 'asc'){//指定があれば昇順(ASC)
|
||||
num_a = 1;
|
||||
num_b = -1;
|
||||
}
|
||||
|
||||
data = data.sort(function(a, b){
|
||||
var x = a[key];
|
||||
var y = b[key];
|
||||
if (x > y) return num_a;
|
||||
if (x < y) return num_b;
|
||||
return 0;
|
||||
});
|
||||
|
||||
//重複排除
|
||||
var arrObj = {};
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
arrObj[data[i]['family']] = data[i];
|
||||
}
|
||||
|
||||
data = [];
|
||||
for (var key in arrObj) {
|
||||
data.push(arrObj[key]);
|
||||
}
|
||||
|
||||
fn(data); // ソート後の配列を返す
|
||||
}
|
||||
ipc.on('fonts', (e, arg) => {
|
||||
var fonts = fm.getAvailableFontsSync();
|
||||
object_array_sort(fonts, 'family', 'asc', function(fonts_sorted){
|
||||
mainWindow.webContents.send('font-list', fonts_sorted);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
app.setAsDefaultProtocolClient('thedesk')
|
||||
|
||||
app.setAsDefaultProtocolClient('thedesk')
|
||||
|
||||
150
app/nano.html
150
app/nano.html
@@ -2,17 +2,33 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
|
||||
<link href="./css/tl.css" type="text/css" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<title>TheDesk Nano</title>
|
||||
<style>
|
||||
body {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
html{
|
||||
-webkit-app-region: drag !important;
|
||||
cursor: move !important;
|
||||
width:100vw;
|
||||
height:100vh;
|
||||
overflow:hidden;
|
||||
font-family:sans-serif;
|
||||
}
|
||||
body {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
font-size:11px;
|
||||
}
|
||||
#timeline_nano{
|
||||
overflow-y:scroll;
|
||||
overflow-x:hidden;
|
||||
-webkit-app-region: no-drag;
|
||||
max-height:100px;
|
||||
}
|
||||
.user{font-size:12px;}
|
||||
select {
|
||||
-webkit-app-region: no-drag;
|
||||
}
|
||||
#draghandle{
|
||||
-webkit-app-region: drag;
|
||||
cursor: move;
|
||||
}
|
||||
button {
|
||||
-webkit-app-region: no-drag;
|
||||
}
|
||||
@@ -30,6 +46,7 @@ textarea {
|
||||
}
|
||||
.area-actions{display:none !important;}
|
||||
.area-date_via{display:none !important;}
|
||||
.area-side{display:none !important;}
|
||||
/* Handle */
|
||||
::-webkit-scrollbar-thumb {
|
||||
-webkit-border-radius: 5px;
|
||||
@@ -54,25 +71,56 @@ textarea {
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
|
||||
<script type="text/javascript" src="./js/platform/first.js"></script>
|
||||
<div id="draghandle">+ここを持って移動+</div>
|
||||
<span id="timeline_nano">
|
||||
<select id="type-sel">
|
||||
<option value="local">Local</option>
|
||||
<option value="home">Home</option>
|
||||
</select>
|
||||
<button onclick="tl()">表示</button>
|
||||
</span><br><button onclick="window.close()">終了</button><br>
|
||||
<textarea id="textarea" style="width:100%; background-color:transparent"></textarea>
|
||||
<input type="hidden" id="reply">
|
||||
<input type="hidden" id="media">
|
||||
<select id="post-acct-sel">
|
||||
|
||||
</select>
|
||||
<button class="btn" onclick="post()">投稿</button>
|
||||
<script>
|
||||
//jQuery読む
|
||||
window.jQuery = window.$ = require('./js/common/jquery.js');
|
||||
var Hammer = require('./js/common/hammer.min.js');
|
||||
$.strip_tags = function(str, allowed) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
|
||||
.join('');
|
||||
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
|
||||
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
|
||||
return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
|
||||
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
|
||||
});
|
||||
};
|
||||
function escapeHTML(str) {
|
||||
if(!str){
|
||||
return "";
|
||||
}
|
||||
return str.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
|
||||
<select id="post-acct-sel" style="max-width:150px">
|
||||
</select>
|
||||
<select id="type-sel" style="max-width:60px">
|
||||
<option value="local">Local</option>
|
||||
<option value="home">Home</option>
|
||||
</select><button onclick="tl()">Show</button><button onclick="window.close()">x</button><br>
|
||||
<div id="timeline_nano">
|
||||
|
||||
</div>
|
||||
<br>
|
||||
<textarea id="textarea" style="width:80%; background-color:transparent"></textarea>
|
||||
<button class="btn" onclick="post()">Post</button>
|
||||
<script>
|
||||
if(localStorage.getItem("lang")){
|
||||
var lang=localStorage.getItem("lang");
|
||||
}else{
|
||||
var lang="ja";
|
||||
}
|
||||
</script>
|
||||
<script src="https://twemoji.maxcdn.com/2/twemoji.min.js?2.7"></script>
|
||||
<script type="text/javascript" src="./js/post/post.js"></script>
|
||||
<script type="text/javascript" src="./js/post/reply.js"></script>
|
||||
<script type="text/javascript" src="./js/post/use-txtbox.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/parse.js"></script>
|
||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
|
||||
<script type="text/javascript" src="./js/tl/date.js"></script>
|
||||
@@ -109,4 +157,58 @@ var multi = localStorage.getItem("multi");
|
||||
'</option>';
|
||||
$("#post-acct-sel").append(templete);
|
||||
});
|
||||
function mov(){
|
||||
return false;
|
||||
}
|
||||
function resetmv(){
|
||||
return false;
|
||||
}
|
||||
function post(){
|
||||
var acct_id=$("#post-acct-sel").val();
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_"+ acct_id + "_at");
|
||||
var start = "https://" + domain + "/api/v1/statuses";
|
||||
var str=$("#textarea").val();
|
||||
var toot={
|
||||
status: str
|
||||
}
|
||||
var vis = loadVis(acct_id)
|
||||
toot.visibility=vis;
|
||||
var httpreq = new XMLHttpRequest();
|
||||
httpreq.open('POST', start, true);
|
||||
httpreq.setRequestHeader('Content-Type', 'application/json');
|
||||
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify(toot));
|
||||
httpreq.onreadystatechange = function() {
|
||||
if (httpreq.readyState === 4) {
|
||||
$("#textarea").val("");
|
||||
}
|
||||
}
|
||||
}
|
||||
function loadVis(acct_id){
|
||||
var vist = localStorage.getItem("vis");
|
||||
console.log(vist);
|
||||
if (!vist) {
|
||||
return "public";
|
||||
} else {
|
||||
if (vist == "memory") {
|
||||
var memory = localStorage.getItem("vis-memory-"+acct_id);
|
||||
if (!memory) {
|
||||
memory = "public";
|
||||
}
|
||||
return memory;
|
||||
} else if(vist == "server") {
|
||||
var multi = localStorage.getItem("multi");
|
||||
var obj = JSON.parse(multi);
|
||||
var memory = obj[acct_id]["vis"];
|
||||
if (!memory) {
|
||||
memory = "public";
|
||||
}
|
||||
return memory;
|
||||
} else {
|
||||
return vist;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
15
app/node_modules/.bin/mime
generated
vendored
15
app/node_modules/.bin/mime
generated
vendored
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../mime/cli.js" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../mime/cli.js" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
7
app/node_modules/.bin/mime.cmd
generated
vendored
7
app/node_modules/.bin/mime.cmd
generated
vendored
@@ -1,7 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\mime\cli.js" %*
|
||||
) ELSE (
|
||||
@SETLOCAL
|
||||
@SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
node "%~dp0\..\mime\cli.js" %*
|
||||
)
|
||||
15
app/node_modules/.bin/mkdirp
generated
vendored
15
app/node_modules/.bin/mkdirp
generated
vendored
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
7
app/node_modules/.bin/mkdirp.cmd
generated
vendored
7
app/node_modules/.bin/mkdirp.cmd
generated
vendored
@@ -1,7 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\mkdirp\bin\cmd.js" %*
|
||||
) ELSE (
|
||||
@SETLOCAL
|
||||
@SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
node "%~dp0\..\mkdirp\bin\cmd.js" %*
|
||||
)
|
||||
15
app/node_modules/.bin/pixelmatch
generated
vendored
15
app/node_modules/.bin/pixelmatch
generated
vendored
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../pixelmatch/bin/pixelmatch" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../pixelmatch/bin/pixelmatch" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
7
app/node_modules/.bin/pixelmatch.cmd
generated
vendored
7
app/node_modules/.bin/pixelmatch.cmd
generated
vendored
@@ -1,7 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\pixelmatch\bin\pixelmatch" %*
|
||||
) ELSE (
|
||||
@SETLOCAL
|
||||
@SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
node "%~dp0\..\pixelmatch\bin\pixelmatch" %*
|
||||
)
|
||||
15
app/node_modules/.bin/semver
generated
vendored
15
app/node_modules/.bin/semver
generated
vendored
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../semver/bin/semver" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../semver/bin/semver" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
7
app/node_modules/.bin/semver.cmd
generated
vendored
7
app/node_modules/.bin/semver.cmd
generated
vendored
@@ -1,7 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\semver\bin\semver" %*
|
||||
) ELSE (
|
||||
@SETLOCAL
|
||||
@SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
node "%~dp0\..\semver\bin\semver" %*
|
||||
)
|
||||
15
app/node_modules/.bin/sshpk-conv
generated
vendored
15
app/node_modules/.bin/sshpk-conv
generated
vendored
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../sshpk/bin/sshpk-conv" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../sshpk/bin/sshpk-conv" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user