diff --git a/angular-contenteditable.js b/angular-contenteditable.js index 49b59ee..2e97a4f 100644 --- a/angular-contenteditable.js +++ b/angular-contenteditable.js @@ -21,6 +21,7 @@ angular.module('contenteditable', []) 'noLineBreaks', 'selectNonEditable', 'moveCaretToEndOnChange', + 'unformattedText' ], function(opt) { var o = attrs[opt] opts[opt] = o && o !== 'false' @@ -30,7 +31,7 @@ angular.module('contenteditable', []) element.bind('input', function(e) { scope.$apply(function() { var html, html2, rerender - html = element.html() + html = opts.unformattedText ? element[0].innerText : element.html() rerender = false if (opts.stripBr) { html = html.replace(/
$/, '') @@ -64,6 +65,11 @@ angular.module('contenteditable', []) if (!!oldRender) { oldRender() } + + if (opts.unformattedText) { + ngModel.$viewValue = ngModel.$viewValue.replace(new RegExp('\n','g'), '
'); + } + element.html(ngModel.$viewValue || '') if (opts.moveCaretToEndOnChange) { el = element[0] diff --git a/test/e2e/scenarios.coffee b/test/e2e/scenarios.coffee index f6d267c..3518810 100644 --- a/test/e2e/scenarios.coffee +++ b/test/e2e/scenarios.coffee @@ -22,3 +22,12 @@ describe 'module contenteditable', -> expect(element('#input').html()).toBe 'a red b' expect(element('#input span').html()).toBe 'red' expect(element('#output').html()).toBe 'a <span style="color:red">red</span> b' + + it 'setting the model with some pure text should dispaly
instead of newlines \\n', -> + input('unformatted').enter('#h1\n\n##h2\n###h3'); + expect(element('#output-unformatted').html()).toBe '#h1

##h2
###h3' + + it 'putting some unformatted text with
s in the html should replace them with newlines', -> + + element('#output-unformatted').html('#h1

##h2
###h3'); + expect(input('unformatted').val()).toBe('#h1\n\n##h2\n###h3'); diff --git a/test/fixtures/simple.html b/test/fixtures/simple.html index 1b3d0bf..277314c 100644 --- a/test/fixtures/simple.html +++ b/test/fixtures/simple.html @@ -34,6 +34,11 @@
Edit me - I don't affect anything
+
+ +
+ +