| Index: third_party/pkg/angular/lib/filter/filter.dart
|
| diff --git a/third_party/pkg/angular/lib/filter/filter.dart b/third_party/pkg/angular/lib/filter/filter.dart
|
| deleted file mode 100644
|
| index 1203466dcfa79b20c6a1784bf1b6164e137a3cd4..0000000000000000000000000000000000000000
|
| --- a/third_party/pkg/angular/lib/filter/filter.dart
|
| +++ /dev/null
|
| @@ -1,211 +0,0 @@
|
| -part of angular.filter;
|
| -
|
| -// Too bad you can't stick typedef's inside a class.
|
| -typedef bool Predicate(e);
|
| -typedef bool Equals(a, b);
|
| -
|
| -/**
|
| - * Selects a subset of items from the provided [List] and returns it as a new
|
| - * [List].
|
| - *
|
| - * In addition to the input list (implicit in an Angular expression syntax),
|
| - * this filter takes 1 required and 1 optional parameter. They are:
|
| - *
|
| - * - `expression` (required) - one of [Map], [Function], [String], [bool], [num]
|
| - * - `comparator` (optional)
|
| - *
|
| - * <br>
|
| - *
|
| - * # expression
|
| - *
|
| - * can be one of:
|
| - *
|
| - * - [String], [bool] and [num]: Only items in the List that directly
|
| - * match this expression, items that are Maps with any value matching this
|
| - * item and items that are Lists containing a matching items are returned.
|
| - *
|
| - * - [Map]: This defines a pattern map. Filters specific properties on objects
|
| - * contained in the input List. For example `{name:"M", phone:"1"}` predicate
|
| - * will return a list of items which have property `name` containing "M" and
|
| - * property `phone` containing "1". A special property name, `$`, can be used
|
| - * (as in `{$: "text"}`) to accept a match against any property of the object.
|
| - * That's equivalent to the simple substring match with a `String` as
|
| - * described above.
|
| - *
|
| - * - [Function]: This allows you to supply a custom function to filter the
|
| - * List. The function is called for each element of the List. The returned
|
| - * List contains exactly those elements for which this function returned
|
| - * `true`.
|
| - *
|
| - * <br>
|
| - *
|
| - * # comparator
|
| - *
|
| - * can be one of:
|
| - *
|
| - * - `bool comparator(expected, actual)`: The function will be called with the
|
| - * object value and the predicate value to compare and should return true if
|
| - * the item should be included in filtered result.
|
| - *
|
| - * - `true`: Specifies that only identical objects matching the expression
|
| - * exactly should be considered matches. Two strings are considered identical
|
| - * if they are equal. Two numbers are considered identical if they are either
|
| - * equal or both are `NaN`. All other objects are identical iff
|
| - * identical(expected, actual) is true.
|
| - *
|
| - * - `false|null`: Specifies case insensitive substring matching.
|
| - *
|
| - * <br>
|
| - *
|
| - * # Example ([view in plunker](http://plnkr.co/edit/6Mxz6r?p=info)):
|
| - *
|
| - * // main.dart
|
| - * import 'package:angular/angular.dart';
|
| - *
|
| - * @NgDirective(selector: '[toy-data]')
|
| - * class ToyData {
|
| - * ToyData(Scope scope) {
|
| - * scope.friends = [{'name':'John', 'phone':'555-1276'},
|
| - * {'name':'Mary', 'phone':'800-BIG-MARY'},
|
| - * {'name':'Mike', 'phone':'555-4321'},
|
| - * {'name':'Adam', 'phone':'555-5678'},
|
| - * {'name':'Julie', 'phone':'555-8765'},
|
| - * {'name':'Juliette', 'phone':'555-5678'}];
|
| - * }
|
| - * }
|
| - *
|
| - * main() {
|
| - * ngBootstrap([new AngularModule()..type(ToyData)], 'html');
|
| - * }
|
| - *
|
| - * and
|
| - *
|
| - * <!-- index.html -->
|
| - * <html>
|
| - * <head>
|
| - * <script src="packages/browser/dart.js"></script>
|
| - * <script src="main.dart" type="application/dart"></script>
|
| - * </head>
|
| - * <body toy-data>
|
| - * Search: <input type="text" ng-model="searchText">
|
| - * <table id="searchTextResults">
|
| - * <tr><th>Name</th><th>Phone</th></tr>
|
| - * <tr ng-repeat="friend in friends | filter:searchText">
|
| - * <td>{{friend.name}}</td>
|
| - * <td>{{friend.phone}}</td>
|
| - * </tr>
|
| - * </table>
|
| - * <hr>
|
| - * Any: <input type="text" ng-model="search.$"> <br>
|
| - * Name only <input type="text" ng-model="search.name"><br>
|
| - * Phone only <input type="text" ng-model="search.phone"><br>
|
| - * <table id="searchObjResults">
|
| - * <tr><th>Name</th><th>Phone</th></tr>
|
| - * <tr ng-repeat="friend in friends | filter:search:strict">
|
| - * <td>{{friend.name}}</td>
|
| - * <td>{{friend.phone}}</td>
|
| - * </tr>
|
| - * </table>
|
| - * </body>
|
| - * </html>
|
| - */
|
| -@NgFilter(name: 'filter')
|
| -class FilterFilter {
|
| - Parser _parser;
|
| - Equals _comparator;
|
| - Equals _stringComparator;
|
| -
|
| - static _nop(e) => e;
|
| - static _ensureBool(val) => (val is bool && val);
|
| - static _isSubstringCaseInsensitive(String a, String b) =>
|
| - a != null && b != null && a.toLowerCase().contains(b.toLowerCase());
|
| - static _identical(a, b) => identical(a, b) ||
|
| - (a is String && b is String && a == b) ||
|
| - (a is num && b is num && a.isNaN && b.isNaN);
|
| -
|
| - FilterFilter(this._parser);
|
| -
|
| - void _configureComparator(var comparatorExpression) {
|
| - if (comparatorExpression == null || comparatorExpression == false) {
|
| - _stringComparator = _isSubstringCaseInsensitive;
|
| - _comparator = _defaultComparator;
|
| - } else if (comparatorExpression == true) {
|
| - _stringComparator = _identical;
|
| - _comparator = _defaultComparator;
|
| - } else if (comparatorExpression is Equals) {
|
| - _comparator = (a, b) => _ensureBool(comparatorExpression(a, b));
|
| - } else {
|
| - _comparator = null;
|
| - }
|
| - }
|
| -
|
| - // Preconditions
|
| - // - what: NOT a Map
|
| - // - item: neither a Map nor a List
|
| - bool _defaultComparator(var item, var what) {
|
| - if (what == null) {
|
| - return false;
|
| - } else if (item == null) {
|
| - return what == '';
|
| - } else if (what is String && what.startsWith('!')) {
|
| - return !_search(item, what.substring(1));
|
| - } else if (item is String) {
|
| - return (what is String) && _stringComparator(item, what);
|
| - } else if (item is bool) {
|
| - if (what is bool) {
|
| - return item == what;
|
| - } else if (what is String) {
|
| - what = (what as String).toLowerCase();
|
| - return item ? (what == "true" || what == "yes" || what == "on")
|
| - : (what == "false" || what == "no" || what == "off");
|
| - } else {
|
| - return false;
|
| - }
|
| - } else if (item is num) {
|
| - if (what is num) {
|
| - return item == what || (item.isNaN && what.isNaN);
|
| - } else {
|
| - return what is String && _stringComparator('$item', what);
|
| - }
|
| - } else {
|
| - return false; // Unsupported item type.
|
| - }
|
| - }
|
| -
|
| - bool _search(var item, var what) {
|
| - if (what is Map) {
|
| - return what.keys.every((key) => _search(
|
| - (key == r'$') ? item : _parser(key).eval(item), what[key]));
|
| - } else if (item is Map) {
|
| - return item.keys.any((k) => !k.startsWith(r'$') && _search(item[k], what));
|
| - } else if (item is List) {
|
| - return item.any((i) => _search(i, what));
|
| - } else {
|
| - return _comparator(item, what);
|
| - }
|
| - }
|
| -
|
| - Predicate _toPredicate(var expression) {
|
| - if (expression is Predicate) {
|
| - return (item) => _ensureBool(expression(item));
|
| - } else if (_comparator == null) {
|
| - return (item) => false; // Bad comparator → no items for you!
|
| - } else {
|
| - return (item) => _search(item, expression);
|
| - }
|
| - }
|
| -
|
| - List call(List items, var expression, [var comparator]) {
|
| - if (expression == null) {
|
| - return items.toList(growable: false); // Missing expression → passthrough.
|
| - } else if (expression is! Map && expression is! Function &&
|
| - expression is! String && expression is! bool &&
|
| - expression is! num) {
|
| - return const []; // Bad expression → no items for you!
|
| - }
|
| - _configureComparator(comparator);
|
| - List results = items.where(_toPredicate(expression)).toList(growable: false);
|
| - _comparator = null;
|
| - return results;
|
| - }
|
| -}
|
|
|