1+ import KeyboardManager from "./resources/keyboardManager.js"
2+
13String . prototype . format = function ( ) {
24 return [ ...arguments ] . reduce ( ( p , c ) => p . replace ( / % s / , c ) , this ) ;
35} ;
46
57const discordInstanceId = getCookie ( "discord-instance-id" ) ;
68const rootPath = `${ discordInstanceId ? ".proxy/" : "" } {{.RootPath}}` ;
9+ const keyboardManager = new KeyboardManager ( ) ;
710
811let socketIsConnecting = false ;
912let hasSocketEverConnected = false ;
@@ -151,7 +154,7 @@ function createDialogButton(text) {
151154function createDialogButtonBar ( ...buttons ) {
152155 const buttonBar = document . createElement ( "div" ) ;
153156 buttonBar . classList . add ( "button-bar" ) ;
154- buttons . forEach ( buttonBar . appendChild ) ;
157+ buttons . forEach ( ( button ) => buttonBar . appendChild ( button ) ) ;
155158 return buttonBar ;
156159}
157160
@@ -171,18 +174,17 @@ function showHelpDialog() {
171174 const controlsLabel = document . createElement ( "b" ) ;
172175 controlsLabel . innerText = '{{.Translation.Get "controls"}}' ;
173176
174- const controlsTextOne = document . createElement ( "p" ) ;
175- controlsTextOne . innerText = '{{.Translation.Get "switch-tools-intro"}}:' ;
176-
177- const controlsTextTwo = document . createElement ( "p" ) ;
178- controlsTextTwo . innerHTML =
179- '{{.Translation.Get "pencil"}}: <kbd>Q</kbd><br/>' +
180- '{{.Translation.Get "fill-bucket"}}: <kbd>W</kbd><br/>' +
181- '{{.Translation.Get "eraser"}}: <kbd>E</kbd><br/>' ;
182-
183- const controlsTextThree = document . createElement ( "p" ) ;
184- controlsTextThree . innerHTML =
185- '{{printf (.Translation.Get "switch-pencil-sizes") "<kbd>1</kbd>" "<kbd>4</kbd>"}}' ;
177+ const undoModifierKeysString = keyboardManager . get ( "undoModifier" ) . split ( "+" ) . map ( k => `<kbd>${ k } </kbd>` ) . join ( "+" ) ;
178+ const controlsText = document . createElement ( "div" ) ;
179+ controlsText . classList . add ( "help-controls-grid" ) ;
180+ controlsText . innerHTML =
181+ `
182+ <span>{{.Translation.Get "pencil"}}</span><span dir="ltr"><kbd>${ keyboardManager . get ( "pen" ) } </kbd></span>
183+ <span>{{.Translation.Get "fill-bucket"}}</span><span dir="ltr"><kbd>${ keyboardManager . get ( "bucket" ) } </kbd></span>
184+ <span>{{.Translation.Get "eraser"}}</span><span dir="ltr"><kbd>${ keyboardManager . get ( "rubber" ) } </kbd></span>
185+ <span>{{.Translation.Get "undo-help-message"}}</span><span dir="ltr">${ undoModifierKeysString } +<kbd>${ keyboardManager . get ( "undo" ) } </kbd></span>
186+ <span>{{.Translation.Get "switch-pencil-sizes"}}</span><span dir="ltr"><kbd>${ keyboardManager . get ( "size8" ) } </kbd>-<kbd>${ keyboardManager . get ( "size32" ) } </kbd></span>
187+ ` ;
186188
187189 const closeButton = createDialogButton ( '{{.Translation.Get "close"}}' ) ;
188190 closeButton . addEventListener ( "click" , ( ) => {
@@ -197,9 +199,7 @@ function showHelpDialog() {
197199
198200 const dialogContent = document . createElement ( "div" ) ;
199201 dialogContent . appendChild ( controlsLabel ) ;
200- dialogContent . appendChild ( controlsTextOne ) ;
201- dialogContent . appendChild ( controlsTextTwo ) ;
202- dialogContent . appendChild ( controlsTextThree ) ;
202+ dialogContent . appendChild ( controlsText ) ;
203203 dialogContent . appendChild ( footer ) ;
204204
205205 showDialog (
@@ -452,6 +452,22 @@ const toolButtonPen = document.getElementById("tool-type-pencil");
452452const toolButtonRubber = document . getElementById ( "tool-type-rubber" ) ;
453453const toolButtonFill = document . getElementById ( "tool-type-fill" ) ;
454454
455+ const pencilImage = document . getElementById ( "use-pencil-button-image" ) ;
456+ const eraserImage = document . getElementById ( "use-eraser-button-image" ) ;
457+ const bucketImage = document . getElementById ( "use-fill-bucket-button-image" ) ;
458+ const undoImage = document . getElementById ( "undo-button-image" ) ;
459+ const size8buttonWrapper = document . getElementById ( "size-8-button-wrapper" ) ;
460+ const size16buttonWrapper = document . getElementById ( "size-16-button-wrapper" ) ;
461+ const size24buttonWrapper = document . getElementById ( "size-24-button-wrapper" ) ;
462+ const size32buttonWrapper = document . getElementById ( "size-32-button-wrapper" ) ;
463+
464+
465+ pencilImage . setAttribute ( "title" , `${ pencilImage . getAttribute ( "title" ) } (${ keyboardManager . get ( "pencil" ) } )` ) ;
466+ eraserImage . setAttribute ( "title" , `${ eraserImage . getAttribute ( "title" ) } (${ keyboardManager . get ( "rubber" ) } )` ) ;
467+ bucketImage . setAttribute ( "title" , `${ bucketImage . getAttribute ( "title" ) } (${ keyboardManager . get ( "bucket" ) } )` ) ;
468+ undoImage . setAttribute ( "title" , `${ undoImage . getAttribute ( "title" ) } (${ keyboardManager . get ( "undoModifier" ) } +${ keyboardManager . get ( "undo" ) } )` ) ;
469+
470+
455471if ( sizeButton8 . checked ) {
456472 setLineWidthNoUpdate ( 8 ) ;
457473} else if ( sizeButton16 . checked ) {
@@ -516,34 +532,19 @@ function setLineWidth(value) {
516532 setLineWidthNoUpdate ( value ) ;
517533 updateDrawingStateUI ( ) ;
518534}
535+
519536sizeButton8 . addEventListener ( "change" , ( ) => setLineWidth ( 8 ) ) ;
520- document
521- . getElementById ( "size-8-button-wrapper" )
522- . addEventListener ( "mouseup" , sizeButton8 . click ) ;
523- document
524- . getElementById ( "size-8-button-wrapper" )
525- . addEventListener ( "mousedown" , sizeButton8 . click ) ;
537+ size8buttonWrapper . addEventListener ( "mouseup" , sizeButton8 . click ) ;
538+ size8buttonWrapper . addEventListener ( "mousedown" , sizeButton8 . click ) ;
526539sizeButton16 . addEventListener ( "change" , ( ) => setLineWidth ( 16 ) ) ;
527- document
528- . getElementById ( "size-16-button-wrapper" )
529- . addEventListener ( "mouseup" , sizeButton16 . click ) ;
530- document
531- . getElementById ( "size-16-button-wrapper" )
532- . addEventListener ( "mousedown" , sizeButton16 . click ) ;
540+ size16buttonWrapper . addEventListener ( "mouseup" , sizeButton16 . click ) ;
541+ size16buttonWrapper . addEventListener ( "mousedown" , sizeButton16 . click ) ;
533542sizeButton24 . addEventListener ( "change" , ( ) => setLineWidth ( 24 ) ) ;
534- document
535- . getElementById ( "size-24-button-wrapper" )
536- . addEventListener ( "mouseup" , sizeButton24 . click ) ;
537- document
538- . getElementById ( "size-24-button-wrapper" )
539- . addEventListener ( "mousedown" , sizeButton24 . click ) ;
543+ size24buttonWrapper . addEventListener ( "mouseup" , sizeButton24 . click ) ;
544+ size24buttonWrapper . addEventListener ( "mousedown" , sizeButton24 . click ) ;
540545sizeButton32 . addEventListener ( "change" , ( ) => setLineWidth ( 32 ) ) ;
541- document
542- . getElementById ( "size-32-button-wrapper" )
543- . addEventListener ( "mouseup" , sizeButton32 . click ) ;
544- document
545- . getElementById ( "size-32-button-wrapper" )
546- . addEventListener ( "mousedown" , sizeButton32 . click ) ;
546+ size32buttonWrapper . addEventListener ( "mouseup" , sizeButton32 . click ) ;
547+ size32buttonWrapper . addEventListener ( "mousedown" , sizeButton32 . click ) ;
547548
548549function setLineWidthNoUpdate ( value ) {
549550 localLineWidth = value ;
@@ -1890,6 +1891,13 @@ function isAnyDialogVisible() {
18901891 return false ;
18911892}
18921893
1894+ function getModifierKey ( event , modifierKey ) {
1895+ // Split by "+" and ensure every specified modifier property is true on the event.
1896+ // e.g. "ctrl+shift" checks event.ctrlKey AND event.shiftKey
1897+ return modifierKey . split ( "+" ) . every ( modifier => event [ `${ modifier } Key` ] ) ;
1898+ }
1899+
1900+
18931901function onKeyDown ( event ) {
18941902 //Avoid firing actions if the user is in the chat.
18951903 if ( document . activeElement instanceof HTMLInputElement ) {
@@ -1907,28 +1915,28 @@ function onKeyDown(event) {
19071915 //find it better than having to find specific keys on your
19081916 //keyboard. Especially for people that aren't used to typing
19091917 //without looking at their keyboard, this might help.
1910- if ( event . key === "q" ) {
1918+ if ( event . key === keyboardManager . get ( "pen" ) ) {
19111919 toolButtonPen . click ( ) ;
19121920 chooseTool ( pen ) ;
1913- } else if ( event . key === "w" ) {
1921+ } else if ( event . key === keyboardManager . get ( "bucket" ) ) {
19141922 toolButtonFill . click ( ) ;
19151923 chooseTool ( fillBucket ) ;
1916- } else if ( event . key === "e" ) {
1924+ } else if ( event . key === keyboardManager . get ( "rubber" ) ) {
19171925 toolButtonRubber . click ( ) ;
19181926 chooseTool ( rubber ) ;
1919- } else if ( event . key === "1" ) {
1927+ } else if ( event . key === keyboardManager . get ( "size8" ) ) {
19201928 sizeButton8 . click ( ) ;
19211929 setLineWidth ( 8 ) ;
1922- } else if ( event . key === "2" ) {
1930+ } else if ( event . key === keyboardManager . get ( "size16" ) ) {
19231931 sizeButton16 . click ( ) ;
19241932 setLineWidth ( 16 ) ;
1925- } else if ( event . key === "3" ) {
1933+ } else if ( event . key === keyboardManager . get ( "size24" ) ) {
19261934 sizeButton24 . click ( ) ;
19271935 setLineWidth ( 24 ) ;
1928- } else if ( event . key === "4" ) {
1936+ } else if ( event . key === keyboardManager . get ( "size32" ) ) {
19291937 sizeButton32 . click ( ) ;
19301938 setLineWidth ( 32 ) ;
1931- } else if ( event . key === "z" && event . ctrlKey ) {
1939+ } else if ( getModifierKey ( event , keyboardManager . get ( "undoModifier" ) ) && event . key . toLowerCase ( ) === keyboardManager . get ( "undo" ) ) {
19321940 undoAndSendEvent ( ) ;
19331941 }
19341942}
0 commit comments