Merge branch 'master' into l10n_master
This commit is contained in:
		
						commit
						7f08d84989
					
				
					 22 changed files with 247 additions and 115 deletions
				
			
		| 
						 | 
					@ -917,6 +917,19 @@ mobile/views/pages/signup.vue:
 | 
				
			||||||
  lets-start: "Let's start! 📦"
 | 
					  lets-start: "Let's start! 📦"
 | 
				
			||||||
mobile/views/pages/followers.vue:
 | 
					mobile/views/pages/followers.vue:
 | 
				
			||||||
  followers-of: "Followers of {}"
 | 
					  followers-of: "Followers of {}"
 | 
				
			||||||
 | 
					mobile/views/pages/signup.vue:
 | 
				
			||||||
 | 
					  lets-start: "Let's start! 📦"
 | 
				
			||||||
 | 
					mobile/views/pages/tag.vue:
 | 
				
			||||||
 | 
					  no-posts-found-japanese: ""
 | 
				
			||||||
 | 
					  no-posts-found-english: "No posts were found for "
 | 
				
			||||||
 | 
					  left-quote: "\""
 | 
				
			||||||
 | 
					  right-quote: "\"."
 | 
				
			||||||
 | 
					mobile/views/pages/welcome.vue:
 | 
				
			||||||
 | 
					  signup: "Sign up."
 | 
				
			||||||
 | 
					mobile/views/pages/widgets.vue:
 | 
				
			||||||
 | 
					  dashboard: "Dashboard"
 | 
				
			||||||
 | 
					mobile/views/pages/widgets/activity.vue:
 | 
				
			||||||
 | 
					  activity: "Activity"
 | 
				
			||||||
mobile/views/pages/following.vue:
 | 
					mobile/views/pages/following.vue:
 | 
				
			||||||
  following-of: "Following of {}"
 | 
					  following-of: "Following of {}"
 | 
				
			||||||
mobile/views/pages/home.vue:
 | 
					mobile/views/pages/home.vue:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										137
									
								
								locales/ja.yml
									
										
									
									
									
								
							
							
						
						
									
										137
									
								
								locales/ja.yml
									
										
									
									
									
								
							| 
						 | 
					@ -6,7 +6,6 @@ common:
 | 
				
			||||||
  misskey: "A ⭐ of fediverse"
 | 
					  misskey: "A ⭐ of fediverse"
 | 
				
			||||||
  about-title: "A ⭐ of fediverse."
 | 
					  about-title: "A ⭐ of fediverse."
 | 
				
			||||||
  about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
 | 
					  about: "Misskeyを見つけていただき、ありがとうございます。Misskeyは、地球で生まれた<b>分散マイクロブログSNS</b>です。Fediverse(様々なSNSで構成される宇宙)の中に存在するため、他のSNSと相互に繋がっています。暫し都会の喧騒から離れて、新しいインターネットにダイブしてみませんか。"
 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  customization-tips:
 | 
					  customization-tips:
 | 
				
			||||||
    title: "カスタマイズのヒント"
 | 
					    title: "カスタマイズのヒント"
 | 
				
			||||||
    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
					    paragraph1: "ホームのカスタマイズでは、ウィジェットを追加/削除したり、ドラッグ&ドロップして並べ替えたりすることができます。"
 | 
				
			||||||
| 
						 | 
					@ -14,7 +13,7 @@ common:
 | 
				
			||||||
    paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
 | 
					    paragraph3: "ウィジェットを削除するには、ヘッダーの<strong>「ゴミ箱」</strong>と書かれたエリアにウィジェットをドラッグ&ドロップします。"
 | 
				
			||||||
    paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
 | 
					    paragraph4: "カスタマイズを終了するには、右上の「完了」をクリックします。"
 | 
				
			||||||
    gotit: "Got it!"
 | 
					    gotit: "Got it!"
 | 
				
			||||||
 | 
					  name: "Misskey"
 | 
				
			||||||
  time:
 | 
					  time:
 | 
				
			||||||
    unknown: "なぞのじかん"
 | 
					    unknown: "なぞのじかん"
 | 
				
			||||||
    future: "未来"
 | 
					    future: "未来"
 | 
				
			||||||
| 
						 | 
					@ -38,6 +37,15 @@ common:
 | 
				
			||||||
    friday: "金"
 | 
					    friday: "金"
 | 
				
			||||||
    saturday: "土"
 | 
					    saturday: "土"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  weekday:
 | 
				
			||||||
 | 
					    sunday: "日曜日"
 | 
				
			||||||
 | 
					    monday: "月曜日"
 | 
				
			||||||
 | 
					    tuesday: "火曜日"
 | 
				
			||||||
 | 
					    wednesday: "水曜日"
 | 
				
			||||||
 | 
					    thursday: "木曜日"
 | 
				
			||||||
 | 
					    friday: "金曜日"
 | 
				
			||||||
 | 
					    saturday: "土曜日"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  reactions:
 | 
					  reactions:
 | 
				
			||||||
    like: "いいね"
 | 
					    like: "いいね"
 | 
				
			||||||
    love: "しゅき"
 | 
					    love: "しゅき"
 | 
				
			||||||
| 
						 | 
					@ -75,6 +83,10 @@ common:
 | 
				
			||||||
    turn-of: "{}のターンです"
 | 
					    turn-of: "{}のターンです"
 | 
				
			||||||
    past-turn-of: "{}のターン"
 | 
					    past-turn-of: "{}のターン"
 | 
				
			||||||
    won: "{}の勝ち"
 | 
					    won: "{}の勝ち"
 | 
				
			||||||
 | 
					    black: "黒"
 | 
				
			||||||
 | 
					    white: "白"
 | 
				
			||||||
 | 
					    total: "合計"
 | 
				
			||||||
 | 
					    this-turn: "{}ターン目"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  widgets:
 | 
					  widgets:
 | 
				
			||||||
    analog-clock: "アナログ時計"
 | 
					    analog-clock: "アナログ時計"
 | 
				
			||||||
| 
						 | 
					@ -119,6 +131,44 @@ common:
 | 
				
			||||||
    stack-left: "左に重ねる"
 | 
					    stack-left: "左に重ねる"
 | 
				
			||||||
    pop-right: "右に出す"
 | 
					    pop-right: "右に出す"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					common/views/components/games/reversi/reversi.vue:
 | 
				
			||||||
 | 
					  title: "Misskey Reversi"
 | 
				
			||||||
 | 
					  sub-title: "他のMisskeyユーザーとリバーシで対戦しよう"
 | 
				
			||||||
 | 
					  invite: "招待"
 | 
				
			||||||
 | 
					  rule: "遊び方"
 | 
				
			||||||
 | 
					  rule-desc: "リバーシは、相手と交互に石をボードに置いて、相手の石を挟んで自分の色に変えてゆき、最終的に残った石が多い方が勝ちというボードゲームです。"
 | 
				
			||||||
 | 
					  mode-invite: "招待"
 | 
				
			||||||
 | 
					  mode-invite-desc: "指定したユーザーと対戦するモードです。"
 | 
				
			||||||
 | 
					  invitations: "対局の招待があります!"
 | 
				
			||||||
 | 
					  my-games: "自分の対局"
 | 
				
			||||||
 | 
					  all-games: "みんなの対局"
 | 
				
			||||||
 | 
					  enter-username: "ユーザー名を入力してください"
 | 
				
			||||||
 | 
					  game-state:
 | 
				
			||||||
 | 
					    ended: "終了"
 | 
				
			||||||
 | 
					    playing: "進行中"
 | 
				
			||||||
 | 
					  matching:
 | 
				
			||||||
 | 
					    waiting-for: "{}を待っています"
 | 
				
			||||||
 | 
					    cacnel: "キャンセル"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					common/views/components/games/reversi/reversi.room.vue:
 | 
				
			||||||
 | 
					  settings-of-the-game: "ゲームの設定"
 | 
				
			||||||
 | 
					  choose-map: "マップを選択"
 | 
				
			||||||
 | 
					  random: "ランダム"
 | 
				
			||||||
 | 
					  black-or-white: "先手/後手"
 | 
				
			||||||
 | 
					  black-is: "{}が黒"
 | 
				
			||||||
 | 
					  rules: "ルール"
 | 
				
			||||||
 | 
					  is-llotheo: "石の少ない方が勝ち(ロセオ)"
 | 
				
			||||||
 | 
					  looped-map: "ループマップ"
 | 
				
			||||||
 | 
					  can-put-everywhere: "どこでも置けるモード"
 | 
				
			||||||
 | 
					  settings-of-the-bot: "Botの設定"
 | 
				
			||||||
 | 
					  this-gane-is-started-soon: "ゲームは数秒後に開始されます"
 | 
				
			||||||
 | 
					  waiting-for-other: "相手の準備が完了するのを待っています"
 | 
				
			||||||
 | 
					  waiting-for-me: "あなたの準備が完了するのを待っています"
 | 
				
			||||||
 | 
					  waiting-for-both: "準備中"
 | 
				
			||||||
 | 
					  cancel: "キャンセル"
 | 
				
			||||||
 | 
					  ready: "準備完了"
 | 
				
			||||||
 | 
					  cancel-ready: "準備続行"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
common/views/components/connect-failed.vue:
 | 
					common/views/components/connect-failed.vue:
 | 
				
			||||||
  title: "サーバーに接続できません"
 | 
					  title: "サーバーに接続できません"
 | 
				
			||||||
  description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
 | 
					  description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
 | 
				
			||||||
| 
						 | 
					@ -267,6 +317,19 @@ common/views/widgets/broadcast.vue:
 | 
				
			||||||
  have-a-nice-day: "良い一日を!"
 | 
					  have-a-nice-day: "良い一日を!"
 | 
				
			||||||
  next: "次"
 | 
					  next: "次"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					common/views/widgets/calendar.vue:
 | 
				
			||||||
 | 
					  year-english: ""
 | 
				
			||||||
 | 
					  year-japanese: "年"
 | 
				
			||||||
 | 
					  month-english: ""
 | 
				
			||||||
 | 
					  month-japanese: "月"
 | 
				
			||||||
 | 
					  day-english: ""
 | 
				
			||||||
 | 
					  day-japanese: "日"
 | 
				
			||||||
 | 
					  weekday-english: ""
 | 
				
			||||||
 | 
					  weekday-japanese: "曜日"
 | 
				
			||||||
 | 
					  today: "今日:"
 | 
				
			||||||
 | 
					  this-month: "今月:"
 | 
				
			||||||
 | 
					  this-year: "今年:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
common/views/widgets/donation.vue:
 | 
					common/views/widgets/donation.vue:
 | 
				
			||||||
  title: "寄付のお願い"
 | 
					  title: "寄付のお願い"
 | 
				
			||||||
  text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
 | 
					  text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
 | 
				
			||||||
| 
						 | 
					@ -298,6 +361,28 @@ common/views/widgets/slideshow.vue:
 | 
				
			||||||
  folder: "クリックしてフォルダを指定してください"
 | 
					  folder: "クリックしてフォルダを指定してください"
 | 
				
			||||||
  no-image: "このフォルダには画像がありません"
 | 
					  no-image: "このフォルダには画像がありません"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					common/views/widgets/tips.vue:
 | 
				
			||||||
 | 
					  tips-line1: "<kbd>t</kbd>でタイムラインにフォーカスできます"
 | 
				
			||||||
 | 
					  tips-line2: "<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます"
 | 
				
			||||||
 | 
					  tips-line3: "投稿フォームにはファイルをドラッグ&ドロップできます"
 | 
				
			||||||
 | 
					  tips-line4: "投稿フォームにクリップボードにある画像データをペーストできます"
 | 
				
			||||||
 | 
					  tips-line5: "ドライブにファイルをドラッグ&ドロップしてアップロードできます"
 | 
				
			||||||
 | 
					  tips-line6: "ドライブでファイルをドラッグしてフォルダ移動できます"
 | 
				
			||||||
 | 
					  tips-line7: "ドライブでフォルダをドラッグしてフォルダ移動できます"
 | 
				
			||||||
 | 
					  tips-line8: "ホームは設定からカスタマイズできます"
 | 
				
			||||||
 | 
					  tips-line9: "MisskeyはAGPLv3です"
 | 
				
			||||||
 | 
					  tips-line10: "タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます"
 | 
				
			||||||
 | 
					  tips-line11: "投稿の ... をクリックして、投稿をユーザーページにピン留めできます"
 | 
				
			||||||
 | 
					  tips-line13: "投稿に添付したファイルは全てドライブに保存されます"
 | 
				
			||||||
 | 
					  tips-line14: "ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます"
 | 
				
			||||||
 | 
					  tips-line17: "「**」でテキストを囲むと**強調表示**されます"
 | 
				
			||||||
 | 
					  tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができます"
 | 
				
			||||||
 | 
					  tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示しています"
 | 
				
			||||||
 | 
					  tips-line21: "APIを利用してbotの開発なども行えます"
 | 
				
			||||||
 | 
					  tips-line23: "まゆかわいいよまゆ"
 | 
				
			||||||
 | 
					  tips-line24: "Misskeyは2014年にサービスを開始しました"
 | 
				
			||||||
 | 
					  tips-line25: "対応ブラウザではMisskeyを開いていなくても通知を受け取れます"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
common/views/pages/follow.vue:
 | 
					common/views/pages/follow.vue:
 | 
				
			||||||
  signed-in-as: "{}としてサインイン中"
 | 
					  signed-in-as: "{}としてサインイン中"
 | 
				
			||||||
  following: "フォロー中"
 | 
					  following: "フォロー中"
 | 
				
			||||||
| 
						 | 
					@ -642,6 +727,10 @@ desktop/views/components/settings.api.vue:
 | 
				
			||||||
desktop/views/components/settings.apps.vue:
 | 
					desktop/views/components/settings.apps.vue:
 | 
				
			||||||
  no-apps: "連携しているアプリケーションはありません"
 | 
					  no-apps: "連携しているアプリケーションはありません"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktop/views/components/settings.drive.vue:
 | 
				
			||||||
 | 
					  max: "中"
 | 
				
			||||||
 | 
					  in-use: "使用中"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
desktop/views/components/settings.mute.vue:
 | 
					desktop/views/components/settings.mute.vue:
 | 
				
			||||||
  no-users: "ミュートしているユーザーはいません"
 | 
					  no-users: "ミュートしているユーザーはいません"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -718,6 +807,8 @@ desktop/views/components/received-follow-requests-window.vue:
 | 
				
			||||||
  accept: "承認"
 | 
					  accept: "承認"
 | 
				
			||||||
  reject: "拒否"
 | 
					  reject: "拒否"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
desktop/views/components/user-lists-window.vue:
 | 
					desktop/views/components/user-lists-window.vue:
 | 
				
			||||||
  title: "リスト"
 | 
					  title: "リスト"
 | 
				
			||||||
  create-list: "リストを作成"
 | 
					  create-list: "リストを作成"
 | 
				
			||||||
| 
						 | 
					@ -758,6 +849,7 @@ desktop/views/pages/welcome.vue:
 | 
				
			||||||
  signin-button: "やってる"
 | 
					  signin-button: "やってる"
 | 
				
			||||||
  signup-button: "やる"
 | 
					  signup-button: "やる"
 | 
				
			||||||
  timeline: "タイムライン"
 | 
					  timeline: "タイムライン"
 | 
				
			||||||
 | 
					  powered-by-misskey: "Powered by <b>Misskey</b>."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
desktop/views/pages/drive.vue:
 | 
					desktop/views/pages/drive.vue:
 | 
				
			||||||
  title: "Misskey Drive"
 | 
					  title: "Misskey Drive"
 | 
				
			||||||
| 
						 | 
					@ -778,6 +870,23 @@ desktop/views/pages/selectdrive.vue:
 | 
				
			||||||
  cancel: "キャンセル"
 | 
					  cancel: "キャンセル"
 | 
				
			||||||
  upload: "PCからドライブにファイルをアップロード"
 | 
					  upload: "PCからドライブにファイルをアップロード"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktop/views/pages/search.vue:
 | 
				
			||||||
 | 
					  not-available: "検索機能を利用することができません。"
 | 
				
			||||||
 | 
					  not-found-quotes1: "「"
 | 
				
			||||||
 | 
					  not-found-quotes2: "」"
 | 
				
			||||||
 | 
					  not-found-text-english: ""
 | 
				
			||||||
 | 
					  not-found-text-japanese: "に関する投稿は見つかりませんでした。"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktop/views/pages/share.vue:
 | 
				
			||||||
 | 
					  share-with: "Misskeyで共有"
 | 
				
			||||||
 | 
					  close: "閉じる"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktop/views/pages/tag.vue:
 | 
				
			||||||
 | 
					  no-posts-found-english: ""
 | 
				
			||||||
 | 
					  no-posts-found-japanese: "に関する投稿は見つかりませんでした。"
 | 
				
			||||||
 | 
					  left-quote: "「"
 | 
				
			||||||
 | 
					  right-quote: "」"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
desktop/views/pages/user-list.users.vue:
 | 
					desktop/views/pages/user-list.users.vue:
 | 
				
			||||||
  users: "ユーザー"
 | 
					  users: "ユーザー"
 | 
				
			||||||
  add-user: "ユーザーを追加"
 | 
					  add-user: "ユーザーを追加"
 | 
				
			||||||
| 
						 | 
					@ -967,6 +1076,9 @@ mobile/views/components/timeline.vue:
 | 
				
			||||||
  empty: "投稿がありません"
 | 
					  empty: "投稿がありません"
 | 
				
			||||||
  load-more: "もっと"
 | 
					  load-more: "もっと"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/components/ui.header.vue:
 | 
				
			||||||
 | 
					  welcome-back: "おかえりなさい、"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobile/views/components/ui.nav.vue:
 | 
					mobile/views/components/ui.nav.vue:
 | 
				
			||||||
  timeline: "タイムライン"
 | 
					  timeline: "タイムライン"
 | 
				
			||||||
  notifications: "通知"
 | 
					  notifications: "通知"
 | 
				
			||||||
| 
						 | 
					@ -1003,6 +1115,9 @@ mobile/views/pages/drive.vue:
 | 
				
			||||||
  drive: "ドライブ"
 | 
					  drive: "ドライブ"
 | 
				
			||||||
  more: "もっと見る"
 | 
					  more: "もっと見る"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/signup.vue:
 | 
				
			||||||
 | 
					  lets-start: "📦 始めましょう"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobile/views/pages/followers.vue:
 | 
					mobile/views/pages/followers.vue:
 | 
				
			||||||
  followers-of: "{}のフォロワー"
 | 
					  followers-of: "{}のフォロワー"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1015,6 +1130,21 @@ mobile/views/pages/home.vue:
 | 
				
			||||||
  hybrid: "ソーシャル"
 | 
					  hybrid: "ソーシャル"
 | 
				
			||||||
  global: "グローバル"
 | 
					  global: "グローバル"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/tag.vue:
 | 
				
			||||||
 | 
					  no-posts-found-japanese: "に関する投稿は見つかりませんでした。"
 | 
				
			||||||
 | 
					  no-posts-found-english: ""
 | 
				
			||||||
 | 
					  left-quote: "「"
 | 
				
			||||||
 | 
					  right-quote: "」"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/welcome.vue:
 | 
				
			||||||
 | 
					  signup: "新規登録"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/widgets.vue:
 | 
				
			||||||
 | 
					  dashboard: "ダッシュボード"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/widgets/activity.vue:
 | 
				
			||||||
 | 
					  activity: "アクティビティ"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobile/views/pages/messaging.vue:
 | 
					mobile/views/pages/messaging.vue:
 | 
				
			||||||
  messaging: "メッセージ"
 | 
					  messaging: "メッセージ"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1035,6 +1165,9 @@ mobile/views/pages/notifications.vue:
 | 
				
			||||||
  notifications: "通知"
 | 
					  notifications: "通知"
 | 
				
			||||||
  read-all: "すべての通知を既読にしますか?"
 | 
					  read-all: "すべての通知を既読にしますか?"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mobile/views/pages/reversi.vue:
 | 
				
			||||||
 | 
					  reversi: "リバーシ"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mobile/views/pages/settings/settings.profile.vue:
 | 
					mobile/views/pages/settings/settings.profile.vue:
 | 
				
			||||||
  title: "プロフィール"
 | 
					  title: "プロフィール"
 | 
				
			||||||
  name: "名前"
 | 
					  name: "名前"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
					@ -1,8 +1,8 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"name": "misskey",
 | 
						"name": "misskey",
 | 
				
			||||||
	"author": "syuilo <i@syuilo.com>",
 | 
						"author": "syuilo <i@syuilo.com>",
 | 
				
			||||||
	"version": "5.8.0",
 | 
						"version": "5.9.0",
 | 
				
			||||||
	"clientVersion": "1.0.7664",
 | 
						"clientVersion": "1.0.7726",
 | 
				
			||||||
	"codename": "nighthike",
 | 
						"codename": "nighthike",
 | 
				
			||||||
	"main": "./built/index.js",
 | 
						"main": "./built/index.js",
 | 
				
			||||||
	"private": true,
 | 
						"private": true,
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,7 @@
 | 
				
			||||||
		"@types/mocha": "5.2.3",
 | 
							"@types/mocha": "5.2.3",
 | 
				
			||||||
		"@types/mongodb": "3.1.2",
 | 
							"@types/mongodb": "3.1.2",
 | 
				
			||||||
		"@types/ms": "0.7.30",
 | 
							"@types/ms": "0.7.30",
 | 
				
			||||||
		"@types/node": "10.5.4",
 | 
							"@types/node": "10.5.5",
 | 
				
			||||||
		"@types/parse5": "5.0.0",
 | 
							"@types/parse5": "5.0.0",
 | 
				
			||||||
		"@types/portscanner": "2.1.0",
 | 
							"@types/portscanner": "2.1.0",
 | 
				
			||||||
		"@types/pug": "2.0.4",
 | 
							"@types/pug": "2.0.4",
 | 
				
			||||||
| 
						 | 
					@ -178,7 +178,7 @@
 | 
				
			||||||
		"rimraf": "2.6.2",
 | 
							"rimraf": "2.6.2",
 | 
				
			||||||
		"rndstr": "1.0.0",
 | 
							"rndstr": "1.0.0",
 | 
				
			||||||
		"s-age": "1.1.2",
 | 
							"s-age": "1.1.2",
 | 
				
			||||||
		"sass-loader": "7.0.3",
 | 
							"sass-loader": "7.1.0",
 | 
				
			||||||
		"seedrandom": "2.4.3",
 | 
							"seedrandom": "2.4.3",
 | 
				
			||||||
		"sharp": "0.20.5",
 | 
							"sharp": "0.20.5",
 | 
				
			||||||
		"showdown": "1.8.6",
 | 
							"showdown": "1.8.6",
 | 
				
			||||||
| 
						 | 
					@ -202,14 +202,14 @@
 | 
				
			||||||
		"url-loader": "1.0.1",
 | 
							"url-loader": "1.0.1",
 | 
				
			||||||
		"uuid": "3.3.2",
 | 
							"uuid": "3.3.2",
 | 
				
			||||||
		"v-animate-css": "0.0.2",
 | 
							"v-animate-css": "0.0.2",
 | 
				
			||||||
		"vue": "2.5.16",
 | 
							"vue": "2.5.17",
 | 
				
			||||||
		"vue-cropperjs": "2.2.1",
 | 
							"vue-cropperjs": "2.2.1",
 | 
				
			||||||
		"vue-js-modal": "1.3.16",
 | 
							"vue-js-modal": "1.3.16",
 | 
				
			||||||
		"vue-json-tree-view": "2.1.4",
 | 
							"vue-json-tree-view": "2.1.4",
 | 
				
			||||||
		"vue-loader": "15.2.6",
 | 
							"vue-loader": "15.2.6",
 | 
				
			||||||
		"vue-router": "3.0.1",
 | 
							"vue-router": "3.0.1",
 | 
				
			||||||
		"vue-style-loader": "4.1.1",
 | 
							"vue-style-loader": "4.1.1",
 | 
				
			||||||
		"vue-template-compiler": "2.5.16",
 | 
							"vue-template-compiler": "2.5.17",
 | 
				
			||||||
		"vuedraggable": "2.16.0",
 | 
							"vuedraggable": "2.16.0",
 | 
				
			||||||
		"vuex": "3.0.1",
 | 
							"vuex": "3.0.1",
 | 
				
			||||||
		"vuex-persistedstate": "2.5.4",
 | 
							"vuex-persistedstate": "2.5.4",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="root">
 | 
					<div class="root">
 | 
				
			||||||
	<header><b>{{ blackUser.name }}</b>(黒) vs <b>{{ whiteUser.name }}</b>(白)</header>
 | 
						<header><b>{{ blackUser.name }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser.name }}</b>(%i18n:common.reversi.white%)</header>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<div style="overflow: hidden">
 | 
						<div style="overflow: hidden">
 | 
				
			||||||
		<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser.name) }}<mk-ellipsis/></p>
 | 
							<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser.name) }}<mk-ellipsis/></p>
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,7 @@
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<p class="status"><b>{{ logPos }}ターン目</b> 黒:{{ o.blackCount }} 白:{{ o.whiteCount }} 合計:{{ o.blackCount + o.whiteCount }}</p>
 | 
						<p class="status"><b>{{ '%i18n:common.reversi.this-turn%'.split('{}')[0] }}{{ logPos }}{{ '%i18n:common.reversi.this-turn%'.split('{}')[1] }}</b> %i18n:common.reversi.black%:{{ o.blackCount }} %i18n:common.reversi.white%:{{ o.whiteCount }} %i18n:common.reversi.total%:{{ o.blackCount + o.whiteCount }}</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<div class="player" v-if="game.isEnded">
 | 
						<div class="player" v-if="game.isEnded">
 | 
				
			||||||
		<el-button-group>
 | 
							<el-button-group>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,12 +3,12 @@
 | 
				
			||||||
	<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header>
 | 
						<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<div>
 | 
						<div>
 | 
				
			||||||
		<p>ゲームの設定</p>
 | 
							<p>%i18n:@settings-of-the-game%</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<el-card class="map">
 | 
							<el-card class="map">
 | 
				
			||||||
			<div slot="header">
 | 
								<div slot="header">
 | 
				
			||||||
				<el-select :class="$style.mapSelect" v-model="mapName" placeholder="マップを選択" @change="onMapChange">
 | 
									<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
 | 
				
			||||||
					<el-option label="ランダム" :value="null"/>
 | 
										<el-option label="%i18n:@random%" :value="null"/>
 | 
				
			||||||
					<el-option-group v-for="c in mapCategories" :key="c" :label="c">
 | 
										<el-option-group v-for="c in mapCategories" :key="c" :label="c">
 | 
				
			||||||
						<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
 | 
											<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
 | 
				
			||||||
							<span style="float: left">{{ m.name }}</span>
 | 
												<span style="float: left">{{ m.name }}</span>
 | 
				
			||||||
| 
						 | 
					@ -30,25 +30,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<el-card class="bw">
 | 
							<el-card class="bw">
 | 
				
			||||||
			<div slot="header">
 | 
								<div slot="header">
 | 
				
			||||||
				<span>先手/後手</span>
 | 
									<span>%i18n:@black-or-white%</span>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">ランダム</el-radio>
 | 
								<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ game.user1.name }}が黒</el-radio>
 | 
								<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ game.user2.name }}が黒</el-radio>
 | 
								<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
 | 
				
			||||||
		</el-card>
 | 
							</el-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<el-card class="rules">
 | 
							<el-card class="rules">
 | 
				
			||||||
			<div slot="header">
 | 
								<div slot="header">
 | 
				
			||||||
				<span>ルール</span>
 | 
									<span>%i18n:@rules%</span>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="石の少ない方が勝ち(ロセオ)"/>
 | 
								<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
 | 
				
			||||||
			<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="ループマップ"/>
 | 
								<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
 | 
				
			||||||
			<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="どこでも置けるモード"/>
 | 
								<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
 | 
				
			||||||
		</el-card>
 | 
							</el-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<el-card class="bot-form" v-if="form">
 | 
							<el-card class="bot-form" v-if="form">
 | 
				
			||||||
			<div slot="header">
 | 
								<div slot="header">
 | 
				
			||||||
				<span>Botの設定</span>
 | 
									<span>%i18n:@settings-of-the-bot%</span>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<el-alert v-for="message in messages"
 | 
								<el-alert v-for="message in messages"
 | 
				
			||||||
				:title="message.text"
 | 
									:title="message.text"
 | 
				
			||||||
| 
						 | 
					@ -77,16 +77,16 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<footer>
 | 
						<footer>
 | 
				
			||||||
		<p class="status">
 | 
							<p class="status">
 | 
				
			||||||
			<template v-if="isAccepted && isOpAccepted">ゲームは数秒後に開始されます<mk-ellipsis/></template>
 | 
								<template v-if="isAccepted && isOpAccepted">%i18n:@this-gane-is-started-soon%<mk-ellipsis/></template>
 | 
				
			||||||
			<template v-if="isAccepted && !isOpAccepted">相手の準備が完了するのを待っています<mk-ellipsis/></template>
 | 
								<template v-if="isAccepted && !isOpAccepted">%i18n:@waiting-for-other%<mk-ellipsis/></template>
 | 
				
			||||||
			<template v-if="!isAccepted && isOpAccepted">あなたの準備が完了するのを待っています</template>
 | 
								<template v-if="!isAccepted && isOpAccepted">%i18n:@waiting-for-me%</template>
 | 
				
			||||||
			<template v-if="!isAccepted && !isOpAccepted">準備中<mk-ellipsis/></template>
 | 
								<template v-if="!isAccepted && !isOpAccepted">%i18n:@waiting-for-both%<mk-ellipsis/></template>
 | 
				
			||||||
		</p>
 | 
							</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<div class="actions">
 | 
							<div class="actions">
 | 
				
			||||||
			<el-button @click="exit">キャンセル</el-button>
 | 
								<el-button @click="exit">%i18n:@cancel%</el-button>
 | 
				
			||||||
			<el-button type="primary" @click="accept" v-if="!isAccepted">準備完了</el-button>
 | 
								<el-button type="primary" @click="accept" v-if="!isAccepted">%i18n:@ready%</el-button>
 | 
				
			||||||
			<el-button type="primary" @click="cancel" v-if="isAccepted">準備続行</el-button>
 | 
								<el-button type="primary" @click="cancel" v-if="isAccepted">%i18n:@cancel-ready%</el-button>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</footer>
 | 
						</footer>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,32 +4,30 @@
 | 
				
			||||||
		<x-gameroom :game="game"/>
 | 
							<x-gameroom :game="game"/>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="matching" v-else-if="matching">
 | 
						<div class="matching" v-else-if="matching">
 | 
				
			||||||
		<h1><b>{{ matching.name }}</b>を待っています<mk-ellipsis/></h1>
 | 
							<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching.name }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
 | 
				
			||||||
		<div class="cancel">
 | 
							<div class="cancel">
 | 
				
			||||||
			<el-button round @click="cancel">キャンセル</el-button>
 | 
								<el-button round @click="cancel">%i18n:@matching.cancel%</el-button>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="index" v-else>
 | 
						<div class="index" v-else>
 | 
				
			||||||
		<h1>Misskey Reversi</h1>
 | 
							<h1>%i18n:@title%</h1>
 | 
				
			||||||
		<p>他のMisskeyユーザーとリバーシで対戦しよう</p>
 | 
							<p>%i18n:@sub-title%</p>
 | 
				
			||||||
		<div class="play">
 | 
							<div class="play">
 | 
				
			||||||
			<el-button round>フリーマッチ(準備中)</el-button>
 | 
								<!--<el-button round>フリーマッチ(準備中)</el-button>-->
 | 
				
			||||||
			<el-button type="primary" round @click="match">指名</el-button>
 | 
								<el-button type="primary" round @click="match">%i18n:@invite%</el-button>
 | 
				
			||||||
			<details>
 | 
								<details>
 | 
				
			||||||
				<summary>遊び方</summary>
 | 
									<summary>%i18n:@rule%</summary>
 | 
				
			||||||
				<div>
 | 
									<div>
 | 
				
			||||||
					<p>リバーシは、相手と交互に石をボードに置いてゆき、相手の石を挟んでひっくり返しながら、最終的に残った石が多い方が勝ちというボードゲームです。</p>
 | 
										<p>%i18n:@rule-desc%</p>
 | 
				
			||||||
					<dl>
 | 
										<dl>
 | 
				
			||||||
						<dt><b>フリーマッチ</b></dt>
 | 
											<dt><b>%i18n:@mode-invite%</b></dt>
 | 
				
			||||||
						<dd>ランダムなユーザーと対戦するモードです。</dd>
 | 
											<dd>%i18n:@mode-invite-desc%</dd>
 | 
				
			||||||
						<dt><b>指名</b></dt>
 | 
					 | 
				
			||||||
						<dd>指定したユーザーと対戦するモードです。</dd>
 | 
					 | 
				
			||||||
					</dl>
 | 
										</dl>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			</details>
 | 
								</details>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<section v-if="invitations.length > 0">
 | 
							<section v-if="invitations.length > 0">
 | 
				
			||||||
			<h2>対局の招待があります!:</h2>
 | 
								<h2>%i18n:@invitations%</h2>
 | 
				
			||||||
			<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
 | 
								<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
 | 
				
			||||||
				<mk-avatar class="avatar" :user="i.parent"/>
 | 
									<mk-avatar class="avatar" :user="i.parent"/>
 | 
				
			||||||
				<span class="name"><b>{{ i.parent.name }}</b></span>
 | 
									<span class="name"><b>{{ i.parent.name }}</b></span>
 | 
				
			||||||
| 
						 | 
					@ -38,21 +36,21 @@
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</section>
 | 
							</section>
 | 
				
			||||||
		<section v-if="myGames.length > 0">
 | 
							<section v-if="myGames.length > 0">
 | 
				
			||||||
			<h2>自分の対局</h2>
 | 
								<h2>%i18n:@my-games%</h2>
 | 
				
			||||||
			<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
 | 
								<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
 | 
				
			||||||
				<mk-avatar class="avatar" :user="g.user1"/>
 | 
									<mk-avatar class="avatar" :user="g.user1"/>
 | 
				
			||||||
				<mk-avatar class="avatar" :user="g.user2"/>
 | 
									<mk-avatar class="avatar" :user="g.user2"/>
 | 
				
			||||||
				<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
 | 
									<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
 | 
				
			||||||
				<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span>
 | 
									<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
 | 
				
			||||||
			</a>
 | 
								</a>
 | 
				
			||||||
		</section>
 | 
							</section>
 | 
				
			||||||
		<section v-if="games.length > 0">
 | 
							<section v-if="games.length > 0">
 | 
				
			||||||
			<h2>みんなの対局</h2>
 | 
								<h2>%i18n:@all-games%</h2>
 | 
				
			||||||
			<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
 | 
								<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
 | 
				
			||||||
				<mk-avatar class="avatar" :user="g.user1"/>
 | 
									<mk-avatar class="avatar" :user="g.user1"/>
 | 
				
			||||||
				<mk-avatar class="avatar" :user="g.user2"/>
 | 
									<mk-avatar class="avatar" :user="g.user2"/>
 | 
				
			||||||
				<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
 | 
									<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span>
 | 
				
			||||||
				<span class="state">{{ g.isEnded ? '終了' : '進行中' }}</span>
 | 
									<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
 | 
				
			||||||
			</a>
 | 
								</a>
 | 
				
			||||||
		</section>
 | 
							</section>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
| 
						 | 
					@ -153,7 +151,7 @@ export default Vue.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		match() {
 | 
							match() {
 | 
				
			||||||
			(this as any).apis.input({
 | 
								(this as any).apis.input({
 | 
				
			||||||
				title: 'ユーザー名を入力してください'
 | 
									title: '%i18n:@enter-username%'
 | 
				
			||||||
			}).then(username => {
 | 
								}).then(username => {
 | 
				
			||||||
				(this as any).api('users/show', {
 | 
									(this as any).api('users/show', {
 | 
				
			||||||
					username
 | 
										username
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,27 +4,27 @@
 | 
				
			||||||
		<div class="mkw-calendar--body">
 | 
							<div class="mkw-calendar--body">
 | 
				
			||||||
			<div class="calendar" :data-is-holiday="isHoliday">
 | 
								<div class="calendar" :data-is-holiday="isHoliday">
 | 
				
			||||||
				<p class="month-and-year">
 | 
									<p class="month-and-year">
 | 
				
			||||||
					<span class="year">{{ year }}年</span>
 | 
										<span class="year">%i18n:@year-english%{{ year }}%i18n:@year-japanese%</span>
 | 
				
			||||||
					<span class="month">{{ month }}月</span>
 | 
										<span class="month">%i18n:@month-english%{{ month }}%i18n:@month-japanese%</span>
 | 
				
			||||||
				</p>
 | 
									</p>
 | 
				
			||||||
				<p class="day">{{ day }}日</p>
 | 
									<p class="day">%i18n:@day-english%{{ day }}%i18n:@day-japanese%</p>
 | 
				
			||||||
				<p class="week-day">{{ weekDay }}曜日</p>
 | 
									<p class="week-day">{{ weekDay }}</p>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<div class="info">
 | 
								<div class="info">
 | 
				
			||||||
				<div>
 | 
									<div>
 | 
				
			||||||
					<p>今日:<b>{{ dayP.toFixed(1) }}%</b></p>
 | 
										<p>%i18n:@today%<b>{{ dayP.toFixed(1) }}%</b></p>
 | 
				
			||||||
					<div class="meter">
 | 
										<div class="meter">
 | 
				
			||||||
						<div class="val" :style="{ width: `${dayP}%` }"></div>
 | 
											<div class="val" :style="{ width: `${dayP}%` }"></div>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div>
 | 
									<div>
 | 
				
			||||||
					<p>今月:<b>{{ monthP.toFixed(1) }}%</b></p>
 | 
										<p>%i18n:@this-month%<b>{{ monthP.toFixed(1) }}%</b></p>
 | 
				
			||||||
					<div class="meter">
 | 
										<div class="meter">
 | 
				
			||||||
						<div class="val" :style="{ width: `${monthP}%` }"></div>
 | 
											<div class="val" :style="{ width: `${monthP}%` }"></div>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div>
 | 
									<div>
 | 
				
			||||||
					<p>今年:<b>{{ yearP.toFixed(1) }}%</b></p>
 | 
										<p>%i18n:@this-year%<b>{{ yearP.toFixed(1) }}%</b></p>
 | 
				
			||||||
					<div class="meter">
 | 
										<div class="meter">
 | 
				
			||||||
						<div class="val" :style="{ width: `${yearP}%` }"></div>
 | 
											<div class="val" :style="{ width: `${yearP}%` }"></div>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,15 @@ export default define({
 | 
				
			||||||
			this.year = ny;
 | 
								this.year = ny;
 | 
				
			||||||
			this.month = nm + 1;
 | 
								this.month = nm + 1;
 | 
				
			||||||
			this.day = nd;
 | 
								this.day = nd;
 | 
				
			||||||
			this.weekDay = ['日', '月', '火', '水', '木', '金', '土'][now.getDay()];
 | 
								this.weekDay = [
 | 
				
			||||||
 | 
									'%i18n:common.weekday.sunday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.monday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.tuesday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.wednesday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.thursday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.friday%',
 | 
				
			||||||
 | 
									'%i18n:common.weekday.saturday%'
 | 
				
			||||||
 | 
								][now.getDay()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const dayNumer   = now.getTime() - new Date(ny, nm, nd).getTime();
 | 
								const dayNumer   = now.getTime() - new Date(ny, nm, nd).getTime();
 | 
				
			||||||
			const dayDenom   = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/;
 | 
								const dayDenom   = 1000/*ms*/ * 60/*s*/ * 60/*m*/ * 24/*h*/;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,31 +9,26 @@ import * as anime from 'animejs';
 | 
				
			||||||
import define from '../../../common/define-widget';
 | 
					import define from '../../../common/define-widget';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tips = [
 | 
					const tips = [
 | 
				
			||||||
	'<kbd>t</kbd>でタイムラインにフォーカスできます',
 | 
						'%i18n:@tips-line1%',
 | 
				
			||||||
	'<kbd>p</kbd>または<kbd>n</kbd>で投稿フォームを開きます',
 | 
						'%i18n:@tips-line2%',
 | 
				
			||||||
	'投稿フォームにはファイルをドラッグ&ドロップできます',
 | 
						'%i18n:@tips-line3%',
 | 
				
			||||||
	'投稿フォームにクリップボードにある画像データをペーストできます',
 | 
						'%i18n:@tips-line4%',
 | 
				
			||||||
	'ドライブにファイルをドラッグ&ドロップしてアップロードできます',
 | 
						'%i18n:@tips-line5%',
 | 
				
			||||||
	'ドライブでファイルをドラッグしてフォルダ移動できます',
 | 
						'%i18n:@tips-line6%',
 | 
				
			||||||
	'ドライブでフォルダをドラッグしてフォルダ移動できます',
 | 
						'%i18n:@tips-line7%',
 | 
				
			||||||
	'ホームは設定からカスタマイズできます',
 | 
						'%i18n:@tips-line8%',
 | 
				
			||||||
	'MisskeyはAGPLv3です',
 | 
						'%i18n:@tips-line9%',
 | 
				
			||||||
	'タイムマシンウィジェットを利用すると、簡単に過去のタイムラインに遡れます',
 | 
						'%i18n:@tips-line10%',
 | 
				
			||||||
	'投稿の ... をクリックして、投稿をユーザーページにピン留めできます',
 | 
						'%i18n:@tips-line11%',
 | 
				
			||||||
	'ドライブの容量は(デフォルトで)1GBです',
 | 
						'%i18n:@tips-line13%',
 | 
				
			||||||
	'投稿に添付したファイルは全てドライブに保存されます',
 | 
						'%i18n:@tips-line14%',
 | 
				
			||||||
	'ホームのカスタマイズ中、ウィジェットを右クリックしてデザインを変更できます',
 | 
						'%i18n:@tips-line17%',
 | 
				
			||||||
	'タイムライン上部にもウィジェットを設置できます',
 | 
						'%i18n:@tips-line19%',
 | 
				
			||||||
	'投稿をダブルクリックすると詳細が見れます',
 | 
						'%i18n:@tips-line20%',
 | 
				
			||||||
	'「**」でテキストを囲むと**強調表示**されます',
 | 
						'%i18n:@tips-line21%',
 | 
				
			||||||
	'チャンネルウィジェットを利用すると、よく利用するチャンネルを素早く確認できます',
 | 
						'%i18n:@tips-line23%',
 | 
				
			||||||
	'いくつかのウィンドウはブラウザの外に切り離すことができます',
 | 
						'%i18n:@tips-line24%',
 | 
				
			||||||
	'カレンダーウィジェットのパーセンテージは、経過の割合を示しています',
 | 
						'%i18n:@tips-line25%'
 | 
				
			||||||
	'APIを利用してbotの開発なども行えます',
 | 
					 | 
				
			||||||
	'MisskeyはLINEを通じてでも利用できます',
 | 
					 | 
				
			||||||
	'まゆかわいいよまゆ',
 | 
					 | 
				
			||||||
	'Misskeyは2014年にサービスを開始しました',
 | 
					 | 
				
			||||||
	'対応ブラウザではMisskeyを開いていなくても通知を受け取れます'
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default define({
 | 
					export default define({
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
<div class="root">
 | 
					<div class="root">
 | 
				
			||||||
	<template v-if="!fetching">
 | 
						<template v-if="!fetching">
 | 
				
			||||||
		<el-progress :text-inside="true" :stroke-width="18" :percentage="Math.floor((usage / capacity) * 100)"/>
 | 
							<el-progress :text-inside="true" :stroke-width="18" :percentage="Math.floor((usage / capacity) * 100)"/>
 | 
				
			||||||
		<p><b>{{ capacity | bytes }}</b>中<b>{{ usage | bytes }}</b>使用中</p>
 | 
							<p><b>{{ capacity | bytes }}</b>%i18n:max%<b>{{ usage | bytes }}</b>%i18n:in-use%</p>
 | 
				
			||||||
	</template>
 | 
						</template>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,8 +6,8 @@
 | 
				
			||||||
	<div :class="$style.loading" v-if="fetching">
 | 
						<div :class="$style.loading" v-if="fetching">
 | 
				
			||||||
		<mk-ellipsis-icon/>
 | 
							<mk-ellipsis-icon/>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<p :class="$style.notAvailable" v-if="!fetching && notAvailable">検索機能を利用することができません。</p>
 | 
						<p :class="$style.notAvailable" v-if="!fetching && notAvailable">%i18n:@not-available%</p>
 | 
				
			||||||
	<p :class="$style.empty" v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p>
 | 
						<p :class="$style.empty" v-if="!fetching && empty">%fa:search%%i18n:@not-found-text-english%%i18n:@not-found-quotes1%{{ q }}%i18n:@not-found-quotes2%%i18n:@not-found-text-japanese%</p>
 | 
				
			||||||
	<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
 | 
						<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
 | 
				
			||||||
</mk-ui>
 | 
					</mk-ui>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,12 +1,12 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
 | 
					<div class="pptjhabgjtt7kwskbfv4y3uml6fpuhmr">
 | 
				
			||||||
	<h1>Misskeyで共有</h1>
 | 
						<h1>%i18n:@share-with%</h1>
 | 
				
			||||||
	<div>
 | 
						<div>
 | 
				
			||||||
		<mk-signin v-if="!$store.getters.isSignedIn"/>
 | 
							<mk-signin v-if="!$store.getters.isSignedIn"/>
 | 
				
			||||||
		<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
 | 
							<mk-post-form v-else-if="!posted" :initial-text="text" :instant="true" @posted="posted = true"/>
 | 
				
			||||||
		<p v-if="posted" class="posted">%fa:check%</p>
 | 
							<p v-if="posted" class="posted">%fa:check%</p>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<button v-if="posted" class="ui button" @click="close">閉じる</button>
 | 
						<button v-if="posted" class="ui button" @click="close">%i18n:@close%</button>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
	<div :class="$style.loading" v-if="fetching">
 | 
						<div :class="$style.loading" v-if="fetching">
 | 
				
			||||||
		<mk-ellipsis-icon/>
 | 
							<mk-ellipsis-icon/>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<p :class="$style.empty" v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p>
 | 
						<p :class="$style.empty" v-if="!fetching && empty">%i18n:no-posts-found-english%%fa:search%%i18n:left-quote%{{ q }}%i18n:right-quote%%i18n:no-posts-found-japanese%</p>
 | 
				
			||||||
	<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
 | 
						<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
 | 
				
			||||||
</mk-ui>
 | 
					</mk-ui>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@
 | 
				
			||||||
	<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
 | 
						<div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }">
 | 
				
			||||||
		<div class="container">
 | 
							<div class="container">
 | 
				
			||||||
			<div class="info">
 | 
								<div class="info">
 | 
				
			||||||
				<span>%i18n:common.misskey% <b>{{ host }}</b></span>
 | 
									<span>%i18n:common.name% <b>{{ host }}</b></span>
 | 
				
			||||||
				<span class="stats" v-if="stats">
 | 
									<span class="stats" v-if="stats">
 | 
				
			||||||
					<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
 | 
										<span>%fa:user% {{ stats.originalUsersCount | number }}</span>
 | 
				
			||||||
					<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
 | 
										<span>%fa:pencil-alt% {{ stats.originalNotesCount | number }}</span>
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@
 | 
				
			||||||
				<div class="about">
 | 
									<div class="about">
 | 
				
			||||||
					<h1 v-if="name">{{ name }}</h1>
 | 
										<h1 v-if="name">{{ name }}</h1>
 | 
				
			||||||
					<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="Misskey"></h1>
 | 
										<h1 v-else><img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="Misskey"></h1>
 | 
				
			||||||
					<p class="powerd-by" v-if="name">powerd by <b>Misskey</b></p>
 | 
										<p class="powerd-by" v-if="name">%i18n:@powered-by-misskey%</p>
 | 
				
			||||||
					<p class="desc" v-html="description || '%i18n:common.about%'"></p>
 | 
										<p class="desc" v-html="description || '%i18n:common.about%'"></p>
 | 
				
			||||||
					<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
 | 
										<a ref="signup" @click="signup">📦 %i18n:@signup%</a>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,12 +3,12 @@
 | 
				
			||||||
	<mk-special-message/>
 | 
						<mk-special-message/>
 | 
				
			||||||
	<div class="main" ref="main">
 | 
						<div class="main" ref="main">
 | 
				
			||||||
		<div class="backdrop"></div>
 | 
							<div class="backdrop"></div>
 | 
				
			||||||
		<p ref="welcomeback" v-if="$store.getters.isSignedIn">おかえりなさい、<b>{{ $store.state.i | userName }}</b>さん</p>
 | 
							<p ref="welcomeback" v-if="$store.getters.isSignedIn">%i18n:@welcome-back%<b>{{ $store.state.i | userName }}</b>さん</p>
 | 
				
			||||||
		<div class="content" ref="mainContainer">
 | 
							<div class="content" ref="mainContainer">
 | 
				
			||||||
			<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
 | 
								<button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button>
 | 
				
			||||||
			<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
 | 
								<template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template>
 | 
				
			||||||
			<h1>
 | 
								<h1>
 | 
				
			||||||
				<slot>Misskey</slot>
 | 
									<slot>%i18n:common.name%</slot>
 | 
				
			||||||
			</h1>
 | 
								</h1>
 | 
				
			||||||
			<slot name="func"></slot>
 | 
								<slot name="func"></slot>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<mk-ui>
 | 
					<mk-ui>
 | 
				
			||||||
	<span slot="header">%fa:gamepad%リバーシ</span>
 | 
						<span slot="header">%fa:gamepad%%i18n:@reversi%</span>
 | 
				
			||||||
	<mk-reversi v-if="!fetching" :init-game="game" @gamed="onGamed"/>
 | 
						<mk-reversi v-if="!fetching" :init-game="game" @gamed="onGamed"/>
 | 
				
			||||||
</mk-ui>
 | 
					</mk-ui>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ export default Vue.extend({
 | 
				
			||||||
		this.fetch();
 | 
							this.fetch();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
		document.title = 'Misskey リバーシ';
 | 
							document.title = '%i18n:common.name% %i18n:@reversi%';
 | 
				
			||||||
		document.documentElement.style.background = '#fff';
 | 
							document.documentElement.style.background = '#fff';
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="signup">
 | 
					<div class="signup">
 | 
				
			||||||
	<h1>📦 始めましょう</h1>
 | 
						<h1>%i18n:@lets-start%</h1>
 | 
				
			||||||
	<mk-signup/>
 | 
						<mk-signup/>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
	<span slot="header">%fa:hashtag%{{ $route.params.tag }}</span>
 | 
						<span slot="header">%fa:hashtag%{{ $route.params.tag }}</span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<main>
 | 
						<main>
 | 
				
			||||||
		<p v-if="!fetching && empty">%fa:search%「{{ q }}」に関する投稿は見つかりませんでした。</p>
 | 
							<p v-if="!fetching && empty">%fa:search%%i18n:@no-posts-found-english%%i18n:@left-quote%{{ q }}%i18n:@right-quote%%i18n:@no-posts-found-japanese%</p>
 | 
				
			||||||
		<mk-notes ref="timeline" :more="existMore ? more : null"/>
 | 
							<mk-notes ref="timeline" :more="existMore ? more : null"/>
 | 
				
			||||||
	</main>
 | 
						</main>
 | 
				
			||||||
</mk-ui>
 | 
					</mk-ui>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
		<div class="about">
 | 
							<div class="about">
 | 
				
			||||||
			<h2>{{ name || 'unidentified' }}</h2>
 | 
								<h2>{{ name || 'unidentified' }}</h2>
 | 
				
			||||||
			<p v-html="description || '%i18n:common.about%'"></p>
 | 
								<p v-html="description || '%i18n:common.about%'"></p>
 | 
				
			||||||
			<router-link class="signup" to="/signup">新規登録</router-link>
 | 
								<router-link class="signup" to="/signup">%i18n:@signup%</router-link>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div class="login">
 | 
							<div class="login">
 | 
				
			||||||
			<mk-signin :with-avatar="false"/>
 | 
								<mk-signin :with-avatar="false"/>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<mk-ui>
 | 
					<mk-ui>
 | 
				
			||||||
	<span slot="header">%fa:home%ダッシュボード</span>
 | 
						<span slot="header">%fa:home%%i18n:@dashboard%</span>
 | 
				
			||||||
	<template slot="func">
 | 
						<template slot="func">
 | 
				
			||||||
		<button @click="customizing = !customizing">%fa:cog%</button>
 | 
							<button @click="customizing = !customizing">%fa:cog%</button>
 | 
				
			||||||
	</template>
 | 
						</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div class="mkw-activity">
 | 
					<div class="mkw-activity">
 | 
				
			||||||
	<mk-widget-container :show-header="!props.compact">
 | 
						<mk-widget-container :show-header="!props.compact">
 | 
				
			||||||
		<template slot="header">%fa:chart-bar%アクティビティ</template>
 | 
							<template slot="header">%fa:chart-bar%%i18n:@activity%</template>
 | 
				
			||||||
		<div :class="$style.body">
 | 
							<div :class="$style.body">
 | 
				
			||||||
			<mk-activity :user="$store.state.i"/>
 | 
								<mk-activity :user="$store.state.i"/>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,6 @@ import { pack } from '../../../../../models/messaging-message';
 | 
				
			||||||
import { publishUserStream } from '../../../../../stream';
 | 
					import { publishUserStream } from '../../../../../stream';
 | 
				
			||||||
import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream';
 | 
					import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream';
 | 
				
			||||||
import pushSw from '../../../../../push-sw';
 | 
					import pushSw from '../../../../../push-sw';
 | 
				
			||||||
import config from '../../../../../config';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const meta = {
 | 
					export const meta = {
 | 
				
			||||||
	desc: {
 | 
						desc: {
 | 
				
			||||||
| 
						 | 
					@ -123,20 +122,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}, 3000);
 | 
						}, 3000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Register to search database
 | 
					 | 
				
			||||||
	if (message.text && config.elasticsearch) {
 | 
					 | 
				
			||||||
		const es = require('../../../db/elasticsearch');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		es.index({
 | 
					 | 
				
			||||||
			index: 'misskey',
 | 
					 | 
				
			||||||
			type: 'messaging_message',
 | 
					 | 
				
			||||||
			id: message._id.toString(),
 | 
					 | 
				
			||||||
			body: {
 | 
					 | 
				
			||||||
				text: message.text
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// 履歴作成(自分)
 | 
						// 履歴作成(自分)
 | 
				
			||||||
	History.update({
 | 
						History.update({
 | 
				
			||||||
		userId: user._id,
 | 
							userId: user._id,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,6 @@ export default function(request: websocket.request, connection: websocket.connec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Subscribe stream
 | 
						// Subscribe stream
 | 
				
			||||||
	subscriber.on(`user-list-stream:${listId}`, data => {
 | 
						subscriber.on(`user-list-stream:${listId}`, data => {
 | 
				
			||||||
		connection.send(data);
 | 
							connection.send(JSON.stringify(data));
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue