mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-13 14:39:52 +03:00
Keyboard shortcuts for Mac vs All
Closes #3029, Ref #3469 - Editor shortcuts are now built in a separate file, which uses `ctrlOrCmd` to correctly set OS specific shortcuts. - Removed `newLine` and `selectWord` shortcuts
This commit is contained in:
parent
3de308dc20
commit
a7444bf338
@ -1,7 +1,7 @@
|
|||||||
import ShortcutsRoute from 'ghost/mixins/shortcuts-route';
|
import ShortcutsRoute from 'ghost/mixins/shortcuts-route';
|
||||||
import styleBody from 'ghost/mixins/style-body';
|
import styleBody from 'ghost/mixins/style-body';
|
||||||
import loadingIndicator from 'ghost/mixins/loading-indicator';
|
import loadingIndicator from 'ghost/mixins/loading-indicator';
|
||||||
|
import editorShortcuts from 'ghost/utils/editor-shortcuts';
|
||||||
|
|
||||||
var EditorRouteBase = Ember.Mixin.create(styleBody, ShortcutsRoute, loadingIndicator, {
|
var EditorRouteBase = Ember.Mixin.create(styleBody, ShortcutsRoute, loadingIndicator, {
|
||||||
actions: {
|
actions: {
|
||||||
@ -22,6 +22,8 @@ var EditorRouteBase = Ember.Mixin.create(styleBody, ShortcutsRoute, loadingIndic
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
shortcuts: editorShortcuts,
|
||||||
|
|
||||||
attachModelHooks: function (controller, model) {
|
attachModelHooks: function (controller, model) {
|
||||||
// this will allow us to track when the model is saved and update the controller
|
// this will allow us to track when the model is saved and update the controller
|
||||||
// so that we can be sure controller.isDirty is correct, without having to update the
|
// so that we can be sure controller.isDirty is correct, without having to update the
|
||||||
@ -40,38 +42,6 @@ var EditorRouteBase = Ember.Mixin.create(styleBody, ShortcutsRoute, loadingIndic
|
|||||||
detachModelHooks: function (controller, model) {
|
detachModelHooks: function (controller, model) {
|
||||||
model.off('didCreate', controller, controller.get('modelSaved'));
|
model.off('didCreate', controller, controller.get('modelSaved'));
|
||||||
model.off('didUpdate', controller, controller.get('modelSaved'));
|
model.off('didUpdate', controller, controller.get('modelSaved'));
|
||||||
},
|
|
||||||
|
|
||||||
shortcuts: {
|
|
||||||
//General Editor shortcuts
|
|
||||||
'ctrl+s, command+s': 'save',
|
|
||||||
'ctrl+alt+p': 'publish',
|
|
||||||
'alt+shift+z': 'toggleZenMode',
|
|
||||||
//CodeMirror Markdown Shortcuts
|
|
||||||
'ctrl+alt+u': {action: 'codeMirrorShortcut', options: {type: 'strike'}},
|
|
||||||
'ctrl+alt+1': {action: 'codeMirrorShortcut', options: {type: 'h1'}},
|
|
||||||
'ctrl+alt+2': {action: 'codeMirrorShortcut', options: {type: 'h2'}},
|
|
||||||
'ctrl+alt+3': {action: 'codeMirrorShortcut', options: {type: 'h3'}},
|
|
||||||
'ctrl+alt+4': {action: 'codeMirrorShortcut', options: {type: 'h4'}},
|
|
||||||
'ctrl+alt+5': {action: 'codeMirrorShortcut', options: {type: 'h5'}},
|
|
||||||
'ctrl+alt+6': {action: 'codeMirrorShortcut', options: {type: 'h6'}},
|
|
||||||
'ctrl+shift+i': {action: 'codeMirrorShortcut', options: {type: 'image'}},
|
|
||||||
'ctrl+q': {action: 'codeMirrorShortcut', options: {type: 'blockquote'}},
|
|
||||||
'ctrl+shift+1': {action: 'codeMirrorShortcut', options: {type: 'currentDate'}},
|
|
||||||
'ctrl+b, command+b': {action: 'codeMirrorShortcut', options: {type: 'bold'}},
|
|
||||||
'ctrl+i, command+i': {action: 'codeMirrorShortcut', options: {type: 'italic'}},
|
|
||||||
'ctrl+k, command+k': {action: 'codeMirrorShortcut', options: {type: 'link'}},
|
|
||||||
'ctrl+l': {action: 'codeMirrorShortcut', options: {type: 'list'}},
|
|
||||||
/** Currently broken CodeMirror Markdown shortcuts.
|
|
||||||
* some may be broken due to a conflict with CodeMirror commands
|
|
||||||
* (see http://codemirror.net/doc/manual.html#commands)
|
|
||||||
'ctrl+U': {action: 'codeMirrorShortcut', options: {type: 'uppercase'}},
|
|
||||||
'ctrl+shift+U': {action: 'codeMirrorShortcut', options: {type: 'lowercase'}},
|
|
||||||
'ctrl+alt+shift+U': {action: 'codeMirrorShortcut', options: {type: 'titlecase'}}
|
|
||||||
'ctrl+alt+W': {action: 'codeMirrorShortcut', options: {type: 'selectword'}},
|
|
||||||
'ctrl+alt+c': {action: 'codeMirrorShortcut', options: {type: 'copyHTML'}},
|
|
||||||
'ctrl+enter': {action: 'codeMirrorShortcut', options: {type: 'newLine'}},
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -90,14 +90,6 @@ function init() {
|
|||||||
case 'titlecase':
|
case 'titlecase':
|
||||||
md = text.toTitleCase();
|
md = text.toTitleCase();
|
||||||
break;
|
break;
|
||||||
case 'selectword':
|
|
||||||
word = this.getTokenAt(cursor);
|
|
||||||
if (!/\w$/g.test(word.string)) {
|
|
||||||
this.setSelection({line: cursor.line, ch: word.start}, {line: cursor.line, ch: word.end - 1});
|
|
||||||
} else {
|
|
||||||
this.setSelection({line: cursor.line, ch: word.start}, {line: cursor.line, ch: word.end});
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'copyHTML':
|
case 'copyHTML':
|
||||||
converter = new Showdown.converter();
|
converter = new Showdown.converter();
|
||||||
if (text) {
|
if (text) {
|
||||||
@ -108,11 +100,6 @@ function init() {
|
|||||||
|
|
||||||
$(".modal-copyToHTML-content").text(md).selectText();
|
$(".modal-copyToHTML-content").text(md).selectText();
|
||||||
break;
|
break;
|
||||||
case 'newLine':
|
|
||||||
if (line !== "") {
|
|
||||||
this.replaceRange(line + "\n\n", fromLineStart);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
*/
|
*/
|
||||||
default:
|
default:
|
||||||
if (this.simpleShortcutSyntax[type]) {
|
if (this.simpleShortcutSyntax[type]) {
|
||||||
@ -134,4 +121,4 @@ function init() {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
init: init
|
init: init
|
||||||
};
|
};
|
||||||
|
46
core/client/utils/editor-shortcuts.js
Normal file
46
core/client/utils/editor-shortcuts.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
var shortcuts = {},
|
||||||
|
ctrlOrCmd = navigator.userAgent.indexOf('Mac') !== -1 ? 'command' : 'ctrl';
|
||||||
|
//
|
||||||
|
//General editor shortcuts
|
||||||
|
//
|
||||||
|
|
||||||
|
shortcuts[ctrlOrCmd + '+s'] = 'save';
|
||||||
|
shortcuts[ctrlOrCmd + '+alt+p'] = 'publish';
|
||||||
|
shortcuts['alt+shift+z'] = 'toggleZenMode';
|
||||||
|
|
||||||
|
//
|
||||||
|
//CodeMirror Markdown Shortcuts
|
||||||
|
//
|
||||||
|
|
||||||
|
//Text
|
||||||
|
shortcuts['ctrl+alt+u'] = {action: 'codeMirrorShortcut', options: {type: 'strike'}};
|
||||||
|
shortcuts[ctrlOrCmd + '+b'] = {action: 'codeMirrorShortcut', options: {type: 'bold'}};
|
||||||
|
shortcuts[ctrlOrCmd + '+i'] = {action: 'codeMirrorShortcut', options: {type: 'italic'}};
|
||||||
|
|
||||||
|
//Headings
|
||||||
|
shortcuts['ctrl+alt+1'] = {action: 'codeMirrorShortcut', options: {type: 'h1'}};
|
||||||
|
shortcuts['ctrl+alt+2'] = {action: 'codeMirrorShortcut', options: {type: 'h2'}};
|
||||||
|
shortcuts['ctrl+alt+3'] = {action: 'codeMirrorShortcut', options: {type: 'h3'}};
|
||||||
|
shortcuts['ctrl+alt+4'] = {action: 'codeMirrorShortcut', options: {type: 'h4'}};
|
||||||
|
shortcuts['ctrl+alt+5'] = {action: 'codeMirrorShortcut', options: {type: 'h5'}};
|
||||||
|
shortcuts['ctrl+alt+6'] = {action: 'codeMirrorShortcut', options: {type: 'h6'}};
|
||||||
|
|
||||||
|
//Formatting
|
||||||
|
shortcuts['ctrl+q'] = {action: 'codeMirrorShortcut', options: {type: 'blockquote'}};
|
||||||
|
shortcuts['ctrl+l'] = {action: 'codeMirrorShortcut', options: {type: 'list'}};
|
||||||
|
|
||||||
|
//Insert content
|
||||||
|
shortcuts['ctrl+shift+1'] = {action: 'codeMirrorShortcut', options: {type: 'currentDate'}};
|
||||||
|
shortcuts[ctrlOrCmd + '+k'] = {action: 'codeMirrorShortcut', options: {type: 'link'}};
|
||||||
|
shortcuts[ctrlOrCmd + '+shift+i'] = {action: 'codeMirrorShortcut', options: {type: 'image'}};
|
||||||
|
|
||||||
|
//Currently broken CodeMirror Markdown shortcuts.
|
||||||
|
// Some may be broken due to a conflict with CodeMirror commands.
|
||||||
|
// (see http://codemirror.net/doc/manual.html#commands)
|
||||||
|
//
|
||||||
|
//shortcuts['ctrl+U'] = {action: 'codeMirrorShortcut', options: {type: 'uppercase'}};
|
||||||
|
//shortcuts['ctrl+shift+U'] = {action: 'codeMirrorShortcut', options: {type: 'lowercase'}};
|
||||||
|
//shortcuts['ctrl+alt+shift+U'] = {action: 'codeMirrorShortcut', options: {type: 'titlecase'}};
|
||||||
|
//shortcuts[ctrlOrCmd + '+c'] = {action: 'codeMirrorShortcut', options: {type: 'copyHTML'}};
|
||||||
|
|
||||||
|
export default shortcuts;
|
Loading…
Reference in New Issue
Block a user