Compare commits
18 commits
develop
...
repair-sty
Author | SHA1 | Date | |
---|---|---|---|
|
b355c21e36 | ||
|
eebdb35dda | ||
|
e53a5baa36 | ||
|
e51af57fb7 | ||
|
1c15e127a7 | ||
|
38048208ed | ||
|
decea5e7f5 | ||
|
3e9a6d07d2 | ||
|
a162526539 | ||
|
2ae42b5824 | ||
|
1a366293f7 | ||
|
e4459dada4 | ||
|
e92b279c15 | ||
|
0789fd3ae1 | ||
|
189b1bff38 | ||
|
787d593b8f | ||
|
7fb09407bb | ||
|
68941063f9 |
6 changed files with 275 additions and 78 deletions
|
@ -1,23 +1,11 @@
|
|||
* {
|
||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #ffb4e1;
|
||||
}
|
||||
|
||||
main {
|
||||
background: #dedede;
|
||||
}
|
||||
main > .tabs {
|
||||
padding: 16px;
|
||||
border-bottom: solid 4px #c3c3c3;
|
||||
border-bottom: 4px solid #c3c3c3;
|
||||
}
|
||||
|
||||
#lsEditor > .adder {
|
||||
margin: 16px;
|
||||
padding: 16px;
|
||||
border: solid 2px #c3c3c3;
|
||||
border: 2px solid #c3c3c3;
|
||||
}
|
||||
#lsEditor > .adder > textarea {
|
||||
display: block;
|
||||
|
@ -27,10 +15,10 @@ main > .tabs {
|
|||
}
|
||||
#lsEditor > .record {
|
||||
padding: 16px;
|
||||
border-bottom: solid 1px #c3c3c3;
|
||||
border-bottom: 1px solid #c3c3c3;
|
||||
}
|
||||
#lsEditor > .record > header {
|
||||
font-weight: bold;
|
||||
font-weight: 700;
|
||||
}
|
||||
#lsEditor > .record > textarea {
|
||||
display: block;
|
||||
|
@ -38,3 +26,123 @@ main > .tabs {
|
|||
min-height: 5em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #222;
|
||||
}
|
||||
main {
|
||||
background: #333;
|
||||
border-radius: 10px;
|
||||
}
|
||||
#tl > div {
|
||||
padding: 16px;
|
||||
border-bottom: 1px solid #c3c3c3;
|
||||
}
|
||||
#tl > div > header {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
|
||||
}
|
||||
#misskey_app {
|
||||
display: none !important;
|
||||
}
|
||||
body,
|
||||
html {
|
||||
background-color: #222;
|
||||
color: #dfddcc;
|
||||
justify-content: center;
|
||||
margin: auto;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
button {
|
||||
border-radius: 999px;
|
||||
padding: 0px 12px 0px 12px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
margin-bottom: 12px;
|
||||
background: linear-gradient(90deg, rgb(134, 179, 0), rgb(74, 179, 0));
|
||||
line-height: 50px;
|
||||
color: #222;
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
padding: 12px;
|
||||
}
|
||||
button {
|
||||
border-radius: 999px;
|
||||
padding: 0px 12px 0px 12px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
button {
|
||||
background: #444;
|
||||
line-height: 40px;
|
||||
color: rgb(153, 204, 0);
|
||||
font-size: 16px;
|
||||
padding: 0 20px;
|
||||
margin-right: 5px;
|
||||
margin-left: 5px;
|
||||
|
||||
}
|
||||
button:hover {
|
||||
background: #555;
|
||||
}
|
||||
#ls {
|
||||
background: linear-gradient(90deg, rgb(134, 179, 0), rgb(74, 179, 0));
|
||||
line-height: 30px;
|
||||
color: #222;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
padding: 12px;
|
||||
}
|
||||
#ls:hover {
|
||||
background: rgb(153, 204, 0);
|
||||
}
|
||||
a {
|
||||
color: rgb(134, 179, 0);
|
||||
text-decoration: none;
|
||||
}
|
||||
p,
|
||||
li {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
}
|
||||
code {
|
||||
font-family: Fira, FiraCode, monospace;
|
||||
}
|
||||
textarea {
|
||||
background-color: #444;
|
||||
border: solid #aaa;
|
||||
border-radius: 10px;
|
||||
color: #dfddcc;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
width: 20rem;
|
||||
height: 7.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
textarea:focus {
|
||||
border: solid #eee;
|
||||
}
|
||||
input {
|
||||
background-color: #666;
|
||||
border: solid #aaa;
|
||||
border-radius: 10px;
|
||||
color: #dfddcc;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
width: 10rem;
|
||||
height: 1rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
input:focus {
|
||||
border: solid #eee;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ window.onload = async () => {
|
|||
const promise = new Promise((resolve, reject) => {
|
||||
// Append a credential
|
||||
if (i) data.i = i;
|
||||
|
||||
|
||||
// Send request
|
||||
fetch(endpoint.indexOf('://') > -1 ? endpoint : `/api/${endpoint}`, {
|
||||
method: 'POST',
|
||||
|
@ -17,7 +17,7 @@ window.onload = async () => {
|
|||
cache: 'no-cache'
|
||||
}).then(async (res) => {
|
||||
const body = res.status === 204 ? null : await res.json();
|
||||
|
||||
|
||||
if (res.status === 200) {
|
||||
resolve(body);
|
||||
} else if (res.status === 204) {
|
||||
|
@ -27,7 +27,7 @@ window.onload = async () => {
|
|||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
|
@ -44,7 +44,7 @@ window.onload = async () => {
|
|||
const addKeyInput = document.createElement('input');
|
||||
const addValueTextarea = document.createElement('textarea');
|
||||
const addButton = document.createElement('button');
|
||||
addButton.textContent = 'add';
|
||||
addButton.textContent = 'Add';
|
||||
addButton.addEventListener('click', () => {
|
||||
localStorage.setItem(addKeyInput.value, addValueTextarea.value);
|
||||
location.reload();
|
||||
|
@ -64,13 +64,13 @@ window.onload = async () => {
|
|||
const textarea = document.createElement('textarea');
|
||||
textarea.textContent = localStorage.getItem(k);
|
||||
const saveButton = document.createElement('button');
|
||||
saveButton.textContent = 'save';
|
||||
saveButton.textContent = 'Save';
|
||||
saveButton.addEventListener('click', () => {
|
||||
localStorage.setItem(k, textarea.value);
|
||||
location.reload();
|
||||
});
|
||||
const removeButton = document.createElement('button');
|
||||
removeButton.textContent = 'remove';
|
||||
removeButton.textContent = 'Remove';
|
||||
removeButton.addEventListener('click', () => {
|
||||
localStorage.removeItem(k);
|
||||
location.reload();
|
||||
|
|
|
@ -1,19 +1,81 @@
|
|||
* {
|
||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #ffb4e1;
|
||||
background: #222;
|
||||
}
|
||||
|
||||
main {
|
||||
background: #dedede;
|
||||
background: #333;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#tl > div {
|
||||
padding: 16px;
|
||||
border-bottom: solid 1px #c3c3c3;
|
||||
border-bottom: 1px solid #c3c3c3;
|
||||
}
|
||||
#tl > div > header {
|
||||
font-weight: bold;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
|
||||
}
|
||||
#misskey_app {
|
||||
display: none !important;
|
||||
}
|
||||
body,
|
||||
html {
|
||||
background-color: #222;
|
||||
color: #dfddcc;
|
||||
justify-content: center;
|
||||
margin: auto;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
button {
|
||||
border-radius:999px;
|
||||
padding:0 40px;
|
||||
margin-top: 1rem;
|
||||
border:none;
|
||||
cursor:pointer;
|
||||
margin-bottom:12px;
|
||||
background:linear-gradient(90deg,#86b300,#4ab300);
|
||||
line-height:50px;
|
||||
color:#222;
|
||||
font-weight:700;
|
||||
font-size:20px;
|
||||
}
|
||||
button:hover {
|
||||
background: rgb(153, 204, 0);
|
||||
}
|
||||
a {
|
||||
color: rgb(134, 179, 0);
|
||||
text-decoration: none;
|
||||
}
|
||||
p,
|
||||
li {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
}
|
||||
code {
|
||||
font-family: Fira, FiraCode, monospace;
|
||||
}
|
||||
#text {
|
||||
background-color: #444;
|
||||
border: solid #aaa;
|
||||
border-radius: 10px;
|
||||
color: #dfddcc;
|
||||
margin-top: 3rem;
|
||||
width: 20rem;
|
||||
height: 5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
#text:focus {
|
||||
border: solid #eee;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
#text {
|
||||
width: 80%
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ html
|
|||
head
|
||||
meta(charset='utf-8')
|
||||
meta(name='application-name' content='Misskey')
|
||||
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||
title Misskey Repair Tool
|
||||
style
|
||||
include ../bios.css
|
||||
|
@ -13,8 +14,8 @@ html
|
|||
|
||||
body
|
||||
header
|
||||
h1 Misskey Repair Tool #{version}
|
||||
h1 Misskey Repair Tool v#{version}
|
||||
main
|
||||
div.tabs
|
||||
button#ls edit local storage
|
||||
button#ls Edit local storage
|
||||
div#content
|
||||
|
|
|
@ -5,6 +5,7 @@ html
|
|||
head
|
||||
meta(charset='utf-8')
|
||||
meta(name='application-name' content='Misskey')
|
||||
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||
title Misskey Cli
|
||||
style
|
||||
include ../cli.css
|
||||
|
@ -13,9 +14,10 @@ html
|
|||
|
||||
body
|
||||
header
|
||||
h1 Misskey Cli #{version}
|
||||
h1 Misskey Simple Client v#{version}
|
||||
main
|
||||
div#form
|
||||
textarea#text
|
||||
button#submit submit
|
||||
br
|
||||
button#submit Post
|
||||
div#tl
|
||||
|
|
|
@ -1,47 +1,71 @@
|
|||
doctype html
|
||||
|
||||
html
|
||||
#msg
|
||||
script.
|
||||
const msg = document.getElementById('msg');
|
||||
const successText = `\nSuccess Flush! <a href="/">Back to Misskey</a>\n成功しました。<a href="/">Misskeyを開き直してください。</a>`;
|
||||
|
||||
message('Start flushing.');
|
||||
|
||||
(async function() {
|
||||
try {
|
||||
localStorage.clear();
|
||||
message('localStorage cleared.');
|
||||
|
||||
const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
|
||||
const delidb = indexedDB.deleteDatabase(name);
|
||||
delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
|
||||
delidb.onerror = e => rej(e)
|
||||
}));
|
||||
|
||||
await Promise.all(idbPromises);
|
||||
|
||||
if (navigator.serviceWorker.controller) {
|
||||
navigator.serviceWorker.controller.postMessage('clear');
|
||||
await navigator.serviceWorker.getRegistrations()
|
||||
.then(registrations => {
|
||||
return Promise.all(registrations.map(registration => registration.unregister()));
|
||||
})
|
||||
.catch(e => { throw Error(e) });
|
||||
}
|
||||
|
||||
message(successText);
|
||||
} catch (e) {
|
||||
message(`\n${e}\n\nFlush Failed. <a href="/flush">Please retry.</a>\n失敗しました。<a href="/flush">もう一度試してみてください。</a>`);
|
||||
message(`\nIf you retry more than 3 times, clear the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
|
||||
|
||||
console.error(e);
|
||||
setTimeout(() => {
|
||||
location = '/';
|
||||
}, 10000)
|
||||
head
|
||||
meta(charset='utf-8')
|
||||
meta(name='application-name' content='Misskey')
|
||||
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||
title Flush Misskey
|
||||
style.
|
||||
* {
|
||||
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
|
||||
}
|
||||
body,
|
||||
html {
|
||||
background-color: #222;
|
||||
color: #dfddcc;
|
||||
justify-content: center;
|
||||
margin: auto;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
a {
|
||||
color: rgb(134, 179, 0);
|
||||
text-decoration: none;
|
||||
}
|
||||
})();
|
||||
|
||||
function message(text) {
|
||||
msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/\n/g,'<br>')}</p>`)
|
||||
}
|
||||
body
|
||||
#msg
|
||||
script.
|
||||
const msg = document.getElementById('msg');
|
||||
const successText = `\nSuccess Flush! <a href="/">Back to Misskey</a>\n成功しました。<a href="/">Misskeyを開き直してください。</a>`;
|
||||
|
||||
message('Start flushing.');
|
||||
|
||||
(async function() {
|
||||
try {
|
||||
localStorage.clear();
|
||||
message('localStorage cleared.');
|
||||
|
||||
const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
|
||||
const delidb = indexedDB.deleteDatabase(name);
|
||||
delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
|
||||
delidb.onerror = e => rej(e)
|
||||
}));
|
||||
|
||||
await Promise.all(idbPromises);
|
||||
|
||||
if (navigator.serviceWorker.controller) {
|
||||
navigator.serviceWorker.controller.postMessage('clear');
|
||||
await navigator.serviceWorker.getRegistrations()
|
||||
.then(registrations => {
|
||||
return Promise.all(registrations.map(registration => registration.unregister()));
|
||||
})
|
||||
.catch(e => { throw Error(e) });
|
||||
}
|
||||
|
||||
message(successText);
|
||||
} catch (e) {
|
||||
message(`\n${e}\n\nFlush Failed. <a href="/flush">Please retry.</a>\n失敗しました。<a href="/flush">もう一度試してみてください。</a>`);
|
||||
message(`\nIf you retry more than 3 times, clear the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
|
||||
|
||||
console.error(e);
|
||||
setTimeout(() => {
|
||||
location = '/';
|
||||
}, 10000)
|
||||
}
|
||||
})();
|
||||
|
||||
function message(text) {
|
||||
msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/\n/g,'<br>')}</p>`)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue