diff --git a/articles/balsu_festival.md b/articles/balsu_festival.md new file mode 100644 index 0000000..2f6cd11 --- /dev/null +++ b/articles/balsu_festival.md @@ -0,0 +1,8 @@ +バルス祭りについてですが... +現在ゆずねっとはユーザ数が100人程度のためおそらくゆずねっと上でバルス祭りを行ってもサーバーはダウンしないものと考えております。 +是非バルスしちゃってください。 +なお、TLを埋め尽くすほどのユーズはお控えください。 + +ゆずねっと以外にも簡単にバルスできるボタンを作りましたので是非ご活用ください! +
+バルスる diff --git a/articles/change_userid.md b/articles/change_userid.md new file mode 100644 index 0000000..79364be --- /dev/null +++ b/articles/change_userid.md @@ -0,0 +1 @@ +残念ながらuwuzuの仕様上ユーザーIDの変更はできません。 diff --git a/articles/forgot_password.md b/articles/forgot_password.md new file mode 100644 index 0000000..189314d --- /dev/null +++ b/articles/forgot_password.md @@ -0,0 +1,18 @@ +パスワードを忘れた場合、ゆずねっとでは二通りの方法でパスワードの復元が行えます。 +**なお、パスワードの復元にはメールアドレスの設定が必要です。** +**メールアドレスの設定をされたいない方はパスワードの復元はできません。** + +## 1. ユーザーIDとメールアドレスの入力 +ゆずねっとの未ログイン時トップページより、ログインボタンを押し、下部にあるパスワード復元ボタンを押してください。 +パスワードの復元ページに進みますと、ユーザーIDとメールアドレスの入力ができるので設定したユーザーIDとメールアドレスを入力して次へ進んでください。 + +## 2. パスワードの再設定 +二段階認証を設定しているアカウントでしたら、二段階認証コードと新しいパスワードを入力して次へ進んでください。 +もし二段階認証を設定していないアカウントでしたら、メールで認証するボタンを押してください。 +これによりメールで二段階認証ができるようになります。 +メールの送信には少々時間がかかりますのでページの読み込みが終るまでお待ち下さい。 +メールを受信できたら、メールに記載されている二段階認証コードと新しいパスワードを入力して次へ進んでください。 + +## 3. ログイン +これでパスワードの復元(パスワードリセット)は完了です! +通常のログインページより新しいパスワードでログインをしてください。 diff --git a/articles/meshitero_timeline.md b/articles/meshitero_timeline.md new file mode 100644 index 0000000..05238ba --- /dev/null +++ b/articles/meshitero_timeline.md @@ -0,0 +1,4 @@ +ご飯の画像が多すぎることに関してですが、これはこれで私(daichimarukana)は良いと思っていますので大丈夫でしょう +もし深夜時間帯に閲覧してしまい猛烈な食欲に駆り立てられてしまったのであれば申し訳ございません。 + +ご飯の画像が多すぎることを解消するにはユーザー数を増やすことや様々なトピックのユーズをすることが重要だと考えていますので、是非新規さんを連れてきたりじゃんじゃんユーズしてみてください🤗(利用規約の範囲内でね!) diff --git a/articles/open_uwuzu_net_support.md b/articles/open_uwuzu_net_support.md new file mode 100644 index 0000000..e960a38 --- /dev/null +++ b/articles/open_uwuzu_net_support.md @@ -0,0 +1,8 @@ +ゆずねっとのサポートサイトを開設しました! +是非このサポートサイトをご活用ください! + +## 使い方 +サイトを開くとトップページに記事一覧が表示されます。 +お求めの記事をタップすると記事が表示されます! + +また、サイト上部の検索欄より検索も可能です! diff --git a/articles/safety_policy.md b/articles/safety_policy.md new file mode 100644 index 0000000..568defe --- /dev/null +++ b/articles/safety_policy.md @@ -0,0 +1,41 @@ +ゆずねっとでは、uwuzuの安全機能を含め、ユーザーの皆様に快適で安心してご利用いただけるよう、さまざまな対策を行っています。 +このページでは、その一部をご紹介します! + +## 不正アクセスへの対策 +ゆずねっとでは、不正アクセスへの対策として、以下の対策を行っています! + +### ログイン通知 +新たなログインが確認された場合には、ユーザーへそのことを通知する機能が実装されています。 + +### ユーザーデータの暗号化・ハッシュ化 +以下の情報は、各ユーザーごとに発行される鍵を使って暗号化し、安全に保護しています。 +- メールアドレス +- 二段階認証の生成コード +- IPアドレス + +また、以下のデータは、ハッシュ化(一度変換すると元に戻せない形式)した上で保存しています。 +- パスワード +- 二段階認証のバックアップコード + +### Captcha認証 +ログイン時に、人間による正しい操作であることを確認するためのCaptcha認証を導入しています。 + +### Self-XSSにも強い認証方式 +ユーザーが正しくログインしているかを確認するための鍵を2つ用いて認証をしています。 +このうち一つが流出してももう片方の鍵を生成したりログインをすることはできません。 + +## "もしも"に備えたサーバー運営 +ゆずねっとでは、災害やサーバー障害などの"もしも"に備えた、運営を行っております。 +以下のような対策により、ユーザーのデータが決して壊れないように対策しています。 + +### 停電対策 +万が一停電が発生しても、UPS(無停電電源装置)によりサーバーへの電力供給を継続します。 +さらに、停電が発生すると25秒以内に運営へ通知が届き、5分以上復旧しない場合はデータを保護するためにサーバーを自動的に停止します。 + +### データ破損対策 +万が一ゆずねっとのサーバーが壊れたとしても、データを復旧できるように、ゆずねっとでは定期的にバックアップを保存するようになっています。 +バックアップは暗号化され、別のサーバーに最大31日間保存されるため、迅速な復旧が可能です。 + +### 異常事態対策 +サーバーに異常が発生し、アクセスできなくなる事態を防ぐため、24時間体制で自動監視を行っています。 +万が一サーバーが停止すると、即座に運営に通知され、早急に対応できる仕組みになっています。 diff --git a/articles/status_uwuzu_net.md b/articles/status_uwuzu_net.md new file mode 100644 index 0000000..6c092c0 --- /dev/null +++ b/articles/status_uwuzu_net.md @@ -0,0 +1,6 @@ +ゆずねっとにサービスステータスページができました! +ゆずねっとの稼働状況やメンテナンスのお知らせなどが表示されます! + +是非ご活用ください。 + +ゆずねっとステータスページ diff --git a/articles/use_markdown.md b/articles/use_markdown.md new file mode 100644 index 0000000..4af51f2 --- /dev/null +++ b/articles/use_markdown.md @@ -0,0 +1,27 @@ +ユーズで使用できる装飾(一部Markdown)は以下のものです。 +``` +# [ここにテキスト] (h1サイズで文字を表示) +## [ここにテキスト] (h2サイズで文字を表示) +### [ここにテキスト] (h3サイズで文字を表示) +[[buruburu [ここにテキスト]]] (文字をブルブルさせて表示) +`[ここにテキスト]` (インラインコードとして表示) +***[ここにテキスト]*** (斜体と太字を適用して表示) +**[ここにテキスト]** (太字を適用して表示) +*[ここにテキスト]* (斜体を適用して表示) +~~[ここにテキスト]~~ (文字に取り消し線を入れて表示) +>>> [ここにテキスト] (引用として表示) +||[ここにテキスト]|| (カーソルをのせて文字を表示) +- [ここにテキスト] (箇条書きとして左に点を表示) +``` +また、以下の場合に自動的にユーズに装飾が加わることがあります +``` +@[userid] (ユーザー名のリンクで表示) +:[emojiname]: (カスタム絵文字で表示) +#[hashtag] (ハッシュタグで表示) + +https://youtube.com/watch?v=XXXXXXXXXXX (YouTubeの動画埋め込み(youtu.beなども対応)) +https://nicovideo.jp/watch/smXXXXXXX (ニコニコ動画の埋め込み(nico.msなども対応)) + +その他URL (URLとして装飾) +``` +これらの装飾を組み合わせて是非面白いユーズを作ってみてください! diff --git a/contents.json b/contents.json index 92d829a..dc2076e 100644 --- a/contents.json +++ b/contents.json @@ -4,57 +4,49 @@ "title": "安全への取り組み", "id": "safety_policy", "date": "2025-03-20", - "description": "ゆずねっとで行われている安全への取り組みについてです!", - "content": "ゆずねっとでは、uwuzuの安全機能を含め、ユーザーの皆様に快適で安心してご利用いただけるよう、さまざまな対策を行っています。 \nこのページでは、その一部をご紹介します! \n## 不正アクセスへの対策 \nゆずねっとでは、不正アクセスへの対策として、以下の対策を行っています! \n \n### ログイン通知 \n新たなログインが確認された場合には、ユーザーへそのことを通知する機能が実装されています。 \n \n### ユーザーデータの暗号化・ハッシュ化 \n以下の情報は、各ユーザーごとに発行される鍵を使って暗号化し、安全に保護しています。 \n- メールアドレス \n- 二段階認証の生成コード \n- IPアドレス \n \nまた、以下のデータは、ハッシュ化(一度変換すると元に戻せない形式)した上で保存しています。 \n- パスワード \n- 二段階認証のバックアップコード \n \n### Captcha認証 \nログイン時に、人間による正しい操作であることを確認するためのCaptcha認証を導入しています。 \n \n### Self-XSSにも強い認証方式 \nユーザーが正しくログインしているかを確認するための鍵を2つ用いて認証をしています。 \nこのうち一つが流出してももう片方の鍵を生成したりログインをすることはできません。 \n \n## \"もしも\"に備えたサーバー運営 \nゆずねっとでは、災害やサーバー障害などの\"もしも\"に備えた、運営を行っております。 \n以下のような対策により、ユーザーのデータが決して壊れないように対策しています。 \n \n### 停電対策 \n万が一停電が発生しても、UPS(無停電電源装置)によりサーバーへの電力供給を継続します。 \nさらに、停電が発生すると25秒以内に運営へ通知が届き、5分以上復旧しない場合はデータを保護するためにサーバーを自動的に停止します。 \n \n### データ破損対策 \n万が一ゆずねっとのサーバーが壊れたとしても、データを復旧できるように、ゆずねっとでは定期的にバックアップを保存するようになっています。 \nバックアップは暗号化され、別のサーバーに最大31日間保存されるため、迅速な復旧が可能です。 \n \n### 異常事態対策 \nサーバーに異常が発生し、アクセスできなくなる事態を防ぐため、24時間体制で自動監視を行っています。 \n万が一サーバーが停止すると、即座に運営に通知され、早急に対応できる仕組みになっています。 \n" + "description": "ゆずねっとで行われている安全への取り組みについてです!" }, { "title": "ステータスページについて", "id": "status_uwuzu_net", "date": "2025-02-11", - "description": "ゆずねっとにサービスステータスページができました!", - "content": "ゆずねっとにサービスステータスページができました! \nゆずねっとの稼働状況やメンテナンスのお知らせなどが表示されます! \n \n是非ご活用ください。 \nゆずねっとステータスページ" + "description": "ゆずねっとにサービスステータスページができました!" }, { "title": "バルス祭り", "id": "balsu_festival", "date": "2024-08-30", - "description": "本日考えられるバルス祭りについて書きました", - "content": "バルス祭りについてですが... \n現在ゆずねっとはユーザ数が100人程度のためおそらくゆずねっと上でバルス祭りを行ってもサーバーはダウンしないものと考えております。 \n是非バルスしちゃってください。 \nなお、TLを埋め尽くすほどのユーズはお控えください。 \n \nゆずねっと以外にも簡単にバルスできるボタンを作りましたので是非ご活用ください! \nバルスる" + "description": "本日考えられるバルス祭りについて書きました" }, { "title": "ユーズで使用できる装飾について", "id": "use_markdown", "date": "2024-08-30", - "description": "uwuzuで使用できる装飾一覧です。", - "content": "ユーズで使用できる装飾(一部Markdown)は以下のものです。 \n``` \n# [ここにテキスト] (h1サイズで文字を表示) \n## [ここにテキスト] (h2サイズで文字を表示) \n### [ここにテキスト] (h3サイズで文字を表示) \n[[buruburu [ここにテキスト]]] (文字をブルブルさせて表示) \n`[ここにテキスト]` (インラインコードとして表示) \n***[ここにテキスト]*** (斜体と太字を適用して表示) \n**[ここにテキスト]** (太字を適用して表示) \n*[ここにテキスト]* (斜体を適用して表示) \n~~[ここにテキスト]~~ (文字に取り消し線を入れて表示) \n>>> [ここにテキスト] (引用として表示) \n||[ここにテキスト]|| (カーソルをのせて文字を表示) \n- [ここにテキスト] (箇条書きとして左に点を表示) \n``` \nまた、以下の場合に自動的にユーズに装飾が加わることがあります \n``` \n@[userid] (ユーザー名のリンクで表示) \n:[emojiname]: (カスタム絵文字で表示) \n#[hashtag] (ハッシュタグで表示) \n \nhttps://youtube.com/watch?v=XXXXXXXXXXX (YouTubeの動画埋め込み(youtu.beなども対応)) \nhttps://nicovideo.jp/watch/smXXXXXXX (ニコニコ動画の埋め込み(nico.msなども対応)) \n \nその他URL (URLとして装飾) \n``` \nこれらの装飾を組み合わせて是非面白いユーズを作ってみてください!" + "description": "uwuzuで使用できる装飾一覧です。" }, { "title": "TLにご飯の画像が多すぎる", "id": "meshitero_timeline", "date": "2024-08-29", - "description": "ゆずねっとで飯テロが横行している件についてです", - "content": "ご飯の画像が多すぎることに関してですが、これはこれで私(daichimarukana)は良いと思っていますので大丈夫でしょう \nもし深夜時間帯に閲覧してしまい猛烈な食欲に駆り立てられてしまったのであれば申し訳ございません。 \n \nご飯の画像が多すぎることを解消するにはユーザー数を増やすことや様々なトピックのユーズをすることが重要だと考えていますので、是非新規さんを連れてきたりじゃんじゃんユーズしてみてください🤗(利用規約の範囲内でね!) \n" + "description": "ゆずねっとで飯テロが横行している件についてです" }, { "title": "パスワードを忘れた", "id": "forgot_password", "date": "2024-08-29", - "description": "パスワードの復元(変更)方法について書きました", - "content": "パスワードを忘れた場合、ゆずねっとでは二通りの方法でパスワードの復元が行えます。 \n**なお、パスワードの復元にはメールアドレスの設定が必要です。** \n**メールアドレスの設定をされたいない方はパスワードの復元はできません。** \n \n## 1. ユーザーIDとメールアドレスの入力 \nゆずねっとの未ログイン時トップページより、ログインボタンを押し、下部にあるパスワード復元ボタンを押してください。 \nパスワードの復元ページに進みますと、ユーザーIDとメールアドレスの入力ができるので設定したユーザーIDとメールアドレスを入力して次へ進んでください。 \n \n## 2. パスワードの再設定 \n二段階認証を設定しているアカウントでしたら、二段階認証コードと新しいパスワードを入力して次へ進んでください。 \nもし二段階認証を設定していないアカウントでしたら、メールで認証するボタンを押してください。 \nこれによりメールで二段階認証ができるようになります。 \nメールの送信には少々時間がかかりますのでページの読み込みが終るまでお待ち下さい。 \nメールを受信できたら、メールに記載されている二段階認証コードと新しいパスワードを入力して次へ進んでください。 \n \n## 3. ログイン \nこれでパスワードの復元(パスワードリセット)は完了です! \n通常のログインページより新しいパスワードでログインをしてください。" + "description": "パスワードの復元(変更)方法について書きました" }, { "title": "ユーザーIDを変更したい", "id": "change_userid", "date": "2024-08-29", - "description": "結論から申し上げますとユーザーIDの変更はできません。", - "content": "残念ながらuwuzuの仕様上ユーザーIDの変更はできません。" + "description": "結論から申し上げますとユーザーIDの変更はできません。" }, { "title": "サポートサイトを開設しました!", "id": "open_uwuzu_net_support", "date": "2024-08-29", - "description": "ゆずねっとのサポートサイトを開設しました!", - "content": "ゆずねっとのサポートサイトを開設しました! \n是非このサポートサイトをご活用ください! \n \n## 使い方 \nサイトを開くとトップページに記事一覧が表示されます。 \nお求めの記事をタップすると記事が表示されます! \n \nまた、サイト上部の検索欄より検索も可能です!" + "description": "ゆずねっとのサポートサイトを開設しました!" } ] } diff --git a/css/style.css b/css/style.css index e14ae1d..4b9d164 100644 --- a/css/style.css +++ b/css/style.css @@ -232,6 +232,12 @@ main .article pre { text-align: center; } +footer { + margin: 0 auto; + text-align: center; + background-color: #f0f0f0; +} + @keyframes slideDown { 0%, 100% { diff --git a/index.html b/index.html index 0674249..953b084 100644 --- a/index.html +++ b/index.html @@ -43,6 +43,14 @@
+ + diff --git a/js/script.js b/js/script.js index 1b17e00..f69e84a 100644 --- a/js/script.js +++ b/js/script.js @@ -127,7 +127,7 @@ document.addEventListener("DOMContentLoaded", async () => { } // 記事表示 - function showArticle(article) { + async function showArticle(article) { // #docs・#top取得 const docsElement = document.querySelector("#docs"); const topElement = document.querySelector("#top"); @@ -147,13 +147,23 @@ document.addEventListener("DOMContentLoaded", async () => { dateElement.className = "date"; dateElement.textContent = String(article.date); - // 内容取得 + // 内容 const contentElement = document.createElement("div"); contentElement.className = "content"; - // Markdownパース + // 記事内容 try { - const content = article.content || ''; + // mdファイル読み込み + const response = await fetch(`/articles/${article.id}.md`); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.text(); + + // パース + const content = data || ''; if (typeof marked !== 'undefined' && typeof marked.parse === 'function') { contentElement.innerHTML = marked.parse(content); @@ -162,7 +172,7 @@ document.addEventListener("DOMContentLoaded", async () => { } } catch (error) { console.error("Markdownパースエラー:", error); - contentElement.textContent = article.content || ''; + contentElement.textContent = response || ''; } // 親要素に追加