7520b0b5d7
R=kasperl@google.com Review URL: https://codereview.chromium.org//266293002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35788 260f80e4-7a28-3924-810f-c04153c831b5
97 lines
3.2 KiB
Dart
97 lines
3.2 KiB
Dart
// 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.cache;
|
|
|
|
import 'dart:async' show
|
|
Timer;
|
|
|
|
import 'dart:html' show
|
|
AnchorElement,
|
|
ApplicationCache,
|
|
Event,
|
|
MeterElement,
|
|
ProgressEvent,
|
|
window;
|
|
|
|
import 'ui.dart' show
|
|
cacheStatusElement;
|
|
|
|
/// Called when the window has finished loading.
|
|
void onLoad(Event event) {
|
|
if (!ApplicationCache.supported) return;
|
|
window.applicationCache.onUpdateReady.listen(updateCacheStatus);
|
|
window.applicationCache.onCached.listen(updateCacheStatus);
|
|
window.applicationCache.onChecking.listen(updateCacheStatus);
|
|
window.applicationCache.onDownloading.listen(updateCacheStatus);
|
|
window.applicationCache.onError.listen(updateCacheStatus);
|
|
window.applicationCache.onNoUpdate.listen(updateCacheStatus);
|
|
window.applicationCache.onObsolete.listen(updateCacheStatus);
|
|
window.applicationCache.onProgress.listen(onCacheProgress);
|
|
}
|
|
|
|
void onCacheProgress(Event event) {
|
|
if (event is ProgressEvent) {
|
|
// Firefox doesn't fire a ProgressEvent on cache progress. Just a plain
|
|
// Event with type == "progress".
|
|
if (event.lengthComputable) {
|
|
updateCacheStatusFromEvent(event);
|
|
return;
|
|
}
|
|
}
|
|
updateCacheStatus(null);
|
|
}
|
|
|
|
void updateCacheStatusFromEvent(ProgressEvent event) {
|
|
cacheStatusElement.nodes.clear();
|
|
cacheStatusElement.appendText('Downloading SDK ');
|
|
var progress = '${event.loaded} of ${event.total}';
|
|
if (MeterElement.supported) {
|
|
cacheStatusElement.append(
|
|
new MeterElement()
|
|
..appendText(progress)
|
|
..min = 0
|
|
..max = event.total
|
|
..value = event.loaded);
|
|
} else {
|
|
cacheStatusElement.appendText(progress);
|
|
}
|
|
}
|
|
|
|
String cacheStatus() {
|
|
if (!ApplicationCache.supported) return 'offline not supported';
|
|
int status = window.applicationCache.status;
|
|
if (status == ApplicationCache.CHECKING) return 'Checking for updates';
|
|
if (status == ApplicationCache.DOWNLOADING) return 'Downloading SDK';
|
|
if (status == ApplicationCache.IDLE) return 'Try Dart! works offline';
|
|
if (status == ApplicationCache.OBSOLETE) return 'OBSOLETE';
|
|
if (status == ApplicationCache.UNCACHED) return 'offline not available';
|
|
if (status == ApplicationCache.UPDATEREADY) return 'SDK downloaded';
|
|
return '?';
|
|
}
|
|
|
|
void updateCacheStatus(_) {
|
|
cacheStatusElement.nodes.clear();
|
|
int status = window.applicationCache.status;
|
|
if (status == ApplicationCache.UPDATEREADY) {
|
|
cacheStatusElement.appendText('New version of Try Dart! ready: ');
|
|
cacheStatusElement.append(
|
|
new AnchorElement(href: '#')
|
|
..appendText('Load')
|
|
..onClick.listen((event) {
|
|
event.preventDefault();
|
|
window.applicationCache.swapCache();
|
|
window.location.reload();
|
|
}));
|
|
} else if (status == ApplicationCache.IDLE) {
|
|
cacheStatusElement.appendText(cacheStatus());
|
|
cacheStatusElement.classes.add('offlineyay');
|
|
new Timer(const Duration(seconds: 10), () {
|
|
cacheStatusElement.style.display = 'none';
|
|
});
|
|
} else {
|
|
cacheStatusElement.appendText(cacheStatus());
|
|
}
|
|
}
|