@@ -8,6 +8,46 @@ import {
8
8
// Key commands will run any time a particular key or key combination is pressed
9
9
// https://github.com/bustlelabs/mobiledoc-kit#configuring-hot-keys
10
10
11
+ const setHeader = function setHeader ( headerTag , editor , koenig ) {
12
+ if ( ! editor . activeSection . isMarkerable ) {
13
+ return ;
14
+ }
15
+
16
+ let range = editor . range ;
17
+ let canKeepRange = ! editor . activeSection . isListItem ;
18
+
19
+ editor . run ( ( postEditor ) => {
20
+ koenig . send ( 'toggleHeaderSection' , headerTag , postEditor , { force : true } ) ;
21
+ if ( canKeepRange ) {
22
+ postEditor . setRange ( range ) ;
23
+ }
24
+ } ) ;
25
+ } ;
26
+
27
+ // cycle through H2-H6. Starts with H2 so that heirarchy with the story title is
28
+ // kept. H1 should be explicitly selected with CTRL+ALT+1 or using `#` text expansion
29
+ const cycleHeaderLevel = function cycleHeaderLevel ( editor , koenig ) {
30
+ if ( ! editor . activeSection . isMarkerable ) {
31
+ return ;
32
+ }
33
+
34
+ let headerMatch = editor . activeSection . tagName . match ( / ^ h ( \d ) $ / i) ;
35
+ let headerTag = 'h2' ;
36
+
37
+ if ( headerMatch ) {
38
+ let newLevel = parseInt ( headerMatch [ 1 ] ) + 1 ;
39
+
40
+ if ( newLevel > 6 ) {
41
+ // remove header tag before starting the cycle again
42
+ headerTag = headerMatch [ 0 ] ;
43
+ } else {
44
+ headerTag = `h${ newLevel } ` ;
45
+ }
46
+ }
47
+
48
+ setHeader ( headerTag , editor , koenig ) ;
49
+ } ;
50
+
11
51
export const DEFAULT_KEY_COMMANDS = [ {
12
52
str : 'ENTER' ,
13
53
run ( editor , koenig ) {
@@ -242,6 +282,80 @@ export const DEFAULT_KEY_COMMANDS = [{
242
282
243
283
return false ;
244
284
}
285
+ } , {
286
+ str : 'CTRL+ALT+1' ,
287
+ run ( editor , koenig ) {
288
+ return setHeader ( 'h1' , editor , koenig ) ;
289
+ }
290
+ } , {
291
+ str : 'CTRL+ALT+2' ,
292
+ run ( editor , koenig ) {
293
+ return setHeader ( 'h2' , editor , koenig ) ;
294
+ }
295
+ } , {
296
+ str : 'CTRL+ALT+3' ,
297
+ run ( editor , koenig ) {
298
+ return setHeader ( 'h3' , editor , koenig ) ;
299
+ }
300
+ } , {
301
+ str : 'CTRL+ALT+4' ,
302
+ run ( editor , koenig ) {
303
+ return setHeader ( 'h4' , editor , koenig ) ;
304
+ }
305
+ } , {
306
+ str : 'CTRL+ALT+5' ,
307
+ run ( editor , koenig ) {
308
+ return setHeader ( 'h5' , editor , koenig ) ;
309
+ }
310
+ } , {
311
+ str : 'CTRL+ALT+6' ,
312
+ run ( editor , koenig ) {
313
+ return setHeader ( 'h6' , editor , koenig ) ;
314
+ }
315
+ } , {
316
+ str : 'CTRL+H' ,
317
+ run ( editor , koenig ) {
318
+ if ( ! Browser . isMac ( ) ) {
319
+ return cycleHeaderLevel ( editor , koenig ) ;
320
+ }
321
+
322
+ return false ;
323
+ }
324
+ } , {
325
+ str : 'META+H' ,
326
+ run ( editor , koenig ) {
327
+ if ( Browser . isMac ( ) ) {
328
+ return cycleHeaderLevel ( editor , koenig ) ;
329
+ }
330
+
331
+ return false ;
332
+ }
333
+ } , {
334
+ str : 'CTRL+Q' ,
335
+ run ( editor , koenig ) {
336
+ if ( ! editor . activeSection . isMarkerable ) {
337
+ return ;
338
+ }
339
+
340
+ let range = editor . range ;
341
+ let canKeepRange = ! editor . activeSection . isListItem ;
342
+
343
+ editor . run ( ( postEditor ) => {
344
+ koenig . send ( 'toggleSection' , 'blockquote' , postEditor ) ;
345
+ if ( canKeepRange ) {
346
+ postEditor . setRange ( range ) ;
347
+ }
348
+ } ) ;
349
+ }
350
+ } , {
351
+ str : 'CTRL+L' ,
352
+ run ( editor , koenig ) {
353
+ if ( ! editor . activeSection . isMarkerable ) {
354
+ return ;
355
+ }
356
+
357
+ koenig . send ( 'toggleSection' , 'ul' ) ;
358
+ }
245
359
} , {
246
360
str : 'CTRL+K' ,
247
361
run ( editor , koenig ) {
@@ -257,6 +371,29 @@ export const DEFAULT_KEY_COMMANDS = [{
257
371
run ( editor , koenig ) {
258
372
return koenig . send ( 'editLink' , editor . range ) ;
259
373
}
374
+ } , {
375
+ str : 'CTRL+ALT+U' ,
376
+ run ( editor , koenig ) {
377
+ return koenig . send ( 'toggleMarkup' , 's' ) ;
378
+ }
379
+ } , {
380
+ str : 'CTRL+SHIFT+K' ,
381
+ run ( editor , koenig ) {
382
+ if ( ! Browser . isMac ( ) ) {
383
+ return koenig . send ( 'toggleMarkup' , 'code' ) ;
384
+ }
385
+
386
+ return false ;
387
+ }
388
+ } , {
389
+ str : 'META+SHIFT+K' ,
390
+ run ( editor , koenig ) {
391
+ if ( Browser . isMac ( ) ) {
392
+ return koenig . send ( 'toggleMarkup' , 'code' ) ;
393
+ }
394
+
395
+ return false ;
396
+ }
260
397
} ] ;
261
398
262
399
export default function registerKeyCommands ( editor , koenig ) {
0 commit comments