Skip to content

Commit 438e060

Browse files
committed
fix(taBind): corrected issue $607 - catching Ctrl+Return
1 parent 274abda commit 438e060

File tree

1 file changed

+46
-40
lines changed

1 file changed

+46
-40
lines changed

src/taBind.js

+46-40
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,8 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
784784
event.preventDefault();
785785
}
786786
/* 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+
{
788789
var contains = function(a, obj) {
789790
for (var i = 0; i < a.length; i++) {
790791
if (a[i] === obj) {
@@ -843,49 +844,54 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
843844
}
844845
if(_undoKeyupTimeout) $timeout.cancel(_undoKeyupTimeout);
845846
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+
}
855860

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+
}
866872
}
867873
}
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;
868894
}
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;
889895
}
890896
});
891897

0 commit comments

Comments
 (0)