Skip to content

Commit d39c7b6

Browse files
SimeonCSimeonC
SimeonC
authored and
SimeonC
committed
fix(taBind.$formatters): Fix an issue where unwrapped tags broke the textarea display
Fixes #566
1 parent d006ed0 commit d39c7b6

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

lib/taBind.js

+11-9
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
7575

7676
var _blankTest = _taBlankTest(_defaultTest);
7777

78+
var _ensureContentWrapped = function(value){
79+
if(_blankTest(value)) return value;
80+
var domTest = angular.element("<div>" + value + "</div>");
81+
if(domTest.children().length === 0){
82+
value = "<" + attrs.taDefaultWrap + ">" + value + "</" + attrs.taDefaultWrap + ">";
83+
}
84+
return value;
85+
};
86+
7887
if(attrs.taPaste) _pasteHandler = $parse(attrs.taPaste);
7988

8089
element.addClass('ta-bind');
@@ -235,7 +244,7 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
235244
_html += '\n' + _repeat('\t', tablevel-1) + listNode.outerHTML.substring(listNode.outerHTML.lastIndexOf('<'));
236245
return _html;
237246
};
238-
247+
ngModel.$formatters.unshift(_ensureContentWrapped);
239248
ngModel.$formatters.unshift(function(htmlValue){
240249
// tabulate the HTML so it looks nicer
241250
var _children = angular.element('<div>' + htmlValue + '</div>')[0].childNodes;
@@ -588,14 +597,7 @@ angular.module('textAngular.taBind', ['textAngular.factories', 'textAngular.DOM'
588597
ngModel.$parsers.unshift(_validity);
589598
// because textAngular is bi-directional (which is awesome) we need to also sanitize values going in from the server
590599
ngModel.$formatters.push(_sanitize);
591-
ngModel.$formatters.unshift(function(value){
592-
if(_blankTest(value)) return value;
593-
var domTest = angular.element("<div>" + value + "</div>");
594-
if(domTest.children().length === 0){
595-
value = "<" + attrs.taDefaultWrap + ">" + value + "</" + attrs.taDefaultWrap + ">";
596-
}
597-
return value;
598-
});
600+
ngModel.$formatters.unshift(_ensureContentWrapped);
599601
ngModel.$formatters.unshift(_validity);
600602
ngModel.$formatters.unshift(function(value){
601603
return ngModel.$undoManager.push(value || '');

test/taBind/taBind.$formatters.spec.js

+5
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,10 @@ describe('taBind.$formatters', function () {
3232
$rootScope.$digest();
3333
expect(element.val()).toBe('<ol>\n\t<li>Test Line 1</li>\n\t<ul>\n\t\t<li>Nested Line 1</li>\n\t\t<li>Nested Line 2</li>\n\t</ul>\n\t<li>Test Line 3</li>\n</ol>');
3434
});
35+
it('handles no tags (should wrap)', function(){
36+
$rootScope.html = 'Test Line 1';
37+
$rootScope.$digest();
38+
expect(element.val()).toBe('<p>Test Line 1</p>');
39+
});
3540
});
3641
});

0 commit comments

Comments
 (0)