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

Side by Side Diff: runtime/observatory/lib/src/app/location_manager.dart

Issue 839543002: Revert "Build Observatory with runtime" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 | « runtime/observatory/lib/src/app/chart.dart ('k') | runtime/observatory/lib/src/app/page.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) 2013, 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 part of app;
6
7 abstract class LocationManager extends Observable {
8 final _initialPath = '/vm';
9 ObservatoryApplication _app;
10
11 String _lastUrl;
12
13 void _init(ObservatoryApplication app) {
14 // Called once.
15 assert(_app == null);
16 _app = app;
17 // Register for history events.
18 window.onPopState.listen(_onLocationChange);
19 _onStartup();
20 }
21
22 void _onStartup();
23 void _onLocationChange(PopStateEvent event);
24
25 void _pushUrl(String url) {
26 if (_lastUrl != url) {
27 Logger.root.info('Navigated to ${url}');
28 window.history.pushState(url, document.title, url);
29 _lastUrl = url;
30 }
31 }
32
33 /// Go to a specific url.
34 void go(String url) {
35 if ((url != makeLink('/vm-connect/')) && _app.vm == null) {
36 if (!window.confirm('Connection with VM has been lost. '
37 'Proceeding will lose current page.')) {
38 return;
39 }
40 url = makeLink('/vm-connect/');
41 }
42 _pushUrl(url);
43 _go(url);
44 }
45
46 void _go(String url) {
47 // Chop off leading '#'.
48 if (url.startsWith('#')) {
49 url = url.substring(1);
50 }
51 // Fall through handles '#/'
52 // Chop off leading '/'.
53 if (url.startsWith('/')) {
54 url = url.substring(1);
55 }
56 var args;
57 // Parse out arguments.
58 if (url.contains('---')) {
59 var chunks = url.split('---');
60 url = chunks[0];
61 if ((chunks.length > 1) && (chunks[1] != '')) {
62 args = chunks[1];
63 }
64 }
65 _app._visit(url, args);
66 }
67
68 /// Go back.
69 void back() {
70 window.history.go(-1);
71 }
72
73 /// Go forward.
74 void forward() {
75 window.history.go(1);
76 }
77
78 /// Handle clicking on an application url link.
79 void onGoto(MouseEvent event, var detail, Element target) {
80 var href = target.attributes['href'];
81 if (event.button > 0 || event.metaKey || event.ctrlKey ||
82 event.shiftKey || event.altKey) {
83 // Not a left-click or a left-click with a modifier key:
84 // Let browser handle.
85 return;
86 }
87 go(href);
88 event.preventDefault();
89 }
90
91 /// Given an application url, generate a link.
92 String makeLink(String url);
93 }
94
95 /// Uses location.hash to encode application urls.
96 class HashLocationManager extends LocationManager {
97 void _onStartup() {
98 String initialPath = '${window.location.hash}';
99 if ((window.location.hash == '') || (window.location.hash == '#')) {
100 initialPath = '#${_initialPath}';
101 }
102 window.history.pushState(initialPath, document.title, initialPath);
103 _go(window.location.hash);
104 }
105
106 void _onLocationChange(PopStateEvent _) {
107 _go(window.location.hash);
108 }
109
110 /// Given an application url, generate a link for an anchor tag.
111 String makeLink(String url) {
112 return '#$url';
113 }
114 }
115
116 /// Uses location.pathname to encode application urls. Requires server side
117 /// rewriting to support copy and paste linking. pub serve makes this hard.
118 /// STATUS: Work in progress.
119 class LinkLocationManager extends LocationManager {
120 void _onStartup() {
121 Logger.root.warning('Using untested LinkLocationManager');
122 String initialPath = window.location.pathname;
123 if ((window.location.pathname == '/index.html') ||
124 (window.location.pathname == '/')) {
125 initialPath = '/vm';
126 }
127 window.history.replaceState(initialPath, document.title, initialPath);
128 _go(window.location.pathname);
129 }
130
131 void _onLocationChange(PopStateEvent _) {
132 _go(window.location.pathname);
133 }
134
135 /// Given an application url, generate a link for an anchor tag.
136 String makeLink(String url) => url;
137 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/app/chart.dart ('k') | runtime/observatory/lib/src/app/page.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698