0
Fork 0
mirror of https://github.com/fastmail/Squire.git synced 2025-01-08 16:00:06 -05:00

Add subscript/superscript/strikethrough helper methods.

* And keyboard shortcuts. (Ctrl-Shift-5/6/7 respectively).
This commit is contained in:
Neil Jenkins 2014-01-13 14:31:19 +11:00
parent 08cc8172a8
commit 88ced455f9
4 changed files with 28 additions and 8 deletions

View file

@ -157,7 +157,7 @@ TreeWalker.prototype.previousNode = function () {
*/ */
/*jshint strict:false */ /*jshint strict:false */
var inlineNodeNames = /^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:FN|EL)|EM|FONT|HR|I(?:NPUT|MG|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:U[BP]|PAN|TRONG|AMP)|U)$/; var inlineNodeNames = /^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:FN|EL)|EM|FONT|HR|I(?:NPUT|MG|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:U[BP]|PAN|TR(?:IKE|ONG)|AMP)|U)$/;
var leafNodeNames = { var leafNodeNames = {
BR: 1, BR: 1,
@ -2597,14 +2597,15 @@ var mapKeyTo = function ( method ) {
}; };
}; };
var mapKeyToFormat = function ( tag ) { var mapKeyToFormat = function ( tag, remove ) {
remove = remove || null;
return function ( self, event ) { return function ( self, event ) {
event.preventDefault(); event.preventDefault();
var range = self.getSelection(); var range = self.getSelection();
if ( self.hasFormat( tag, null, range ) ) { if ( self.hasFormat( tag, null, range ) ) {
self.changeFormat( null, { tag: tag }, range ); self.changeFormat( null, { tag: tag }, range );
} else { } else {
self.changeFormat( { tag: tag }, null, range ); self.changeFormat( { tag: tag }, remove, range );
} }
}; };
}; };
@ -2945,6 +2946,9 @@ if ( isMac && isGecko && win.getSelection().modify ) {
keyHandlers[ ctrlKey + 'b' ] = mapKeyToFormat( 'B' ); keyHandlers[ ctrlKey + 'b' ] = mapKeyToFormat( 'B' );
keyHandlers[ ctrlKey + 'i' ] = mapKeyToFormat( 'I' ); keyHandlers[ ctrlKey + 'i' ] = mapKeyToFormat( 'I' );
keyHandlers[ ctrlKey + 'u' ] = mapKeyToFormat( 'U' ); keyHandlers[ ctrlKey + 'u' ] = mapKeyToFormat( 'U' );
keyHandlers[ ctrlKey + 'shift-7' ] = mapKeyToFormat( 'STRIKE' );
keyHandlers[ ctrlKey + 'shift-5' ] = mapKeyToFormat( 'SUB', { tag: 'SUP' } );
keyHandlers[ ctrlKey + 'shift-6' ] = mapKeyToFormat( 'SUP', { tag: 'SUB' } );
keyHandlers[ ctrlKey + 'y' ] = mapKeyTo( 'redo' ); keyHandlers[ ctrlKey + 'y' ] = mapKeyTo( 'redo' );
keyHandlers[ ctrlKey + 'z' ] = mapKeyTo( 'undo' ); keyHandlers[ ctrlKey + 'z' ] = mapKeyTo( 'undo' );
keyHandlers[ ctrlKey + 'shift-z' ] = mapKeyTo( 'redo' ); keyHandlers[ ctrlKey + 'shift-z' ] = mapKeyTo( 'redo' );
@ -3155,10 +3159,16 @@ proto.addStyles = function ( styles ) {
proto.bold = command( 'changeFormat', { tag: 'B' } ); proto.bold = command( 'changeFormat', { tag: 'B' } );
proto.italic = command( 'changeFormat', { tag: 'I' } ); proto.italic = command( 'changeFormat', { tag: 'I' } );
proto.underline = command( 'changeFormat', { tag: 'U' } ); proto.underline = command( 'changeFormat', { tag: 'U' } );
proto.strikethrough = command( 'changeFormat', { tag: 'STRIKE' } );
proto.subscript = command( 'changeFormat', { tag: 'SUB' }, { tag: 'SUP' } );
proto.superscript = command( 'changeFormat', { tag: 'SUP' }, { tag: 'SUB' } );
proto.removeBold = command( 'changeFormat', null, { tag: 'B' } ); proto.removeBold = command( 'changeFormat', null, { tag: 'B' } );
proto.removeItalic = command( 'changeFormat', null, { tag: 'I' } ); proto.removeItalic = command( 'changeFormat', null, { tag: 'I' } );
proto.removeUnderline = command( 'changeFormat', null, { tag: 'U' } ); proto.removeUnderline = command( 'changeFormat', null, { tag: 'U' } );
proto.removeStrikethrough = command( 'changeFormat', null, { tag: 'STRIKE' } );
proto.removeSubscript = command( 'changeFormat', null, { tag: 'SUB' } );
proto.removeSuperscript = command( 'changeFormat', null, { tag: 'SUP' } );
proto.makeLink = function ( url ) { proto.makeLink = function ( url ) {
url = encodeURI( url ); url = encodeURI( url );

File diff suppressed because one or more lines are too long

View file

@ -1549,14 +1549,15 @@ var mapKeyTo = function ( method ) {
}; };
}; };
var mapKeyToFormat = function ( tag ) { var mapKeyToFormat = function ( tag, remove ) {
remove = remove || null;
return function ( self, event ) { return function ( self, event ) {
event.preventDefault(); event.preventDefault();
var range = self.getSelection(); var range = self.getSelection();
if ( self.hasFormat( tag, null, range ) ) { if ( self.hasFormat( tag, null, range ) ) {
self.changeFormat( null, { tag: tag }, range ); self.changeFormat( null, { tag: tag }, range );
} else { } else {
self.changeFormat( { tag: tag }, null, range ); self.changeFormat( { tag: tag }, remove, range );
} }
}; };
}; };
@ -1897,6 +1898,9 @@ if ( isMac && isGecko && win.getSelection().modify ) {
keyHandlers[ ctrlKey + 'b' ] = mapKeyToFormat( 'B' ); keyHandlers[ ctrlKey + 'b' ] = mapKeyToFormat( 'B' );
keyHandlers[ ctrlKey + 'i' ] = mapKeyToFormat( 'I' ); keyHandlers[ ctrlKey + 'i' ] = mapKeyToFormat( 'I' );
keyHandlers[ ctrlKey + 'u' ] = mapKeyToFormat( 'U' ); keyHandlers[ ctrlKey + 'u' ] = mapKeyToFormat( 'U' );
keyHandlers[ ctrlKey + 'shift-7' ] = mapKeyToFormat( 'STRIKE' );
keyHandlers[ ctrlKey + 'shift-5' ] = mapKeyToFormat( 'SUB', { tag: 'SUP' } );
keyHandlers[ ctrlKey + 'shift-6' ] = mapKeyToFormat( 'SUP', { tag: 'SUB' } );
keyHandlers[ ctrlKey + 'y' ] = mapKeyTo( 'redo' ); keyHandlers[ ctrlKey + 'y' ] = mapKeyTo( 'redo' );
keyHandlers[ ctrlKey + 'z' ] = mapKeyTo( 'undo' ); keyHandlers[ ctrlKey + 'z' ] = mapKeyTo( 'undo' );
keyHandlers[ ctrlKey + 'shift-z' ] = mapKeyTo( 'redo' ); keyHandlers[ ctrlKey + 'shift-z' ] = mapKeyTo( 'redo' );
@ -2107,10 +2111,16 @@ proto.addStyles = function ( styles ) {
proto.bold = command( 'changeFormat', { tag: 'B' } ); proto.bold = command( 'changeFormat', { tag: 'B' } );
proto.italic = command( 'changeFormat', { tag: 'I' } ); proto.italic = command( 'changeFormat', { tag: 'I' } );
proto.underline = command( 'changeFormat', { tag: 'U' } ); proto.underline = command( 'changeFormat', { tag: 'U' } );
proto.strikethrough = command( 'changeFormat', { tag: 'STRIKE' } );
proto.subscript = command( 'changeFormat', { tag: 'SUB' }, { tag: 'SUP' } );
proto.superscript = command( 'changeFormat', { tag: 'SUP' }, { tag: 'SUB' } );
proto.removeBold = command( 'changeFormat', null, { tag: 'B' } ); proto.removeBold = command( 'changeFormat', null, { tag: 'B' } );
proto.removeItalic = command( 'changeFormat', null, { tag: 'I' } ); proto.removeItalic = command( 'changeFormat', null, { tag: 'I' } );
proto.removeUnderline = command( 'changeFormat', null, { tag: 'U' } ); proto.removeUnderline = command( 'changeFormat', null, { tag: 'U' } );
proto.removeStrikethrough = command( 'changeFormat', null, { tag: 'STRIKE' } );
proto.removeSubscript = command( 'changeFormat', null, { tag: 'SUB' } );
proto.removeSuperscript = command( 'changeFormat', null, { tag: 'SUP' } );
proto.makeLink = function ( url ) { proto.makeLink = function ( url ) {
url = encodeURI( url ); url = encodeURI( url );

View file

@ -15,7 +15,7 @@
*/ */
/*jshint strict:false */ /*jshint strict:false */
var inlineNodeNames = /^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:FN|EL)|EM|FONT|HR|I(?:NPUT|MG|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:U[BP]|PAN|TRONG|AMP)|U)$/; var inlineNodeNames = /^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:FN|EL)|EM|FONT|HR|I(?:NPUT|MG|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:U[BP]|PAN|TR(?:IKE|ONG)|AMP)|U)$/;
var leafNodeNames = { var leafNodeNames = {
BR: 1, BR: 1,