Index: packages/js/README.md |
diff --git a/packages/js/README.md b/packages/js/README.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3ba66d1c479a7994039e8713f6cef7b7df543686 |
--- /dev/null |
+++ b/packages/js/README.md |
@@ -0,0 +1,107 @@ |
+Methods and annotations to specify interoperability with JavaScript APIs. |
+ |
+*This packages requires Dart SDK 1.13.0.* |
+ |
+*This is beta software. Please files [issues].* |
+ |
+### Adding the dependency |
+ |
+Add the following to your `pubspec.yaml`: |
+ |
+```yaml |
+dependencies: |
+ js: ^0.6.0 |
+``` |
+ |
+### Example |
+ |
+See the [Chart.js Dart API](https://github.com/google/chartjs.dart/) for an |
+end-to-end example. |
+ |
+### Usage |
+ |
+#### Calling methods |
+ |
+```dart |
+// Calls invoke JavaScript `JSON.stringify(obj)`. |
+@JS("JSON.stringify") |
+external String stringify(obj); |
+``` |
+ |
+#### Classes and Namespaces |
+ |
+```dart |
+@JS('google.maps') |
+library maps; |
+ |
+// Invokes the JavaScript getter `google.maps.map`. |
+external Map get map; |
+ |
+// `new Map` invokes JavaScript `new google.maps.Map(location)` |
+@JS() |
+class Map { |
+ external Map(Location location); |
+ external Location getLocation(); |
+} |
+ |
+// `new Location(...)` invokes JavaScript `new google.maps.LatLng(...)` |
+// |
+// We recommend against using custom JavaScript names whenever |
+// possible. It is easier for users if the JavaScript names and Dart names |
+// are consistent. |
+@JS("LatLng") |
+class Location { |
+ external Location(num lat, num lng); |
+} |
+``` |
+ |
+#### JavaScript object literals |
+ |
+Many JavaScript APIs take an object literal as an argument. For example: |
+```js |
+// JavaScript |
+printOptions({responsive: true}); |
+``` |
+ |
+If you want to use `printOptions` from Dart, you cannot simply pass a Dart `Map` |
+object – they are are "opaque" in JavaScript. |
+ |
+ |
+Instead, create a Dart class with both the `@JS()` and |
+`@anonymous` annotations. |
+ |
+```dart |
+// Dart |
+void main() { |
+ printOptions(new Options(responsive: true)); |
+} |
+ |
+@JS() |
+external printOptions(Options options); |
+ |
+@JS() |
+@anonymous |
+class Options { |
+ external bool get responsive; |
+ |
+ external factory Options({bool responsive}); |
+} |
+``` |
+ |
+#### Passing functions to JavaScript. |
+ |
+If you are passing a Dart function to a JavaScript API, you must wrap it using |
+`allowInterop` or `allowInteropCaptureThis`. |
+ |
+## Contributing and Filing Bugs |
+ |
+Please file bugs and features requests on the [Github issue tracker][issues]. |
+ |
+We also love and accept community contributions, from API suggestions to pull requests. |
+Please file an issue before beginning work so we can discuss the design and implementation. |
+We are trying to create issues for all current and future work, so if something there intrigues you (or you need it!) join in on the discussion. |
+ |
+Code contributors must sign the |
+[Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1). |
+ |
+[issues]: https://goo.gl/j3rzs0 |