From 83695c5a657a60ea18ec5ac63c5c4b1a64e072dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ad=C3=A3o=20J=C3=BAnior?= Date: Tue, 16 Feb 2016 20:05:37 -0200 Subject: [PATCH 1/3] feat(): custom parameter --- lib/jsonpadding.dart | 5 +++-- lib/src/jsonp_call.dart | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/jsonpadding.dart b/lib/jsonpadding.dart index 02d7f6a..8d088c5 100644 --- a/lib/jsonpadding.dart +++ b/lib/jsonpadding.dart @@ -3,8 +3,9 @@ import 'src/jsonp_call.dart'; import 'dart:async'; -Future jsonp(dynamic uri) => new JsonpCall(uri).call(); +Future jsonp(dynamic uri, {String param}) => + new JsonpCall(uri, param: param).call(); class Jsonp { - Future get(dynamic uri) => jsonp(uri); + Future get(dynamic uri, {String param}) => jsonp(uri, param: param); } diff --git a/lib/src/jsonp_call.dart b/lib/src/jsonp_call.dart index 4bd1354..d163ade 100644 --- a/lib/src/jsonp_call.dart +++ b/lib/src/jsonp_call.dart @@ -12,8 +12,10 @@ class JsonpCall { final ScriptElement script = new ScriptElement(); final String callback = _createId(); Uri uri; + String _param = 'callback'; - JsonpCall(dynamic uri) { + JsonpCall(dynamic uri, {String param}) { + _param = param ?? _param; this.uri = _createUri(uri, callback); } @@ -36,7 +38,7 @@ class JsonpCall { Uri _createUri(dynamic uri, String callback) { uri = (uri is Uri) ? uri : Uri.parse(uri); Map parameters = new Map.from(uri.queryParameters); - parameters['callback'] = callback; + parameters[_param] = callback; return uri.replace(queryParameters: parameters); } } From 8972d12c218bf9d15ce7a174a950fddae445fd3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ad=C3=A3o=20J=C3=BAnior?= Date: Tue, 16 Feb 2016 20:26:07 -0200 Subject: [PATCH 2/3] feat(): default param to Jsonp instance --- lib/jsonpadding.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/jsonpadding.dart b/lib/jsonpadding.dart index 8d088c5..8db4fd5 100644 --- a/lib/jsonpadding.dart +++ b/lib/jsonpadding.dart @@ -7,5 +7,10 @@ Future jsonp(dynamic uri, {String param}) => new JsonpCall(uri, param: param).call(); class Jsonp { - Future get(dynamic uri, {String param}) => jsonp(uri, param: param); + final String param; + + Jsonp({this.param}); + + Future get(dynamic uri, {String param}) => + jsonp(uri, param: param ?? this.param); } From b43015b739139749f466b40b861d2bbf54ff6c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ad=C3=A3o=20J=C3=BAnior?= Date: Tue, 16 Feb 2016 21:16:59 -0200 Subject: [PATCH 3/3] feat(): timeout --- lib/jsonpadding.dart | 13 +++++++------ lib/src/jsonp_call.dart | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/jsonpadding.dart b/lib/jsonpadding.dart index 8db4fd5..369014b 100644 --- a/lib/jsonpadding.dart +++ b/lib/jsonpadding.dart @@ -1,16 +1,17 @@ // Copyright (c) 2016, . All rights reserved. Use of this source code // is governed by a BSD-style license that can be found in the LICENSE file. -import 'src/jsonp_call.dart'; import 'dart:async'; +import 'src/jsonp_call.dart'; -Future jsonp(dynamic uri, {String param}) => - new JsonpCall(uri, param: param).call(); +Future jsonp(dynamic uri, {String param, Duration timeout}) => + new JsonpCall(uri, param: param, timeout: timeout).call(); class Jsonp { final String param; + final Duration timeout; - Jsonp({this.param}); + Jsonp({this.param, this.timeout}); - Future get(dynamic uri, {String param}) => - jsonp(uri, param: param ?? this.param); + Future get(dynamic uri, {String param, Duration timeout}) => + jsonp(uri, param: param ?? this.param, timeout: timeout ?? this.timeout); } diff --git a/lib/src/jsonp_call.dart b/lib/src/jsonp_call.dart index d163ade..acaddf6 100644 --- a/lib/src/jsonp_call.dart +++ b/lib/src/jsonp_call.dart @@ -1,8 +1,8 @@ // Copyright (c) 2016, . All rights reserved. Use of this source code // is governed by a BSD-style license that can be found in the LICENSE file. +import 'dart:async'; import 'dart:html'; import 'dart:js'; -import 'dart:async'; int _requestId = 0; @@ -13,12 +13,16 @@ class JsonpCall { final String callback = _createId(); Uri uri; String _param = 'callback'; + final Duration timeout; + Timer _timer; - JsonpCall(dynamic uri, {String param}) { + JsonpCall(dynamic uri, {String param, this.timeout}) { _param = param ?? _param; this.uri = _createUri(uri, callback); } + bool get hasTimeout => timeout != null; + Future call() { Completer completer = new Completer(); context[callback] = completer.complete; @@ -26,11 +30,19 @@ class JsonpCall { script.onError.listen((_) { completer.completeError('Failed to load $uri'); }); + document.body.append(script); + + if (hasTimeout) { + _timer = new Timer(timeout, + () => completer.completeError(new TimeoutException(null, timeout))); + } + return completer.future.whenComplete(_cleanup); } void _cleanup() { + _timer?.cancel(); script.remove(); context.deleteProperty(callback); }