OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Patch file for the dart:async library. | 5 // Patch file for the dart:async library. |
6 | 6 |
7 import 'dart:_isolate_helper' show IsolateNatives, TimerImpl; | 7 import 'dart:_isolate_helper' show IsolateNatives, TimerImpl; |
8 import 'dart:_foreign_helper' show JS, DART_CLOSURE_TO_JS; | 8 import 'dart:_foreign_helper' show JS, DART_CLOSURE_TO_JS; |
9 | 9 |
10 patch Timer _createTimer(Duration duration, void callback()) { | 10 patch Timer _createTimer(Duration duration, void callback()) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 int index = uri.lastIndexOf('/'); | 64 int index = uri.lastIndexOf('/'); |
65 uri = '${uri.substring(0, index + 1)}part.js'; | 65 uri = '${uri.substring(0, index + 1)}part.js'; |
66 } | 66 } |
67 // Create a new function to avoid getting access to current function | 67 // Create a new function to avoid getting access to current function |
68 // context. | 68 // context. |
69 JS('void', '(new Function(#))()', 'load("$uri")'); | 69 JS('void', '(new Function(#))()', 'load("$uri")'); |
70 return true; | 70 return true; |
71 }); | 71 }); |
72 } | 72 } |
73 | 73 |
74 Completer completer = new Completer<bool>(); | 74 return _loadedLibraries[libraryName] = new Future<bool>(() { |
75 _loadedLibraries[libraryName] = completer.future; | 75 Completer completer = new Completer<bool>(); |
76 try { | |
77 if (uri == null) { | 76 if (uri == null) { |
78 uri = IsolateNatives.thisScript; | 77 uri = IsolateNatives.thisScript; |
79 int index = uri.lastIndexOf('/'); | 78 int index = uri.lastIndexOf('/'); |
80 uri = '${uri.substring(0, index + 1)}part.js'; | 79 uri = '${uri.substring(0, index + 1)}part.js'; |
81 } | 80 } |
82 | 81 |
83 // Inject a script tag. | 82 // Inject a script tag. |
84 var script = JS('', 'document.createElement("script")'); | 83 var script = JS('', 'document.createElement("script")'); |
85 JS('', '#.type = "text/javascript"', script); | 84 JS('', '#.type = "text/javascript"', script); |
86 JS('', '#.async = "async"', script); | |
87 JS('', '#.src = #', script, uri); | 85 JS('', '#.src = #', script, uri); |
88 var onLoad = JS('', '#.bind(null, #)', | 86 var onLoad = JS('', '#.bind(null, #)', |
89 DART_CLOSURE_TO_JS(_onDeferredLibraryLoad), completer); | 87 DART_CLOSURE_TO_JS(_onDeferredLibraryLoad), completer); |
90 JS('', '#.addEventListener("load", #, false)', script, onLoad); | 88 JS('', '#.addEventListener("load", #, false)', script, onLoad); |
91 JS('', 'document.body.appendChild(#)', script); | 89 JS('', 'document.body.appendChild(#)', script); |
92 } catch (e, trace) { | 90 |
93 completer.completeError(e, trace); | 91 return completer.future; |
94 } | 92 }); |
95 return completer.future; | |
96 } | 93 } |
97 | 94 |
98 /// Used to implement deferred loading. Used as callback on "load" | 95 /// Used to implement deferred loading. Used as callback on "load" |
99 /// event above in [load]. | 96 /// event above in [load]. |
100 _onDeferredLibraryLoad(Completer<bool> completer, event) { | 97 _onDeferredLibraryLoad(Completer<bool> completer, event) { |
101 completer.complete(true); | 98 completer.complete(true); |
102 } | 99 } |
103 | 100 |
104 bool get _hasDocument => JS('String', 'typeof document') == 'object'; | 101 bool get _hasDocument => JS('String', 'typeof document') == 'object'; |
OLD | NEW |