Compare commits
64 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1387482db0 | ||
|
b7a86324dd | ||
|
babc5a6424 | ||
|
74a468383c | ||
|
3a48f0ff0d | ||
|
e26363adf6 | ||
|
35d97d42c5 | ||
|
4fa7d07500 | ||
|
15f428528b | ||
|
7fa805fe3a | ||
|
fd9c97a126 | ||
|
f081154804 | ||
|
866affdf45 | ||
|
30aee556f1 | ||
|
b12c18aa08 | ||
|
f17a47d088 | ||
|
d79f096749 | ||
|
5b82b91c6a | ||
|
4a6b87ac1c | ||
|
1bea06354e | ||
|
5fbd5aaf10 | ||
|
0290a6d918 | ||
|
2576c48441 | ||
|
eb02dd2986 | ||
|
d92570fa3b | ||
|
38c988d2a2 | ||
|
0927282d41 | ||
|
5ffd59619c | ||
|
a739926ad4 | ||
|
e41c38f41d | ||
|
2de05b84aa | ||
|
0e9bdef9ca | ||
|
8e70e005c1 | ||
|
3817dbc925 | ||
|
63ec669c52 | ||
|
afc5702796 | ||
|
41ec66b58a | ||
|
936d3ca7fc | ||
|
f8b4b7b74d | ||
|
bd865977b0 | ||
|
d056db5617 | ||
|
7685677ada | ||
|
eb0aa81492 | ||
|
dc52531f28 | ||
|
5a20034b9f | ||
|
5cd0ef0d8a | ||
|
4daf47bb5f | ||
|
3e0dbd8433 | ||
|
fc4d3b24f6 | ||
|
3a9eab55a4 | ||
|
546b34275d | ||
|
3ee4cf27d5 | ||
|
87da95b9a4 | ||
|
3368e30e15 | ||
|
f1ea5ad8f1 | ||
|
fa2d5f8492 | ||
|
0f2c5de161 | ||
|
b69937d4fd | ||
|
e82faacbb2 | ||
|
2ab5c67545 | ||
|
358d01b12e | ||
|
95460fabbb | ||
|
0fb882b3ad | ||
|
3d0382d279 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,8 +3,7 @@
|
||||
*.7z
|
||||
*.exe
|
||||
TheDesk-*
|
||||
app/build
|
||||
build
|
||||
build/*
|
||||
app/.DS_Store
|
||||
.DS_Store
|
||||
.vs/*
|
||||
|
@@ -6,7 +6,6 @@
|
||||
[](https://travis-ci.org/cutls/TheDesk)
|
||||
[](https://translate.thedesk.top/project/thedesk)
|
||||
[](https://github.com/cutls/TheDesk/releases)
|
||||
[](https://github.com/cutls/TheDesk/releases)
|
||||

|
||||
Mastodon/Misskey client for PC(Windows/Linux/macOS)
|
||||
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)
|
||||
@@ -73,7 +72,7 @@ Build for Linux
|
||||
|
||||
Fellow coder
|
||||
|
||||
* [kPherox](https://www.kr-kp.com/)
|
||||
* [kPherox](https://pl.kpherox.dev/kPherox)
|
||||
|
||||
## Build
|
||||
|
||||
|
@@ -6,7 +6,6 @@
|
||||
[](https://travis-ci.org/cutls/TheDesk)
|
||||
[](https://translate.thedesk.top/project/thedesk)
|
||||
[](https://github.com/cutls/TheDesk/releases)
|
||||
[](https://github.com/cutls/TheDesk/releases)
|
||||

|
||||
Mastodon/Misskey client for PC(Windows/Linux/macOS)
|
||||
オープンソースSNSマストドン/MisskeyのPC向けクライアント
|
||||
@@ -73,7 +72,7 @@ Linuxビルダー
|
||||
|
||||
iTunes NowPlayingにアルバムアートワークを付けてくれた人
|
||||
|
||||
* [kPherox](https://www.kr-kp.com/)
|
||||
* [kPherox](https://pl.kpherox.dev/kPherox)
|
||||
|
||||
## ビルド
|
||||
|
||||
|
@@ -95,7 +95,7 @@
|
||||
<div class="cp">Copyright © TheDesk 2018<br>
|
||||
Main developer(author): <a href="https://cutls.com/@Cutls" target="_blank">Cutls P</a><br>
|
||||
Thanks:<a href="https://minohdon.jp/@toneji" target="_blank">toneji</a>/<a
|
||||
href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a href="https://pawoo.net/@kPherox"
|
||||
href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a href="https://pl.kpherox.dev/kPherox"
|
||||
target="_blank">kPherox</a> and all users
|
||||
<img draggable="false" style="width:0.8rem;top: 1px;margin-left: 1px;position: relative;" alt="❤️"
|
||||
title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png">
|
||||
|
BIN
app/build/appx/Square150x150Logo.png
Normal file
BIN
app/build/appx/Square150x150Logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
app/build/appx/Square44x44Logo.png
Normal file
BIN
app/build/appx/Square44x44Logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
BIN
app/build/appx/StoreLogo.png
Normal file
BIN
app/build/appx/StoreLogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
app/build/appx/Wide310x150Logo.png
Normal file
BIN
app/build/appx/Wide310x150Logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 117 KiB |
@@ -10,9 +10,6 @@ body {
|
||||
background-color: var(--bg);
|
||||
color: var(--color);
|
||||
}
|
||||
body {
|
||||
border: thin solid gray;
|
||||
}
|
||||
.btn {
|
||||
margin: 5px;
|
||||
text-transform: none;
|
||||
@@ -76,6 +73,9 @@ option {
|
||||
min-width: 0 !important;
|
||||
margin-left: 5px !important;
|
||||
}
|
||||
.unvisible{
|
||||
opacity: 0;
|
||||
}
|
||||
.bbcode-pulse-loadings,
|
||||
.bbcode-pulse-loading,
|
||||
.fa-pulse {
|
||||
@@ -304,6 +304,9 @@ blockquote:before,
|
||||
.tabs {
|
||||
background-color: var(--subcolor);
|
||||
}
|
||||
.collapsible-header:focus {
|
||||
background-color: var(--subcolor);
|
||||
}
|
||||
.modal-footer {
|
||||
background-color: var(--modalfooter) !important;
|
||||
}
|
||||
@@ -397,7 +400,8 @@ blockquote:before,
|
||||
text-align: center;
|
||||
width: calc(100% + 10px);
|
||||
border-radius: 5px;
|
||||
background-color: var(--bg);
|
||||
background-color: var(--box);
|
||||
filter: brightness(80%);
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
margin-top: -5px;
|
||||
@@ -446,6 +450,12 @@ input, textarea {
|
||||
font-size: 1rem !important;
|
||||
font-family: inherit;
|
||||
}
|
||||
.swal2-popup{
|
||||
background-color: var(--notfbox) !important;
|
||||
}
|
||||
.swal2-title, .swal2-content{
|
||||
color: var(--color) !important;
|
||||
}
|
||||
|
||||
/*スクロールバー*/
|
||||
::-webkit-scrollbar {
|
||||
|
@@ -124,7 +124,9 @@ textarea{
|
||||
overflow-y: scroll;
|
||||
top: 90px;
|
||||
}
|
||||
|
||||
#posttgl,#toot-post-btn {
|
||||
background-color: var(--accentbtn);
|
||||
}
|
||||
/*mini*/
|
||||
.mini-post .mize {
|
||||
display: none !important;
|
||||
|
@@ -14,6 +14,9 @@
|
||||
--active: #e6ee9c;
|
||||
--postbox: white;
|
||||
--modalfooter: #fafafa;
|
||||
--accentbtn: #009688;
|
||||
--selected: #c0c0c0;
|
||||
--selectedWithShare: #b2babd;
|
||||
}
|
||||
#imagemodal {
|
||||
background: url("../img/pixel.white.svg");
|
||||
@@ -34,6 +37,9 @@
|
||||
--active: #757575;
|
||||
--postbox: #424242;
|
||||
--modalfooter: #212121;
|
||||
--accentbtn: #3f51b5;
|
||||
--selected: #3f3f3f;
|
||||
--selectedWithShare: #003a30;
|
||||
}
|
||||
.blacktheme #imagemodal {
|
||||
background: url("../img/pixel.svg");
|
||||
@@ -54,6 +60,9 @@
|
||||
--active: #757575;
|
||||
--postbox: #1a237e;
|
||||
--modalfooter: #031833;
|
||||
--accentbtn: #00acc1;
|
||||
--selected: #214f8a;
|
||||
--selectedWithShare: #003a30;
|
||||
}
|
||||
.indigotheme #imagemodal {
|
||||
background: url("../img/pixel.svg");
|
||||
@@ -74,6 +83,9 @@
|
||||
--active: #757575;
|
||||
--postbox: #4e342e;
|
||||
--modalfooter: #261411;
|
||||
--accentbtn: #827717;
|
||||
--selected: #6d352b;
|
||||
--selectedWithShare: #003a30;
|
||||
}
|
||||
.browntheme #imagemodal {
|
||||
background: url("../img/pixel.svg");
|
||||
@@ -86,7 +98,7 @@
|
||||
--modal: #81c784;
|
||||
--subcolor: #a5d6a7;
|
||||
--box: #81c784;
|
||||
--sidebar: #81c784;
|
||||
--sidebar: #c5e1a5;
|
||||
--shared: #ffcc80;
|
||||
--notfbox: #a5d6a7;
|
||||
--emphasized: #9e9d24;
|
||||
@@ -94,7 +106,33 @@
|
||||
--active: #e6ee9c;
|
||||
--postbox: #a5d6a7;
|
||||
--modalfooter: #81c784;
|
||||
--accentbtn: #33691e;
|
||||
--selected: #78c17a;
|
||||
--selectedWithShare: #caa266;
|
||||
}
|
||||
.greentheme #imagemodal {
|
||||
background: url("../img/pixel.white.svg");
|
||||
}
|
||||
.bluetheme {
|
||||
--bg: #c9e1ec;
|
||||
--drag: rgba(255, 255, 255, 0.8);
|
||||
--color: black;
|
||||
--beforehover: #757575;
|
||||
--modal: #b2ebf2;
|
||||
--subcolor: #90caf9;
|
||||
--box: #90caf9;
|
||||
--sidebar: #b6e6f5;
|
||||
--shared: #e0ffe4;
|
||||
--notfbox: #90caf9;
|
||||
--emphasized: #c5e1a5;
|
||||
--his-data: rgba(255, 255, 255, 0.9);
|
||||
--active: #b39ddb;
|
||||
--postbox: #dff1ff;
|
||||
--modalfooter: #2196f3;
|
||||
--accentbtn: #2f7bb7;
|
||||
--selected: #9dcade;
|
||||
--selectedWithShare: #c1dac4;
|
||||
}
|
||||
.bluetheme #imagemodal {
|
||||
background: url("../img/pixel.white.svg");
|
||||
}
|
||||
|
@@ -96,6 +96,7 @@
|
||||
}
|
||||
iframe {
|
||||
max-width: 100%;
|
||||
max-height: 300px;
|
||||
}
|
||||
@media screen and (max-width: 600px) {
|
||||
.mobile #timeline-container {
|
||||
@@ -157,6 +158,7 @@ iframe {
|
||||
height: 100%;
|
||||
border: thin solid gray;
|
||||
overflow: hidden;
|
||||
border-top: none;
|
||||
}
|
||||
.box .pin,
|
||||
#his-data .pin {
|
||||
@@ -425,6 +427,9 @@ p:not(:last-child) {
|
||||
|
||||
.area-notice_name {
|
||||
grid-area: notice_name;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.area-notice_acct {
|
||||
@@ -581,6 +586,7 @@ p:not(:last-child) {
|
||||
display: block;
|
||||
margin-right: 1px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
.nsfw-media {
|
||||
position: absolute;
|
||||
@@ -594,9 +600,18 @@ p:not(:last-child) {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.shared.selectedToot{
|
||||
background-color: var(--selectedWithShare);
|
||||
}
|
||||
.selectedToot{
|
||||
background-color: var(--selected);
|
||||
}
|
||||
audio{
|
||||
height: 2rem;
|
||||
}
|
||||
.translate{
|
||||
white-space: normal;
|
||||
}
|
||||
@keyframes jump {
|
||||
0% {
|
||||
transform: translateY(0);
|
||||
|
@@ -1,3 +1,5 @@
|
||||
selectedColumn = 0
|
||||
selectedToot = 0
|
||||
$(function ($) {
|
||||
//キーボードショートカット
|
||||
$(window).keydown(function (e) {
|
||||
@@ -20,7 +22,6 @@ $(function ($) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//Ctrl+Enter:投稿
|
||||
if (event.metaKey || event.ctrlKey && wv) {
|
||||
@@ -36,14 +37,6 @@ $(function ($) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//Shift+Space:Markdownゼロ幅スペース
|
||||
if (event.shiftKey) {
|
||||
if (e.keyCode === 32) {
|
||||
brInsert("");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Esc:消す
|
||||
if (e.keyCode === 27 && wv) {
|
||||
hide();
|
||||
@@ -54,14 +47,6 @@ $(function ($) {
|
||||
location.href = "index.html";
|
||||
return false;
|
||||
}
|
||||
//Ctrl+R:ランキング
|
||||
if ((event.metaKey || event.ctrlKey) && wv) {
|
||||
if (e.keyCode === 82) {
|
||||
if (localStorage.getItem("kirishima")) {
|
||||
window.open("https://astarte.thedesk.top");
|
||||
}
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+C:全消し
|
||||
if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
|
||||
if (e.keyCode === 67) {
|
||||
@@ -135,7 +120,7 @@ $(function ($) {
|
||||
}
|
||||
}
|
||||
//Ctrl+Sift+P:プロフ
|
||||
if ((event.ctrlKey) && event.shiftKey) {
|
||||
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode === 80) {
|
||||
profShow()
|
||||
return false;
|
||||
@@ -149,30 +134,82 @@ $(function ($) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//矢印:選択
|
||||
if (e.code == "ArrowLeft") {
|
||||
//left
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('next');
|
||||
return false;
|
||||
}
|
||||
if (selectedColumn > 0) {
|
||||
selectedColumn--
|
||||
}
|
||||
tootSelector(selectedColumn, selectedToot)
|
||||
return false;
|
||||
} else if (e.code == "ArrowUp") {
|
||||
//up
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
return false;
|
||||
}
|
||||
if (selectedToot > 0) {
|
||||
selectedToot--
|
||||
}
|
||||
tootSelector(selectedColumn, selectedToot)
|
||||
return false;
|
||||
} else if (e.code == "ArrowRight") {
|
||||
//right
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('prev');
|
||||
return false;
|
||||
}
|
||||
if (selectedColumn < $(".tl-box").length - 1) {
|
||||
selectedColumn++
|
||||
}
|
||||
tootSelector(selectedColumn, selectedToot)
|
||||
return false;
|
||||
} else if (e.code == "ArrowDown") {
|
||||
//down
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
return false;
|
||||
}
|
||||
selectedToot++
|
||||
tootSelector(selectedColumn, selectedToot)
|
||||
return false;
|
||||
}
|
||||
//Ctrl+U:0,0選択
|
||||
if (event.ctrlKey || event.metaKey) {
|
||||
if (e.keyCode === 85) {
|
||||
selectedToot = 0
|
||||
selectedColumn = 0
|
||||
tootSelector(0, 0)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//選択時
|
||||
if (e.keyCode == 70) {
|
||||
var id = $(".selectedToot").attr('unique-id')
|
||||
var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
|
||||
fav(id, acct_id, false)
|
||||
return false;
|
||||
}
|
||||
if (e.keyCode == 66) {
|
||||
var id = $(".selectedToot").attr('unique-id')
|
||||
var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
|
||||
rt(id, acct_id, false)
|
||||
return false;
|
||||
}
|
||||
if (e.keyCode == 82) {
|
||||
var id = $(".selectedToot").attr('unique-id')
|
||||
var acct_id = $('#timeline_' + selectedColumn).attr("data-acct")
|
||||
var ats_cm = $('.selectedToot .rep-btn').attr("data-men")
|
||||
var mode = $('.selectedToot .rep-btn').attr("data-visen")
|
||||
re(id, ats_cm, acct_id, mode)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//textareaフォーカス時
|
||||
if (hasFocus2 && wv) {
|
||||
if (event.metaKey || event.ctrlKey) {
|
||||
//Ctrl+B:太字
|
||||
if (e.keyCode === 66) {
|
||||
tagsel('b');
|
||||
return false;
|
||||
}
|
||||
//Ctrl+I:斜字
|
||||
if (e.keyCode === 73) {
|
||||
tagsel('i');
|
||||
return false;
|
||||
}
|
||||
//Ctrl+U:下線
|
||||
if (e.keyCode === 85) {
|
||||
tagsel('u');
|
||||
return false;
|
||||
}
|
||||
//Ctrl+S:取り消し線
|
||||
if (e.keyCode === 83) {
|
||||
tagsel('s');
|
||||
return false;
|
||||
}
|
||||
//C+S+(No):ワンクリ
|
||||
if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
|
||||
if (e.keyCode >= 49 && e.keyCode <= 51) {
|
||||
@@ -183,22 +220,28 @@ $(function ($) {
|
||||
}
|
||||
}
|
||||
}
|
||||
//イメージビューワー切り替え
|
||||
if (e.keyCode === 37 && wv) {
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('prev');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (e.keyCode === 39 && wv) {
|
||||
if ($("#imagemodal").hasClass("open")) {
|
||||
imgCont('next');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
//クリアボタン
|
||||
$("#clear").click(function () {
|
||||
clear();
|
||||
});
|
||||
});
|
||||
//選択する
|
||||
function tootSelector(column, toot) {
|
||||
$('.cvo').removeClass("selectedToot")
|
||||
$('#timeline_' + column + ' .cvo').eq(toot).addClass("selectedToot")
|
||||
var scr = $('.tl-box[tlid=' + column + ']').scrollTop()
|
||||
var elem = $('.selectedToot').offset().top
|
||||
var top = elem - $('.tl-box').height() + scr
|
||||
if (top > 0) {
|
||||
top = top + $('.selectedToot').height()
|
||||
if (top > scr) {
|
||||
$('.tl-box[tlid=' + column + ']').animate({ scrollTop: top })
|
||||
}
|
||||
} else if (elem < 0) {
|
||||
var to = scr + elem - $('.selectedToot').height()
|
||||
if (to < scr) {
|
||||
$('.tl-box[tlid=' + column + ']').animate({ scrollTop: to })
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,7 +3,18 @@ function verck(ver) {
|
||||
console.log("%c Welcome😊", "color: red;font-size:200%;")
|
||||
var date = new Date();
|
||||
var show = false
|
||||
if (localStorage.getItem("ver") != ver) {
|
||||
if (localStorage.getItem("ver") != ver && localStorage.getItem("winstore")) {
|
||||
//ちょっと削除とリンク解析の都合上アレ(s)
|
||||
//対象外のアプデ:storageが20の最初まで"Usamin (18.6.5)"
|
||||
if (!localStorage.getItem("usamin_18_6_5_flag")) {
|
||||
localStorage.setItem("usamin_18_6_5_flag", true)
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
for (var i = 0; i < obj.length; i++) {
|
||||
localStorage.removeItem("card_" + i);
|
||||
}
|
||||
}
|
||||
//ちょっと削除とリンク解析の都合上アレ(e)
|
||||
localStorage.setItem("ver", ver);
|
||||
show = true
|
||||
console.log("%c Thank you for your update🎉", "color: red;font-size:200%;");
|
||||
@@ -22,7 +33,6 @@ function verck(ver) {
|
||||
} else {
|
||||
$("#release-en").show();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
if (!show) {
|
||||
@@ -48,48 +58,8 @@ function verck(ver) {
|
||||
}
|
||||
var platform = localStorage.getItem("platform");
|
||||
console.log("Your platform:" + 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")) {
|
||||
postMessage(["dialogStore", options], "*")
|
||||
}
|
||||
} 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]
|
||||
}
|
||||
if (!localStorage.getItem("winstore")) {
|
||||
postMessage(["dialogStore", options], "*")
|
||||
}
|
||||
}
|
||||
} else if (platform == "darwin") {
|
||||
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_mac,
|
||||
buttons: [lang.lang_no, lang.lang_yesno]
|
||||
}
|
||||
if (!localStorage.getItem("winstore")) {
|
||||
postMessage(["dialogStore", options], "*")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
localStorage.setItem("winstore", "unix")
|
||||
storeDialog(platform, ver)
|
||||
}
|
||||
if (localStorage.getItem("winstore") == "brewcask" || localStorage.getItem("winstore") == "snapcraft" || localStorage.getItem("winstore") == "winstore") {
|
||||
var winstore = true;
|
||||
@@ -285,3 +255,48 @@ function closeSupport() {
|
||||
}
|
||||
});
|
||||
}
|
||||
function storeDialog(platform, ver) {
|
||||
if (platform == "win32") {
|
||||
var mes = lang.lang_version_platform;
|
||||
} else if (platform == "linux") {
|
||||
var mes = lang.lang_version_platform_linux;
|
||||
} else if (platform == "darwin") {
|
||||
var mes = lang.lang_version_platform_mac;
|
||||
}
|
||||
Swal.fire({
|
||||
title: "Select your platform",
|
||||
text: mes,
|
||||
type: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#3085d6',
|
||||
confirmButtonText: lang.lang_no,
|
||||
cancelButtonText: lang.lang_yesno
|
||||
}).then((result) => {
|
||||
//逆にしてる
|
||||
if (!result.value) {
|
||||
localStorage.setItem("winstore", "winstore")
|
||||
} else {
|
||||
localStorage.setItem("winstore", "localinstall")
|
||||
}
|
||||
localStorage.setItem("ver", ver);
|
||||
show = true
|
||||
console.log("%c Thank you for your update🎉", "color: red;font-size:200%;");
|
||||
$(document).ready(function () {
|
||||
$('#releasenote').modal('open');
|
||||
verp = ver.replace('(', '');
|
||||
verp = verp.replace('.', '-');
|
||||
verp = verp.replace('.', '-');
|
||||
verp = verp.replace('[', '-');
|
||||
verp = verp.replace(']', '');
|
||||
verp = verp.replace(')', '');
|
||||
verp = verp.replace(' ', '_');
|
||||
console.log("%c " + verp, "color: red;font-size:200%;");
|
||||
if (lang.language == "ja") {
|
||||
$("#release-" + verp).show();
|
||||
} else {
|
||||
$("#release-en").show();
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
@@ -21,9 +21,9 @@ var lang = {
|
||||
//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.",
|
||||
"lang_version_platform_mac": "Was this software installed at Homebrew Cask? When select 'yes', any update was ignored.",
|
||||
"lang_version_platform": "Do you want auto-updates?(users installed on Microsoft Store select 'No')",
|
||||
"lang_version_platform_linux": "Do you want auto-updates?(users installed on Snapcraft select 'No')",
|
||||
"lang_version_platform_mac": "Do you want auto-updates?(Homebrew Cask users select 'No')",
|
||||
//login
|
||||
//login/login.js
|
||||
"lang_login_noauth": "Show TL of unlogined accounts",
|
||||
@@ -47,6 +47,7 @@ var lang = {
|
||||
//post/img.js
|
||||
"lang_postimg_previewdis": "cannot preview",
|
||||
"lang_postimg_aftupload": "You cannot change accounts after uploading.",
|
||||
"lang_postimg_failupload": "Failed",
|
||||
"lang_postimg_delete": "Delete this image.",
|
||||
//post/post.js
|
||||
"lang_post_tagTL": "This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?",
|
||||
@@ -111,6 +112,8 @@ var lang = {
|
||||
//tl/tl.js
|
||||
"lang_tl_media": "Media",
|
||||
"lang_tl_reconnect": "Reconnect to streaming API",
|
||||
//ui/img.js
|
||||
"lang_img_DLDone": "Downloaded:",
|
||||
//ui/layout.js
|
||||
"lang_layout_gotop": "Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
|
||||
"lang_layout_thisacct": "{{notf}} of this account",
|
||||
@@ -129,6 +132,8 @@ var lang = {
|
||||
"lang_layout_excludingbt": "Show BT mode(OFF/Exclude BT/Only BT)",
|
||||
"lang_layout_leftFold": "Stack to the left",
|
||||
"lang_layout_leftUnfold": "Dock on the right",
|
||||
"lang_layout_deleteColumn":"Delete this column",
|
||||
"lang_layout_deleteColumnDesc":"Delete this column",
|
||||
//ui/sort.js
|
||||
"lang_sort_gothis": "Go to this column",
|
||||
"lang_sort_remthis": "Delete this column",
|
||||
|
@@ -21,9 +21,9 @@ var lang = {
|
||||
//common/version.js
|
||||
"lang_version_usever": "お使いのバージョン{{ver}}は最新です。",
|
||||
"lang_version_skipver": "アップデートはスキップされました。",
|
||||
"lang_version_platform": "このソフトウェアはMicrosoft Storeからダウンロードされましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
|
||||
"lang_version_platform_linux": "このソフトウェアはSnapcraft(snapd)からインストールしましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
|
||||
"lang_version_platform_mac": "このソフトウェアはHomebrew Caskからインストールしましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
|
||||
"lang_version_platform": "このソフトウェアはMicrosoft Storeからダウンロードされましたか?通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとMicrosoft Storeからアップデートが提供され、アップデートの通知を出しません。",
|
||||
"lang_version_platform_linux": "このソフトウェアはSnapcraft(snapd)からインストールしましたか?通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとSnapcraftからアップデートが提供され、アップデートの通知を出しません。",
|
||||
"lang_version_platform_mac": "このソフトウェアはHomebrew Caskからインストールしましたか?通常はホームページからインストールするため「いいえ」を選んでください。「はい」を選ぶとアップデートの通知を出しません。",
|
||||
//login
|
||||
//login/login.js
|
||||
"lang_login_noauth": "認証せずに見る",
|
||||
@@ -47,6 +47,7 @@ var lang = {
|
||||
//post/img.js
|
||||
"lang_postimg_previewdis": "プレビューできません。",
|
||||
"lang_postimg_aftupload": "アップロード後はアカウントを切り替えられません。",
|
||||
"lang_postimg_failupload": "アップロードに失敗しました。",
|
||||
"lang_postimg_delete": "この画像を削除します",
|
||||
//post/post.js
|
||||
"lang_post_tagTL": "デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
|
||||
@@ -131,6 +132,8 @@ var lang = {
|
||||
"lang_layout_excludingbt": "BT表示(OFF/BT除外/BTのみ)",
|
||||
"lang_layout_leftFold": "左へ重ねる",
|
||||
"lang_layout_leftUnfold": "右へ出す",
|
||||
"lang_layout_deleteColumn": "カラム削除",
|
||||
"lang_layout_deleteColumnDesc": "カラムを削除しますか?",
|
||||
//ui/sort.js
|
||||
"lang_sort_gothis": "このカラムへ",
|
||||
"lang_sort_remthis": "このカラムを削除",
|
||||
@@ -186,7 +189,7 @@ var lang = {
|
||||
"lang_parse_det": "詳細(メインアカウント経由)",
|
||||
"lang_parse_redraft": "このトゥートを削除して再編集",
|
||||
"lang_parse_followed": "フォローされました。",
|
||||
"lang_parse_clientop": "クライアント処理",
|
||||
"lang_parse_clientop": "クライアント操作",
|
||||
"lang_parse_clienttxt": " に対する処理を選択してください。",
|
||||
"lang_parse_clientno": "何もしない",
|
||||
"lang_parse_clientemp": "強調表示/解除",
|
||||
|
@@ -13,12 +13,6 @@ var idata = {
|
||||
"minohdon.jp_bbcode": "disabled",
|
||||
"minohdon.jp_markdown": "disabled",
|
||||
"minohdon.jp_glitch": "disabled",
|
||||
"knzk.me": "instance",
|
||||
"knzk.me_name": "Knzk",
|
||||
"knzk.me_letters": "5000",
|
||||
"knzk.me_bbcode": "disabled",
|
||||
"knzk.me_markdown": "disabled",
|
||||
"knzk.me_glitch": "disabled",
|
||||
"mastodos.com": "instance",
|
||||
"mastodos.com_name": "マストどす",
|
||||
"mastodos.com_letters": "500",
|
||||
@@ -90,16 +84,16 @@ var idata = {
|
||||
"dtp-mstdn.jp_bbcode": "disabled",
|
||||
"dtp-mstdn.jp_markdown": "disabled",
|
||||
"dtp-mstdn.jp_glitch": "disabled",
|
||||
"misskey.xyz": "misskey",
|
||||
"misskey.xyz_name": "misskey.xyz",
|
||||
"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.",
|
||||
"misskey.dev": "misskey",
|
||||
"misskey.io": "misskey",
|
||||
"misskey.io_name": "misskey.io",
|
||||
"misskey.io_letters": "1000",
|
||||
"misskey.io_bbcode": "disabled",
|
||||
"misskey.io_markdown": "enabled",
|
||||
"misskey.io_public": "Global",
|
||||
"misskey.io_post": "Post",
|
||||
"misskey.io_fav": " reacted your post.",
|
||||
"misskey.io_bt": " reposted your post.",
|
||||
"misskey.dev": "misskey.dev",
|
||||
"misskey.dev_name": "misskey.dev",
|
||||
"misskey.dev_letters": "1024",
|
||||
"misskey.dev_bbcode": "disabled",
|
||||
@@ -114,13 +108,7 @@ var idata = {
|
||||
"precure.ml_bbcode": "disabled",
|
||||
"precure.ml_markdown": "disabled",
|
||||
"precure.ml_post": "キュア!",
|
||||
"precure.ml_glitch": "disabled",
|
||||
"best-friends.chat": "instance",
|
||||
"best-friends.chat_name": "Best Friends",
|
||||
"best-friends.chat_letters": "500",
|
||||
"best-friends.chat_bbcode": "disabled",
|
||||
"best-friends.chat_markdown": "disabled",
|
||||
"best-friends.chat_glitch": "disabled",
|
||||
"precure.ml_glitch": "disabled"
|
||||
};
|
||||
|
||||
localStorage.setItem("instance", JSON.stringify(idata));
|
||||
|
@@ -40,7 +40,7 @@ function ck() {
|
||||
if (obj[0].domain) {
|
||||
$("#tl").show();
|
||||
ticker();
|
||||
multiSelector();
|
||||
multiSelector(false);
|
||||
verck(ver);
|
||||
$("#something-wrong img").attr("src", "../../img/thinkingdesk.png")
|
||||
}
|
||||
@@ -403,7 +403,7 @@ function ckdb(acct_id) {
|
||||
}
|
||||
|
||||
//アカウントを選択…を実装
|
||||
function multiSelector() {
|
||||
function multiSelector(parseC) {
|
||||
var multi = localStorage.getItem("multi");
|
||||
if (!multi) {
|
||||
var obj = [];
|
||||
@@ -490,8 +490,10 @@ function multiSelector() {
|
||||
$("#add-acct-sel").append('<option value="noauth">' + lang.lang_login_noauth + '</option><option value="webview">Twitter</option>');
|
||||
}
|
||||
$('select').formSelect();
|
||||
if(!parseC){
|
||||
parseColumn(true);
|
||||
}
|
||||
}
|
||||
|
||||
//バージョンエンコ
|
||||
function enc(ver) {
|
||||
|
@@ -304,7 +304,7 @@ function login(url) {
|
||||
return;
|
||||
}
|
||||
if ($('#linux:checked').val() == "on") {
|
||||
var red = "https://thedesk.top/hello.html"
|
||||
var red = "urn:ietf:wg:oauth:2.0:oob"
|
||||
} else {
|
||||
var red = 'thedesk://manager';
|
||||
}
|
||||
@@ -508,7 +508,7 @@ function code(code) {
|
||||
httpreq.responseType = "json";
|
||||
httpreq.send(JSON.stringify({
|
||||
grant_type: "authorization_code",
|
||||
redirect_uri: "https://thedesk.top/hello.html",
|
||||
redirect_uri: "urn:ietf:wg:oauth:2.0:oob",
|
||||
client_id: id,
|
||||
client_secret: secret,
|
||||
code: code
|
||||
|
@@ -10,16 +10,20 @@ $(document).on('click', 'a', e => {
|
||||
if (url) {
|
||||
urls = url.match(/https?:\/\/(.+)/);
|
||||
//トゥートのURLぽかったら
|
||||
toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
||||
toot = url.match(/https:\/\/([^+_]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
|
||||
if(!toot){
|
||||
//Pleroma対策
|
||||
toot = url.match(/https:\/\/([^+_]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/);
|
||||
}
|
||||
//タグのURLぽかったら
|
||||
var tags = [];
|
||||
tags = url.match(
|
||||
/https:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
||||
/https:\/\/([^+_]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
|
||||
);
|
||||
//メンションっぽかったら
|
||||
var ats = [];
|
||||
ats = url.match(
|
||||
/https:\/\/([-a-zA-Z0-9.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
|
||||
/https:\/\/([^+_]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#@]+)/
|
||||
);
|
||||
if (toot) {
|
||||
if (toot[1]) {
|
||||
@@ -120,6 +124,9 @@ function playSound() {
|
||||
volumeControl.gain.value = 0.8
|
||||
source.start(0);
|
||||
}
|
||||
function nano() {
|
||||
postMessage(["nano", null], "*")
|
||||
}
|
||||
onmessage = function (e) {
|
||||
if (e.data[0] == "details") {
|
||||
details(e.data[1][0], e.data[1][1])
|
||||
@@ -131,16 +138,8 @@ onmessage = function (e) {
|
||||
post("pass")
|
||||
} else if (e.data[0] == "toastSaved") {
|
||||
M.toast({ html: lang.lang_img_DLDone + e.data[1][0] + '<button class="btn-flat toast-action" onclick="openFinder(\'' + e.data[1][1] + '\')">Show</button>', displayLength: 5000 })
|
||||
} else if (e.data[0] == "toastMute") {
|
||||
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_parse_mute, displayLength: 2000 })
|
||||
} else if (e.data[0] == "toastEmp") {
|
||||
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_status_emphas, displayLength: 2000 })
|
||||
} else if (e.data[0] == "toastUnEmp") {
|
||||
M.toast({ html: escapeHTML(e.data[1]) + lang.lang_status_unemphas, displayLength: 2000 })
|
||||
} else if (e.data[0] == "parseColumn") {
|
||||
parseColumn()
|
||||
} else if (e.data[0] == "sortload") {
|
||||
sortload()
|
||||
} else if (e.data[0] == "exportSettingsCore") {
|
||||
exportSettingsCore()
|
||||
} else if (e.data[0] == "fontList") {
|
||||
|
@@ -170,4 +170,29 @@ $.mb_substr = function (str, begin, end) {
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
//ソートするやつ
|
||||
function object_array_sort(data, key, order, fn) {
|
||||
var num_a = -1;
|
||||
var num_b = 1;
|
||||
if (order === 'asc') {
|
||||
num_a = 1;
|
||||
num_b = -1;
|
||||
}
|
||||
data = data.sort(function (a, b) {
|
||||
var x = a[key];
|
||||
var y = b[key];
|
||||
if (x > y) return num_a;
|
||||
if (x < y) return num_b;
|
||||
return 0;
|
||||
});
|
||||
var arrObj = {};
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
arrObj[data[i]['family']] = data[i];
|
||||
}
|
||||
data = [];
|
||||
for (var key in arrObj) {
|
||||
data.push(arrObj[key]);
|
||||
}
|
||||
fn(data);
|
||||
}
|
||||
localStorage.removeItem("errors");
|
@@ -55,6 +55,8 @@ onmessage = function (e) {
|
||||
ipc.send('theme-css-request', e.data[1]);
|
||||
} else if (e.data[0] == "downloadButton") {
|
||||
ipc.send('download-btn', e.data[1]);
|
||||
} else if (e.data[0] == "nano") {
|
||||
ipc.send('nano', null);
|
||||
}
|
||||
}
|
||||
//version.js
|
||||
@@ -64,9 +66,6 @@ ipc.on('platform', function (event, args) {
|
||||
localStorage.setItem("bit", args[1])
|
||||
localStorage.setItem("about", JSON.stringify([args[2], args[3], args[4]]))
|
||||
})
|
||||
ipc.on('winstore', function (event, arg) {
|
||||
localStorage.setItem("winstore", arg)
|
||||
})
|
||||
|
||||
ipc.on('reload', function (event, arg) {
|
||||
location.reload();
|
||||
@@ -79,9 +78,7 @@ ipc.on('shownotf', function (event, args) {
|
||||
postMessage(["udg", [user, acct_id]], "*")
|
||||
}
|
||||
})
|
||||
function nano() {
|
||||
ipc.send('nano', "");
|
||||
}
|
||||
|
||||
//first.js
|
||||
ipc.on('custom-css-response', function (event, arg) {
|
||||
if (arg == "") { return false; }
|
||||
@@ -105,63 +102,6 @@ ipc.on('theme-css-response', function (event, arg) {
|
||||
ipc.on('bmp-img-comp', function (event, b64) {
|
||||
postMessage(["media", [b64[0], "image/png", b64[1]]], "*")
|
||||
});
|
||||
//post.js
|
||||
ipc.on('dialogCWRender', function (event, arg) {
|
||||
if (arg === 1) {
|
||||
$("#cw-text").show();
|
||||
$("#cw").addClass("yellow-text");
|
||||
$("#cw").addClass("cw-avail");
|
||||
$("#cw-text").val(plus);
|
||||
postMessage(["post", ""], "*")
|
||||
} else if (arg === 2) {
|
||||
postMessage(["post", ""], "*")
|
||||
}
|
||||
});
|
||||
//parse.js
|
||||
ipc.on('dialogClientRender', function (event, arg) {
|
||||
if (arg === 1) {
|
||||
var cli = localStorage.getItem("client_emp");
|
||||
var obj = JSON.parse(cli);
|
||||
if (!obj) {
|
||||
var obj = [];
|
||||
obj.push(name);
|
||||
postMessage(["toastEmp", name], "*")
|
||||
} else {
|
||||
var can;
|
||||
Object.keys(obj).forEach(function (key) {
|
||||
var cliT = obj[key];
|
||||
if (cliT != name && !can) {
|
||||
can = false;
|
||||
} else {
|
||||
can = true;
|
||||
obj.splice(key, 1);
|
||||
postMessage(["toastUnEmp", name], "*")
|
||||
}
|
||||
});
|
||||
if (!can) {
|
||||
obj.push(name);
|
||||
postMessage(["toastEmp", name], "*")
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_emp", json);
|
||||
} else if (arg === 2) {
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
if (!obj) {
|
||||
obj = [];
|
||||
}
|
||||
obj.push(name);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_mute", json);
|
||||
postMessage(["toastMute", name], "*")
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
parseColumn();
|
||||
});
|
||||
//ui,img.js
|
||||
ipc.on('general-dl-prog', function (event, arg) {
|
||||
console.log("Progress: " + arg);
|
||||
@@ -171,23 +111,6 @@ ipc.on('general-dl-message', function (event, arg) {
|
||||
console.log("saved")
|
||||
postMessage(["toastSaved", [arg, argC]], "*")
|
||||
})
|
||||
//layout.js
|
||||
ipc.on('column-del-reply', function (event, args) {
|
||||
if (args[0] === 1) {
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
localStorage.removeItem("card_" + args[1]);
|
||||
obj.splice(args[1], 1);
|
||||
for (var i = 0; i < obj.length; i++) {
|
||||
localStorage.setItem("card_" + i, "true");
|
||||
localStorage.removeItem("catch_" + i);
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
postMessage(["parseColumn", ""], "*")
|
||||
postMessage(["sortload", ""], "*")
|
||||
}
|
||||
})
|
||||
//setting.js
|
||||
ipc.on('langres', function (event, arg) {
|
||||
location.href = "../" + lang + "/setting.html"
|
||||
@@ -237,7 +160,6 @@ ipc.on('memory', function (event, arg) {
|
||||
})
|
||||
//update.html
|
||||
ipc.on('prog', function (event, arg) {
|
||||
console.log(arg)
|
||||
postMessage(["updateProg", arg], "*")
|
||||
})
|
||||
ipc.on('mess', function (event, arg) {
|
||||
|
533
app/js/platform/punycode.js
Normal file
533
app/js/platform/punycode.js
Normal file
@@ -0,0 +1,533 @@
|
||||
/*! https://mths.be/punycode v1.4.1 by @mathias */
|
||||
;(function(root) {
|
||||
|
||||
/** Detect free variables */
|
||||
var freeExports = typeof exports == 'object' && exports &&
|
||||
!exports.nodeType && exports;
|
||||
var freeModule = typeof module == 'object' && module &&
|
||||
!module.nodeType && module;
|
||||
var freeGlobal = typeof global == 'object' && global;
|
||||
if (
|
||||
freeGlobal.global === freeGlobal ||
|
||||
freeGlobal.window === freeGlobal ||
|
||||
freeGlobal.self === freeGlobal
|
||||
) {
|
||||
root = freeGlobal;
|
||||
}
|
||||
|
||||
/**
|
||||
* The `punycode` object.
|
||||
* @name punycode
|
||||
* @type Object
|
||||
*/
|
||||
var punycode,
|
||||
|
||||
/** Highest positive signed 32-bit float value */
|
||||
maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
|
||||
|
||||
/** Bootstring parameters */
|
||||
base = 36,
|
||||
tMin = 1,
|
||||
tMax = 26,
|
||||
skew = 38,
|
||||
damp = 700,
|
||||
initialBias = 72,
|
||||
initialN = 128, // 0x80
|
||||
delimiter = '-', // '\x2D'
|
||||
|
||||
/** Regular expressions */
|
||||
regexPunycode = /^xn--/,
|
||||
regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
|
||||
regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
|
||||
|
||||
/** Error messages */
|
||||
errors = {
|
||||
'overflow': 'Overflow: input needs wider integers to process',
|
||||
'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
|
||||
'invalid-input': 'Invalid input'
|
||||
},
|
||||
|
||||
/** Convenience shortcuts */
|
||||
baseMinusTMin = base - tMin,
|
||||
floor = Math.floor,
|
||||
stringFromCharCode = String.fromCharCode,
|
||||
|
||||
/** Temporary variable */
|
||||
key;
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* A generic error utility function.
|
||||
* @private
|
||||
* @param {String} type The error type.
|
||||
* @returns {Error} Throws a `RangeError` with the applicable error message.
|
||||
*/
|
||||
function error(type) {
|
||||
throw new RangeError(errors[type]);
|
||||
}
|
||||
|
||||
/**
|
||||
* A generic `Array#map` utility function.
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Function} callback The function that gets called for every array
|
||||
* item.
|
||||
* @returns {Array} A new array of values returned by the callback function.
|
||||
*/
|
||||
function map(array, fn) {
|
||||
var length = array.length;
|
||||
var result = [];
|
||||
while (length--) {
|
||||
result[length] = fn(array[length]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple `Array#map`-like wrapper to work with domain name strings or email
|
||||
* addresses.
|
||||
* @private
|
||||
* @param {String} domain The domain name or email address.
|
||||
* @param {Function} callback The function that gets called for every
|
||||
* character.
|
||||
* @returns {Array} A new string of characters returned by the callback
|
||||
* function.
|
||||
*/
|
||||
function mapDomain(string, fn) {
|
||||
var parts = string.split('@');
|
||||
var result = '';
|
||||
if (parts.length > 1) {
|
||||
// In email addresses, only the domain name should be punycoded. Leave
|
||||
// the local part (i.e. everything up to `@`) intact.
|
||||
result = parts[0] + '@';
|
||||
string = parts[1];
|
||||
}
|
||||
// Avoid `split(regex)` for IE8 compatibility. See #17.
|
||||
string = string.replace(regexSeparators, '\x2E');
|
||||
var labels = string.split('.');
|
||||
var encoded = map(labels, fn).join('.');
|
||||
return result + encoded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array containing the numeric code points of each Unicode
|
||||
* character in the string. While JavaScript uses UCS-2 internally,
|
||||
* this function will convert a pair of surrogate halves (each of which
|
||||
* UCS-2 exposes as separate characters) into a single code point,
|
||||
* matching UTF-16.
|
||||
* @see `punycode.ucs2.encode`
|
||||
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||||
* @memberOf punycode.ucs2
|
||||
* @name decode
|
||||
* @param {String} string The Unicode input string (UCS-2).
|
||||
* @returns {Array} The new array of code points.
|
||||
*/
|
||||
function ucs2decode(string) {
|
||||
var output = [],
|
||||
counter = 0,
|
||||
length = string.length,
|
||||
value,
|
||||
extra;
|
||||
while (counter < length) {
|
||||
value = string.charCodeAt(counter++);
|
||||
if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
|
||||
// high surrogate, and there is a next character
|
||||
extra = string.charCodeAt(counter++);
|
||||
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
|
||||
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
|
||||
} else {
|
||||
// unmatched surrogate; only append this code unit, in case the next
|
||||
// code unit is the high surrogate of a surrogate pair
|
||||
output.push(value);
|
||||
counter--;
|
||||
}
|
||||
} else {
|
||||
output.push(value);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a string based on an array of numeric code points.
|
||||
* @see `punycode.ucs2.decode`
|
||||
* @memberOf punycode.ucs2
|
||||
* @name encode
|
||||
* @param {Array} codePoints The array of numeric code points.
|
||||
* @returns {String} The new Unicode string (UCS-2).
|
||||
*/
|
||||
function ucs2encode(array) {
|
||||
return map(array, function(value) {
|
||||
var output = '';
|
||||
if (value > 0xFFFF) {
|
||||
value -= 0x10000;
|
||||
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
|
||||
value = 0xDC00 | value & 0x3FF;
|
||||
}
|
||||
output += stringFromCharCode(value);
|
||||
return output;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a basic code point into a digit/integer.
|
||||
* @see `digitToBasic()`
|
||||
* @private
|
||||
* @param {Number} codePoint The basic numeric code point value.
|
||||
* @returns {Number} The numeric value of a basic code point (for use in
|
||||
* representing integers) in the range `0` to `base - 1`, or `base` if
|
||||
* the code point does not represent a value.
|
||||
*/
|
||||
function basicToDigit(codePoint) {
|
||||
if (codePoint - 48 < 10) {
|
||||
return codePoint - 22;
|
||||
}
|
||||
if (codePoint - 65 < 26) {
|
||||
return codePoint - 65;
|
||||
}
|
||||
if (codePoint - 97 < 26) {
|
||||
return codePoint - 97;
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a digit/integer into a basic code point.
|
||||
* @see `basicToDigit()`
|
||||
* @private
|
||||
* @param {Number} digit The numeric value of a basic code point.
|
||||
* @returns {Number} The basic code point whose value (when used for
|
||||
* representing integers) is `digit`, which needs to be in the range
|
||||
* `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
|
||||
* used; else, the lowercase form is used. The behavior is undefined
|
||||
* if `flag` is non-zero and `digit` has no uppercase form.
|
||||
*/
|
||||
function digitToBasic(digit, flag) {
|
||||
// 0..25 map to ASCII a..z or A..Z
|
||||
// 26..35 map to ASCII 0..9
|
||||
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bias adaptation function as per section 3.4 of RFC 3492.
|
||||
* https://tools.ietf.org/html/rfc3492#section-3.4
|
||||
* @private
|
||||
*/
|
||||
function adapt(delta, numPoints, firstTime) {
|
||||
var k = 0;
|
||||
delta = firstTime ? floor(delta / damp) : delta >> 1;
|
||||
delta += floor(delta / numPoints);
|
||||
for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
|
||||
delta = floor(delta / baseMinusTMin);
|
||||
}
|
||||
return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a Punycode string of ASCII-only symbols to a string of Unicode
|
||||
* symbols.
|
||||
* @memberOf punycode
|
||||
* @param {String} input The Punycode string of ASCII-only symbols.
|
||||
* @returns {String} The resulting string of Unicode symbols.
|
||||
*/
|
||||
function decode(input) {
|
||||
// Don't use UCS-2
|
||||
var output = [],
|
||||
inputLength = input.length,
|
||||
out,
|
||||
i = 0,
|
||||
n = initialN,
|
||||
bias = initialBias,
|
||||
basic,
|
||||
j,
|
||||
index,
|
||||
oldi,
|
||||
w,
|
||||
k,
|
||||
digit,
|
||||
t,
|
||||
/** Cached calculation results */
|
||||
baseMinusT;
|
||||
|
||||
// Handle the basic code points: let `basic` be the number of input code
|
||||
// points before the last delimiter, or `0` if there is none, then copy
|
||||
// the first basic code points to the output.
|
||||
|
||||
basic = input.lastIndexOf(delimiter);
|
||||
if (basic < 0) {
|
||||
basic = 0;
|
||||
}
|
||||
|
||||
for (j = 0; j < basic; ++j) {
|
||||
// if it's not a basic code point
|
||||
if (input.charCodeAt(j) >= 0x80) {
|
||||
error('not-basic');
|
||||
}
|
||||
output.push(input.charCodeAt(j));
|
||||
}
|
||||
|
||||
// Main decoding loop: start just after the last delimiter if any basic code
|
||||
// points were copied; start at the beginning otherwise.
|
||||
|
||||
for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
|
||||
|
||||
// `index` is the index of the next character to be consumed.
|
||||
// Decode a generalized variable-length integer into `delta`,
|
||||
// which gets added to `i`. The overflow checking is easier
|
||||
// if we increase `i` as we go, then subtract off its starting
|
||||
// value at the end to obtain `delta`.
|
||||
for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
|
||||
|
||||
if (index >= inputLength) {
|
||||
error('invalid-input');
|
||||
}
|
||||
|
||||
digit = basicToDigit(input.charCodeAt(index++));
|
||||
|
||||
if (digit >= base || digit > floor((maxInt - i) / w)) {
|
||||
error('overflow');
|
||||
}
|
||||
|
||||
i += digit * w;
|
||||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||||
|
||||
if (digit < t) {
|
||||
break;
|
||||
}
|
||||
|
||||
baseMinusT = base - t;
|
||||
if (w > floor(maxInt / baseMinusT)) {
|
||||
error('overflow');
|
||||
}
|
||||
|
||||
w *= baseMinusT;
|
||||
|
||||
}
|
||||
|
||||
out = output.length + 1;
|
||||
bias = adapt(i - oldi, out, oldi == 0);
|
||||
|
||||
// `i` was supposed to wrap around from `out` to `0`,
|
||||
// incrementing `n` each time, so we'll fix that now:
|
||||
if (floor(i / out) > maxInt - n) {
|
||||
error('overflow');
|
||||
}
|
||||
|
||||
n += floor(i / out);
|
||||
i %= out;
|
||||
|
||||
// Insert `n` at position `i` of the output
|
||||
output.splice(i++, 0, n);
|
||||
|
||||
}
|
||||
|
||||
return ucs2encode(output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a string of Unicode symbols (e.g. a domain name label) to a
|
||||
* Punycode string of ASCII-only symbols.
|
||||
* @memberOf punycode
|
||||
* @param {String} input The string of Unicode symbols.
|
||||
* @returns {String} The resulting Punycode string of ASCII-only symbols.
|
||||
*/
|
||||
function encode(input) {
|
||||
var n,
|
||||
delta,
|
||||
handledCPCount,
|
||||
basicLength,
|
||||
bias,
|
||||
j,
|
||||
m,
|
||||
q,
|
||||
k,
|
||||
t,
|
||||
currentValue,
|
||||
output = [],
|
||||
/** `inputLength` will hold the number of code points in `input`. */
|
||||
inputLength,
|
||||
/** Cached calculation results */
|
||||
handledCPCountPlusOne,
|
||||
baseMinusT,
|
||||
qMinusT;
|
||||
|
||||
// Convert the input in UCS-2 to Unicode
|
||||
input = ucs2decode(input);
|
||||
|
||||
// Cache the length
|
||||
inputLength = input.length;
|
||||
|
||||
// Initialize the state
|
||||
n = initialN;
|
||||
delta = 0;
|
||||
bias = initialBias;
|
||||
|
||||
// Handle the basic code points
|
||||
for (j = 0; j < inputLength; ++j) {
|
||||
currentValue = input[j];
|
||||
if (currentValue < 0x80) {
|
||||
output.push(stringFromCharCode(currentValue));
|
||||
}
|
||||
}
|
||||
|
||||
handledCPCount = basicLength = output.length;
|
||||
|
||||
// `handledCPCount` is the number of code points that have been handled;
|
||||
// `basicLength` is the number of basic code points.
|
||||
|
||||
// Finish the basic string - if it is not empty - with a delimiter
|
||||
if (basicLength) {
|
||||
output.push(delimiter);
|
||||
}
|
||||
|
||||
// Main encoding loop:
|
||||
while (handledCPCount < inputLength) {
|
||||
|
||||
// All non-basic code points < n have been handled already. Find the next
|
||||
// larger one:
|
||||
for (m = maxInt, j = 0; j < inputLength; ++j) {
|
||||
currentValue = input[j];
|
||||
if (currentValue >= n && currentValue < m) {
|
||||
m = currentValue;
|
||||
}
|
||||
}
|
||||
|
||||
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
|
||||
// but guard against overflow
|
||||
handledCPCountPlusOne = handledCPCount + 1;
|
||||
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
|
||||
error('overflow');
|
||||
}
|
||||
|
||||
delta += (m - n) * handledCPCountPlusOne;
|
||||
n = m;
|
||||
|
||||
for (j = 0; j < inputLength; ++j) {
|
||||
currentValue = input[j];
|
||||
|
||||
if (currentValue < n && ++delta > maxInt) {
|
||||
error('overflow');
|
||||
}
|
||||
|
||||
if (currentValue == n) {
|
||||
// Represent delta as a generalized variable-length integer
|
||||
for (q = delta, k = base; /* no condition */; k += base) {
|
||||
t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
|
||||
if (q < t) {
|
||||
break;
|
||||
}
|
||||
qMinusT = q - t;
|
||||
baseMinusT = base - t;
|
||||
output.push(
|
||||
stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
|
||||
);
|
||||
q = floor(qMinusT / baseMinusT);
|
||||
}
|
||||
|
||||
output.push(stringFromCharCode(digitToBasic(q, 0)));
|
||||
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
|
||||
delta = 0;
|
||||
++handledCPCount;
|
||||
}
|
||||
}
|
||||
|
||||
++delta;
|
||||
++n;
|
||||
|
||||
}
|
||||
return output.join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a Punycode string representing a domain name or an email address
|
||||
* to Unicode. Only the Punycoded parts of the input will be converted, i.e.
|
||||
* it doesn't matter if you call it on a string that has already been
|
||||
* converted to Unicode.
|
||||
* @memberOf punycode
|
||||
* @param {String} input The Punycoded domain name or email address to
|
||||
* convert to Unicode.
|
||||
* @returns {String} The Unicode representation of the given Punycode
|
||||
* string.
|
||||
*/
|
||||
function toUnicode(input) {
|
||||
return mapDomain(input, function(string) {
|
||||
return regexPunycode.test(string)
|
||||
? decode(string.slice(4).toLowerCase())
|
||||
: string;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a Unicode string representing a domain name or an email address to
|
||||
* Punycode. Only the non-ASCII parts of the domain name will be converted,
|
||||
* i.e. it doesn't matter if you call it with a domain that's already in
|
||||
* ASCII.
|
||||
* @memberOf punycode
|
||||
* @param {String} input The domain name or email address to convert, as a
|
||||
* Unicode string.
|
||||
* @returns {String} The Punycode representation of the given domain name or
|
||||
* email address.
|
||||
*/
|
||||
function toASCII(input) {
|
||||
return mapDomain(input, function(string) {
|
||||
return regexNonASCII.test(string)
|
||||
? 'xn--' + encode(string)
|
||||
: string;
|
||||
});
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/** Define the public API */
|
||||
punycode = {
|
||||
/**
|
||||
* A string representing the current Punycode.js version number.
|
||||
* @memberOf punycode
|
||||
* @type String
|
||||
*/
|
||||
'version': '1.4.1',
|
||||
/**
|
||||
* An object of methods to convert from JavaScript's internal character
|
||||
* representation (UCS-2) to Unicode code points, and back.
|
||||
* @see <https://mathiasbynens.be/notes/javascript-encoding>
|
||||
* @memberOf punycode
|
||||
* @type Object
|
||||
*/
|
||||
'ucs2': {
|
||||
'decode': ucs2decode,
|
||||
'encode': ucs2encode
|
||||
},
|
||||
'decode': decode,
|
||||
'encode': encode,
|
||||
'toASCII': toASCII,
|
||||
'toUnicode': toUnicode
|
||||
};
|
||||
|
||||
/** Expose `punycode` */
|
||||
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||||
// like the following:
|
||||
if (
|
||||
typeof define == 'function' &&
|
||||
typeof define.amd == 'object' &&
|
||||
define.amd
|
||||
) {
|
||||
define('punycode', function() {
|
||||
return punycode;
|
||||
});
|
||||
} else if (freeExports && freeModule) {
|
||||
if (module.exports == freeExports) {
|
||||
// in Node.js, io.js, or RingoJS v0.8.0+
|
||||
freeModule.exports = punycode;
|
||||
} else {
|
||||
// in Narwhal or RingoJS v0.7.0-
|
||||
for (key in punycode) {
|
||||
punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// in Rhino or a web browser
|
||||
root.punycode = punycode;
|
||||
}
|
||||
|
||||
}(this));
|
@@ -120,6 +120,16 @@ function media(b64, type, no) {
|
||||
httpreq.onreadystatechange = function () {
|
||||
if (httpreq.readyState === 4) {
|
||||
var json = httpreq.response;
|
||||
if (!json.id) {
|
||||
todc();
|
||||
$("#imgup").text("");
|
||||
$(".toot-btn-group").prop("disabled", false);
|
||||
$("#post-acct-sel").prop("disabled", false);
|
||||
$('select').formSelect();
|
||||
$("#imgsel").show();
|
||||
M.toast({ html: lang.lang_postimg_failupload, displayLength: 5000 })
|
||||
return false
|
||||
}
|
||||
var img = localStorage.getItem("img");
|
||||
if (json.type.indexOf("image") != -1) {
|
||||
var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="' + json["id"] + '" onclick="deleteImage(\'' + json["id"] + '\')" title="' + lang.lang_postimg_delete + '">';
|
||||
|
@@ -23,20 +23,37 @@ function post(mode, postvis) {
|
||||
var cw_sent = localStorage.getItem("cw_sentence");
|
||||
}
|
||||
if (!localStorage.getItem("cw_letters")) {
|
||||
var cw_ltres = 500;
|
||||
var cw_ltres = 7000;
|
||||
} 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 plus = str.replace(/\n/g, "").slice(0, 10) + "...";
|
||||
const options = {
|
||||
type: 'info',
|
||||
Swal.fire({
|
||||
title: lang.lang_post_cwtitle,
|
||||
message: lang.lang_post_cwtxt + plus,
|
||||
buttons: [lang.lang_post_btn1, lang.lang_post_btn2, lang.lang_post_btn3]
|
||||
text: lang.lang_post_cwtxt + plus,
|
||||
type: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#3085d6',
|
||||
confirmButtonText: lang.lang_post_btn2,
|
||||
cancelButtonText: lang.lang_post_btn3,
|
||||
showCloseButton: true,
|
||||
focusConfirm: false,
|
||||
}).then((result) => {
|
||||
if (result.dismiss == "cancel") {
|
||||
//btn3:sonomama
|
||||
post("pass")
|
||||
} else if (result.value) {
|
||||
//btn2:auto-CW
|
||||
$("#cw-text").show();
|
||||
$("#cw").addClass("yellow-text");
|
||||
$("#cw").addClass("cw-avail");
|
||||
$("#cw-text").val(plus);
|
||||
post("pass")
|
||||
}
|
||||
postMessage(["dialogCW", options], "*")
|
||||
})
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -84,10 +84,10 @@ function rt(id, acct_id, remote) {
|
||||
|
||||
if ($("[toot-id=" + id + "]").hasClass("rted")) {
|
||||
$("[toot-id=" + id + "]").removeClass("rted");
|
||||
$(".rt_" + id).removeClass("teal-text");
|
||||
$(".rt_" + id).removeClass("light-blue-text");
|
||||
} else {
|
||||
$("[toot-id=" + id + "]").addClass("rted");
|
||||
$(".rt_" + id).addClass("teal-text");
|
||||
$(".rt_" + id).addClass("light-blue-text");
|
||||
}
|
||||
} else {
|
||||
M.toast({ html: lang.lang_status_btWarn, displayLength: 1000 })
|
||||
|
@@ -66,7 +66,7 @@ input.addEventListener("focus", function () {
|
||||
}
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
||||
suggest = "https://" + domain + "/api/v1/search?q=" + q
|
||||
suggest = "https://" + domain + "/api/v2/search?q=" + q
|
||||
if (suggest != oldSuggest) {
|
||||
console.log("Try to get suggest at " + suggest)
|
||||
fetch(suggest, {
|
||||
@@ -81,18 +81,43 @@ input.addEventListener("focus", function () {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function (json) {
|
||||
console.log(["Search", json]);
|
||||
//ハッシュタグ
|
||||
if (json.hashtags[0] && tag) {
|
||||
if (tag[1]) {
|
||||
var tags = "";
|
||||
var tags = [];
|
||||
Object.keys(json.hashtags).forEach(function (key4) {
|
||||
var tag = json.hashtags[key4];
|
||||
if (tag != q) {
|
||||
tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
|
||||
'\')" class="pointer">#' + tag + '</a><br>';
|
||||
var his = tag.history;
|
||||
var uses = his[0].uses * 1 + his[1].uses * 1 + his[2].uses * 1 + his[3].uses * 1 + his[4].uses * 1 + his[5].uses * 1 + his[6].uses * 1;
|
||||
tagHTML = '<br><a onclick="tagInsert(\'#' + escapeHTML(tag.name) + '\',\'#' + q + '\')" class="pointer">#' +
|
||||
escapeHTML(tag.name) + '</a> ' + uses + 'toot(s)'
|
||||
var item = {
|
||||
"uses": uses,
|
||||
"html": tagHTML
|
||||
}
|
||||
tags.push(item)
|
||||
});
|
||||
var num_a = -1;
|
||||
var num_b = 1;
|
||||
tags = tags.sort(function (a, b) {
|
||||
var x = a["uses"];
|
||||
var y = b["uses"];
|
||||
if (x > y) return num_a;
|
||||
if (x < y) return num_b;
|
||||
return 0;
|
||||
});
|
||||
var ins = ""
|
||||
var nev = false
|
||||
Object.keys(tags).forEach(function (key7) {
|
||||
ins = ins + tags[key7].html
|
||||
if (key7 <= 0 && !nev) {
|
||||
ins = ins + '<br>'
|
||||
nev = true
|
||||
}
|
||||
});
|
||||
$("#suggest").html(ins);
|
||||
$("#right-side").show()
|
||||
$("#suggest").html("Tags:<br>" + tags);
|
||||
$("#poll").addClass("hide")
|
||||
$("#emoji").addClass("hide")
|
||||
}
|
||||
|
@@ -155,7 +155,7 @@ function additionalIndv(tlid, acct_id, id) {
|
||||
});
|
||||
} else {
|
||||
var id = $("[toot-id=" + id + "] .toot a").parents('.cvo').attr("toot-id");
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
fetch(start, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
@@ -169,6 +169,7 @@ function additionalIndv(tlid, acct_id, id) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function (json) {
|
||||
json = json.card;
|
||||
//このリンク鳥やんけ、ってとき
|
||||
if (json.provider_name == "Twitter") {
|
||||
if (json.image) {
|
||||
|
@@ -82,7 +82,7 @@ function details(id, acct_id, tlid, mode) {
|
||||
} else {
|
||||
$("#tootmodal").attr("data-user", scn);
|
||||
}
|
||||
context(id, acct_id);
|
||||
getContext(id, acct_id);
|
||||
var dom = null;
|
||||
if (!local) {
|
||||
dom = scn.replace(/.+@/g, '');
|
||||
@@ -99,8 +99,10 @@ function details(id, acct_id, tlid, mode) {
|
||||
if ($("#toot-this div").hasClass("cvo")) {
|
||||
$("#toot-this").removeClass("cvo");
|
||||
} else {
|
||||
if(!$("#toot-this .cvo").hasClass("cvo")){
|
||||
$("#toot-this").addClass("cvo");
|
||||
}
|
||||
}
|
||||
if (!$("#activator").hasClass("active")) {
|
||||
$('#det-col').collapsible('open', 4);
|
||||
}
|
||||
@@ -125,14 +127,7 @@ function replyTL(id, acct_id) {
|
||||
})
|
||||
}
|
||||
} else {
|
||||
var start = "https://" + domain + "/api/v1/statuses/" + id;
|
||||
var i = {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'Authorization': 'Bearer ' + at
|
||||
},
|
||||
}
|
||||
return false
|
||||
}
|
||||
fetch(start, i).then(function (response) {
|
||||
return response.json();
|
||||
@@ -155,27 +150,13 @@ function replyTL(id, acct_id) {
|
||||
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) {
|
||||
function getContext(id, acct_id) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
||||
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
||||
@@ -228,6 +209,14 @@ function context(id, acct_id) {
|
||||
$("#toot-after .hide").html(lang.lang_details_filtered);
|
||||
$("#toot-after .by_filter").css("display", "block");
|
||||
$("#toot-after .by_filter").removeClass("hide");
|
||||
var templete = parse(json.ancestors, '', 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();
|
||||
}
|
||||
|
||||
@@ -513,7 +502,7 @@ function trans(tar, to) {
|
||||
todo(error);
|
||||
console.error(error);
|
||||
}).then(function (text) {
|
||||
$("#toot-this .additional").html('<span class="gray">' + text.text + '</span>');
|
||||
$("#toot-this .additional").html('<span class="gray translate">' + text.text + '</span>');
|
||||
});
|
||||
}
|
||||
//ブラウザで開く
|
||||
|
@@ -53,11 +53,15 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
var empCli = localStorage.getItem("client_emp");
|
||||
if (empCli) {
|
||||
var empCli = JSON.parse(empCli);
|
||||
} else {
|
||||
var empCli = [];
|
||||
}
|
||||
//クライアントミュート
|
||||
var muteCli = localStorage.getItem("client_mute");
|
||||
if (muteCli) {
|
||||
var muteCli = JSON.parse(muteCli);
|
||||
} else {
|
||||
var muteCli = [];
|
||||
}
|
||||
//ユーザー強調
|
||||
var useremp = localStorage.getItem("user_emp");
|
||||
@@ -498,11 +502,9 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="max-width:100%;"></a></span>';
|
||||
} else if (media.type.indexOf("audio") !== -1) {
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="video" class="img-parsed"><audio src="' +
|
||||
viewer = viewer + '<audio src="' +
|
||||
purl + '" class="' + sense +
|
||||
' toot-img pointer" style="width:100%;" controls></a></span>';
|
||||
' toot-img pointer" style="width:100%;" controls></span>';
|
||||
} else {
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
@@ -579,7 +581,7 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
var rt_app = "";
|
||||
/*
|
||||
if (toot.reblogged) {
|
||||
var if_rt = "teal-text";
|
||||
var if_rt = "light-blue-text";
|
||||
var rt_app = "rted";
|
||||
} else {
|
||||
var if_rt = "";
|
||||
@@ -830,10 +832,10 @@ function misskeyParse(obj, mix, acct_id, tlid, popup, mutefilter) {
|
||||
'<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="fas fa-share"></i></a></div>' +
|
||||
'\')" class="waves-effect waves-dark btn-flat rep-btn" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas 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 fas fa-retweet ' +
|
||||
'\')" class="waves-effect waves-dark btn-flat bt-btn" style="padding:0" title="' + lang.lang_misskeyparse_renote + '"><i class="text-darken-3 fas 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 fas fa-quote-right"></i></a></div>' +
|
||||
@@ -977,7 +979,7 @@ function goGoogle(id) {
|
||||
}
|
||||
var misskeyws = []
|
||||
var misskeywsstate = []
|
||||
function connectMisskey(acct_id) {
|
||||
function connectMisskey(acct_id, re) {
|
||||
var domain = localStorage.getItem("domain_" + acct_id);
|
||||
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
||||
var start = "wss://" + domain +
|
||||
@@ -996,10 +998,9 @@ function connectMisskey(acct_id) {
|
||||
console.log([domain + ":Receive Streaming API:", data]);
|
||||
var data = JSON.parse(mess.data)
|
||||
var obj = data.body.body
|
||||
|
||||
var mute = [];
|
||||
if (data.body.id.indexOf("notf:") !== -1) {
|
||||
var obj = JSON.parse(mess.data).body;
|
||||
console.log(obj);
|
||||
var popup = localStorage.getItem("popup");
|
||||
if (!popup) {
|
||||
popup = 0;
|
||||
@@ -1061,13 +1062,17 @@ function connectMisskey(acct_id) {
|
||||
console.error("Error closing " + tlid);
|
||||
console.error(error);
|
||||
misskeywsstate[wsid] = false
|
||||
connectMisskey(acct_id)
|
||||
if(!re){
|
||||
connectMisskey(acct_id, true)
|
||||
}
|
||||
return false;
|
||||
};
|
||||
misskeyws[wsid].onclose = function () {
|
||||
console.warn("Closing " + tlid);
|
||||
misskeywsstate[wsid] = false
|
||||
connectMisskey(acct_id)
|
||||
if(!re){
|
||||
connectMisskey(acct_id, true)
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
|
@@ -43,15 +43,15 @@ function mixtl(acct_id, tlid, type, delc, voice) {
|
||||
timeline.splice(20);
|
||||
}
|
||||
var templete = "";
|
||||
Object.keys(timeline).forEach(function (key) {
|
||||
var pkey = key * 1 + 1;
|
||||
if (pkey < timeline.length) {
|
||||
if (date(timeline[key].created_at, "unix") != date(timeline[pkey].created_at, "unix")) {
|
||||
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
|
||||
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "mix");
|
||||
} else {
|
||||
var mute = [];
|
||||
}
|
||||
Object.keys(timeline).forEach(function (key) {
|
||||
var pkey = key * 1 + 1;
|
||||
if (pkey < timeline.length) {
|
||||
if (date(timeline[key].created_at, "unix") != date(timeline[pkey].created_at, "unix")) {
|
||||
if (type == "integrated") {
|
||||
templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix");
|
||||
} else if (type == "plus") {
|
||||
|
@@ -432,6 +432,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
viashow = "hide";
|
||||
} else {
|
||||
var via = escapeHTML(toot.application.name);
|
||||
if (empCli) {
|
||||
//強調チェック
|
||||
Object.keys(empCli).forEach(function (key6) {
|
||||
var empCliList = empCli[key6];
|
||||
@@ -439,6 +440,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
boostback = "emphasized";
|
||||
}
|
||||
});
|
||||
}
|
||||
if (muteCli) {
|
||||
//ミュートチェック
|
||||
Object.keys(muteCli).forEach(function (key7) {
|
||||
var muteCliList = muteCli[key7];
|
||||
@@ -447,6 +450,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if (mix == "pinned") {
|
||||
boostback = "emphasized";
|
||||
}
|
||||
@@ -477,8 +481,25 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
}
|
||||
}
|
||||
var urls = $.strip_tags(content).replace(/\n/g, " ").match(
|
||||
/https?:\/\/([-a-zA-Z0-9@.]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
||||
/https?:\/\/([^+_]+)\/?(?!.*((media|tags)|mentions)).*([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?/
|
||||
);
|
||||
urlsck = content.match(/(https?):\/\/([^<>]*?)\/([^"]*)/g)
|
||||
if (urlsck) {
|
||||
for (var urlct = 0; urlct < urlsck.length; urlct++) {
|
||||
var urlindv = urlsck[urlct]
|
||||
urlCont = urlindv.match(/(https?):\/\/([^a-zA-Z0-9.-]*?)\.(.+?)\/([^"]*)/)
|
||||
if (urlCont) {
|
||||
urlindv = urlindv.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\$&")
|
||||
var encoded = encodeURI(urlCont[4])
|
||||
var punycoded = "xn--" + punycode.encode(urlCont[2])
|
||||
var eUrl = urlCont[1] + "://" + punycoded + "." + urlCont[3] + "/" + encoded
|
||||
var regExp = new RegExp('href="' + urlindv + '"', "g")
|
||||
content = content.replace(regExp, 'href="' + eUrl + '"')
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (urls) {
|
||||
var analyze = '<a onclick="additionalIndv(\'' + tlid + '\',' + acct_id +
|
||||
',\'' + id + '\')" class="add-show pointer">' + lang.lang_parse_url + '</a><br>';
|
||||
@@ -521,60 +542,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
'"><i class="far fa-calendar-times"></i>' +
|
||||
ended + '</span></div>';
|
||||
}
|
||||
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 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);
|
||||
poll = poll.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//ニコフレ絵文字
|
||||
if (toot.profile_emojis) {
|
||||
var nicoemojick = toot.profile_emojis[0];
|
||||
} else {
|
||||
var nicoemojick = false;
|
||||
}
|
||||
//絵文字があれば(nico)
|
||||
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);
|
||||
poll = poll.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//デフォ絵文字
|
||||
content = twemoji.parse(content);
|
||||
if (dis_name) {
|
||||
dis_name = twemoji.parse(dis_name);
|
||||
}
|
||||
if (spoil) {
|
||||
spoil = twemoji.parse(spoil);
|
||||
}
|
||||
if (noticetext) {
|
||||
noticetext = twemoji.parse(noticetext);
|
||||
}
|
||||
if (notice) {
|
||||
notice = twemoji.parse(notice);
|
||||
}
|
||||
if (poll) {
|
||||
poll = twemoji.parse(poll);
|
||||
}
|
||||
|
||||
var mediack = toot.media_attachments[0];
|
||||
//メディアがあれば
|
||||
var media_ids = "";
|
||||
@@ -590,8 +558,8 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
if (toot.sensitive && nsfw) {
|
||||
var sense = "sensitive"
|
||||
var blur = media.blurhash
|
||||
if (blur) {
|
||||
nsfwmes = '<div class="nsfw-media">' + lang.lang_parse_nsfw + '</div>'
|
||||
if (blur) {
|
||||
purl = parseBlur(blur)
|
||||
var sense = ""
|
||||
}
|
||||
@@ -604,15 +572,13 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
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>';
|
||||
' toot-img pointer" style="max-width:100%;" loop="true"></a></span>';
|
||||
} else {
|
||||
if (media.type == "unknown") {
|
||||
viewer = viewer + '<a href="' + media.remote_url + '" title="' + media.remote_url + '">[' + lang.lang_parse_unknown + ']</a> '
|
||||
} else if (media.type == "audio") {
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',' +
|
||||
acct_id + ')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
'" data-type="audio" class="img-parsed"><audio src="' +
|
||||
url + '" class="pointer" style="width:100%;" controls></a></span>';
|
||||
viewer = viewer + '<audio src="' +
|
||||
url + '" class="pointer" style="width:100%;" controls></span>';
|
||||
} else {
|
||||
viewer = viewer + '<a onclick="imgv(\'' + id + '\',\'' + key2 + '\',\'' +
|
||||
acct_id + '\')" id="' + id + '-image-' + key2 + '" data-url="' + url +
|
||||
@@ -690,11 +656,11 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
} else if (visen == "private") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons orange-text vis-data pointer" title="' + lang.lang_parse_private + '(' + lang.lang_parse_clickcopy + ')" data-vis="private" onclick="staCopy(\'' + id + '\')" style="font-size:1rem;">lock</i>';
|
||||
var can_rt = "hide";
|
||||
var can_rt = "unvisible";
|
||||
} else if (visen == "direct") {
|
||||
var vis =
|
||||
'<i class="text-darken-3 material-icons red-text vis-data pointer" title="' + lang.lang_parse_direct + '(' + lang.lang_parse_clickcopy + ')" data-vis="direct" onclick="staCopy(\'' + id + '\')" style="font-size:1rem;">mail</i>';
|
||||
var can_rt = "hide";
|
||||
var can_rt = "unvisible";
|
||||
}
|
||||
if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
|
||||
var if_mine = "";
|
||||
@@ -711,7 +677,7 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
var fav_app = "";
|
||||
}
|
||||
if (toot.reblogged) {
|
||||
var if_rt = "teal-text";
|
||||
var if_rt = "light-blue-text";
|
||||
var rt_app = "rted";
|
||||
} else {
|
||||
var if_rt = "";
|
||||
@@ -734,7 +700,6 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
if (wordmuteList) {
|
||||
Object.keys(wordmuteList).forEach(function (key8) {
|
||||
var worde = wordmuteList[key8];
|
||||
console.log(worde)
|
||||
if (worde) {
|
||||
if (worde.tag) {
|
||||
var wordList = worde.tag;
|
||||
@@ -759,9 +724,63 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
}
|
||||
});
|
||||
}
|
||||
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 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);
|
||||
poll = poll.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//ニコフレ絵文字
|
||||
if (toot.profile_emojis) {
|
||||
var nicoemojick = toot.profile_emojis[0];
|
||||
} else {
|
||||
var nicoemojick = false;
|
||||
}
|
||||
//絵文字があれば(nico)
|
||||
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);
|
||||
poll = poll.replace(regExp, emoji_url);
|
||||
});
|
||||
}
|
||||
//デフォ絵文字
|
||||
content = twemoji.parse(content);
|
||||
if (dis_name) {
|
||||
dis_name = twemoji.parse(dis_name);
|
||||
}
|
||||
if (spoil) {
|
||||
spoil = twemoji.parse(spoil);
|
||||
}
|
||||
if (noticetext) {
|
||||
noticetext = twemoji.parse(noticetext);
|
||||
}
|
||||
if (notice) {
|
||||
notice = twemoji.parse(notice);
|
||||
}
|
||||
if (poll) {
|
||||
poll = twemoji.parse(poll);
|
||||
}
|
||||
//日本語じゃない
|
||||
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>';
|
||||
var trans = '<div class="action pin"><a onclick="trans(\'' + toot.language + '\',\'' + lang.language + '\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_trans + '"><i class="material-icons">g_translate</i></a></div>';
|
||||
} else {
|
||||
var trans = "";
|
||||
}
|
||||
@@ -845,11 +864,11 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
'<div class="action ' + disp["re"] + ' ' + noauth + '"><a onclick="re(\'' + toot.id +
|
||||
'\',\'' + to_mention + '\',' +
|
||||
acct_id + ',\'' + visen +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas fa-share"></i><span class="rep_ct">' + replyct +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct rep-btn" data-men="' + to_mention + '" data-visen="' + visen + '" style="padding:0" title="' + lang.lang_parse_replyto + '"><i class="fas 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 actct" style="padding:0" title="' + lang.lang_parse_bt + '"><i class="fas fa-retweet ' +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct bt-btn" style="padding:0" title="' + lang.lang_parse_bt + '"><i class="fas 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"] + ' ' + noauth + ' ' + qtClass + '"><a onclick="qt(\'' + toot.id + '\',' + acct_id +
|
||||
@@ -857,22 +876,21 @@ function parse(obj, mix, acct_id, tlid, popup, mutefilter, type) {
|
||||
'\')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_quote + '"><i class="text-darken-3 fas 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 actct" style="padding:0" title="' + lang.lang_parse_fav + '"><i class="fas text-darken-3 fa-star' +
|
||||
'\')" class="waves-effect waves-dark btn-flat actct fav-btn" style="padding:0" title="' + lang.lang_parse_fav + '"><i class="fas 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"] + ' ' + 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="fas fa-trash"></i></a></div>' +
|
||||
')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_del + '"><i class="fas fa-trash"></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="fas fa-map-pin pin_' + toot.id + ' ' + if_pin + '"></i></a></div>'
|
||||
')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_pin + '"><i class="fas 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 ' +
|
||||
')" class="waves-effect waves-dark btn-flat actct" style="padding:0" title="' + lang.lang_parse_redraft + '"><i class="material-icons">redo</i></a></div>' + trans +
|
||||
'</div><div class="area-side ' + mouseover + '"><span class="cbadge viabadge waves-effect ' + viashow + ' ' + mine_via + '" style="max-width:60px;" onclick="client(\'' + $.strip_tags(via) + '\')" title="via ' + $.strip_tags(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>' +
|
||||
'</span>' + '<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>' +
|
||||
@@ -896,6 +914,7 @@ 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) {
|
||||
console.log(["Parsing", toot])
|
||||
if (!toot.username) {
|
||||
var raw = toot;
|
||||
@@ -1009,6 +1028,8 @@ function userparse(obj, auth, acct_id, tlid, popup) {
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
return templete;
|
||||
@@ -1017,13 +1038,61 @@ function userparse(obj, auth, acct_id, tlid, popup) {
|
||||
function client(name) {
|
||||
if (name != "Unknown") {
|
||||
//聞く
|
||||
const options = {
|
||||
type: 'info',
|
||||
Swal.fire({
|
||||
title: lang.lang_parse_clientop,
|
||||
message: name + lang.lang_parse_clienttxt,
|
||||
buttons: [lang.lang_parse_clientno, lang.lang_parse_clientemp, lang.lang_parse_clientmute]
|
||||
text: name + lang.lang_parse_clienttxt,
|
||||
type: 'info',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#3085d6',
|
||||
confirmButtonText: lang.lang_parse_clientmute,
|
||||
cancelButtonText: lang.lang_parse_clientemp,
|
||||
showCloseButton: true,
|
||||
focusConfirm: false,
|
||||
}).then((result) => {
|
||||
if (result.dismiss == "cancel") {
|
||||
//Emp
|
||||
var cli = localStorage.getItem("client_emp");
|
||||
var obj = JSON.parse(cli);
|
||||
if (!obj) {
|
||||
var obj = [];
|
||||
obj.push(name);
|
||||
M.toast({ html: escapeHTML(name) + lang.lang_status_emphas, displayLength: 2000 })
|
||||
} else {
|
||||
var can;
|
||||
Object.keys(obj).forEach(function (key) {
|
||||
var cliT = obj[key];
|
||||
if (cliT != name && !can) {
|
||||
can = false;
|
||||
} else {
|
||||
can = true;
|
||||
obj.splice(key, 1);
|
||||
M.toast({ html: escapeHTML(name) + lang.lang_status_unemphas, displayLength: 2000 })
|
||||
}
|
||||
postMessage(["dialogClient", options], "*")
|
||||
});
|
||||
if (!can) {
|
||||
obj.push(name);
|
||||
M.toast({ html: escapeHTML(name) + lang.lang_status_emphas, displayLength: 2000 })
|
||||
} else {
|
||||
|
||||
}
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_emp", json);
|
||||
parseColumn()
|
||||
}
|
||||
} else if (result.value) {
|
||||
//Mute
|
||||
var cli = localStorage.getItem("client_mute");
|
||||
var obj = JSON.parse(cli);
|
||||
if (!obj) {
|
||||
obj = [];
|
||||
}
|
||||
obj.push(name);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("client_mute", json);
|
||||
M.toast({ html: escapeHTML(name) + lang.lang_parse_mute, displayLength: 2000 })
|
||||
parseColumn()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@@ -54,7 +54,7 @@ function src(mode) {
|
||||
tags = tags + '<a onclick="tl(\'tag\',\'' + tag + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + escapeHTML(tag) + '</a><br> ';
|
||||
} else {
|
||||
tags = tags + graphDraw(tag);
|
||||
tags = tags + graphDraw(tag, acct_id);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -63,12 +63,12 @@ function src(mode) {
|
||||
//トゥート
|
||||
if (json.statuses[0]) {
|
||||
var templete = parse(json.statuses, '', acct_id);
|
||||
$("#src-contents").append("Mentions<br>" + templete);
|
||||
$("#src-contents").append("<br>Mentions<br>" + templete);
|
||||
}
|
||||
//アカウント
|
||||
if (json.accounts[0]) {
|
||||
var templete = userparse(json.accounts, '', acct_id);
|
||||
$("#src-contents").append("Accounts<br>" + templete);
|
||||
$("#src-contents").append("<br>Accounts<br>" + templete);
|
||||
}
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
@@ -164,7 +164,7 @@ function moreTs(tlid, q) {
|
||||
jQuery("time.timeago").timeago();
|
||||
});
|
||||
}
|
||||
function graphDraw(tag) {
|
||||
function graphDraw(tag, acct_id) {
|
||||
var tags = "";
|
||||
var his = tag.history;
|
||||
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]);
|
||||
@@ -177,12 +177,12 @@ function graphDraw(tag) {
|
||||
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\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toot(s) <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + escapeHTML(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\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||
'</svg><span style="font-size:200%">' + his[0].uses + '</span>toot <a onclick="tl(\'tag\',\'' + escapeHTML(tag.name) + '\',\'' + acct_id +
|
||||
'\',\'add\')" class="pointer">#' + escapeHTML(tag.name) + '</a> ' + his[0].accounts + lang.lang_src_people;
|
||||
}
|
||||
|
||||
|
@@ -55,7 +55,7 @@ function parseColumn(dontclose) {
|
||||
var domain = localStorage.getItem("domain_" + key);
|
||||
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
||||
localStorage.removeItem("misskey_wss_" + key)
|
||||
connectMisskey(key)
|
||||
connectMisskey(key, false)
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -364,8 +364,28 @@ function addselCk() {
|
||||
function removeColumn(tlid) {
|
||||
$("#sort-box").addClass("hide");
|
||||
$("#sort-box").removeClass("show");
|
||||
//聞く
|
||||
postMessage(["columnDel", tlid], "*")
|
||||
Swal.fire({
|
||||
title: lang.lang_layout_deleteColumn,
|
||||
text: lang.lang_layout_deleteColumnDesc,
|
||||
type: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: lang.lang_yesno,
|
||||
cancelButtonText: lang.lang_no
|
||||
}).then((result) => {
|
||||
if (result.value) {
|
||||
var multi = localStorage.getItem("column");
|
||||
var obj = JSON.parse(multi);
|
||||
obj.splice(tlid, 1);
|
||||
var json = JSON.stringify(obj);
|
||||
localStorage.setItem("column", json);
|
||||
parseColumn()
|
||||
sortLoad()
|
||||
}
|
||||
$("#sort-box").removeClass("hide");
|
||||
$("#sort-box").addClass("show");
|
||||
});
|
||||
}
|
||||
|
||||
//設定トグル
|
||||
|
@@ -70,7 +70,6 @@ if (location.search) {
|
||||
var mode = m[1];
|
||||
var codex = m[2];
|
||||
if (mode == "share") {
|
||||
console.log(codex);
|
||||
$('textarea').focus();
|
||||
$("#textarea").val(decodeURI(codex));
|
||||
show();
|
||||
@@ -84,15 +83,20 @@ $('#posttgl').click(function (e) {
|
||||
} else {
|
||||
hide();
|
||||
}
|
||||
$('.cvo').removeClass("selectedToot")
|
||||
selectedColumn = 0
|
||||
selectedToot = 0
|
||||
});
|
||||
|
||||
$("#timeline-container,#group").click(function (e) {
|
||||
|
||||
if (localStorage.getItem("box") != "absolute") {
|
||||
if ($('#post-box').hasClass("appear") && !localStorage.getItem("nohide")) {
|
||||
hide();
|
||||
}
|
||||
}
|
||||
$('.cvo').removeClass("selectedToot")
|
||||
selectedColumn = 0
|
||||
selectedToot = 0
|
||||
localStorage.removeItem("nohide")
|
||||
});
|
||||
$('#textarea,#cw-text').focusout(function (e) {
|
||||
@@ -101,4 +105,7 @@ $('#textarea,#cw-text').focusout(function (e) {
|
||||
localStorage.removeItem("nohide")
|
||||
}
|
||||
//setTimeout(remove, 100);
|
||||
$('.cvo').removeClass("selectedToot")
|
||||
selectedColumn = 0
|
||||
selectedToot = 0
|
||||
});
|
@@ -23,13 +23,22 @@ var tlView = new Vue({
|
||||
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()
|
||||
var ls = tlView.config[i];
|
||||
if (val) {
|
||||
localStorage.setItem(ls.storage, val)
|
||||
} else {
|
||||
if (!ls.data) {
|
||||
ls = [ls]
|
||||
} else {
|
||||
ls = ls.data
|
||||
}
|
||||
for (var j = 0; j < ls.length; j++) {
|
||||
M.toast({ html: 'Complete', displayLength: 3000 })
|
||||
localStorage.setItem(ls, val)
|
||||
var id = ls[j].id;
|
||||
var val = $("#" + id).val()
|
||||
localStorage.setItem(ls[j].storage, val)
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -39,13 +48,22 @@ var postView = new Vue({
|
||||
data: { config: postConstruction, kirishima: localStorage.getItem('kirishima') },
|
||||
methods: {
|
||||
complete: function (i, val) {
|
||||
var ls = postView.config[i].storage;
|
||||
M.toast({ html: 'Complete', displayLength: 3000 })
|
||||
if (!val) {
|
||||
var id = postView.config[i].id;
|
||||
var val = $("#" + id).val()
|
||||
var ls = postView.config[i];
|
||||
if (val) {
|
||||
localStorage.setItem(ls.storage, val)
|
||||
} else {
|
||||
if (!ls.data) {
|
||||
ls = [ls]
|
||||
} else {
|
||||
ls = ls.data
|
||||
}
|
||||
for (var j = 0; j < ls.length; j++) {
|
||||
M.toast({ html: 'Complete', displayLength: 3000 })
|
||||
var id = ls[j].id;
|
||||
var val = $("#" + id).val()
|
||||
localStorage.setItem(ls[j].storage, val)
|
||||
}
|
||||
}
|
||||
localStorage.setItem(ls, val)
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -96,16 +114,32 @@ function load() {
|
||||
var max = tlView.config.length;
|
||||
for (var i = 0; i < max; i++) {
|
||||
var ls = tlView.config[i].storage;
|
||||
if (ls) {
|
||||
if (localStorage.getItem(ls)) {
|
||||
tlView.config[i].setValue = localStorage.getItem(ls)
|
||||
}
|
||||
} else {
|
||||
ls = tlView.config[i].data
|
||||
for (var j = 0; j < ls.length; j++) {
|
||||
if(localStorage.getItem(tlView.config[i].data[j].storage)){
|
||||
tlView.config[i].data[j].setValue = localStorage.getItem(tlView.config[i].data[j].storage)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var max = postView.config.length;
|
||||
for (var i = 0; i < max; i++) {
|
||||
var ls = postView.config[i].storage;
|
||||
if (ls) {
|
||||
if (localStorage.getItem(ls)) {
|
||||
postView.config[i].setValue = localStorage.getItem(ls)
|
||||
}
|
||||
} else {
|
||||
ls = postView.config[i].data
|
||||
for (var j = 0; j < ls.length; j++) {
|
||||
postView.config[i].data[j].setValue = localStorage.getItem(ls[j].storage)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (localStorage.getItem("imas")) {
|
||||
$(".imas").removeClass("hide");
|
||||
|
@@ -193,6 +193,9 @@ function udg(user, acct_id) {
|
||||
$("#his-emp-btn").hide();
|
||||
$(".only-my-data").show();
|
||||
$(".only-his-data").hide();
|
||||
if(localStorage.getItem("main")==acct_id){
|
||||
$("#his-main-acct").hide();
|
||||
}
|
||||
} else {
|
||||
relations(user, acct_id);
|
||||
$(".only-my-data").hide();
|
||||
@@ -293,6 +296,9 @@ function misskeyUdg(user, acct_id) {
|
||||
$("#his-emp-btn").hide();
|
||||
$(".only-my-data").show();
|
||||
$(".only-his-data").hide();
|
||||
if(localStorage.getItem("main")==acct_id){
|
||||
$("#his-main-acct").hide();
|
||||
}
|
||||
} else {
|
||||
if (json.isFollowing) {
|
||||
//自分がフォローしている
|
||||
@@ -351,7 +357,6 @@ function relations(user, acct_id) {
|
||||
console.error(error);
|
||||
}).then(function (json) {
|
||||
var json = json[0];
|
||||
console.log(json);
|
||||
if (json.following) {
|
||||
//自分がフォローしている
|
||||
$("#his-data").addClass("following");
|
||||
@@ -409,6 +414,12 @@ function profbrws() {
|
||||
var url = $("#his-openin").attr("data-href")
|
||||
postMessage(["openUrl", url], "*")
|
||||
}
|
||||
function setMain() {
|
||||
var acct_id = $("#his-data").attr("use-acct")
|
||||
localStorage.setItem("main", acct_id);
|
||||
multiSelector(true)
|
||||
M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 })
|
||||
}
|
||||
//オールリセット
|
||||
function hisclose() {
|
||||
$('#his-data').modal('close');
|
||||
@@ -464,6 +475,7 @@ function reset() {
|
||||
$("#his-openin").attr("data-href", "");
|
||||
$("#his-float-timeline").show();
|
||||
$("#his-float-blocked").hide();
|
||||
$("#his-main-acct").show();
|
||||
$("#his-proof-prof").html("")
|
||||
}
|
||||
$('#my-data-nav .tab').on('click', function () {
|
||||
|
35
app/main.js
35
app/main.js
@@ -18,6 +18,27 @@ const app = electron.app;
|
||||
const BrowserWindow = electron.BrowserWindow;
|
||||
// メインウィンドウはGCされないようにグローバル宣言
|
||||
let mainWindow;
|
||||
if (process.argv.indexOf("--dev") === -1) {
|
||||
var packaged = true;
|
||||
} else {
|
||||
var packaged = false;
|
||||
console.log(
|
||||
"||\\\\\\ \n"+
|
||||
"|||| \\\\\\\\ \n"+
|
||||
"|||| \\\\\\\\ \n"+
|
||||
"|||| Am I a \\\\\\\\ \n"+
|
||||
"|||| cat? ^ ^ \\\\\\\\\\ _____ _ ____ _ \n"+
|
||||
"|||| (.-.) \\\\\\\\\\ |_ _| |__ ___| _ \\ ___ ___| | __\n"+
|
||||
"|||| ___> ) ||||| | | | '_ \\ / _ \\ | | |/ _ \\/ __| |/ /\n"+
|
||||
"|||| < _ _) ////// | | | | | | __/ |_| | __/\__ \\ < \n"+
|
||||
"|||| |_||_| ///// |_| |_| |_|\\___|____/ \\___||___/_|\\_\\ \n"+
|
||||
"|||| ///// \n"+
|
||||
"|||| /////\n"+
|
||||
"|||| /////\n"+
|
||||
"||||//////"
|
||||
)
|
||||
console.log("Welcome!")
|
||||
}
|
||||
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");
|
||||
@@ -25,9 +46,9 @@ var ha_path = join(app.getPath("userData"), "hardwareAcceleration");
|
||||
try {
|
||||
fs.readFileSync(ha_path, 'utf8');
|
||||
app.disableHardwareAcceleration()
|
||||
console.log("disabled: HA");
|
||||
if(!packaged) console.log("disabled: Hardware Acceleration");
|
||||
} catch{
|
||||
console.log("enabled: HA");
|
||||
if(!packaged) console.log("enabled: Hardware Acceleration");
|
||||
}
|
||||
var window_size;
|
||||
try {
|
||||
@@ -74,7 +95,6 @@ app.on('activate', function () {
|
||||
|
||||
function createWindow() {
|
||||
if (isFile(lang_path)) {
|
||||
console.log("exist");
|
||||
var lang = fs.readFileSync(lang_path, 'utf8');
|
||||
} else {
|
||||
var langs = app.getLocale();
|
||||
@@ -88,8 +108,8 @@ function createWindow() {
|
||||
fs.writeFileSync(lang_path, lang);
|
||||
});
|
||||
}
|
||||
console.log(app.getLocale());
|
||||
console.log("launch:" + lang);
|
||||
if(!packaged) console.log("your lang:" + app.getLocale());
|
||||
if(!packaged) console.log("launch:" + lang);
|
||||
// メイン画面の表示。ウィンドウの幅、高さを指定できる
|
||||
var platform = process.platform;
|
||||
var bit = process.arch;
|
||||
@@ -173,11 +193,6 @@ function createWindow() {
|
||||
|
||||
var platform = process.platform;
|
||||
var bit = process.arch;
|
||||
if (process.argv.indexOf("--dev") === -1) {
|
||||
packaged = true;
|
||||
} else {
|
||||
packaged = false;
|
||||
}
|
||||
Menu.setApplicationMenu(Menu.buildFromTemplate(language.template(lang, mainWindow, packaged, dir)));
|
||||
//CSS
|
||||
css.css(mainWindow);
|
||||
|
@@ -53,9 +53,13 @@ function css(mainWindow) {
|
||||
if (json.base == "light") {
|
||||
var drag = "rgba(255, 255, 255, 0.8)";
|
||||
var beforehover = "#757575";
|
||||
var selected = "#3f3f3f"
|
||||
var selectedWithShare = "#b2babd"
|
||||
} else {
|
||||
var drag = "rgba(0, 0, 0, 0.8)";
|
||||
var beforehover = "#9e9e9e";
|
||||
var selected = "#c0c0c0"
|
||||
var selectedWithShare = "#003a30"
|
||||
}
|
||||
if (json.props) {
|
||||
if (json.props.TheDeskAccent) {
|
||||
@@ -75,7 +79,7 @@ function css(mainWindow) {
|
||||
secondary +
|
||||
";--active:" + primary + ";--postbox:" + primary + ";--modalfooter:" +
|
||||
primary +
|
||||
";}.blacktheme #imagemodal{background: url(\"../img/pixel.svg\");}";
|
||||
";--accentbtn:" + primary + ";--selected:" + selected + ";--selectedWithShare:" + selectedWithShare + "}.customtheme #imagemodal{background: url(\"../img/pixel.svg\");}";
|
||||
e.sender.webContents.send('theme-css-response', css);
|
||||
} catch (e) {
|
||||
var css = "";
|
||||
|
@@ -146,33 +146,5 @@ function templete(lang, mainWindow, packaged, dir) {
|
||||
];
|
||||
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;
|
@@ -51,28 +51,6 @@ function system(mainWindow, dir, lang, dirname) {
|
||||
fs.writeFileSync(lang_path, arg);
|
||||
e.sender.webContents.send('langres', "");
|
||||
})
|
||||
//ストアから入れたかダイアログ
|
||||
ipc.on('dialogStore', function (e, args) {
|
||||
dialog.showMessageBox(args, function (arg) {
|
||||
if (arg == 1) {
|
||||
e.sender.webContents.send('winstore', "winstore");
|
||||
} else {
|
||||
e.sender.webContents.send('winstore', "localinstall");
|
||||
}
|
||||
});
|
||||
})
|
||||
//CWのダイアログ
|
||||
ipc.on('dialogCW', function (e, args) {
|
||||
dialog.showMessageBox(args, function (arg) {
|
||||
e.sender.webContents.send('dialogCWRender', arg);
|
||||
});
|
||||
})
|
||||
//クライアントのダイアログ
|
||||
ipc.on('dialogClient', function (e, args) {
|
||||
dialog.showMessageBox(args, function (arg) {
|
||||
e.sender.webContents.send('dialogClientRender', arg);
|
||||
});
|
||||
})
|
||||
//エクスポートのダイアログ
|
||||
ipc.on('exportSettings', function (e, args) {
|
||||
dialog.showSaveDialog(null, {
|
||||
@@ -158,13 +136,6 @@ function system(mainWindow, dir, lang, dirname) {
|
||||
window.loadURL(dir + '/about.html?ver=' + ver);
|
||||
return "true"
|
||||
}
|
||||
ipc.on('column-del', (e, tlid) => {
|
||||
console.log(tlid);
|
||||
var options = language.delsel(lang)
|
||||
dialog.showMessageBox(options, function (index) {
|
||||
e.sender.webContents.send('column-del-reply', [index, tlid]);
|
||||
})
|
||||
});
|
||||
ipc.on('nano', function (e, x, y) {
|
||||
|
||||
var nano_info_path = join(app.getPath("userData"),
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "thedesk",
|
||||
"version": "18.6.2",
|
||||
"version": "18.7.1",
|
||||
"description": "TheDesk is a Mastodon client for PC.",
|
||||
"repository": "https://github.com/cutls/TheDesk",
|
||||
"main": "main.js",
|
||||
@@ -43,7 +43,7 @@
|
||||
},
|
||||
{
|
||||
"name": "kPherox",
|
||||
"url": "https://pawoo.net/@kPherox",
|
||||
"url": "https://pl.kpherox.dev/kPherox",
|
||||
"email": "admin@mail.kr-kp.com"
|
||||
}
|
||||
],
|
||||
@@ -65,9 +65,9 @@
|
||||
"font-manager": "^0.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^5.0.4",
|
||||
"electron-builder": "^20.44.4",
|
||||
"readline-sync": "1.4.9"
|
||||
"electron": "^6.0.0",
|
||||
"electron-builder": "^21.1.5",
|
||||
"readline-sync": "1.4.10"
|
||||
},
|
||||
"build": {
|
||||
"productName": "TheDesk",
|
||||
@@ -116,8 +116,8 @@
|
||||
]
|
||||
},
|
||||
"electronDownload": {
|
||||
"version": "5.0.1"
|
||||
"version": "5.0.4"
|
||||
},
|
||||
"electronVersion": "5.0.1"
|
||||
"electronVersion": "5.0.4"
|
||||
}
|
||||
}
|
||||
|
@@ -36,8 +36,9 @@
|
||||
<script type="text/javascript" src="../../js/common/modal.js"></script>
|
||||
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||
<script>
|
||||
var ver = "Usamin (18.6.2)";
|
||||
var ver = "Usamin (18.7.1)";
|
||||
//betaを入れるとバージョンチェックしない
|
||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||
//var ver="beta";
|
||||
@@ -234,9 +235,9 @@
|
||||
<!--END hidden area-->
|
||||
</div>
|
||||
<div id="toot-btn-field">
|
||||
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
|
||||
<button class="btn waves-effect unmize toot-btn-group" onclick="post()"
|
||||
id="toot-post-btn">Toot</button>
|
||||
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
<button class="btn waves-effect darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
|
||||
title="Secondary Toot">lock_open</i></button>
|
||||
</div>
|
||||
@@ -465,7 +466,9 @@
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
|
||||
id="his-end-btn" onclick="pinUser()">Feature on profile</a><br>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
|
||||
onclick="profbrws()">Open in browser</a><br>
|
||||
onclick="profbrws()">Open in browser</a>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-my-data" id="his-main-acct"
|
||||
onclick="setMain()" style="width: calc(100% - 10px)">Set it an main account</a><br>
|
||||
</div><br>
|
||||
<div id="his-matching-list">
|
||||
Get people resembling this user.<br>
|
||||
@@ -664,7 +667,7 @@
|
||||
<!-- 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>
|
||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||
@@ -677,30 +680,21 @@
|
||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||
<br>
|
||||
<div id="release-Usamin_18-6-2" class="release-do" style="display:none; ">
|
||||
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||
<h5>Release Note Usamin (18.6.2)</h5>
|
||||
・Mastodon/Misskeyの音声ファイル添付に対応<br>
|
||||
・TLを下に読めない不具合の修正<br>
|
||||
・アップデータに関するバグの修正<br>
|
||||
・削除して再投稿をするとき、文字入力ができなくなる不具合の修正<br>
|
||||
<h5>Release Note Usamin (18.6.1)</h5>
|
||||
・リプライができない不具合を修正<br>
|
||||
・ワードフィルター/強調の適用がおかしい不具合<br>
|
||||
・テキストエリアのフォントが設定通りにならない不具合<br>
|
||||
<h5>Release Note Usamin (18.6.0)</h5>
|
||||
・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
|
||||
・投票済みのアンケートについて修正。<br>
|
||||
・<b>セキュリティの大幅な強化。</b><br>
|
||||
・Adobeフォトエディタの廃止
|
||||
<br>
|
||||
<h5>ThinkingDeskラベル</h5>
|
||||
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
|
||||
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
|
||||
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
|
||||
<h5>Release Note Usamin (18.7.1)</h5>
|
||||
・Electron 6.0.0。<br>
|
||||
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||
・コンテキストを上手く取得できないバグを修正。<br>
|
||||
・タグサジェストがパワーアップ。<br>
|
||||
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||
</div>
|
||||
<div id="release-en" style="display:none">
|
||||
<h5>Let's make it native!</h5>
|
||||
@@ -957,7 +951,7 @@
|
||||
<div id="bottom" class="reverse">
|
||||
<div class="leftside reverse">
|
||||
<div id="dambox">
|
||||
<button id="posttgl" class="btn waves-effect indigo"
|
||||
<button id="posttgl" class="btn waves-effect"
|
||||
style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
|
||||
<i class="material-icons"
|
||||
style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>Toot
|
||||
|
@@ -58,7 +58,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.id=='notf'"><a onclick="notftest()"
|
||||
class="pointer">Notification test</a><br></template>
|
||||
@@ -128,6 +128,10 @@
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
|
||||
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="blue" value="blue" />
|
||||
<span>Blue<span class="imas hide">(渚の花嫁)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
|
||||
value="custom" />
|
||||
@@ -208,7 +212,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -255,7 +259,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -299,7 +303,6 @@
|
||||
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
|
||||
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
|
||||
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">Save</button><br><br>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -374,13 +377,13 @@
|
||||
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
|
||||
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
|
||||
class="fa fa-spotify left"></i>Disconnect</a>
|
||||
<h5>Edit a template</h5>
|
||||
<br>
|
||||
<h5>@@templateedit@@</h5>
|
||||
@@templateeditwarn@@<br>
|
||||
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
|
||||
{url}</textarea><br>
|
||||
Spotify:{song}:Song name/{album}:Album name/{artist}:Artist name/{url}:URL to Spotify<br>
|
||||
macOS:{song}:Song name/{album}:Album name/{artist}:Artist name/composer:{composer}/spampling rate:{hz}/bit rate:{bitRate}/genre:{genre}<br>
|
||||
Windows:{song}:Song name/{album}:Album name/{artist}:Artist name<br>
|
||||
@@template1@@<br>
|
||||
@@template2@@<br>
|
||||
@@template3@@<br>
|
||||
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">Save</button>
|
||||
<h5>Attach an Artwork of Spotify</h5>
|
||||
<label>
|
||||
@@ -435,6 +438,7 @@
|
||||
<li>Ctrl+Enter+Shift:Post(secondary toot)</li>
|
||||
<li>Alt+Enter:Secondary Toot Button</li>
|
||||
<li>Ctrl+E:Make all notifications read</li>
|
||||
<li>Ctrl+U:Select the top & left(No.1 column) toot</li>
|
||||
<li>Esc:Hide toot box</li>
|
||||
<li>F5:Super Reload</li>
|
||||
<li>Ctrl+Shift+C:Clear toot box</li>
|
||||
@@ -448,13 +452,15 @@
|
||||
以下Markdownに対応したインスタンスのみ。
|
||||
<br>
|
||||
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
|
||||
<li>Shift+Enter:全角スペースを入れて改行</li>
|
||||
<li>Shift+Space:ゼロ幅スペース</li>
|
||||
以下アスタルテにログインしている場合のみ
|
||||
<br>
|
||||
<li>Ctrl+R:
|
||||
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
|
||||
</li><br>
|
||||
When a toot is selected:
|
||||
<li>F:Favourite this toot</li>
|
||||
<li>B:Boost this toot</li>
|
||||
<li>R:Reply to this toot</li>
|
||||
</div>
|
||||
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
|
||||
onclick="if(confirm('Delete all data. You cannot undo. Continue?')){ localStorage.clear(); location.href='index.html'; }"><i
|
||||
|
@@ -36,8 +36,9 @@
|
||||
<script type="text/javascript" src="../../js/common/modal.js"></script>
|
||||
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||
<script>
|
||||
var ver = "Usamin (18.6.2)";
|
||||
var ver = "Usamin (18.7.1)";
|
||||
//betaを入れるとバージョンチェックしない
|
||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||
//var ver="beta";
|
||||
@@ -234,9 +235,9 @@
|
||||
<!--END hidden area-->
|
||||
</div>
|
||||
<div id="toot-btn-field">
|
||||
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
|
||||
<button class="btn waves-effect unmize toot-btn-group" onclick="post()"
|
||||
id="toot-post-btn">トゥート</button>
|
||||
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
<button class="btn waves-effect darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
|
||||
title="セカンダリートゥート">lock_open</i></button>
|
||||
</div>
|
||||
@@ -465,7 +466,9 @@
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
|
||||
id="his-end-btn" onclick="pinUser()">紹介する</a><br>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
|
||||
onclick="profbrws()">ブラウザで開く</a><br>
|
||||
onclick="profbrws()">ブラウザで開く</a>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-my-data" id="his-main-acct"
|
||||
onclick="setMain()" style="width: calc(100% - 10px)">メインアカウントに設定</a><br>
|
||||
</div><br>
|
||||
<div id="his-matching-list">
|
||||
似ているユーザーを取得できます。<br>
|
||||
@@ -664,7 +667,7 @@
|
||||
<!-- 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>
|
||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||
@@ -677,30 +680,21 @@
|
||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||
<br>
|
||||
<div id="release-Usamin_18-6-2" class="release-do" style="display:none; ">
|
||||
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||
<h5>Release Note Usamin (18.6.2)</h5>
|
||||
・Mastodon/Misskeyの音声ファイル添付に対応<br>
|
||||
・TLを下に読めない不具合の修正<br>
|
||||
・アップデータに関するバグの修正<br>
|
||||
・削除して再投稿をするとき、文字入力ができなくなる不具合の修正<br>
|
||||
<h5>Release Note Usamin (18.6.1)</h5>
|
||||
・リプライができない不具合を修正<br>
|
||||
・ワードフィルター/強調の適用がおかしい不具合<br>
|
||||
・テキストエリアのフォントが設定通りにならない不具合<br>
|
||||
<h5>Release Note Usamin (18.6.0)</h5>
|
||||
・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
|
||||
・投票済みのアンケートについて修正。<br>
|
||||
・<b>セキュリティの大幅な強化。</b><br>
|
||||
・Adobeフォトエディタの廃止
|
||||
<br>
|
||||
<h5>ThinkingDeskラベル</h5>
|
||||
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
|
||||
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
|
||||
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
|
||||
<h5>Release Note Usamin (18.7.1)</h5>
|
||||
・Electron 6.0.0。<br>
|
||||
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||
・コンテキストを上手く取得できないバグを修正。<br>
|
||||
・タグサジェストがパワーアップ。<br>
|
||||
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||
</div>
|
||||
<div id="release-en" style="display:none">
|
||||
<h5>Let's make it native!</h5>
|
||||
@@ -957,7 +951,7 @@
|
||||
<div id="bottom" class="reverse">
|
||||
<div class="leftside reverse">
|
||||
<div id="dambox">
|
||||
<button id="posttgl" class="btn waves-effect indigo"
|
||||
<button id="posttgl" class="btn waves-effect"
|
||||
style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
|
||||
<i class="material-icons"
|
||||
style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>トゥート
|
||||
|
@@ -58,7 +58,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.id=='notf'"><a onclick="notftest()"
|
||||
class="pointer">通知テスト</a><br></template>
|
||||
@@ -128,6 +128,10 @@
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
|
||||
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="blue" value="blue" />
|
||||
<span>Blue<span class="imas hide">(渚の花嫁)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
|
||||
value="custom" />
|
||||
@@ -208,7 +212,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -255,7 +259,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -299,7 +303,6 @@
|
||||
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
|
||||
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
|
||||
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">設定</button><br><br>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -374,13 +377,13 @@
|
||||
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
|
||||
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
|
||||
class="fa fa-spotify left"></i>切断</a>
|
||||
<h5>テンプレートの編集</h5>
|
||||
以下を編集してテンプレートを変更できます。<br>
|
||||
<h5>@@templateedit@@</h5>
|
||||
@@templateeditwarn@@<br>
|
||||
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
|
||||
{url}</textarea><br>
|
||||
Spotify:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/{url}:各曲のSpotifyのURL<br>
|
||||
macOS:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名/作曲家{composer}/サンプルレート{hz}/ビットレート{bitRate}/ジャンル{genre}<br>
|
||||
Windows:{song}:曲名/{album}:アルバム名/{artist}:アーティスト名<br>
|
||||
@@template1@@<br>
|
||||
@@template2@@<br>
|
||||
@@template3@@<br>
|
||||
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">設定</button>
|
||||
<h5>アルバムアートワークを添付する(Spotify/Windows)</h5>
|
||||
<label>
|
||||
@@ -435,6 +438,7 @@
|
||||
<li>Ctrl+Enter+Shift:投稿(セカンダリートゥート)</li>
|
||||
<li>Alt+Enter:セカンダリートゥートボタン</li>
|
||||
<li>Ctrl+E:全ての通知を既読にする</li>
|
||||
<li>Ctrl+U:一番上の一番左のトゥートを選択</li>
|
||||
<li>Esc:投稿パネルを消す</li>
|
||||
<li>F5:スーパーリロード</li>
|
||||
<li>Ctrl+Shift+C:入力内容を消す</li>
|
||||
@@ -448,13 +452,15 @@
|
||||
以下Markdownに対応したインスタンスのみ。
|
||||
<br>
|
||||
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
|
||||
<li>Shift+Enter:全角スペースを入れて改行</li>
|
||||
<li>Shift+Space:ゼロ幅スペース</li>
|
||||
以下アスタルテにログインしている場合のみ
|
||||
<br>
|
||||
<li>Ctrl+R:
|
||||
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
|
||||
</li><br>
|
||||
選択時
|
||||
<li>F:お気に入り登録</li>
|
||||
<li>B:ブースト</li>
|
||||
<li>R:返信</li>
|
||||
</div>
|
||||
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
|
||||
onclick="if(confirm('全てのデータを削除します。この操作は取り消せません。')){ localStorage.clear(); location.href='index.html'; }"><i
|
||||
|
@@ -36,6 +36,7 @@
|
||||
<script type="text/javascript" src="../../js/common/modal.js"></script>
|
||||
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||
<script>
|
||||
var ver = "@@versionLetter@@";
|
||||
//betaを入れるとバージョンチェックしない
|
||||
@@ -234,9 +235,9 @@
|
||||
<!--END hidden area-->
|
||||
</div>
|
||||
<div id="toot-btn-field">
|
||||
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
|
||||
<button class="btn waves-effect unmize toot-btn-group" onclick="post()"
|
||||
id="toot-post-btn">@@toot@@</button>
|
||||
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
<button class="btn waves-effect darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
|
||||
title="@@sectoot@@">lock_open</i></button>
|
||||
</div>
|
||||
@@ -465,7 +466,9 @@
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
|
||||
id="his-end-btn" onclick="pinUser()">@@endorse@@</a><br>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
|
||||
onclick="profbrws()">@@openinbrowser@@</a><br>
|
||||
onclick="profbrws()">@@openinbrowser@@</a>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-my-data" id="his-main-acct"
|
||||
onclick="setMain()" style="width: calc(100% - 10px)">@@mainacct@@</a><br>
|
||||
</div><br>
|
||||
<div id="his-matching-list">
|
||||
@@likeUserDes@@<br>
|
||||
@@ -664,7 +667,7 @@
|
||||
<!-- 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>
|
||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">@@close@@</a>
|
||||
@@ -677,30 +680,21 @@
|
||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||
<br>
|
||||
<div id="release-Usamin_18-6-2" class="release-do" style="display:none; ">
|
||||
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||
<h5>Release Note Usamin (18.6.2)</h5>
|
||||
・Mastodon/Misskeyの音声ファイル添付に対応<br>
|
||||
・TLを下に読めない不具合の修正<br>
|
||||
・アップデータに関するバグの修正<br>
|
||||
・削除して再投稿をするとき、文字入力ができなくなる不具合の修正<br>
|
||||
<h5>Release Note Usamin (18.6.1)</h5>
|
||||
・リプライができない不具合を修正<br>
|
||||
・ワードフィルター/強調の適用がおかしい不具合<br>
|
||||
・テキストエリアのフォントが設定通りにならない不具合<br>
|
||||
<h5>Release Note Usamin (18.6.0)</h5>
|
||||
・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
|
||||
・投票済みのアンケートについて修正。<br>
|
||||
・<b>セキュリティの大幅な強化。</b><br>
|
||||
・Adobeフォトエディタの廃止
|
||||
<br>
|
||||
<h5>ThinkingDeskラベル</h5>
|
||||
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
|
||||
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
|
||||
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
|
||||
<h5>Release Note Usamin (18.7.1)</h5>
|
||||
・Electron 6.0.0。<br>
|
||||
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||
・コンテキストを上手く取得できないバグを修正。<br>
|
||||
・タグサジェストがパワーアップ。<br>
|
||||
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||
</div>
|
||||
<div id="release-en" style="display:none">
|
||||
<h5>Let's make it native!</h5>
|
||||
@@ -957,7 +951,7 @@
|
||||
<div id="bottom" class="reverse">
|
||||
<div class="leftside reverse">
|
||||
<div id="dambox">
|
||||
<button id="posttgl" class="btn waves-effect indigo"
|
||||
<button id="posttgl" class="btn waves-effect"
|
||||
style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
|
||||
<i class="material-icons"
|
||||
style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>@@toot@@
|
||||
|
@@ -88,6 +88,7 @@
|
||||
"likeHimOrHer":"Resembling",
|
||||
"endorse":"Feature on profile",
|
||||
"openinbrowser":"Open in browser",
|
||||
"mainacct":"Set it an main account",
|
||||
"frc":"Suggest",
|
||||
"more":"More",
|
||||
"revoverJP":" to ",
|
||||
|
@@ -89,6 +89,7 @@
|
||||
"more":"もっと",
|
||||
"endorse":"紹介する",
|
||||
"openinbrowser":"ブラウザで開く",
|
||||
"mainacct":"メインアカウントに設定",
|
||||
"revoverJP":"する",
|
||||
"warnUseOtherAcct":"(解除はできません。)",
|
||||
"revoverJPde":"で",
|
||||
|
@@ -175,6 +175,11 @@
|
||||
"keyshowprof": "Show profile of selecting",
|
||||
"keyrow": "Show next or previous image",
|
||||
"keyzoom": "Mousewheel:Zoom a image",
|
||||
"whenSelected": "When a toot is selected: ",
|
||||
"fav": "Favourite this toot",
|
||||
"bt": "Boost this toot",
|
||||
"reply": "Reply to this toot",
|
||||
"keyselecttop": "Select the top & left(No.1 column) toot",
|
||||
"reset": "Reset(Danger)",
|
||||
"resetconfirm": "Delete all data. You cannot undo. Continue?",
|
||||
"about": "About TheDesk",
|
||||
|
@@ -175,6 +175,11 @@
|
||||
"keyshowprof": "現在選択中のプロフィール",
|
||||
"keyrow": "イメージビューワー起動時に画像切り替え",
|
||||
"keyzoom": "マウスホイール:イメージビューワー時に拡大縮小",
|
||||
"whenSelected": "選択時",
|
||||
"fav": "お気に入り登録",
|
||||
"bt": "ブースト",
|
||||
"reply": "返信",
|
||||
"keyselecttop":"一番上の一番左のトゥートを選択",
|
||||
"reset": "初期化",
|
||||
"resetconfirm": "全てのデータを削除します。この操作は取り消せません。",
|
||||
"about": "このソフトについて",
|
||||
|
@@ -2,7 +2,7 @@ const fs = require("fs")
|
||||
const readlineSync = require('readline-sync');
|
||||
let ver = readlineSync.question('version string (empty: default string)? ');
|
||||
if (!ver) {
|
||||
ver = "Usamin (18.6.2)"
|
||||
ver = "Usamin (18.7.1)"
|
||||
}
|
||||
console.log("Constructing view files " + ver + ": make sure to update package.json")
|
||||
const langs = ["ja", "en", "ps"]
|
||||
|
@@ -58,7 +58,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.id=='notf'"><a onclick="notftest()"
|
||||
class="pointer">@@nntest@@</a><br></template>
|
||||
@@ -128,6 +128,10 @@
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
|
||||
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="blue" value="blue" />
|
||||
<span>Blue<span class="imas hide">(渚の花嫁)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
|
||||
value="custom" />
|
||||
@@ -208,7 +212,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -255,7 +259,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -299,7 +303,6 @@
|
||||
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">@@set@@</button><br><br>
|
||||
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
|
||||
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">@@set@@</button><br><br>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -374,13 +377,13 @@
|
||||
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
|
||||
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
|
||||
class="fa fa-spotify left"></i>@@disconnect@@</a>
|
||||
<h5>@@templeteedit@@</h5>
|
||||
@@templeteeditwarn@@<br>
|
||||
<h5>@@templateedit@@</h5>
|
||||
@@templateeditwarn@@<br>
|
||||
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
|
||||
{url}</textarea><br>
|
||||
@@templete1@@<br>
|
||||
@@templete2@@<br>
|
||||
@@templete3@@<br>
|
||||
@@template1@@<br>
|
||||
@@template2@@<br>
|
||||
@@template3@@<br>
|
||||
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">@@set@@</button>
|
||||
<h5>@@postartwork@@</h5>
|
||||
<label>
|
||||
@@ -435,6 +438,7 @@
|
||||
<li>Ctrl+Enter+Shift:@@keysecpost@@</li>
|
||||
<li>Alt+Enter:@@secondary@@</li>
|
||||
<li>Ctrl+E:@@keyunread@@</li>
|
||||
<li>Ctrl+U:@@keyselecttop@@</li>
|
||||
<li>Esc:@@keyesc@@</li>
|
||||
<li>F5:@@keyf5@@</li>
|
||||
<li>Ctrl+Shift+C:@@keyclear@@</li>
|
||||
@@ -448,13 +452,15 @@
|
||||
以下Markdownに対応したインスタンスのみ。
|
||||
<br>
|
||||
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
|
||||
<li>Shift+Enter:全角スペースを入れて改行</li>
|
||||
<li>Shift+Space:ゼロ幅スペース</li>
|
||||
以下アスタルテにログインしている場合のみ
|
||||
<br>
|
||||
<li>Ctrl+R:
|
||||
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
|
||||
</li><br>
|
||||
@@whenSelected@@
|
||||
<li>F:@@fav@@</li>
|
||||
<li>B:@@bt@@</li>
|
||||
<li>R:@@reply@@</li>
|
||||
</div>
|
||||
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
|
||||
onclick="if(confirm('@@resetconfirm@@')){ localStorage.clear(); location.href='index.html'; }"><i
|
||||
|
@@ -36,8 +36,9 @@
|
||||
<script type="text/javascript" src="../../js/common/modal.js"></script>
|
||||
<script type="text/javascript" src="../../js/ui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../node_modules/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||
<script type="text/javascript" src="../../js/platform/punycode.js"></script>
|
||||
<script>
|
||||
var ver = "Usamin (18.6.2)";
|
||||
var ver = "Usamin (18.7.1)";
|
||||
//betaを入れるとバージョンチェックしない
|
||||
//GitHubに上げるときはindex.htmlをちゃんとする。(index.start.html)
|
||||
//var ver="beta";
|
||||
@@ -234,9 +235,9 @@
|
||||
<!--END hidden area-->
|
||||
</div>
|
||||
<div id="toot-btn-field">
|
||||
<button class="btn waves-effect indigo unmize toot-btn-group" onclick="post()"
|
||||
<button class="btn waves-effect unmize toot-btn-group" onclick="post()"
|
||||
id="toot-post-btn">crwdns388:0crwdne388:0</button>
|
||||
<button class="btn waves-effect indigo darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
<button class="btn waves-effect darken-3 unmize hide toot-btn-group" onclick="sec()"
|
||||
id="toot-sec-btn"><i class="material-icons" id="toot-sec-icon"
|
||||
title="crwdns1890:0crwdne1890:0">lock_open</i></button>
|
||||
</div>
|
||||
@@ -465,7 +466,9 @@
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-his-data"
|
||||
id="his-end-btn" onclick="pinUser()">crwdns454:0crwdne454:0</a><br>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat" id="his-openin"
|
||||
onclick="profbrws()">crwdns455:0crwdne455:0</a><br>
|
||||
onclick="profbrws()">crwdns455:0crwdne455:0</a>
|
||||
<a href="#!" class="btn waves-effect waves-effect blue-grey btn-flat only-my-data" id="his-main-acct"
|
||||
onclick="setMain()" style="width: calc(100% - 10px)">@@mainacct@@</a><br>
|
||||
</div><br>
|
||||
<div id="his-matching-list">
|
||||
crwdns469:0crwdne469:0<br>
|
||||
@@ -664,7 +667,7 @@
|
||||
<!-- 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>
|
||||
<video src="" id="video" style="max-width:100%; max-height:100%;" controls loop="true" autoplay="true">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">crwdns385:0crwdne385:0</a>
|
||||
@@ -677,30 +680,21 @@
|
||||
<a href="https://thedesk.top" target="_blank">HP</a><br>
|
||||
<a href="https://github.com/cutls/TheDesk" target="_blank">GitHub</a><br>
|
||||
<br>
|
||||
<div id="release-Usamin_18-6-2" class="release-do" style="display:none; ">
|
||||
<div id="release-Usamin_18-7-1" class="release-do" style="display:none; ">
|
||||
<a href="https://code.cutls.com/thedesk-log/" target="_blank">開発の経緯</a><br>
|
||||
<a href="https://ja.mstdn.wiki/TheDesk" target="_blank">機能一覧</a><br>
|
||||
Pixiv Fanboxでは支援者様限定で様々なTheDeskに関する記事をご覧いただけます。最低月一更新。<br>
|
||||
困ったときは、<a href="https://docs.thedesk.top">TheDesk Docs</a>をご覧ください。
|
||||
<h5>Release Note Usamin (18.6.2)</h5>
|
||||
・Mastodon/Misskeyの音声ファイル添付に対応<br>
|
||||
・TLを下に読めない不具合の修正<br>
|
||||
・アップデータに関するバグの修正<br>
|
||||
・削除して再投稿をするとき、文字入力ができなくなる不具合の修正<br>
|
||||
<h5>Release Note Usamin (18.6.1)</h5>
|
||||
・リプライができない不具合を修正<br>
|
||||
・ワードフィルター/強調の適用がおかしい不具合<br>
|
||||
・テキストエリアのフォントが設定通りにならない不具合<br>
|
||||
<h5>Release Note Usamin (18.6.0)</h5>
|
||||
・アカウント選択のデザイン修正。クリック直後に閉じてしまうバグを修正。<br>
|
||||
・投票済みのアンケートについて修正。<br>
|
||||
・<b>セキュリティの大幅な強化。</b><br>
|
||||
・Adobeフォトエディタの廃止
|
||||
<br>
|
||||
<h5>ThinkingDeskラベル</h5>
|
||||
<img src="../../img/thinkingdesk.png" style="width:100px;" draggable="false"><br>
|
||||
手作りマットラベル。貼ってはがせる。300円なのでポイントの余りでどうぞ。<br>
|
||||
<a href="https://item.mercari.com/jp/m822743330" target="_blank">メルカリ</a>へ。
|
||||
<h5>Release Note Usamin (18.7.1)</h5>
|
||||
・Electron 6.0.0。<br>
|
||||
・画像ビューアーを開いているときに画像を矢印キーで切り替えられないバグを修正。<br>
|
||||
・コンテキストを上手く取得できないバグを修正。<br>
|
||||
・タグサジェストがパワーアップ。<br>
|
||||
・動画が自動再生(モーダル表示時)、ループ(モーダル, Pleroma, MisskeyのTL上)する<br>
|
||||
・絵文字(カスタム絵文字/Twemoji)をミュートワードに追加できるように。<br>
|
||||
・絵文字が入ったURLに関する不具合を修正。<br>
|
||||
・blurhash非対応インスタンスでのNSFW画像のblurを改修。<br>
|
||||
・Pleroma等でアカウント情報が無い時があるため、それに関して修正。<br>
|
||||
</div>
|
||||
<div id="release-en" style="display:none">
|
||||
<h5>Let's make it native!</h5>
|
||||
@@ -957,7 +951,7 @@
|
||||
<div id="bottom" class="reverse">
|
||||
<div class="leftside reverse">
|
||||
<div id="dambox">
|
||||
<button id="posttgl" class="btn waves-effect indigo"
|
||||
<button id="posttgl" class="btn waves-effect"
|
||||
style="width: 100%;height: 2.5rem;line-height: 0;margin: 0;">
|
||||
<i class="material-icons"
|
||||
style="position: relative; top: 5px; font-size: 1.5rem; text-align: center; margin-right: 10px;">edit</i>crwdns388:0crwdne388:0
|
||||
|
@@ -58,7 +58,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.id=='notf'"><a onclick="notftest()"
|
||||
class="pointer">crwdns540:0crwdne540:0</a><br></template>
|
||||
@@ -128,6 +128,10 @@
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="green" value="green" />
|
||||
<span>Green<span class="imas hide">(ユースフルロマンス)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="blue" value="blue" />
|
||||
<span>Blue<span class="imas hide">(渚の花嫁)</span></span>
|
||||
</label>
|
||||
<label>
|
||||
<input class="with-gap" onchange="settings()" name="theme" type="radio" id="custom"
|
||||
value="custom" />
|
||||
@@ -208,7 +212,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -255,7 +259,7 @@
|
||||
<template v-for="(item, i) in config">
|
||||
<h5>{{item.text.head}}</h5>
|
||||
<template v-if="item.text.desc">
|
||||
<templete v-html="item.text.desc"></templete><br>
|
||||
<span v-html="item.text.desc"></span><br>
|
||||
</template>
|
||||
<template v-if="item.checkbox">
|
||||
<template v-for="(check, j) in item.text.checkbox">
|
||||
@@ -299,7 +303,6 @@
|
||||
<button onclick="oks(2)" class="btn waves-effect" style="width:100px;">crwdns525:0crwdne525:0</button><br><br>
|
||||
Ctrl+Shift+3:<input type="text" style="width:150px" id="oks-3">
|
||||
<button onclick="oks(3)" class="btn waves-effect" style="width:100px;">crwdns525:0crwdne525:0</button><br><br>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -374,13 +377,13 @@
|
||||
<a onclick="spotifyDisconnect()" class="btn waves-effect nex disabled"
|
||||
style="width:100%; max-width:200px; background-color:#1ed760;" id="spotify-disable"><i
|
||||
class="fa fa-spotify left"></i>crwdns630:0crwdne630:0</a>
|
||||
<h5>crwdns631:0crwdne631:0</h5>
|
||||
crwdns632:0crwdne632:0<br>
|
||||
<h5>@@templateedit@@</h5>
|
||||
@@templateeditwarn@@<br>
|
||||
<textarea id="np-temp" class="materialize-textarea" data-length="500">#NowPlaying {song} / {album} / {artist}
|
||||
{url}</textarea><br>
|
||||
crwdns2358:0{song}crwdnd2358:0{album}crwdnd2358:0{artist}crwdnd2358:0{url}crwdne2358:0<br>
|
||||
crwdns2360:0{song}crwdnd2360:0{album}crwdnd2360:0{artist}crwdnd2360:0{composer}crwdnd2360:0{hz}crwdnd2360:0{bitRate}crwdnd2360:0{genre}crwdne2360:0<br>
|
||||
crwdns2362:0{song}crwdnd2362:0{album}crwdnd2362:0{artist}crwdne2362:0<br>
|
||||
@@template1@@<br>
|
||||
@@template2@@<br>
|
||||
@@template3@@<br>
|
||||
<button onclick="spotifySave()" class="btn waves-effect" style="width:100px;">crwdns525:0crwdne525:0</button>
|
||||
<h5>crwdns635:0crwdne635:0</h5>
|
||||
<label>
|
||||
@@ -435,6 +438,7 @@
|
||||
<li>Ctrl+Enter+Shift:crwdns1924:0crwdne1924:0</li>
|
||||
<li>Alt+Enter:crwdns1916:0crwdne1916:0</li>
|
||||
<li>Ctrl+E:crwdns652:0crwdne652:0</li>
|
||||
<li>Ctrl+U:@@keyselecttop@@</li>
|
||||
<li>Esc:crwdns653:0crwdne653:0</li>
|
||||
<li>F5:crwdns654:0crwdne654:0</li>
|
||||
<li>Ctrl+Shift+C:crwdns655:0crwdne655:0</li>
|
||||
@@ -448,13 +452,15 @@
|
||||
以下Markdownに対応したインスタンスのみ。
|
||||
<br>
|
||||
<li>Ctrl+B/I/S/U:太字/斜字/取り消し/下線</li>
|
||||
<li>Shift+Enter:全角スペースを入れて改行</li>
|
||||
<li>Shift+Space:ゼロ幅スペース</li>
|
||||
以下アスタルテにログインしている場合のみ
|
||||
<br>
|
||||
<li>Ctrl+R:
|
||||
<a href="https://astarte.thedesk.top">アスタルテ暇人ランキング</a>を開く
|
||||
</li><br>
|
||||
@@whenSelected@@
|
||||
<li>F:@@fav@@</li>
|
||||
<li>B:@@bt@@</li>
|
||||
<li>R:@@reply@@</li>
|
||||
</div>
|
||||
<button class="btn waves-effect red" style="width:100%; max-width:500px;"
|
||||
onclick="if(confirm('crwdns661:0crwdne661:0')){ localStorage.clear(); location.href='index.html'; }"><i
|
||||
|
Reference in New Issue
Block a user