From 81abc39929bac55f8e385f265beecee17d669fe7 Mon Sep 17 00:00:00 2001 From: Caitlin Potter Date: Tue, 14 Jul 2015 19:53:04 -0500 Subject: [PATCH] feat(http): add support for JSONP requests Closes #2905 Closes #2818 --- modules/angular2/http.ts | 16 +- modules/angular2/src/facade/lang.dart | 4 + modules/angular2/src/facade/lang.ts | 4 + .../src/http/backends/browser_jsonp.dart | 59 ++++++ .../src/http/backends/browser_jsonp.ts | 48 +++++ .../src/http/backends/jsonp_backend.ts | 97 ++++++++++ modules/angular2/src/http/http.ts | 31 ++- modules/angular2/src/http/http_utils.dart | 7 + modules/angular2/src/http/http_utils.ts | 1 + modules/angular2/src/http/static_response.ts | 10 +- .../test/http/backends/jsonp_backend_spec.ts | 177 ++++++++++++++++++ .../examples/e2e_test/jsonp/jsonp_spec.dart | 5 + modules/examples/e2e_test/jsonp/jsonp_spec.ts | 23 +++ modules/examples/src/jsonp/index.html | 11 ++ modules/examples/src/jsonp/index.ts | 12 ++ modules/examples/src/jsonp/index_dynamic.html | 11 ++ modules/examples/src/jsonp/index_dynamic.ts | 13 ++ modules/examples/src/jsonp/jsonp_comp.dart | 23 +++ modules/examples/src/jsonp/jsonp_comp.ts | 23 +++ modules/examples/src/jsonp/people.json | 2 + tools/broccoli/trees/browser_tree.ts | 1 + 21 files changed, 566 insertions(+), 12 deletions(-) create mode 100644 modules/angular2/src/http/backends/browser_jsonp.dart create mode 100644 modules/angular2/src/http/backends/browser_jsonp.ts create mode 100644 modules/angular2/src/http/backends/jsonp_backend.ts create mode 100644 modules/angular2/src/http/http_utils.dart create mode 100644 modules/angular2/src/http/http_utils.ts create mode 100644 modules/angular2/test/http/backends/jsonp_backend_spec.ts create mode 100644 modules/examples/e2e_test/jsonp/jsonp_spec.dart create mode 100644 modules/examples/e2e_test/jsonp/jsonp_spec.ts create mode 100644 modules/examples/src/jsonp/index.html create mode 100644 modules/examples/src/jsonp/index.ts create mode 100644 modules/examples/src/jsonp/index_dynamic.html create mode 100644 modules/examples/src/jsonp/index_dynamic.ts create mode 100644 modules/examples/src/jsonp/jsonp_comp.dart create mode 100644 modules/examples/src/jsonp/jsonp_comp.ts create mode 100644 modules/examples/src/jsonp/people.json diff --git a/modules/angular2/http.ts b/modules/angular2/http.ts index 2e711aba46..5f44a13a83 100644 --- a/modules/angular2/http.ts +++ b/modules/angular2/http.ts @@ -5,9 +5,11 @@ * class. */ import {bind, Binding} from 'angular2/di'; -import {Http} from 'angular2/src/http/http'; +import {Http, Jsonp} from 'angular2/src/http/http'; import {XHRBackend, XHRConnection} from 'angular2/src/http/backends/xhr_backend'; +import {JSONPBackend, JSONPConnection} from 'angular2/src/http/backends/jsonp_backend'; import {BrowserXhr} from 'angular2/src/http/backends/browser_xhr'; +import {BrowserJsonp} from 'angular2/src/http/backends/browser_jsonp'; import {BaseRequestOptions, RequestOptions} from 'angular2/src/http/base_request_options'; import {ConnectionBackend} from 'angular2/src/http/interfaces'; @@ -26,7 +28,8 @@ export { export {BaseRequestOptions, RequestOptions} from 'angular2/src/http/base_request_options'; export {BaseResponseOptions, ResponseOptions} from 'angular2/src/http/base_response_options'; export {XHRBackend, XHRConnection} from 'angular2/src/http/backends/xhr_backend'; -export {Http} from 'angular2/src/http/http'; +export {JSONPBackend, JSONPConnection} from 'angular2/src/http/backends/jsonp_backend'; +export {Http, Jsonp} from 'angular2/src/http/http'; export {Headers} from 'angular2/src/http/headers'; @@ -65,3 +68,12 @@ export var httpInjectables: List = [ bind(ResponseOptions).toClass(BaseResponseOptions), Http ]; + +export var jsonpInjectables: List = [ + bind(ConnectionBackend) + .toClass(JSONPBackend), + BrowserJsonp, + bind(RequestOptions).toClass(BaseRequestOptions), + bind(ResponseOptions).toClass(BaseResponseOptions), + Jsonp +]; diff --git a/modules/angular2/src/facade/lang.dart b/modules/angular2/src/facade/lang.dart index 1b555e62f3..7f64937600 100644 --- a/modules/angular2/src/facade/lang.dart +++ b/modules/angular2/src/facade/lang.dart @@ -190,6 +190,10 @@ class BaseException extends Error { } } +Error makeTypeError([String message = ""]) { + return new BaseException(message); +} + const _NAN_KEY = const Object(); // Dart can have identical(str1, str2) == false while str1 == str2 diff --git a/modules/angular2/src/facade/lang.ts b/modules/angular2/src/facade/lang.ts index 1bf4e4dd78..03402316cf 100644 --- a/modules/angular2/src/facade/lang.ts +++ b/modules/angular2/src/facade/lang.ts @@ -15,6 +15,10 @@ export class BaseException extends Error { toString(): string { return this.message; } } +export function makeTypeError(message?: string): Error { + return new TypeError(message); +} + export var Math = _global.Math; export var Date = _global.Date; diff --git a/modules/angular2/src/http/backends/browser_jsonp.dart b/modules/angular2/src/http/backends/browser_jsonp.dart new file mode 100644 index 0000000000..9bf4ef2ef0 --- /dev/null +++ b/modules/angular2/src/http/backends/browser_jsonp.dart @@ -0,0 +1,59 @@ +library angular2.src.http.backends.browser_jsonp; +import 'package:angular2/di.dart'; +import 'dart:html' show document; +import 'dart:js' show context, JsObject, JsArray; + +int _nextRequestId = 0; +const JSONP_HOME = '__ng_jsonp__'; + +var _jsonpConnections = null; + +JsObject _getJsonpConnections() { + if (_jsonpConnections == null) { + _jsonpConnections = context[JSONP_HOME] = new JsObject(context['Object']); + } + return _jsonpConnections; +} + +// Make sure not to evaluate this in a non-browser environment! +@Injectable() +class BrowserJsonp { + // Construct a