Chromium Code Reviews| Index: lib/src/js_list.dart |
| diff --git a/lib/src/js_list.dart b/lib/src/js_list.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d8a419f3da705944ab9818007f472a215d14414b |
| --- /dev/null |
| +++ b/lib/src/js_list.dart |
| @@ -0,0 +1,79 @@ |
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +library js.js_list; |
| + |
| +import 'dart:collection'; |
| +import 'dart:js'; |
| + |
| +import 'package:js/js.dart'; |
| + |
| +/** |
| + * A [List] interface wrapper for [JsArray]s. |
| + * |
| + * Elements of this list are automatically converted to JavaScript with the |
| + * [toJs] function when added, and converted to Dart with the [toDart] funtion |
| + * when accessed. |
| + */ |
| +class JsList<E> extends ListBase { |
|
Siggi Cherem (dart-lang)
2014/10/07 20:41:41
ListBase<E>
alexandre.ardhuin
2014/10/08 09:00:49
+1
The commit in master does not contain this chan
|
| + JsArray _o; |
| + |
| + JsList.fromJsObject(JsObject o) : _o = o; |
| + |
| + @override |
| + int get length => _o.length; |
| + |
| + @override |
| + void set length(int length) { _o.length = length; } |
| + |
| + // TODO: add [E] as fallback type for toDart() |
| + @override |
| + E operator [](index) => toDart(_o[index]) as E; |
| + |
| + @override |
| + void operator []=(int index, E value) { |
| + _o[index] = toJs(value); |
| + } |
| + |
| + @override |
| + void add(E value) { |
| + _o.add(toJs(value)); |
| + } |
| + |
| + @override |
| + void addAll(Iterable<E> iterable) { |
| + _o.addAll(iterable.map(toJs)); |
| + } |
| + |
| + @override |
| + void sort([int compare(E a, E b)]) { |
| + final sortedList = toList()..sort(compare); |
| + setRange(0, sortedList.length, sortedList); |
| + } |
| + |
| + @override |
| + void insert(int index, E element) { |
| + _o.insert(index, toJs(element)); |
| + } |
| + |
| + @override |
| + E removeAt(int index) { |
| + // TODO: add [E] as fallback type for toDart() |
| + return toDart(_o.removeAt(index)) as E; |
| + } |
| + |
| + // TODO: add [E] as fallback type for toDart() |
| + @override |
| + E removeLast() => toDart(_o.removeLast()) as E; |
| + |
| + @override |
| + void setRange(int start, int end, List<E> iterable, [int startFrom = 0]) { |
|
alexandre.ardhuin
2014/10/08 09:00:49
"iterable" is an List<E> here but it is a Iterable
|
| + _o.setRange(start, end, iterable.map(toJs), startFrom); |
| + } |
| + |
| + @override |
| + void removeRange(int start, int end) { |
| + _o.removeRange(start, end); |
| + } |
| +} |