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 {
|
main > .tabs {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
border-bottom: solid 4px #c3c3c3;
|
border-bottom: 4px solid #c3c3c3;
|
||||||
}
|
}
|
||||||
|
|
||||||
#lsEditor > .adder {
|
#lsEditor > .adder {
|
||||||
margin: 16px;
|
margin: 16px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
border: solid 2px #c3c3c3;
|
border: 2px solid #c3c3c3;
|
||||||
}
|
}
|
||||||
#lsEditor > .adder > textarea {
|
#lsEditor > .adder > textarea {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -27,10 +15,10 @@ main > .tabs {
|
||||||
}
|
}
|
||||||
#lsEditor > .record {
|
#lsEditor > .record {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
border-bottom: solid 1px #c3c3c3;
|
border-bottom: 1px solid #c3c3c3;
|
||||||
}
|
}
|
||||||
#lsEditor > .record > header {
|
#lsEditor > .record > header {
|
||||||
font-weight: bold;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
#lsEditor > .record > textarea {
|
#lsEditor > .record > textarea {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -38,3 +26,123 @@ main > .tabs {
|
||||||
min-height: 5em;
|
min-height: 5em;
|
||||||
box-sizing: border-box;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ window.onload = async () => {
|
||||||
const addKeyInput = document.createElement('input');
|
const addKeyInput = document.createElement('input');
|
||||||
const addValueTextarea = document.createElement('textarea');
|
const addValueTextarea = document.createElement('textarea');
|
||||||
const addButton = document.createElement('button');
|
const addButton = document.createElement('button');
|
||||||
addButton.textContent = 'add';
|
addButton.textContent = 'Add';
|
||||||
addButton.addEventListener('click', () => {
|
addButton.addEventListener('click', () => {
|
||||||
localStorage.setItem(addKeyInput.value, addValueTextarea.value);
|
localStorage.setItem(addKeyInput.value, addValueTextarea.value);
|
||||||
location.reload();
|
location.reload();
|
||||||
|
@ -64,13 +64,13 @@ window.onload = async () => {
|
||||||
const textarea = document.createElement('textarea');
|
const textarea = document.createElement('textarea');
|
||||||
textarea.textContent = localStorage.getItem(k);
|
textarea.textContent = localStorage.getItem(k);
|
||||||
const saveButton = document.createElement('button');
|
const saveButton = document.createElement('button');
|
||||||
saveButton.textContent = 'save';
|
saveButton.textContent = 'Save';
|
||||||
saveButton.addEventListener('click', () => {
|
saveButton.addEventListener('click', () => {
|
||||||
localStorage.setItem(k, textarea.value);
|
localStorage.setItem(k, textarea.value);
|
||||||
location.reload();
|
location.reload();
|
||||||
});
|
});
|
||||||
const removeButton = document.createElement('button');
|
const removeButton = document.createElement('button');
|
||||||
removeButton.textContent = 'remove';
|
removeButton.textContent = 'Remove';
|
||||||
removeButton.addEventListener('click', () => {
|
removeButton.addEventListener('click', () => {
|
||||||
localStorage.removeItem(k);
|
localStorage.removeItem(k);
|
||||||
location.reload();
|
location.reload();
|
||||||
|
|
|
@ -1,19 +1,81 @@
|
||||||
* {
|
|
||||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
html {
|
||||||
background: #ffb4e1;
|
background: #222;
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
background: #dedede;
|
background: #333;
|
||||||
|
border-radius: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tl > div {
|
#tl > div {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
border-bottom: solid 1px #c3c3c3;
|
border-bottom: 1px solid #c3c3c3;
|
||||||
}
|
}
|
||||||
#tl > div > header {
|
#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
|
head
|
||||||
meta(charset='utf-8')
|
meta(charset='utf-8')
|
||||||
meta(name='application-name' content='Misskey')
|
meta(name='application-name' content='Misskey')
|
||||||
|
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||||
title Misskey Repair Tool
|
title Misskey Repair Tool
|
||||||
style
|
style
|
||||||
include ../bios.css
|
include ../bios.css
|
||||||
|
@ -13,8 +14,8 @@ html
|
||||||
|
|
||||||
body
|
body
|
||||||
header
|
header
|
||||||
h1 Misskey Repair Tool #{version}
|
h1 Misskey Repair Tool v#{version}
|
||||||
main
|
main
|
||||||
div.tabs
|
div.tabs
|
||||||
button#ls edit local storage
|
button#ls Edit local storage
|
||||||
div#content
|
div#content
|
||||||
|
|
|
@ -5,6 +5,7 @@ html
|
||||||
head
|
head
|
||||||
meta(charset='utf-8')
|
meta(charset='utf-8')
|
||||||
meta(name='application-name' content='Misskey')
|
meta(name='application-name' content='Misskey')
|
||||||
|
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||||
title Misskey Cli
|
title Misskey Cli
|
||||||
style
|
style
|
||||||
include ../cli.css
|
include ../cli.css
|
||||||
|
@ -13,9 +14,10 @@ html
|
||||||
|
|
||||||
body
|
body
|
||||||
header
|
header
|
||||||
h1 Misskey Cli #{version}
|
h1 Misskey Simple Client v#{version}
|
||||||
main
|
main
|
||||||
div#form
|
div#form
|
||||||
textarea#text
|
textarea#text
|
||||||
button#submit submit
|
br
|
||||||
|
button#submit Post
|
||||||
div#tl
|
div#tl
|
||||||
|
|
|
@ -1,47 +1,71 @@
|
||||||
doctype html
|
doctype html
|
||||||
|
|
||||||
html
|
html
|
||||||
#msg
|
head
|
||||||
script.
|
meta(charset='utf-8')
|
||||||
const msg = document.getElementById('msg');
|
meta(name='application-name' content='Misskey')
|
||||||
const successText = `\nSuccess Flush! <a href="/">Back to Misskey</a>\n成功しました。<a href="/">Misskeyを開き直してください。</a>`;
|
meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
||||||
|
title Flush Misskey
|
||||||
message('Start flushing.');
|
style.
|
||||||
|
* {
|
||||||
(async function() {
|
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
|
||||||
try {
|
}
|
||||||
localStorage.clear();
|
body,
|
||||||
message('localStorage cleared.');
|
html {
|
||||||
|
background-color: #222;
|
||||||
const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
|
color: #dfddcc;
|
||||||
const delidb = indexedDB.deleteDatabase(name);
|
justify-content: center;
|
||||||
delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
|
margin: auto;
|
||||||
delidb.onerror = e => rej(e)
|
padding: 10px;
|
||||||
}));
|
text-align: center;
|
||||||
|
}
|
||||||
await Promise.all(idbPromises);
|
a {
|
||||||
|
color: rgb(134, 179, 0);
|
||||||
if (navigator.serviceWorker.controller) {
|
text-decoration: none;
|
||||||
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) {
|
body
|
||||||
msg.insertAdjacentHTML('beforeend', `<p>[${(new Date()).toString()}] ${text.replace(/\n/g,'<br>')}</p>`)
|
#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