| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library trydart.main; |
| |
| import 'dart:html' show |
| HttpRequest, |
| LinkElement, |
| querySelector, |
| window; |
| |
| import 'dart:isolate' show |
| Isolate, |
| ReceivePort, |
| SendPort; |
| |
| import 'compilation.dart' show |
| compilerPort, |
| currentSource; |
| |
| import 'samples.dart' show |
| EXAMPLE_HELLO; |
| |
| import 'ui.dart' show |
| buildUI, |
| interaction, |
| observer; |
| |
| import 'user_option.dart' show |
| UserOption; |
| |
| import 'settings.dart' show |
| alwaysRunInIframe, |
| communicateViaBlobs; |
| |
| bool isBrowserIE() { |
| return window.navigator.userAgent.contains(' Trident/7.0;'); |
| } |
| |
| initHiddenSettings() { |
| alwaysRunInIframe.setIfNotInitialized(isBrowserIE); |
| communicateViaBlobs.setIfNotInitialized(() => !isBrowserIE()); |
| } |
| |
| int count = 0; |
| |
| main() { |
| UserOption.storage = window.localStorage; |
| if (currentSource == null) { |
| currentSource = EXAMPLE_HELLO; |
| } |
| |
| initHiddenSettings(); |
| |
| buildUI(); |
| ReceivePort port = new ReceivePort(); |
| Isolate.spawnUri( |
| Uri.base.resolve('compiler_isolate.dart.js'), |
| const <String>[], port.sendPort).then((Isolate isolate) { |
| LinkElement link = querySelector('link[rel="dart-sdk"]'); |
| String sdk = link.href; |
| print('Using Dart SDK: $sdk'); |
| int messageCount = 0; |
| SendPort sendPort; |
| port.listen((message) { |
| messageCount++; |
| switch (messageCount) { |
| case 1: |
| sendPort = message as SendPort; |
| sendPort.send([sdk, port.sendPort]); |
| break; |
| case 2: |
| // Acknowledged Receiving the SDK URI. |
| compilerPort = sendPort; |
| interaction.onMutation([], observer); |
| break; |
| default: |
| // TODO(ahe): Close [port]? |
| print('Unexpected message received: $message'); |
| break; |
| } |
| }); |
| }); |
| } |