From 250a2a3ff3ff2adf36ff04744401b460aee06557 Mon Sep 17 00:00:00 2001 From: Siddharth VP Date: Wed, 2 Oct 2024 15:22:18 +0530 Subject: [PATCH] Keyboard shortcuts for formatting tools in WikiEditor 2010 Add shortcuts for bold, italic, subscript, superscript and nowiki options, and the link insertion tool in WikiEditor. The hotkeys match the ones used in VisualEditor and NWE 2017. Bug: T62928 Change-Id: I63414a78ce2546125d557cb37ccb37ea16a15fe1 --- extension.json | 1 + modules/jquery.wikiEditor.dialogs.config.js | 3 ++- modules/jquery.wikiEditor.toolbar.config.js | 15 ++++++++++----- modules/jquery.wikiEditor.toolbar.js | 18 ++++++++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/extension.json b/extension.json index 0fc6450e..a3c20fd0 100644 --- a/extension.json +++ b/extension.json @@ -246,6 +246,7 @@ ], "dependencies": [ "mediawiki.cookie", + "jquery.client", "jquery.textSelection", "jquery.ui", "mediawiki.api", diff --git a/modules/jquery.wikiEditor.dialogs.config.js b/modules/jquery.wikiEditor.dialogs.config.js index b535468f..08ca1329 100644 --- a/modules/jquery.wikiEditor.dialogs.config.js +++ b/modules/jquery.wikiEditor.dialogs.config.js @@ -42,7 +42,8 @@ module.exports = { action: { type: 'dialog', module: 'insert-link' - } + }, + hotkey: 'KeyK' }, file: { label: mw.msg( 'wikieditor-toolbar-tool-file' ), diff --git a/modules/jquery.wikiEditor.toolbar.config.js b/modules/jquery.wikiEditor.toolbar.config.js index ea93f643..aad43e35 100644 --- a/modules/jquery.wikiEditor.toolbar.config.js +++ b/modules/jquery.wikiEditor.toolbar.config.js @@ -45,7 +45,8 @@ toolbarConfig = { peri: mw.msg( 'wikieditor-toolbar-tool-bold-example' ), post: "'''" } - } + }, + hotkey: 'KeyB' }, italic: { section: 'main', @@ -61,7 +62,8 @@ toolbarConfig = { peri: mw.msg( 'wikieditor-toolbar-tool-italic-example' ), post: "''" } - } + }, + hotkey: 'KeyI' } } }, @@ -206,7 +208,8 @@ toolbarConfig = { peri: mw.msg( 'wikieditor-toolbar-tool-nowiki-example' ), post: '' } - } + }, + hotkey: 'Backslash' }, newline: { label: mw.msg( 'wikieditor-toolbar-tool-newline' ), @@ -260,7 +263,8 @@ toolbarConfig = { peri: mw.msg( 'wikieditor-toolbar-tool-superscript-example' ), post: '' } - } + }, + hotkey: 'Period' }, subscript: { label: mw.msg( 'wikieditor-toolbar-tool-subscript' ), @@ -273,7 +277,8 @@ toolbarConfig = { peri: mw.msg( 'wikieditor-toolbar-tool-subscript-example' ), post: '' } - } + }, + hotkey: 'Comma' } } }, diff --git a/modules/jquery.wikiEditor.toolbar.js b/modules/jquery.wikiEditor.toolbar.js index 91529426..f4a25a52 100644 --- a/modules/jquery.wikiEditor.toolbar.js +++ b/modules/jquery.wikiEditor.toolbar.js @@ -359,6 +359,9 @@ var toolbarModule = { } } ); } + if ( 'hotkey' in tool ) { + toolbarModule.fn.ctrlShortcuts[ tool.hotkey ] = tool; + } } return $button; case 'select': @@ -786,6 +789,21 @@ var toolbarModule = { // Use hook for attaching new toolbar tools to avoid race conditions mw.hook( 'wikiEditor.toolbarReady' ).fire( context.$textarea ); } ); + toolbarModule.fn.setupShortcuts( context ); + }, + ctrlShortcuts: {}, + setupShortcuts: function ( context ) { + var platform = $.client.profile().platform; + var modifierKey = platform === 'mac' ? 'metaKey' : 'ctrlKey'; + + context.$textarea.on( 'keydown', function ( e ) { + // Check if modifier key is pressed and hotkey is recognised + var target = e[ modifierKey ] && toolbarModule.fn.ctrlShortcuts[ e.code ]; + if ( target ) { + e.preventDefault(); + toolbarModule.fn.doAction( context, target.action ); + } + } ); }, handleKeyDown: function ( $element, event, $parent ) { var $currentItem = $element.find( '.wikiEditor-character-highlighted' ),