@@ -784,7 +784,8 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
784
784
event . preventDefault ( ) ;
785
785
}
786
786
/* istanbul ignore next: difficult to test as can't seem to select */
787
- if ( event . keyCode === ENTER_KEYCODE && ! event . shiftKey ) {
787
+ if ( event . keyCode === ENTER_KEYCODE && ! event . shiftKey && ! event . ctrlKey && ! event . metaKey && ! event . altKey )
788
+ {
788
789
var contains = function ( a , obj ) {
789
790
for ( var i = 0 ; i < a . length ; i ++ ) {
790
791
if ( a [ i ] === obj ) {
@@ -843,49 +844,54 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
843
844
}
844
845
if ( _undoKeyupTimeout ) $timeout . cancel ( _undoKeyupTimeout ) ;
845
846
if ( ! _isReadonly && ! BLOCKED_KEYS . test ( event . keyCode ) ) {
846
- // if enter - insert new taDefaultWrap, if shift+enter insert <br/>
847
- if ( _defaultVal !== '' && event . keyCode === ENTER_KEYCODE ) {
848
- if ( ! event . shiftKey ) {
849
- // new paragraph, br should be caught correctly
850
- var selection = taSelection . getSelectionElement ( ) ;
851
- // shifted to nodeName here from tagName since it is more widely supported see: http://stackoverflow.com/questions/4878484/difference-between-tagname-and-nodename
852
- while ( ! selection . nodeName . match ( VALIDELEMENTS ) && selection !== element [ 0 ] ) {
853
- selection = selection . parentNode ;
854
- }
847
+ /* istanbul ignore next: Ignore any ENTER_KEYCODE that has ctrlKey, metaKey or alKey */
848
+ if ( event . keyCode === ENTER_KEYCODE && ( event . ctrlKey || event . metaKey || event . altKey ) ) {
849
+ // we ignore any ENTER_ KEYCODE that is anything but plain or a shift one...
850
+ } else {
851
+ // if enter - insert new taDefaultWrap, if shift+enter insert <br/>
852
+ if ( _defaultVal !== '' && event . keyCode === ENTER_KEYCODE && ! event . ctrlKey && ! event . metaKey && ! event . altKey ) {
853
+ if ( ! event . shiftKey ) {
854
+ // new paragraph, br should be caught correctly
855
+ var selection = taSelection . getSelectionElement ( ) ;
856
+ // shifted to nodeName here from tagName since it is more widely supported see: http://stackoverflow.com/questions/4878484/difference-between-tagname-and-nodename
857
+ while ( ! selection . nodeName . match ( VALIDELEMENTS ) && selection !== element [ 0 ] ) {
858
+ selection = selection . parentNode ;
859
+ }
855
860
856
- if ( selection . tagName . toLowerCase ( ) !==
857
- attrs . taDefaultWrap &&
858
- selection . tagName . toLowerCase ( ) !== 'li' &&
859
- ( selection . innerHTML . trim ( ) === '' || selection . innerHTML . trim ( ) === '<br>' )
860
- ) {
861
- // Chrome starts with a <div><br></div> after an EnterKey
862
- // so we replace this with the _defaultVal
863
- var _new = angular . element ( _defaultVal ) ;
864
- angular . element ( selection ) . replaceWith ( _new ) ;
865
- taSelection . setSelectionToElementStart ( _new [ 0 ] ) ;
861
+ if ( selection . tagName . toLowerCase ( ) !==
862
+ attrs . taDefaultWrap &&
863
+ selection . tagName . toLowerCase ( ) !== 'li' &&
864
+ ( selection . innerHTML . trim ( ) === '' || selection . innerHTML . trim ( ) === '<br>' )
865
+ ) {
866
+ // Chrome starts with a <div><br></div> after an EnterKey
867
+ // so we replace this with the _defaultVal
868
+ var _new = angular . element ( _defaultVal ) ;
869
+ angular . element ( selection ) . replaceWith ( _new ) ;
870
+ taSelection . setSelectionToElementStart ( _new [ 0 ] ) ;
871
+ }
866
872
}
867
873
}
874
+ var val = _compileHtml ( ) ;
875
+ if ( _defaultVal !== '' && ( val . trim ( ) === '' || val . trim ( ) === '<br>' ) ) {
876
+ _setInnerHTML ( _defaultVal ) ;
877
+ taSelection . setSelectionToElementStart ( element . children ( ) [ 0 ] ) ;
878
+ } else if ( val . substring ( 0 , 1 ) !== '<' && attrs . taDefaultWrap !== '' ) {
879
+ /* we no longer do this, since there can be comments here and white space
880
+ var _savedSelection = rangy.saveSelection();
881
+ val = _compileHtml();
882
+ val = "<" + attrs.taDefaultWrap + ">" + val + "</" + attrs.taDefaultWrap + ">";
883
+ _setInnerHTML(val);
884
+ rangy.restoreSelection(_savedSelection);
885
+ */
886
+ }
887
+ var triggerUndo = _lastKey !== event . keyCode && UNDO_TRIGGER_KEYS . test ( event . keyCode ) ;
888
+ if ( _keyupTimeout ) $timeout . cancel ( _keyupTimeout ) ;
889
+ _keyupTimeout = $timeout ( function ( ) {
890
+ _setViewValue ( val , triggerUndo , true ) ;
891
+ } , ngModelOptions . $options . debounce || 400 ) ;
892
+ if ( ! triggerUndo ) _undoKeyupTimeout = $timeout ( function ( ) { ngModel . $undoManager . push ( val ) ; } , 250 ) ;
893
+ _lastKey = event . keyCode ;
868
894
}
869
- var val = _compileHtml ( ) ;
870
- if ( _defaultVal !== '' && ( val . trim ( ) === '' || val . trim ( ) === '<br>' ) ) {
871
- _setInnerHTML ( _defaultVal ) ;
872
- taSelection . setSelectionToElementStart ( element . children ( ) [ 0 ] ) ;
873
- } else if ( val . substring ( 0 , 1 ) !== '<' && attrs . taDefaultWrap !== '' ) {
874
- /* we no longer do this, since there can be comments here and white space
875
- var _savedSelection = rangy.saveSelection();
876
- val = _compileHtml();
877
- val = "<" + attrs.taDefaultWrap + ">" + val + "</" + attrs.taDefaultWrap + ">";
878
- _setInnerHTML(val);
879
- rangy.restoreSelection(_savedSelection);
880
- */
881
- }
882
- var triggerUndo = _lastKey !== event . keyCode && UNDO_TRIGGER_KEYS . test ( event . keyCode ) ;
883
- if ( _keyupTimeout ) $timeout . cancel ( _keyupTimeout ) ;
884
- _keyupTimeout = $timeout ( function ( ) {
885
- _setViewValue ( val , triggerUndo , true ) ;
886
- } , ngModelOptions . $options . debounce || 400 ) ;
887
- if ( ! triggerUndo ) _undoKeyupTimeout = $timeout ( function ( ) { ngModel . $undoManager . push ( val ) ; } , 250 ) ;
888
- _lastKey = event . keyCode ;
889
895
}
890
896
} ) ;
891
897
0 commit comments