From dab97313dbef8697e91c8c39e2a9045aa3cf5ccf Mon Sep 17 00:00:00 2001 From: Dmitri Akatov Date: Thu, 18 Jul 2013 16:34:30 -0700 Subject: [PATCH] no-line-breaks attribute to prevent line breaks --- angular-contenteditable.js | 20 ++++++++++++++---- bower.json | 2 +- package.json | 2 +- src/contenteditable.coffee | 11 +++++++++- test/fixtures/no-line-breaks.html | 34 +++++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 test/fixtures/no-line-breaks.html diff --git a/angular-contenteditable.js b/angular-contenteditable.js index 54c9fb8..d26293e 100644 --- a/angular-contenteditable.js +++ b/angular-contenteditable.js @@ -6,12 +6,24 @@ var old_render; elmt.bind('input', function(e) { return scope.$apply(function() { - var html; + var html, rerender; html = elmt.html(); - if (attrs.stripBr && attrs.stripBr !== "false" && html === '
') { - html = ''; + rerender = false; + if (attrs.stripBr && attrs.stripBr !== "false") { + html = html.replace(/
$/, ''); + } + if (attrs.noLineBreaks && attrs.noLineBreaks !== "false") { + html = html.replace(/
/g, '').replace(/
/g, '').replace(/<\/div>/g, ''); + rerender = true; + } + ngModel.$setViewValue(html); + if (rerender) { + ngModel.$render(); + } + if (html === '') { + elmt.blur(); + return elmt.focus(); } - return ngModel.$setViewValue(html); }); }); old_render = ngModel.$render; diff --git a/bower.json b/bower.json index 31419c6..3083ec1 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { "name": "angular-contenteditable" -, "version": "0.2.0" +, "version": "0.3.0" , "main": "angular-contenteditable.js" , "ignore": [ ".*" diff --git a/package.json b/package.json index 717469e..6520e3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-contenteditable", - "version": "0.2.0", + "version": "0.3.0", "description": "angular extensions", "main": "angular-contenteditable.js", "directories": { diff --git a/src/contenteditable.coffee b/src/contenteditable.coffee index f5083fc..231cea8 100644 --- a/src/contenteditable.coffee +++ b/src/contenteditable.coffee @@ -6,8 +6,17 @@ angular.module('contenteditable', []) elmt.bind 'input', (e) -> scope.$apply -> html = elmt.html() - html = '' if attrs.stripBr && attrs.stripBr != "false" && html == '
' + rerender = false + if attrs.stripBr && attrs.stripBr != "false" + html = html.replace /
$/, '' + if attrs.noLineBreaks && attrs.noLineBreaks != "false" + html = html.replace(/
/g, '').replace(/
/g, '').replace(/<\/div>/g, '') + rerender = true ngModel.$setViewValue(html) + ngModel.$render() if rerender + if html == '' # the cursor if the contents is emty, so need to refocus + elmt.blur() + elmt.focus() # model -> view old_render = ngModel.$render # save for later diff --git a/test/fixtures/no-line-breaks.html b/test/fixtures/no-line-breaks.html new file mode 100644 index 0000000..dd2fca4 --- /dev/null +++ b/test/fixtures/no-line-breaks.html @@ -0,0 +1,34 @@ + + + + Simple + + + + + + + +
+ + + something + +
+
+ +
{{ model }}
+
+
+ +