diff --git a/src/wysihtml5.js b/src/wysihtml5.js index 4d4a0581..47e8efa6 100644 --- a/src/wysihtml5.js +++ b/src/wysihtml5.js @@ -31,6 +31,7 @@ import "wysihtml5/keyboard/break_list"; import "wysihtml5/keyboard/shortcuts"; import "wysihtml5/keyboard/delete_images"; import "wysihtml5/keyboard/delete_block_elements"; +import "wysihtml5/keyboard/line_break"; // Text Substitutions import "wysihtml5/text_substitutions/auto_link"; diff --git a/src/wysihtml5/keyboard/line_break.js b/src/wysihtml5/keyboard/line_break.js new file mode 100644 index 00000000..8c732d3f --- /dev/null +++ b/src/wysihtml5/keyboard/line_break.js @@ -0,0 +1,31 @@ +import { Constants } from "../constants"; +import { Composer } from "../views/composer"; +import dom from "../dom"; + +/** + * Emulate native browser behaviour of Shift-Enter inserting a
instead + * of a new paragraph. +**/ +Composer.RegisterKeyboardHandler(function(e) { + return ( + e.type === "keydown" && + e.keyCode == Constants.ENTER_KEY && + e.shiftKey + ); +}, function(editor, composer, e) { + var breakElement = document.createElement("br"), + selectedNode = composer.selection.getSelectedNode(); + e.preventDefault(); + + if (selectedNode.nodeName === "P") { + selectedNode.appendChild(breakElement); + } else if (selectedNode.nodeName === "BR") { + dom.insert(breakElement).after(selectedNode); + } else { + var initialBreakElement = document.createElement("br"); + dom.insert(initialBreakElement).after(selectedNode); + dom.insert(breakElement).after(initialBreakElement); + } + + composer.selection.setAfter(breakElement); +});