v1.1.0: English translation

This commit is contained in:
octospacc 2022-11-17 21:25:19 +01:00
parent 3ac67e3fca
commit 725abcf62f
18 changed files with 214 additions and 211 deletions

View File

@ -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

View File

@ -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)

View File

@ -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.',
],
};

View File

@ -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');
});

View File

@ -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

View File

@ -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 &nbsp;
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)
| &nbsp;
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

View File

@ -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

View File

@ -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

View File

@ -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!

View File

@ -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!

View File

@ -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)

View File

@ -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.

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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)