| Index: client/samples/swarm/UIState.dart
 | 
| ===================================================================
 | 
| --- client/samples/swarm/UIState.dart	(revision 3770)
 | 
| +++ client/samples/swarm/UIState.dart	(working copy)
 | 
| @@ -1,73 +0,0 @@
 | 
| -// Copyright (c) 2011, 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.
 | 
| -
 | 
| -/**
 | 
| - * The base class for UI state that intends to support browser history.
 | 
| - */
 | 
| -class UIState {
 | 
| -  /**
 | 
| -   * The event listener we hook to the window's "popstate" event.
 | 
| -   * This event is triggered by the back button or by the first page load.
 | 
| -   */
 | 
| -  EventListener _historyTracking;
 | 
| -
 | 
| -  UIState();
 | 
| -
 | 
| -  void startHistoryTracking() {
 | 
| -    stopHistoryTracking();
 | 
| -
 | 
| -    bool firstEvent = true;
 | 
| -    _historyTracking = EventBatch.wrap((event) {
 | 
| -      String state = window.location.hash;
 | 
| -      if (state.startsWith('#')) {
 | 
| -        // TODO(jimhug): Support default argument on substring.
 | 
| -        state = state.substring(1, state.length);
 | 
| -      }
 | 
| -
 | 
| -      if (firstEvent && state != '') {
 | 
| -        // TODO(jmesserly): When loading a bookmark or refreshing, we replace
 | 
| -        // the app state with a clean app state so the back button works. It
 | 
| -        // would be better to support jumping to the previous story.
 | 
| -        // We'd need to do some history manipulation here and some fixes to
 | 
| -        // the views for this.
 | 
| -        window.history.replaceState(null, document.title, '#');
 | 
| -      } else if (state != '') {
 | 
| -        loadFromHistory(JSON.parse(state));
 | 
| -      }
 | 
| -      firstEvent = false;
 | 
| -    });
 | 
| -
 | 
| -    window.on.popState.add(_historyTracking);
 | 
| -  }
 | 
| -
 | 
| -  void stopHistoryTracking() {
 | 
| -    if (_historyTracking != null) {
 | 
| -      window.on.popState.add(_historyTracking); // remove?
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  /** Pushes a state onto the browser history stack */
 | 
| -  void pushToHistory() {
 | 
| -    if (_historyTracking == null) {
 | 
| -      throw 'history tracking not started';
 | 
| -    }
 | 
| -
 | 
| -    String state = JSON.stringify(toHistory());
 | 
| -
 | 
| -    // TODO(jmesserly): [state] should be an Object, and we should pass it to
 | 
| -    // the state parameter instead of as a #hash URL. Right now we're working
 | 
| -    //  around b/4582542.
 | 
| -    window.history.pushState(null, document.title, '#' + state);
 | 
| -  }
 | 
| -
 | 
| -  /**
 | 
| -   * Serialize the state to a form suitable for storing in browser history.
 | 
| -   */
 | 
| -  abstract Map<String, String> toHistory();
 | 
| -
 | 
| -  /**
 | 
| -   * Load the UI state from the given [values].
 | 
| -   */
 | 
| -  abstract void loadFromHistory(Map<String, String> values);
 | 
| -}
 | 
| 
 |