| Index: packages/js_util/src/js_util_base.dart
|
| diff --git a/packages/js_util/src/js_util_base.dart b/packages/js_util/src/js_util_base.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7f35991c98c4c8d500bf9c9aedb2fdb764b9b082
|
| --- /dev/null
|
| +++ b/packages/js_util/src/js_util_base.dart
|
| @@ -0,0 +1,59 @@
|
| +@JS()
|
| +library js_util.base;
|
| +
|
| +import 'package:js/js.dart';
|
| +import 'package:quiver_iterables/iterables.dart';
|
| +
|
| +// js_util library uses the technique described in
|
| +// https://github.com/dart-lang/sdk/issues/25053
|
| +// because dart2js compiler does not support [] operator.
|
| +
|
| +@JS()
|
| +@anonymous
|
| +class PropertyDescription {
|
| + external factory PropertyDescription(
|
| + {bool configurable, bool enumerable, value, bool writable});
|
| +}
|
| +
|
| +/// A wrapper for https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
|
| +@JS('Object.defineProperty')
|
| +external void defineProperty(o, String prop, PropertyDescription description);
|
| +
|
| +/// Returns `o[prop]`.
|
| +@JS('JsUtil.getValue')
|
| +external getValue(o, String prop);
|
| +
|
| +/// Creates a new JavaScript object.
|
| +@JS('JsUtil.newObject')
|
| +external newObject();
|
| +
|
| +/// Performs `o[key] = value`.
|
| +void setValue(o, String key, value) {
|
| + defineProperty(o, key, new PropertyDescription(value: value));
|
| +}
|
| +
|
| +/// Converts a Dart object to a JavaScript object.
|
| +///
|
| +/// For example, you can convert a Dart [Map] to a JavaScript object.
|
| +///
|
| +/// final jsObj = toJS({
|
| +/// 'people': [
|
| +/// {'firstName': 'Kwang Yul', 'lastName': 'Seo'},
|
| +/// {'firstName': 'DoHyung', 'lastName': 'Kim'},
|
| +/// {'firstName': 'Kyusun', 'lastName': 'Kim'}
|
| +/// ]
|
| +/// });
|
| +///
|
| +toJS(o) {
|
| + if (o is Map) {
|
| + final newObj = newObject();
|
| + for (final keyValuePair in zip([o.keys, o.values])) {
|
| + setValue(newObj, keyValuePair[0], toJS(keyValuePair[1]));
|
| + }
|
| + return newObj;
|
| + } else if (o is List) {
|
| + return o.map((e) => toJS(e)).toList();
|
| + } else {
|
| + return o;
|
| + }
|
| +}
|
|
|