mirror of https://github.com/andrigamerita/simpkey
v1.1.0: English translation
This commit is contained in:
parent
3ac67e3fca
commit
725abcf62f
2
LICENSE
2
LICENSE
|
@ -1,5 +1,5 @@
|
|||
simpkey
|
||||
Copyright (C) 2020 Xeltica
|
||||
Copyright (C) 2020 Xeltica, 2022 OctoSpacc
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
|
25
README.md
25
README.md
|
@ -2,26 +2,21 @@
|
|||
|
||||
**Use misskey without JavaScript 🥴**
|
||||
|
||||
Simpkey is a HTML-Form based server-side-processing misskey client.
|
||||
_English-translated fork - Original Japanese repo at <https://github.com/EbiseLutica/simpkey>_
|
||||
|
||||
It is suitable if you are using a legacy computer, or you are not prefer to enable JavaScript.
|
||||
Simpkey is a HTML-Form based server-side-processing Misskey client.
|
||||
It is suitable if you're using a legacy computer, or you prefer not to enable JavaScript.
|
||||
|
||||
## build
|
||||
## Usage
|
||||
|
||||
```
|
||||
# ???????????
|
||||
yarn install
|
||||
```sh
|
||||
yarn install # Get dependencies
|
||||
yarn build # Get
|
||||
|
||||
# ????????
|
||||
yarn build
|
||||
|
||||
# ???????
|
||||
yarn start
|
||||
|
||||
# watch ????????????????????
|
||||
yarn watch
|
||||
yarn start # Finally, run normally
|
||||
yarn watch # Finally, run in development status (with hot reload)
|
||||
```
|
||||
|
||||
## LICENSE
|
||||
|
||||
[AGPL 3.0](LICENSE)
|
||||
[AGPL 3.0](LICENSE)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
export default {
|
||||
version: '1.0.0',
|
||||
version: '1.1.0',
|
||||
changelog: [
|
||||
'きりがなかったので正式リリース',
|
||||
'Misskeyにアクセスする際にUserAgentを正しく送るように',
|
||||
'Translate the software interface to English.',
|
||||
'Official release because there was no end to it.',
|
||||
'Correctly send UserAgent when accessing Misskey.',
|
||||
],
|
||||
};
|
|
@ -7,11 +7,11 @@ import { die } from './die';
|
|||
export const router = new Router<DefaultState, Context>();
|
||||
|
||||
const staticRouting = [
|
||||
[ 'about', 'Simpkey について' ],
|
||||
[ 'terms', '利用規約' ],
|
||||
[ 'privacy-policy', 'プライバシーポリシー' ],
|
||||
[ 'settings', '設定' ],
|
||||
[ 'help', 'ヘルプ' ],
|
||||
[ 'about', 'About Simpkey' ],
|
||||
[ 'terms', 'Terms of Use' ],
|
||||
[ 'privacy-policy', 'Privacy Policy' ],
|
||||
[ 'settings', 'Settings' ],
|
||||
[ 'help', 'Help' ],
|
||||
];
|
||||
|
||||
for (const [ name, title ] of staticRouting) {
|
||||
|
@ -46,21 +46,21 @@ router.get('/', async ctx => {
|
|||
return;
|
||||
}
|
||||
|
||||
await timeline(ctx, host, 'notes/timeline', 'ホームタイムライン', token);
|
||||
await timeline(ctx, host, 'notes/timeline', 'Home Timeline', token);
|
||||
});
|
||||
|
||||
router.get('/ltl', async ctx => {
|
||||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
const meta = await api<any>(host, 'meta', { i: token });
|
||||
if (meta.disableLocalTimeline) {
|
||||
await die(ctx, 'ローカルタイムラインは無効化されています');
|
||||
await die(ctx, 'Local timeline has been disabled');
|
||||
} else {
|
||||
await timeline(ctx, host, 'notes/local-timeline', 'ローカルタイムライン', token);
|
||||
await timeline(ctx, host, 'notes/local-timeline', 'Local Timeline', token);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -68,14 +68,14 @@ router.get('/stl', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
const meta = await api<any>(host, 'meta', { i: token });
|
||||
if (meta.disableLocalTimeline) {
|
||||
await die(ctx, 'ソーシャルタイムラインは無効化されています');
|
||||
await die(ctx, 'Social timeline has been disabled');
|
||||
} else {
|
||||
await timeline(ctx, host, 'notes/hybrid-timeline', 'ソーシャルタイムライン', token);
|
||||
await timeline(ctx, host, 'notes/hybrid-timeline', 'Social Timeline', token);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -83,15 +83,15 @@ router.get('/gtl', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
const meta = await api<any>(host, 'meta', { i: token });
|
||||
if (meta.disableGlobalTimeline) {
|
||||
await die(ctx, 'グローバルタイムラインは無効化されています');
|
||||
await die(ctx, 'Global timeline has been disabled');
|
||||
} else {
|
||||
await timeline(ctx, host, 'notes/global-timeline', 'グローバルタイムライン', token);
|
||||
await timeline(ctx, host, 'notes/global-timeline', 'Global Timeline', token);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -99,7 +99,7 @@ router.get('/notifications', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ router.get('/renote/:noteId', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -137,7 +137,7 @@ router.get('/reply/:noteId', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ router.get('/react/:noteId', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ router.get('/@:acct', async ctx => {
|
|||
const token = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!token || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -201,7 +201,7 @@ router.post('/', async ctx => {
|
|||
token
|
||||
} = ctx.request.body;
|
||||
if (!host || !username || !password) {
|
||||
await die(ctx, 'パラメータが足りません');
|
||||
await die(ctx, 'Some parameters are missing. Please retry.');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
@ -221,7 +221,7 @@ router.post('/action/:action', async ctx => {
|
|||
const i = ctx.cookies.get('i');
|
||||
const host = ctx.cookies.get('host');
|
||||
if (!i || !host) {
|
||||
await die(ctx, 'ログインしてください');
|
||||
await die(ctx, 'Please login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -242,7 +242,7 @@ router.post('/action/:action', async ctx => {
|
|||
case 'react': {
|
||||
const { noteId, reaction, customReaction } = ctx.request.body;
|
||||
if (!noteId) throw new Error('noteId required');
|
||||
if (!reaction) throw new Error('絵文字が指定されていません');
|
||||
if (!reaction) throw new Error('No emoji was specified');
|
||||
await api(host, 'notes/reactions/create', { i, noteId, reaction: reaction === 'custom' ? customReaction : reaction });
|
||||
break;
|
||||
}
|
||||
|
@ -270,5 +270,5 @@ router.post('/logout', ctx => {
|
|||
// Return 404 for other pages
|
||||
router.all('(.*)', async ctx => {
|
||||
ctx.status = 404;
|
||||
await die(ctx, 'ページが見つかりませんでした');
|
||||
await die(ctx, 'Resource not found');
|
||||
});
|
|
@ -1,32 +1,32 @@
|
|||
include _components
|
||||
|
||||
html
|
||||
head
|
||||
meta(charset="UTF-8")
|
||||
link(href='https://unpkg.com/sanitize.css' rel='stylesheet')
|
||||
meta(name="viewport", content="width=device-width, initial-scale=1.0")
|
||||
block meta
|
||||
title= title
|
||||
style.
|
||||
body {
|
||||
font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
|
||||
padding: 16px;
|
||||
}
|
||||
body
|
||||
header
|
||||
h1: a(href="/") Simpkey
|
||||
block header
|
||||
main
|
||||
block content
|
||||
head
|
||||
meta(charset="UTF-8")
|
||||
link(href='https://unpkg.com/sanitize.css' rel='stylesheet')
|
||||
meta(name="viewport", content="width=device-width, initial-scale=1.0")
|
||||
block meta
|
||||
title= title
|
||||
style.
|
||||
body {
|
||||
font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
|
||||
padding: 16px;
|
||||
}
|
||||
body
|
||||
header
|
||||
h1: a(href="/") Simpkey
|
||||
block header
|
||||
main
|
||||
block content
|
||||
|
||||
footer
|
||||
hr
|
||||
div
|
||||
a(href="/privacy-policy") プライバシーポリシー
|
||||
| ・
|
||||
a(href="/terms") 利用規約
|
||||
| ・
|
||||
a(href="/help") ヘルプ
|
||||
p (C)2020 Xeltica -
|
||||
a(href="/about") version #{version}
|
||||
block footer
|
||||
footer
|
||||
hr
|
||||
div
|
||||
a(href="/privacy-policy") Privacy Policy
|
||||
| ・
|
||||
a(href="/terms") Terms of Use
|
||||
| ・
|
||||
a(href="/help") Help
|
||||
p (C) 2020 Xeltica, 2022 OctoSpacc ・
|
||||
a(href="/about") v#{version}
|
||||
block footer
|
|
@ -1,20 +1,21 @@
|
|||
|
||||
mixin avatar(user)
|
||||
img.avatar(src=user.avatarUrl, alt="avatar for " + user.username style="width: 64px; height: 64px; border-radius: 50%")&attributes(attributes)
|
||||
img.avatar(src=user.avatarUrl, alt="Avatar for " + user.username style="width:64px; height:64px; border-radius:50%;")&attributes(attributes)
|
||||
|
||||
mixin note-header(note)
|
||||
header&attributes(attributes)
|
||||
a(href="/" + getAcct(note.user))
|
||||
span.name= getUserName(note.user)
|
||||
span.acct(style="color: gray")= getAcct(note.user)
|
||||
spamn
|
||||
span.acct(style="color:gray;")= getAcct(note.user)
|
||||
if note.user.isAdmin
|
||||
span.bot [ADMIN]
|
||||
span.bot [ADMIN]
|
||||
else if note.user.isModerator
|
||||
span.bot [MOD]
|
||||
span.bot [MOD]
|
||||
if note.user.isBot
|
||||
span.bot [BOT]
|
||||
span.bot [BOT]
|
||||
if note.user.isCat
|
||||
span.bot [CAT]
|
||||
span.bot [CAT]
|
||||
|
||||
mixin sub-note(note)
|
||||
.sub-note
|
||||
|
@ -33,9 +34,11 @@ mixin sub-note(note)
|
|||
|
||||
mixin note(note)
|
||||
if note.reply
|
||||
+sub-note(note.reply)(style="opacity: 0.5")
|
||||
+sub-note(note.reply)(style="opacity:0.5;")
|
||||
if note.renote && !note.text
|
||||
p: b 🔁 #{getUserName(note.user)} がRenote
|
||||
p
|
||||
b 🔁 #{getUserName(note.user)}
|
||||
span renoted
|
||||
+note(note.renote)
|
||||
else
|
||||
.note&attributes(attributes)
|
||||
|
@ -61,16 +64,16 @@ mixin note(note)
|
|||
span(class=(key === note.myReaction ? 'my reaction' : 'reaction'))=`${key} ${val}`
|
||||
footer
|
||||
|[
|
||||
a(href="/reply/" + note.id) 返信 #{note.repliesCount}
|
||||
|]
|
||||
a(href="/reply/" + note.id) #{note.repliesCount} Replies
|
||||
|]
|
||||
if canRenote && canRenote(note)
|
||||
|[
|
||||
a(href="/renote/" + note.id) リノート #{note.renoteCount}
|
||||
|]
|
||||
a(href="/renote/" + note.id) #{note.renoteCount} Renotes
|
||||
|]
|
||||
if canReact && canReact(note)
|
||||
if !note.myReaction
|
||||
| [
|
||||
a(href="/react/" + note.id) リアクション
|
||||
a(href="/react/" + note.id) React
|
||||
| ]
|
||||
else
|
||||
form(action="action/unreact", method="post" style="display: inline")
|
||||
|
@ -81,61 +84,60 @@ mixin post-form(url, placeholder, buttonText)
|
|||
form(action=url, method="post")
|
||||
div: label
|
||||
input(type="checkbox", name="useCw")
|
||||
span CW
|
||||
input(type="text", name="cw" placeholder="注釈(省略可能)" style="max-width: 100%; min-width: 100%;")
|
||||
textarea(name="text", placeholder=placeholder style="max-width: 100%; min-width: 100%; height: 6em; margin-bottom: 8px")
|
||||
span CW
|
||||
input(type="text", name="cw" placeholder="Title/Warning (optional)" style="max-width:100%; min-width:100%;")
|
||||
textarea(name="text", placeholder=placeholder style="max-width:100%; min-width:100%; height:6em; margin-bottom:8px;")
|
||||
|
||||
div: label 公開範囲:
|
||||
div: label Privacy:
|
||||
select(name="visibility")
|
||||
option(value="public") パブリック
|
||||
option(value="home") ホーム
|
||||
option(value="followers") フォロワー
|
||||
option(value="direct") ダイレクト
|
||||
option(value="public") Public
|
||||
option(value="home") Home
|
||||
option(value="followers") Followers
|
||||
option(value="direct") Direct
|
||||
button(type="submit")= buttonText
|
||||
block
|
||||
|
||||
mixin nav()
|
||||
div
|
||||
|[
|
||||
a(href="/") ホーム
|
||||
a(href="/") Home
|
||||
|] [
|
||||
a(href="/ltl") ローカル
|
||||
a(href="/ltl") Local
|
||||
|] [
|
||||
a(href="/stl") ソーシャル
|
||||
a(href="/stl") Social
|
||||
|] [
|
||||
a(href="/gtl") グローバル
|
||||
a(href="/gtl") Global
|
||||
|] [
|
||||
a(href="/notifications") 通知
|
||||
a(href="/notifications") Notifications
|
||||
|] [
|
||||
a(href="/settings") 設定
|
||||
a(href="/settings") Settings
|
||||
|]
|
||||
|
||||
mixin user-header(user, detail = false)
|
||||
if detail
|
||||
if user.host
|
||||
.remote-caution ⚠ リモートのアカウントにつき、情報が正確では無い可能性があります。
|
||||
a(href=user.url || user.uri, target="_blank", rel="noopener noreferrer") リモートで確認する
|
||||
.remote-caution ⚠️ Information may not be accurate for remote accounts.
|
||||
a(href=user.url || user.uri, target="_blank", rel="noopener noreferrer") Open on remote instance
|
||||
if user.isSuspended
|
||||
.suspended ⚠ このアカウントは凍結されています
|
||||
.suspended ⚠️ This account has been suspended.
|
||||
if user.isSilenced
|
||||
.silenced ⚠ このアカウントはサイレンスされています
|
||||
.silenced ⚠️ This account has been silenced.
|
||||
+avatar(user)
|
||||
.name: b=getUserName(user)
|
||||
|
|
||||
span(style="color: gray")= getAcct(user)
|
||||
if user.isFollowed
|
||||
span.is-followed フォローされています
|
||||
|
||||
if user.isLocked
|
||||
span.lock
|
||||
if user.isAdmin
|
||||
span.bot [ADMIN]
|
||||
span.bot [ADMIN]
|
||||
else if user.isModerator
|
||||
span.bot [MOD]
|
||||
span.bot [MOD]
|
||||
if user.isBot
|
||||
span.bot [BOT]
|
||||
span.bot [BOT]
|
||||
if user.isCat
|
||||
span.bot [CAT]
|
||||
span.bot [CAT]
|
||||
if detail
|
||||
if user.description
|
||||
.description !{mfmToHtml(user.description)}
|
||||
|
@ -144,20 +146,21 @@ mixin user-header(user, detail = false)
|
|||
if user.location
|
||||
.birthday 📍#{user.location}
|
||||
if user.sex
|
||||
.sex 性別: #{user.sex}
|
||||
.sex Gender: #{user.sex}
|
||||
dl
|
||||
each field in user.fields
|
||||
dt !{mfmToHtml(field.name)}
|
||||
dd !{mfmToHtml(field.value)}
|
||||
|
||||
.count
|
||||
a.notes(href="/" + getAcct(user)) #{user.notesCount} ノート
|
||||
|
|
||||
|[
|
||||
a.notes(href="/" + getAcct(user)) #{user.notesCount} Notes
|
||||
|]
|
||||
//- a.following(href="/" + getAcct(user) + "/following")
|
||||
| #{user.followingCount} フォロー
|
||||
| [#{user.followingCount} Following]
|
||||
|
|
||||
//- a.followers(href="/" + getAcct(user) + "/followers")
|
||||
| #{user.followersCount} フォロワー
|
||||
| [#{user.followersCount} Followers]
|
||||
|
||||
mixin timeline(notes)
|
||||
each note in notes
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
p Simpkey は、JavaScript のいらない Misskey クライアントです。
|
||||
p: a(href="https://github.com/xeltica/simpkey", target="_blank", rel="noopener noreferrer") リポジトリを見る
|
||||
h2 バージョン #{version}
|
||||
ul
|
||||
each val in changelog
|
||||
li= val
|
||||
p Simpkey is a Misskey client that requires no JavaScript.
|
||||
p: a(href="https://github.com/andrigamerita/simpkey", target="_blank", rel="noopener noreferrer") Source Code
|
||||
h2 Release v#{version}
|
||||
ul
|
||||
each val in changelog
|
||||
li= val
|
|
@ -1,6 +1,6 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
h2 エラー
|
||||
p= error || '不明なエラーです'
|
||||
p: a(href="/") トップページに戻る
|
||||
h2 Error
|
||||
p= error || 'Unknown error'
|
||||
p: a(href="/") Back to top page
|
|
@ -1,27 +1,27 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
h2 ヘルプ
|
||||
p Simpkey を使う上でよく聞かれそうな質問をまとめて回答する、なんとまあえらいページです
|
||||
h3 タイムラインが止まってる気がする
|
||||
p Simpkey はリアルタイムでタイムラインが動きません。投稿やリアクションをしたときのように、ページが再読込されないと最新のタイムラインが表示されないのです。
|
||||
p ホーム ローカル などのボタンを手動で押すことでタイムラインを読み直すことができるはずなのでそれでお願いします。
|
||||
span(style="font-size: 0.8em; opacity: 0.4") 昔は手動リロードが当たり前だったんじゃよ(老害)
|
||||
h3 CW って何?
|
||||
p ノートの本文を隠す機能です。注釈を添えることができるので、ちょっとキツい話をする上での注意書きとか、袋とじとか、一発ギャグとかに使ってください。
|
||||
p なお、注釈欄を埋めても CW のチェックボックスを切っていると適用されないので、くれぐれも確認を忘れないように
|
||||
h3 ハッシュタグが「ページが見つかりませんでした」と表示される
|
||||
p 未実装なんです。ごめんなさい
|
||||
h3 ノートの時間の前についている絵文字は何?
|
||||
p ノートの公開範囲を表すマークです。それぞれ次のような意味があります。
|
||||
ul
|
||||
li 🌐 - パブリック。誰でも見られる公開範囲
|
||||
li 🏠 - ホーム。投稿主のフォロワーのタイムラインと、自分のユーザーページにのみ表示されます。
|
||||
li 🔒 - フォロワー。投稿主のフォロワーのタイムラインにのみ表示されます。
|
||||
li ✉️ - ダイレクト。指定した人のタイムラインにのみ表示されます。つまりあなた宛ということです。
|
||||
li ❓ - 不明。Groundpolis など、特殊仕様の Misskey インスタンスにログインしていると見られるかもしれません。
|
||||
li ☣ - ローカル限定。同じホストの人だけが見られる投稿です。
|
||||
h3 Simpkey という名前の由来は?
|
||||
p Simple + Misskey
|
||||
h3 その他
|
||||
p その他困ったことがあったら @ebi@misskey.io 宛にメンションで質問すれば答えます
|
||||
h2 Help
|
||||
p This is a great page to answer frequently asked questions about using Simpkey!
|
||||
h3 I feel like the timeline is stuck.
|
||||
p Simpkey does not have a real-time timeline. The latest timeline is not displayed until the page is reloaded, like when you make a post or a reaction.
|
||||
p You should be able to reload the timeline by manually pressing a button such as home local, so please do that.
|
||||
span(style="font-size:0.8em; opacity:0.4") (Manual reloading used to be the norm.)
|
||||
h3 What is CW?
|
||||
p It is a function to hide the body of a note. It can be used to add annotations, so use it for notes on slightly harsh stories, baggage, one-shot gags, and so on.
|
||||
p Note that even if you fill in the annotation field, it will not be applied if the CW checkbox is unchecked, so please do not forget to check it!
|
||||
h3 Hashtags are displayed as "Page not found".
|
||||
p It's not implemented yet. Sorry.
|
||||
h3 What is the emoji before the time in the note?
|
||||
p These are marks that indicate the extent of the note's publication. They have the following meanings respectively.
|
||||
ul
|
||||
li 🌐 - Public. Public range that anyone can see.
|
||||
li 🏠 - Home. Only visible on the timeline of the poster's followers and on their own user page.
|
||||
li 🔒 - Followers. Shows only on the timeline of the poster's followers.
|
||||
li ✉️ - Direct. Appears only on the timeline of the person you specify. This means it is addressed to you.
|
||||
li ❓ - Unknown; may be seen if you are logged into a specially designed instance of Misskey, such as Groundpolis.
|
||||
li ☣️ - Local only. Posts that can only be seen by people on the same host.
|
||||
h3 What is the origin of the name Simpkey?
|
||||
p Simple + Misskey
|
||||
h3 Other
|
||||
p If you have any other problems, you can ask @ebi@misskey.io with a menshion and I'll answer!
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
p Simpkey へようこそ
|
||||
p 使用するインスタンス、ユーザー名、パスワードを入力して、今すぐ始めましょう。
|
||||
p Welcome to Simpkey
|
||||
p To get started, enter your login data.
|
||||
form(action="/", method="post")
|
||||
div: label インスタンス名:
|
||||
div: label Instance Domain:
|
||||
input(type="text", name="host", placeholder="例: misskey.io")
|
||||
div: label ユーザー名:
|
||||
div: label Username:
|
||||
input(type="text", name="username")
|
||||
div: label パスワード:
|
||||
div: label Password:
|
||||
input(type="password", name="password")
|
||||
div: label 2段階認証コード (必要なら):
|
||||
div: label 2FA Code (if needed):
|
||||
input(type="text", name="token")
|
||||
p ログインする前に下部の「利用規約」「プライバシーポリシー」「ヘルプ」には目を通しておいてください。
|
||||
button(type="submit") ログイン
|
||||
p Before logging in, please read the "Terms of Use", "Privacy Policy", and "Help" at the bottom.
|
||||
button(type="submit") Login!
|
|
@ -4,21 +4,25 @@ block header
|
|||
+nav
|
||||
|
||||
block content
|
||||
h2 通知
|
||||
h2 Notifications
|
||||
.notifications
|
||||
each val in notifications
|
||||
.notification
|
||||
hr
|
||||
case val.type
|
||||
when 'follow'
|
||||
p #{getUserName(val.user)} さんにフォローされました
|
||||
p
|
||||
b #{getUserName(val.user)}
|
||||
span is following you
|
||||
when 'mention'
|
||||
when 'reply'
|
||||
when 'renote'
|
||||
when 'quote'
|
||||
+note(val.note)
|
||||
when 'reaction'
|
||||
p #{getUserName(val.user)} さんが #{val.reaction} とリアクションしました
|
||||
p
|
||||
b #{getUserName(val.user)}
|
||||
span reacted with #{val.reaction}
|
||||
+sub-note(val.note)
|
||||
when 'pollVote'
|
||||
p #{getUserName(val.user)} さんが投票しました
|
||||
|
@ -30,4 +34,4 @@ block content
|
|||
when 'groupInvited'
|
||||
when 'app'
|
||||
default
|
||||
p #{val.type} 通知(未実装)
|
||||
p #{val.type} Notification (not yet implemented)
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
h2 プライバシーポリシー
|
||||
p 本サイトのプライバシーポリシーを以下に示します。本サイトのサービスをご利用いただいた時点で、自動的にポリシーに同意したものとみなされます。
|
||||
|
||||
h3 個人情報の利用目的
|
||||
p 本サイトでは、対象とする Misskey インスタンスにログインする際にユーザー名およびパスワードを入力する必要があります。
|
||||
p これらの情報は対象の Misskey インスタンスにログインするためだけに使用されます。本サイト自体は、ユーザーの入力したユーザー名・パスワードを一切収集致しません。
|
||||
p また、本サイトではユーザーの IP アドレスを収集しています。収集された IP アドレスは、利用規約への違反を行ったユーザーの特定および処分の為に使用されます。
|
||||
|
||||
h3 個人情報の第三者への開示
|
||||
p 悪質な違反行為を行ったユーザーに対する処罰の一環としてプロバイダーへの通報を行う場合や、法令に基づく要請がある場合を除き、収集した個人情報を外部に開示することはありません。また、個人情報の取扱を第三者に委託することもありません。
|
||||
|
||||
h3 免責事項
|
||||
p 本サイトを通じてアクセスする Misskey インスタンスにつきましては、本プライバシーポリシーは適用されません。別途、当該インスタンスのプライバシーポリシーをご確認頂く必要があります。本サイトでは、アクセス先のインスタンスにて取り扱われる個人情報については一切の責任を負いません。
|
||||
|
||||
h3 変更について
|
||||
p 当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。
|
||||
p 修正された最新のプライバシーポリシーは常に本ページにて開示されます。
|
||||
h2 Privacy Policy
|
||||
p The following is the privacy policy for this site. By using this site's services, you automatically agree to the policy.
|
||||
|
||||
h3 Purpose of Use of Personal Information
|
||||
p The Site requires you to enter your user name and password when you log in to your target instance of Misskey.
|
||||
p This information is only used to log in to the applicable instance of Misskey. The Site itself does not collect any username/password entered by the user.
|
||||
p The site also collects the user's IP address. The IP addresses collected are used to identify and take action against users who violate the Terms of Use.
|
||||
|
||||
h3 Disclosure of Personal Information to Third Parties
|
||||
p Personal information collected will not be disclosed to outside parties, except when reporting malicious violations to providers as part of the punishment of users who have committed such violations, or when required by law. We also do not outsource the handling of personal information to third parties.
|
||||
|
||||
h3 Disclaimer
|
||||
p This Privacy Policy does not apply to Misskey instances accessed through the Site. You should separately review the privacy policy of the instance in question. This site is not responsible for any personal information handled by the instances accessed through this site.
|
||||
|
||||
h3 Changes
|
||||
p This site will comply with Japanese laws and regulations applicable to personal information, and will review and improve the contents of this policy from time to time.
|
||||
p The latest privacy policy as amended will always be disclosed on this page.
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
if canReact
|
||||
h2 このノートにリアクションを押しますか?
|
||||
+sub-note(note)
|
||||
form(action="/action/react", method="post")
|
||||
each val in reactions
|
||||
div: label
|
||||
input(type="radio", name="reaction" value=val)
|
||||
!= val
|
||||
div: label
|
||||
input(type="radio", name="reaction", value="custom")
|
||||
input(type="text", name="customReaction")
|
||||
input(type="hidden", name="noteId", value=note.id)
|
||||
if canReact
|
||||
h2 Want to react to this note?
|
||||
+sub-note(note)
|
||||
form(action="/action/react", method="post")
|
||||
each val in reactions
|
||||
div: label
|
||||
input(type="radio", name="reaction" value=val)
|
||||
!= val
|
||||
div: label
|
||||
input(type="radio", name="reaction", value="custom")
|
||||
input(type="text", name="customReaction")
|
||||
input(type="hidden", name="noteId", value=note.id)
|
||||
|
||||
button(type="submit") リアクションを押す
|
||||
else
|
||||
h2 このノートにはリアクションできません
|
||||
+sub-note(note)
|
||||
button(type="submit") React!
|
||||
else
|
||||
h2 Can't react to this note
|
||||
+sub-note(note)
|
||||
|
|
|
@ -2,10 +2,10 @@ extends _base
|
|||
|
||||
block content
|
||||
if canRenote
|
||||
h2 このノートをリノートしますか?
|
||||
h2 Want to renote this note?
|
||||
+sub-note(note)
|
||||
+post-form('/action/create-note', "コメント(省略可能)", "リノート")
|
||||
+post-form('/action/create-note', "Comment (optional)", "Renote")
|
||||
input(type="hidden", name="renoteId", value=note.id)
|
||||
else
|
||||
h2 このノートはリノートできません
|
||||
h2 This note can't be renoted
|
||||
+sub-note(note)
|
|
@ -1,7 +1,7 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
h2 このノートに返信しますか?
|
||||
h2 Want to reply to this note?
|
||||
+sub-note(note)
|
||||
+post-form('/action/create-note', "何と返そうか?", "返信")
|
||||
+post-form('/action/create-note', "What to reply with?", "Reply")
|
||||
input(type="hidden", name="replyId", value=note.id)
|
|
@ -1,10 +1,10 @@
|
|||
extends _base
|
||||
|
||||
block header
|
||||
+nav
|
||||
+nav
|
||||
|
||||
block content
|
||||
h2 設定
|
||||
h3 ユーザー
|
||||
form(action="/logout", method="post")
|
||||
button(type="submit") ログアウト
|
||||
h2 Settings
|
||||
h3 User
|
||||
form(action="/logout", method="post")
|
||||
button(type="submit") Logout
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
extends _base
|
||||
|
||||
block content
|
||||
h2 利用規約
|
||||
p 本サイトの利用規約を以下に示します。本サイトのサービスをご利用いただいた時点で、自動的に本規約に同意したものとみなされます。
|
||||
h2 Terms of Use
|
||||
p The following are the Terms of Use for this site. By using the services on this site, you automatically agree to these terms and conditions.
|
||||
|
||||
h3 禁止行為
|
||||
p 以下に定める行為は固く禁じます。
|
||||
ul
|
||||
li サーバーに意図的に過大な負荷を掛ける行為
|
||||
li サーバーソフトウェアの脆弱性を意図的に突くことによって不正なデータを生成したり、システムの一部または全部を使用できなくするといった迷惑行為
|
||||
li 接続先のサーバーの利用規約に反する行為
|
||||
li その他、運営が不適切と認める行為
|
||||
p 利用規約に反した場合、お使いのIPアドレスからのアクセスを禁止、悪質であればプロバイダーへの通報を行います。
|
||||
h3 Prohibited acts
|
||||
p The following acts are strictly prohibited.
|
||||
ul
|
||||
li Intentionally overloading the server
|
||||
li Unsolicited acts such as intentionally exploiting server software vulnerabilities to generate unauthorized data or disable part or all of the system
|
||||
li Actions that violate the terms of service of the server to which the user is connecting.
|
||||
li Other acts deemed inappropriate by the management
|
||||
p If you violate the Terms of Service, we will prohibit access from your IP address, and if it is malicious, we will report you to your provider.
|
||||
|
|
|
@ -5,7 +5,7 @@ block header
|
|||
|
||||
block content
|
||||
+user-header(user)
|
||||
+post-form("/action/create-note", "今なにしてる?", "ノート")
|
||||
+post-form("/action/create-note", "What's on your mind?", "Note")
|
||||
hr
|
||||
h2= timelineName
|
||||
+timeline(notes)
|
Loading…
Reference in New Issue