From 9ee2cdff44e7d496774b340de816344126c457b3 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 22 Nov 2011 21:28:39 -0800 Subject: refactor(directives): connect new compiler - turn everything into a directive --- src/service/compiler.js | 6 +-- src/service/filter.js | 1 - src/service/filter/filter.js | 6 +-- src/service/filter/filters.js | 118 +++--------------------------------------- src/service/filter/orderBy.js | 2 +- 5 files changed, 15 insertions(+), 118 deletions(-) (limited to 'src/service') diff --git a/src/service/compiler.js b/src/service/compiler.js index 6185c909..c663baac 100644 --- a/src/service/compiler.js +++ b/src/service/compiler.js @@ -33,7 +33,7 @@ // watch the 'compile' expression for changes return scope.$eval(attrs.compile); }, - function(scope, value) { + function(value) { // when the 'compile' expression changes // assign it into the current DOM element.html(value); @@ -631,7 +631,7 @@ function $CompileProvider($provide) { bindings = parent.data('$binding') || []; bindings.push(interpolateFn); parent.data('$binding', bindings).addClass('ng-binding'); - scope.$watch(interpolateFn, function(scope, value) { + scope.$watch(interpolateFn, function(value) { node[0].nodeValue = value; }); }) @@ -656,7 +656,7 @@ function $CompileProvider($provide) { compile: function(element, attr) { if (interpolateFn) { return function(scope, element, attr) { - scope.$watch(interpolateFn, function(scope, value){ + scope.$watch(interpolateFn, function(value) { attr.$set(name, value); }); }; diff --git a/src/service/filter.js b/src/service/filter.js index 2947d84b..4ed3f620 100644 --- a/src/service/filter.js +++ b/src/service/filter.js @@ -94,7 +94,6 @@ function $FilterProvider($provide) { register('currency', currencyFilter); register('date', dateFilter); register('filter', filterFilter); - register('html', htmlFilter); register('json', jsonFilter); register('limitTo', limitToFilter); register('linky', linkyFilter); diff --git a/src/service/filter/filter.js b/src/service/filter/filter.js index 61cfc80f..49960546 100644 --- a/src/service/filter/filter.js +++ b/src/service/filter/filter.js @@ -64,17 +64,17 @@ it('should search across all fields when filtering with a string', function() { input('searchText').enter('m'); - expect(repeater('#searchTextResults tr', 'friend in friends').column('name')). + expect(repeater('#searchTextResults tr', 'friend in friends').column('friend.name')). toEqual(['Mary', 'Mike', 'Adam']); input('searchText').enter('76'); - expect(repeater('#searchTextResults tr', 'friend in friends').column('name')). + expect(repeater('#searchTextResults tr', 'friend in friends').column('friend.name')). toEqual(['John', 'Julie']); }); it('should search in specific fields when filtering with a predicate object', function() { input('search.$').enter('i'); - expect(repeater('#searchObjResults tr', 'friend in friends').column('name')). + expect(repeater('#searchObjResults tr', 'friend in friends').column('friend.name')). toEqual(['Mary', 'Mike', 'Julie']); }); diff --git a/src/service/filter/filters.js b/src/service/filter/filters.js index 69bfbacf..58a3a869 100644 --- a/src/service/filter/filters.js +++ b/src/service/filter/filters.js @@ -385,7 +385,7 @@ function dateFilter($locale) { it('should jsonify filtered objects', function() { - expect(binding('| json')).toBe('{\n "name":"value"}'); + expect(binding("{'name':'value'}")).toBe('{\n "name":"value"}'); }); @@ -420,108 +420,6 @@ var lowercaseFilter = valueFn(lowercase); var uppercaseFilter = valueFn(uppercase); -/** - * @ngdoc filter - * @name angular.module.ng.$filter.html - * @function - * - * @description - * Prevents the input from getting escaped by angular. By default the input is sanitized and - * inserted into the DOM as is. - * - * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are - * then serialized back to properly escaped html string. This means that no unsafe input can make - * it into the returned string, however, since our parser is more strict than a typical browser - * parser, it's possible that some obscure input, which would be recognized as valid HTML by a - * browser, won't make it through the sanitizer. - * - * If you hate your users, you may call the filter with optional 'unsafe' argument, which bypasses - * the html sanitizer, but makes your application vulnerable to XSS and other attacks. Using this - * option is strongly discouraged and should be used only if you absolutely trust the input being - * filtered and you can't get the content through the sanitizer. - * - * @param {string} html Html input. - * @param {string=} option If 'unsafe' then do not sanitize the HTML input. - * @returns {string} Sanitized or raw html. - * - * @example - - - -
- Snippet: - - - - - - - - - - - - - - - - - - - - - -
FilterSourceRendered
html filter -
<div ng:bind="snippet | html">
</div>
-
-
-
no filter
<div ng:bind="snippet">
</div>
unsafe html filter
<div ng:bind="snippet | html:'unsafe'">
</div>
-
-
- - it('should sanitize the html snippet ', function() { - expect(using('#html-filter').binding('snippet | html')). - toBe('

an html\nclick here\nsnippet

'); - }); - - it('should escape snippet without any filter', function() { - expect(using('#escaped-html').binding('snippet')). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should inline raw snippet if filtered as unsafe', function() { - expect(using('#html-unsafe-filter').binding("snippet | html:'unsafe'")). - toBe("

an html\n" + - "click here\n" + - "snippet

"); - }); - - it('should update', function() { - input('snippet').enter('new text'); - expect(using('#html-filter').binding('snippet | html')).toBe('new text'); - expect(using('#escaped-html').binding('snippet')).toBe("new <b>text</b>"); - expect(using('#html-unsafe-filter').binding("snippet | html:'unsafe'")).toBe('new text'); - }); -
-
- */ -//TODO(misko): turn sensitization into injectable service -function htmlFilter() { - return function(html, option){ - return new HTML(html, option); - }; -} - - /** * @ngdoc filter * @name angular.module.ng.$filter.linky @@ -558,10 +456,10 @@ function htmlFilter() { linky filter -
<div ng:bind="snippet | linky">
</div>
+
<div ng:bind-html="snippet | linky">
</div>
-
+
@@ -574,10 +472,10 @@ function htmlFilter() { it('should linkify the snippet with urls', function() { expect(using('#linky-filter').binding('snippet | linky')). - toBe('Pretty text with some links:\n' + - 'http://angularjs.org/,\n' + - 'us@somewhere.org,\n' + - 'another@somewhere.org,\n' + + toBe('Pretty text with some links: ' + + 'http://angularjs.org/, ' + + 'us@somewhere.org, ' + + 'another@somewhere.org, ' + 'and one more: ftp://127.0.0.1/.'); }); @@ -624,6 +522,6 @@ function linkyFilter() { raw = raw.substring(i + match[0].length); } writer.chars(raw); - return new HTML(html.join('')); + return html.join(''); }; }; diff --git a/src/service/filter/orderBy.js b/src/service/filter/orderBy.js index c67d2769..e7528a4b 100644 --- a/src/service/filter/orderBy.js +++ b/src/service/filter/orderBy.js @@ -63,7 +63,7 @@ it('should be reverse ordered by aged', function() { - expect(binding('predicate')).toBe('Sorting predicate = -age; reverse = '); + expect(binding('predicate')).toBe('-age'); expect(repeater('table.friend', 'friend in friends').column('friend.age')). toEqual(['35', '29', '21', '19', '10']); expect(repeater('table.friend', 'friend in friends').column('friend.name')). -- cgit v1.2.3