From c6e9dcf0c1088dcaaaa1b604b68b681049f4031b Mon Sep 17 00:00:00 2001 From: cutls Date: Mon, 24 Apr 2023 02:21:45 +0900 Subject: [PATCH] add keyboard shortcut list on index --- app/js/common/keyshortcut.ts | 43 ++--- app/js/index.ts | 3 +- app/js/platform/first.ts | 41 ++-- app/js/post/post.ts | 3 +- app/js/ui/menu.ts | 10 +- app/view/make/components/menuHtml.html | 222 ++++++++++++++-------- app/view/make/language/en/index.json | 27 ++- app/view/make/language/en/setting.json | 20 +- app/view/make/language/ja-KS/index.json | 28 ++- app/view/make/language/ja-KS/setting.json | 20 +- app/view/make/language/ja/index.json | 28 ++- app/view/make/language/ja/setting.json | 22 +-- app/view/make/setting.sample.html | 27 +-- 13 files changed, 289 insertions(+), 205 deletions(-) diff --git a/app/js/common/keyshortcut.ts b/app/js/common/keyshortcut.ts index 6be6ac2eaf..b601da0f16 100644 --- a/app/js/common/keyshortcut.ts +++ b/app/js/common/keyshortcut.ts @@ -11,7 +11,7 @@ import { re } from '../post/useTxtBox' import { isIVis } from '../post/secure' import { hide, show } from '../ui/postBox' import { nowplaying } from '../ui/spotify' -import { menu } from '../ui/menu' +import { keyShortcut, menu } from '../ui/menu' import { parseColumn } from '../ui/layout' import { profShow } from '../userdata/showOnTL' import { imgCont } from '../ui/img' @@ -116,12 +116,7 @@ export function initKeyboard() { if (e.metaKey || e.ctrlKey) { if (e.keyCode === 86) { show() - } - } - //Ctrl+F:検索 - if (e.metaKey || e.ctrlKey) { - if (e.keyCode === 70) { - srcBox('toggle') + document.getElementById('textarea')?.focus() } } //X:開閉 @@ -157,28 +152,26 @@ export function initKeyboard() { return false } } - //Ctrl+Space:読み込み - if (e.metaKey || e.ctrlKey) { - if (e.keyCode === 32) { - parseColumn() - return false - } + //?: キーボードショートカット一覧 + if (e.key === '?') { + menu() + keyShortcut() } - //Ctrl+Sift+S:設定 + //Ctrl+Shift+S:設定 if ((e.metaKey || e.ctrlKey) && e.shiftKey) { if (e.keyCode === 83) { location.href = 'setting.html' return false } } - //Ctrl+Sift+M:アカマネ + //Ctrl+Shift+M:アカマネ if ((e.metaKey || e.ctrlKey) && e.shiftKey) { if (e.keyCode === 77) { location.href = 'acct.html' return false } } - //Ctrl+Sift+P:プロフ + //Ctrl+Shift+P:プロフ if ((e.metaKey || e.ctrlKey) && e.shiftKey) { if (e.keyCode === 80) { profShow() @@ -235,15 +228,6 @@ export function initKeyboard() { tootSelector(globalThis.selectedColumn, globalThis.selectedToot) return false } - //Ctrl+U:0,0選択 - if (e.ctrlKey || e.metaKey) { - if (e.keyCode === 85) { - globalThis.selectedToot = 0 - globalThis.selectedColumn = 0 - tootSelector(0, 0) - return false - } - } //選択時 if (e.keyCode === 70) { const id = $('.selectedToot').attr('unique-id') @@ -273,7 +257,7 @@ export function initKeyboard() { //textareaフォーカス時 if (hasFocus2 && wv) { if (e.metaKey || e.ctrlKey) { - //C+S+(No):ワンクリ + //Ctrl+Shift+(No):ワンクリ if ((e.metaKey || e.ctrlKey) && e.shiftKey) { if (e.keyCode >= 49 && e.keyCode <= 51) { const no = e.keyCode - 48 @@ -286,7 +270,8 @@ export function initKeyboard() { } } } - if (e.code === 'Tab') { + // Shift + Tab: アカウント選択 + if (e.shiftKey && e.code === 'Tab') { const elm = document.getElementById('post-acct-sel') if (!elm) return console.log('no elm') const instance = formSelectGetInstance(elm) @@ -302,10 +287,10 @@ export function initKeyboard() { } //選択する function tootSelector(column, toot) { - $('.cvo').removeClass('.selectedToot') + $('.cvo').removeClass('selectedToot') $('#timeline_' + column + ' .cvo') .eq(toot) - .addClass('.selectedToot') + .addClass('selectedToot') const scr = $('.tl-box[tlid=' + column + ']').scrollTop() || 0 const elem = $('.selectedToot').offset()?.top || 0 let top = elem - ($('.tl-box').height() || 0) + scr diff --git a/app/js/index.ts b/app/js/index.ts index c20e52146e..497cbc6c26 100644 --- a/app/js/index.ts +++ b/app/js/index.ts @@ -106,7 +106,7 @@ import { colorAddMulti, colorAdd, } from './ui/layout' -import { menu, help } from './ui/menu' +import { menu, help, keyShortcut } from './ui/menu' import { hide, mini, show, initPostbox, mdCheck } from './ui/postBox' import { scrollEvent, scrollCk, goTop, goColumn } from './ui/scroll' import { @@ -415,6 +415,7 @@ globalThis.leftFoldRemove = leftFoldRemove globalThis.resetWidth = resetWidth globalThis.menu = menu globalThis.help = help +globalThis.keyShortcut = keyShortcut globalThis.hide = hide globalThis.mini = mini globalThis.show = show diff --git a/app/js/platform/first.ts b/app/js/platform/first.ts index 005469778e..cde3c1e284 100644 --- a/app/js/platform/first.ts +++ b/app/js/platform/first.ts @@ -18,6 +18,8 @@ import { voiceSettingLoad } from '../tl/speech' import { configLoad, climute, ctLoad, oksload, pluginLoad, wordemp, wordmute } from '../ui/settings' import { checkSpotify } from '../ui/spotify' import { migrate } from './migrate' +import { getMulti } from '../common/storage' +import { idata } from '../login/instance' // Migrator: tagのnameだけから、any/none等対応の形にするのと、any, noneがstringになってるのをarrayにする // 独自ロケールを削除 // wordmuteListにtagとかいう要素がある @@ -66,19 +68,34 @@ async function init() { }) }, 2000) } + + const isDarwin = localStorage.getItem('platform') === 'darwin' + if (isDarwin) { + $('.shift').text('⇧') + $('.ctrl').text('⌘') + $('.alt').text('⌥') + $('.esc').text('esc') + $('.enter').text('↩') + $('.tab').text('⇥') + } + const obj = getMulti() + const finder = obj.find((o) => idata[o.domain + '_glitch']) + if (finder) $('.onlyGlitch').removeClass('hide') const onSetting = !!document.getElementById('envView') - if (!onSetting) return - //最初に読む - configLoad() - climute() - wordmute() - wordemp() - checkSpotify() - voiceSettingLoad() - oksload() - ctLoad() - pluginLoad() - $('body').addClass(localStorage.getItem('platform') || 'win') + if (onSetting) { + //最初に読む + configLoad() + climute() + wordmute() + wordemp() + checkSpotify() + voiceSettingLoad() + oksload() + ctLoad() + pluginLoad() + $('body').addClass(localStorage.getItem('platform') || 'win') + } + } const size = localStorage.getItem('size') diff --git a/app/js/post/post.ts b/app/js/post/post.ts index 913bec97e7..fd116db0e8 100644 --- a/app/js/post/post.ts +++ b/app/js/post/post.ts @@ -12,6 +12,7 @@ import api from '../common/fetch' import { alertProcessUnfinished } from './img' import { pollCalc } from '../tl/poll' import { hide, mdCheck } from '../ui/postBox' +import { idata } from '../login/instance' export function sec() { const modeRaw: string | null = localStorage.getItem('sec') @@ -96,7 +97,7 @@ export async function post(postVis?: IVis, dry?: boolean, tagClear?: boolean ) { if (!isIVis(vis)) return if (vis !== 'inherit' && vis !== 'local') { toot.visibility = vis - } else if (vis === 'local') { + } else if (vis === 'local' && idata[domain + '_glitch']) { toot.status = str + '👁️' } if ($('#cw').hasClass('cw-avail')) { diff --git a/app/js/ui/menu.ts b/app/js/ui/menu.ts index 864e097788..1ae75c419c 100644 --- a/app/js/ui/menu.ts +++ b/app/js/ui/menu.ts @@ -1,9 +1,9 @@ import $ from 'jquery' declare let jQuery -export function menu() { +export function menu(forceOpen?: boolean) { localStorage.setItem('menu-done', 'true') $('#fukidashi').addClass('hide') - if (!$('#menu').hasClass('appear')) { + if (!$('#menu').hasClass('appear') || forceOpen) { $('#menu').addClass('appear') const bodyWidth = $('body').width() || 0 const bodyHeight = $('body').height() || 0 @@ -83,3 +83,9 @@ export function help() { $('#help-box').removeClass('hide') postMessage(['sendSinmpleIpc', 'getLogs'], '*') } +export function keyShortcut() { + $('#left-menu a').removeClass('active') + $('#ksMenu').addClass('active') + $('.menu-content').addClass('hide') + $('#ks-box').removeClass('hide') +} \ No newline at end of file diff --git a/app/view/make/components/menuHtml.html b/app/view/make/components/menuHtml.html index 3ac9ebee82..6f294746dd 100644 --- a/app/view/make/components/menuHtml.html +++ b/app/view/make/components/menuHtml.html @@ -2,18 +2,37 @@ @@ -92,7 +113,8 @@
-
@@ -105,45 +127,54 @@ @@ -153,7 +184,8 @@
- +


@@ -168,66 +200,102 @@
- +
-
@@degree@@ +
+ @@degree@@
+ + @@home@@ + + + @@local@@ + + + @@notf@@ + + + @@conver@@ +
- @@option@@ -
- + + @@prof@@
+ @@option@@ +
+
@@warnMatchWord@@
+ + @@except@@ +
- @@exceptWorn@@
@@avalableBefore@@ @@warnAvBefore@@@@warnAvBefore2@@

- @@days@@ - @@hours@@ - @@mins@@
- Quick: 30@@mins@@/ 1@@hours@@/ - 6@@hours@@/ 12@@hours@@/ - 1@@days@@/ 7@@days@@/ - @@unlimited@@
-
- @@warnOnIntegratedTL@@ + @@exceptWorn@@
@@avalableBefore@@ @@warnAvBefore@@@@warnAvBefore2@@

+ @@days@@ + @@hours@@ + @@mins@@
+ Quick: 30@@mins@@/ 1@@hours@@/ + 6@@hours@@/ 12@@hours@@/ + 1@@days@@/ 7@@days@@/ + @@unlimited@@
+
+ @@warnOnIntegratedTL@@ + + - info@@about@@  |  - swap_horiz@@reverse@@  |  - new_releasesRelease Note + info@@about@@ +  |  + swap_horiz@@reverse@@ +  |  + new_releasesRelease Note \ No newline at end of file diff --git a/app/view/make/language/en/index.json b/app/view/make/language/en/index.json index ae9db94bf9..04c3461aab 100644 --- a/app/view/make/language/en/index.json +++ b/app/view/make/language/en/index.json @@ -206,5 +206,30 @@ "v24ChangeDescPositive": "v24 Positive Changelogs", "v24SpeedyAndSafety": "Be faster and safer with introducing TypeScript", "v24AltImage": "The image upload method has been revised and the upload progress is now observed", - "v24NiceContextTool": "Redesign context tool" + "v24NiceContextTool": "Redesign context tool", + "keyscs": "Keyboard shortcuts", + "keyCommandAlso": "⌘(command) is also available with ⌃(control) key", + "keyCtrlAlso": "Ctrl is also available with Windows key", + "keyscr": "Jump to n(1-9)th column", + "keynew": "Open compose box", + "keytoggle": "Toggle compose box", + "keypost": "Post", + "keysecpost": "Post(local toot): Only Glitch instance", + "keyNotStable": "Post without streamed tag", + "keyMenu": "Show & hide menu panel", + "keyunread": "Make all notifications read", + "keyesc": "Hide compose box", + "keyf5": "Super Reload", + "keyclear": "Clear compose box (with streamed tag)", + "keyClearNotStable": "Clear compose box without streamed tag", + "keyChangeAcct": "(In composing) Change account to post", + "keyacctman": "Account Manager", + "keyshowprof": "Show profile of selecting", + "keyrow": "Up/Down/Right/Left: Select status on timeline", + "keyFav": "(In selected) Favourite it", + "keyBt": "(In selected) Boost it", + "keyReply": "(In selected) Reply to it", + "keyzoom": "Mousewheel:Zoom a image", + "keyQuestion": "Show this sheet", + "secondary": "Secondary Toot Button" } \ No newline at end of file diff --git a/app/view/make/language/en/setting.json b/app/view/make/language/en/setting.json index e6b95dbb33..7a28c459f2 100644 --- a/app/view/make/language/en/setting.json +++ b/app/view/make/language/en/setting.json @@ -210,25 +210,7 @@ "sample": "TheDesk is an open-source Mastodon client for PC.", "playstop": "Play/Stop", "back": "Back", - "keyscs": "Keyboard shortcuts", - "keyscr": "Jump to n(1-9)th column", - "keynew": "Open toot box", - "keytoggle": "Toggle toot box", - "keypost": "Post", - "keysecpost": "Post(secondary toot)", - "keyunread": "Make all notifications read", - "keyesc": "Hide toot box", - "keyf5": "Super Reload", - "keyclear": "Clear toot box", - "keyacctman": "Account Manager", - "keyshowprof": "Show profile of selecting", - "keyrow": "Show next or previous image", - "keyzoom": "Mousewheel:Zoom a image", - "whenSelected": "When a toot is selected: ", - "fav": "Favourite this toot", - "bt": "Boost this toot", - "reply": "Reply to this toot", - "keyselecttop": "Select the top & left(No.1 column) toot", + "keyScsMoved": "The keyboard shortcut list has been moved to menu (press ? key at the screen with timelines)", "reset": "Reset(Danger)", "resetconfirm": "Delete all data. You cannot undo this operation. Continue?", "about": "About TheDesk", diff --git a/app/view/make/language/ja-KS/index.json b/app/view/make/language/ja-KS/index.json index ae54cc16c6..531b388ec3 100644 --- a/app/view/make/language/ja-KS/index.json +++ b/app/view/make/language/ja-KS/index.json @@ -204,5 +204,31 @@ "v24ChangeDescPositive": "v24にしたらこんなええことがあるで!", "v24SpeedyAndSafety": "全てのコードを見直し、かつ型定義したったんや(TypeScript)。ほんまにシュッとしたクライアントになったで。", "v24AltImage": "画像のアップロード方法を見直し、アップロードが終わったかどうか見るようになったんや。", - "v24NiceContextTool": "コンテキストツールを再設計し、エアリプなどの遡りがすぐできるようになったで。" + "v24NiceContextTool": "コンテキストツールを再設計し、エアリプなどの遡りがすぐできるようになったで。", + "keyboardShortcut": "ショートカット", + "keyscs": "キーボードショートカット一覧", + "keyCommandAlso": "⌘(command)キーは⌃(control)キーでもOKや。", + "keyCtrlAlso": "CtrlはWindowsキーでもOKや。", + "keyscr": "1番目~9番目のTLにスクロール", + "keynew": "投稿パネルを開く", + "keytoggle": "投稿パネルを開閉", + "keypost": "投稿", + "keysecpost": "投稿(ローカル限定): Glitchインスタンス", + "keyNotStable": "投稿(実況なし)", + "keyMenu": "メニューパネルの開閉", + "keyunread": "全ての通知を既読にする", + "keyesc": "投稿パネルを消す", + "keyf5": "スーパーリロード", + "keyclear": "入力内容を消す (実況時はタグ付き)", + "keyClearNotStable": "入力内容を消す (実況タグなし)", + "keyChangeAcct": "(入力中) 投稿するアカウントを変更", + "keyacctman": "アカウントマネージャ", + "keyshowprof": "現在選択中のプロフィール", + "keyrow": "矢印: 投稿を選択", + "keyFav": "(投稿選択時)お気に入り登録", + "keyBt": "(投稿選択時)ブースト", + "keyReply": "(投稿選択時)返信", + "keyzoom": "マウスホイール:イメージビューワー時に拡大縮小", + "keyQuestion": "この画面を表示", + "secondary": "セカンダリートゥートボタン" } \ No newline at end of file diff --git a/app/view/make/language/ja-KS/setting.json b/app/view/make/language/ja-KS/setting.json index dd8692bf13..500b01d85b 100644 --- a/app/view/make/language/ja-KS/setting.json +++ b/app/view/make/language/ja-KS/setting.json @@ -207,26 +207,8 @@ "test": "テスト", "sample": "これはテスト音声やけど、やっぱりTheDeskはええクライアントや思わへんか?思わん?ならええわ。", "playstop": "再生/停止", + "keyScsMoved": "キーボードショートカット一覧はメニューに行ってもうた。(タイムラインの画面で ? キーを押してみてな)", "back": "戻る", - "keyscs": "キーボードショートカット一覧", - "keyscr": "1番目~9番目のTLにスクロール", - "keynew": "投稿パネルを開く", - "keytoggle": "投稿パネルを開閉", - "keypost": "投稿", - "keysecpost": "投稿(セカンダリートゥート)", - "keyunread": "全ての通知を既読にする", - "keyesc": "投稿パネルを消す", - "keyf5": "スーパーリロード", - "keyclear": "入力内容を消す", - "keyacctman": "アカウントマネージャ", - "keyshowprof": "現在選択中のプロフィール", - "keyrow": "イメージビューワー起動時に画像切り替え", - "keyzoom": "マウスホイール:イメージビューワー時に拡大縮小", - "whenSelected": "選択時", - "fav": "お気に入り登録", - "bt": "ブースト", - "reply": "返信", - "keyselecttop":"一番上の一番左のトゥートを選択", "reset": "初期化", "resetconfirm": "全てのデータを消してまうで。この操作は取り消せへんで。", "about": "このソフトについて", diff --git a/app/view/make/language/ja/index.json b/app/view/make/language/ja/index.json index 38269ab9b8..01f4656ad0 100644 --- a/app/view/make/language/ja/index.json +++ b/app/view/make/language/ja/index.json @@ -206,5 +206,31 @@ "v24ChangeDescPositive": "v24では以下の点の改善が図られています。", "v24SpeedyAndSafety": "全てのコードを見直し、かつ型定義を与える(TypeScript)ことで、より高速で安全にご使用いただけます。", "v24AltImage": "画像のアップロード方法を見直し、アップロードの進捗を監視するようになりました。", - "v24NiceContextTool": "コンテキストツールを再設計し、エアリプなどの遡りをより容易にします。" + "v24NiceContextTool": "コンテキストツールを再設計し、エアリプなどの遡りをより容易にします。", + "keyboardShortcut": "ショートカット", + "keyscs": "キーボードショートカット一覧", + "keyCommandAlso": "⌘(command)キーは⌃(control)キーでも代用可能です。", + "keyCtrlAlso": "CtrlはWindowsキーでも代用可能です。", + "keyscr": "1番目~9番目のTLにスクロール", + "keynew": "投稿パネルを開く", + "keytoggle": "投稿パネルを開閉", + "keypost": "投稿", + "keysecpost": "投稿(ローカル限定): Glitchインスタンス", + "keyNotStable": "投稿(実況なし)", + "keyMenu": "メニューパネルの開閉", + "keyunread": "全ての通知を既読にする", + "keyesc": "投稿パネルを消す", + "keyf5": "スーパーリロード", + "keyclear": "入力内容を消す (実況時はタグ付き)", + "keyClearNotStable": "入力内容を消す (実況タグなし)", + "keyChangeAcct": "(入力中) 投稿するアカウントを変更", + "keyacctman": "アカウントマネージャ", + "keyshowprof": "現在選択中のプロフィール", + "keyrow": "矢印: 投稿を選択", + "keyFav": "(投稿選択時)お気に入り登録", + "keyBt": "(投稿選択時)ブースト", + "keyReply": "(投稿選択時)返信", + "keyzoom": "マウスホイール:イメージビューワー時に拡大縮小", + "keyQuestion": "この画面を表示", + "secondary": "セカンダリートゥートボタン" } \ No newline at end of file diff --git a/app/view/make/language/ja/setting.json b/app/view/make/language/ja/setting.json index 1d6c603b5d..5f68051179 100644 --- a/app/view/make/language/ja/setting.json +++ b/app/view/make/language/ja/setting.json @@ -184,7 +184,7 @@ "spotifynote1": "", "spotifynote2": "ボタンから簡単にNowPlayingができます。", "link": "アカウントの連携", - "linkwarn": "APIの性質上,thedesk.topへアクセスします。", + "linkwarn": "APIの性質上、thedesk.topへアクセスします。", "connect": "接続", "disconnect": "切断", "lastFmWarn": "ユーザー名を入れてください。空白にすると解除されます。last.fmの「最近のリスニング情報を表示しない」にチェックを入れないでください。", @@ -209,26 +209,8 @@ "test": "テスト", "sample": "これはテスト音声です。TheDeskはオープンソースのPC向けマストドンクライアントです。マルチサーバーやマルチカラムに対応しています。", "playstop": "再生/停止", + "keyScsMoved": "キーボードショートカット一覧はメニューに移動しました。(タイムラインの画面で ? キーを押してください)", "back": "戻る", - "keyscs": "キーボードショートカット一覧", - "keyscr": "1番目~9番目のTLにスクロール", - "keynew": "投稿パネルを開く", - "keytoggle": "投稿パネルを開閉", - "keypost": "投稿", - "keysecpost": "投稿(セカンダリートゥート)", - "keyunread": "全ての通知を既読にする", - "keyesc": "投稿パネルを消す", - "keyf5": "スーパーリロード", - "keyclear": "入力内容を消す", - "keyacctman": "アカウントマネージャ", - "keyshowprof": "現在選択中のプロフィール", - "keyrow": "イメージビューワー起動時に画像切り替え", - "keyzoom": "マウスホイール:イメージビューワー時に拡大縮小", - "whenSelected": "選択時", - "fav": "お気に入り登録", - "bt": "ブースト", - "reply": "返信", - "keyselecttop":"一番上の一番左のトゥートを選択", "reset": "初期化", "resetconfirm": "全てのデータを削除します。この操作は取り消せません。", "about": "このソフトについて", diff --git a/app/view/make/setting.sample.html b/app/view/make/setting.sample.html index 5b90fca945..230929a6ba 100644 --- a/app/view/make/setting.sample.html +++ b/app/view/make/setting.sample.html @@ -459,13 +459,13 @@
{{item.text.head}}
@@iks@@
- @@okswarn@@
Ctrl+Shift+1: + @@okswarn@@
Ctrl+Shift+1:

- Ctrl+Shift+2: + Ctrl+Shift+2:

- Ctrl+Shift+3: + Ctrl+Shift+3:

@@ -616,25 +616,8 @@
@@test@@

undo@@back@@ -
-
@@keyscs@@ -
  • Ctrl+1-9:@@keyscr@@
  • -
  • N:@@keynew@@
  • -
  • X:@@keytoggle@@
  • -
  • Ctrl+Enter:@@keypost@@
  • -
  • Ctrl+Enter+Shift:@@keysecpost@@
  • -
  • Alt+Enter:@@secondary@@
  • -
  • Ctrl+E:@@keyunread@@
  • -
  • Ctrl+U:@@keyselecttop@@
  • -
  • Esc:@@keyesc@@
  • -
  • F5:@@keyf5@@
  • -
  • Ctrl+Shift+C:@@keyclear@@
  • -
  • Ctrl+Shift+S:@@setting@@
  • -
  • Ctrl+Shift+M:@@keyacctman@@
  • -
  • Ctrl+Shift+N:NowPlaying(Spotify)
  • -
  • Ctrl+Shift+P:@@keyshowprof@@
  • -
  • ←/→:@@keyrow@@
  • -
  • @@keyzoom@@
  • +
    +

    @@keyScsMoved@@