Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(951)

Side by Side Diff: client/samples/swarm/App.dart

Issue 9314024: Final CL to kill off client/samples . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | client/samples/swarm/BiIterator.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
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.
4
5 /**
6 * The base class that should be extended by all HTML applications.
7 *
8 * It should both be easy to use for users coming over from JavaScript, but
9 * also offer a clear notion of OO encapsulation.
10 *
11 * This class or something similar belongs in the standard DOM library.
12 */
13 class App {
14
15 App() {}
16
17 /** Begins executing code in this [App]. */
18 void run() {
19 // If the script is async, by the time we get here the DOM content may
20 // already be loaded, so waiting on the DOMContentLoaded event is a no-op.
21 // Guard against this by checking whether the document readiness state has
22 // gotten as far as "interactive". (We believe the transition to
23 // "interactive" is when the DOMContentLoaded event fires, but haven't
24 // found that specified; if that's not true it leaves a race bug.)
25 if (document.readyState == "interactive" ||
26 document.readyState == "complete" ||
27 document.readyState == "loaded") {
28 // We use setTimeout to insure that onLoad is always called in an async
29 // manner even if the document is already loaded.
30 window.setTimeout(() => onLoad(), 0);
31 } else {
32 window.on.contentLoaded.add(
33 // TODO(sigmund): Consider eliminating the call to "wrap", for
34 // instance, modify event listeners to always wrap, or extend DOM code
35 // to intercept the beginning & end of each event loop
36 EventBatch.wrap((Event event) => onLoad()));
37 }
38 }
39
40 /**
41 * Called when the DOM is fully loaded but potentially before resources.
42 *
43 * For most apps, any startup code should be in this method. Be sure to call
44 * the superclass implementation.
45 */
46 void onLoad() {
47 // Prevent the default browser behavior of scrolling the window.
48 document.on.touchMove.add((Event event) => event.preventDefault());
49
50 // Swap and reload the cache if ready
51 if (!swapAndReloadCache()) {
52 // Otherwise wait until an update to the cache is ready
53 window.applicationCache.on.updateReady.add(
54 (e) => swapAndReloadCache());
55 }
56 }
57
58 /**
59 * Erase the static splash screen.
60 *
61 * Assumption: if a splash screen exists, an element #appSplash contains it.
62 */
63 void eraseSplashScreen() {
64 final splash = document.query("#appSplash");
65 // Delete it if found, but it's okay for it not to be -- maybe
66 // somebody just didn't want to use our splash mechanism.
67 if (splash !== null) {
68 splash.remove();
69 }
70 }
71
72 /**
73 * Swaps and reloads the app cache if an update is ready. Returns false if
74 * an update is not ready.
75 */
76 bool swapAndReloadCache() {
77 DOMApplicationCache appCache = window.applicationCache;
78 if (appCache.status !== DOMApplicationCache.UPDATEREADY) {
79 return false;
80 }
81
82 print('App cache update ready, now swapping...');
83 window.applicationCache.swapCache();
84 print('App cache swapped, now reloading page...');
85 window.location.reload();
86 return true;
87 }
88
89 /** Returns true if we are running as a packaged application. */
90 static bool get isPackaged() {
91 return window.location.protocol == 'chrome-extension:';
92 }
93
94 /**
95 * Gets the server URL. This is needed when we are loaded from a packaged
96 * Chrome app.
97 */
98 static String serverUrl(String url) {
99 if (isPackaged) {
100 // TODO(jmesserly): Several problems with this:
101 // * How do we authenticate against the server?
102 // * How do we talk to a server other than thump?
103 assert(url.startsWith('/'));
104 return 'http://thump.googleplex.com' + url;
105 } else {
106 return url;
107 }
108 }
109 }
OLDNEW
« no previous file with comments | « no previous file | client/samples/swarm/BiIterator.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698