From d39c7b63732b345b826068de4f9655d082d74262 Mon Sep 17 00:00:00 2001 From: SimeonC Date: Fri, 13 Mar 2015 18:29:16 +1300 Subject: [PATCH] fix(taBind.$formatters): Fix an issue where unwrapped tags broke the textarea display Fixes #566 --- lib/taBind.js | 20 +++++++++++--------- test/taBind/taBind.$formatters.spec.js | 5 +++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/taBind.js b/lib/taBind.js index e6076216..c5b63224 100644 --- a/lib/taBind.js +++ b/lib/taBind.js @@ -75,6 +75,15 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' var _blankTest = _taBlankTest(_defaultTest); + var _ensureContentWrapped = function(value){ + if(_blankTest(value)) return value; + var domTest = angular.element("
" + value + "
"); + if(domTest.children().length === 0){ + value = "<" + attrs.taDefaultWrap + ">" + value + ""; + } + return value; + }; + if(attrs.taPaste) _pasteHandler = $parse(attrs.taPaste); element.addClass('ta-bind'); @@ -235,7 +244,7 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' _html += '\n' + _repeat('\t', tablevel-1) + listNode.outerHTML.substring(listNode.outerHTML.lastIndexOf('<')); return _html; }; - + ngModel.$formatters.unshift(_ensureContentWrapped); ngModel.$formatters.unshift(function(htmlValue){ // tabulate the HTML so it looks nicer var _children = angular.element('
' + htmlValue + '
')[0].childNodes; @@ -588,14 +597,7 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM' ngModel.$parsers.unshift(_validity); // because textAngular is bi-directional (which is awesome) we need to also sanitize values going in from the server ngModel.$formatters.push(_sanitize); - ngModel.$formatters.unshift(function(value){ - if(_blankTest(value)) return value; - var domTest = angular.element("
" + value + "
"); - if(domTest.children().length === 0){ - value = "<" + attrs.taDefaultWrap + ">" + value + ""; - } - return value; - }); + ngModel.$formatters.unshift(_ensureContentWrapped); ngModel.$formatters.unshift(_validity); ngModel.$formatters.unshift(function(value){ return ngModel.$undoManager.push(value || ''); diff --git a/test/taBind/taBind.$formatters.spec.js b/test/taBind/taBind.$formatters.spec.js index 391a8515..c07e070d 100644 --- a/test/taBind/taBind.$formatters.spec.js +++ b/test/taBind/taBind.$formatters.spec.js @@ -32,5 +32,10 @@ describe('taBind.$formatters', function () { $rootScope.$digest(); expect(element.val()).toBe('
    \n\t
  1. Test Line 1
  2. \n\t\n\t
  3. Test Line 3
  4. \n
'); }); + it('handles no tags (should wrap)', function(){ + $rootScope.html = 'Test Line 1'; + $rootScope.$digest(); + expect(element.val()).toBe('

Test Line 1

'); + }); }); }); \ No newline at end of file