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

Side by Side Diff: chrome/browser/resources/md_history/app.js

Issue 2352293002: MD History: Replace app-route with a custom router (Closed)
Patch Set: Delete stray newline Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('md_history', function() { 5 cr.define('md_history', function() {
6 var lazyLoadPromise = null; 6 var lazyLoadPromise = null;
7 function ensureLazyLoaded() { 7 function ensureLazyLoaded() {
8 if (!lazyLoadPromise) { 8 if (!lazyLoadPromise) {
9 lazyLoadPromise = new Promise(function(resolve, reject) { 9 lazyLoadPromise = new Promise(function(resolve, reject) {
10 Polymer.Base.importHref( 10 Polymer.Base.importHref(
(...skipping 13 matching lines...) Expand all
24 24
25 behaviors: [Polymer.IronScrollTargetBehavior], 25 behaviors: [Polymer.IronScrollTargetBehavior],
26 26
27 properties: { 27 properties: {
28 // Used to display notices for profile sign-in status. 28 // Used to display notices for profile sign-in status.
29 showSidebarFooter: Boolean, 29 showSidebarFooter: Boolean,
30 30
31 hasSyncedResults: Boolean, 31 hasSyncedResults: Boolean,
32 32
33 // The id of the currently selected page. 33 // The id of the currently selected page.
34 selectedPage_: {type: String, observer: 'unselectAll'}, 34 selectedPage_: {type: String, observer: 'selectedPageChanged_'},
35 35
36 // Whether domain-grouped history is enabled. 36 // Whether domain-grouped history is enabled.
37 grouped_: {type: Boolean, reflectToAttribute: true}, 37 grouped_: {type: Boolean, reflectToAttribute: true},
38 38
39 /** @type {!QueryState} */ 39 /** @type {!QueryState} */
40 queryState_: { 40 queryState_: {
41 type: Object, 41 type: Object,
42 value: function() { 42 value: function() {
43 return { 43 return {
44 // Whether the most recent query was incremental. 44 // Whether the most recent query was incremental.
(...skipping 17 matching lines...) Expand all
62 type: Object, 62 type: Object,
63 value: function() { 63 value: function() {
64 return { 64 return {
65 info: null, 65 info: null,
66 results: null, 66 results: null,
67 sessionList: null, 67 sessionList: null,
68 }; 68 };
69 } 69 }
70 }, 70 },
71 71
72 // Route data for the current page.
73 routeData_: Object,
74
75 // The query params for the page.
76 queryParams_: Object,
77
78 // True if the window is narrow enough for the page to have a drawer. 72 // True if the window is narrow enough for the page to have a drawer.
79 hasDrawer_: Boolean, 73 hasDrawer_: Boolean,
80 74
81 isUserSignedIn_: { 75 isUserSignedIn_: {
82 type: Boolean, 76 type: Boolean,
83 // Updated on synced-device-manager attach by chrome.sending 77 // Updated on synced-device-manager attach by chrome.sending
84 // 'otherDevicesInitialized'. 78 // 'otherDevicesInitialized'.
85 value: loadTimeData.getBoolean('isUserSignedIn'), 79 value: loadTimeData.getBoolean('isUserSignedIn'),
86 }, 80 },
87 81
88 toolbarShadow_: { 82 toolbarShadow_: {
89 type: Boolean, 83 type: Boolean,
90 reflectToAttribute: true, 84 reflectToAttribute: true,
91 notify: true, 85 notify: true,
92 } 86 }
93 }, 87 },
94 88
95 observers: [
96 // routeData_.page <=> selectedPage
97 'routeDataChanged_(routeData_.page)',
98 'selectedPageChanged_(selectedPage_)',
99
100 // queryParams_.q <=> queryState.searchTerm
101 'searchTermChanged_(queryState_.searchTerm)',
102 'searchQueryParamChanged_(queryParams_.q)',
103
104 ],
105
106 // TODO(calamity): Replace these event listeners with data bound properties. 89 // TODO(calamity): Replace these event listeners with data bound properties.
107 listeners: { 90 listeners: {
108 'cr-menu-tap': 'onMenuTap_', 91 'cr-menu-tap': 'onMenuTap_',
109 'history-checkbox-select': 'checkboxSelected', 92 'history-checkbox-select': 'checkboxSelected',
110 'unselect-all': 'unselectAll', 93 'unselect-all': 'unselectAll',
111 'delete-selected': 'deleteSelected', 94 'delete-selected': 'deleteSelected',
112 'search-domain': 'searchDomain_',
113 'history-close-drawer': 'closeDrawer_', 95 'history-close-drawer': 'closeDrawer_',
114 'history-view-changed': 'historyViewChanged_', 96 'history-view-changed': 'historyViewChanged_',
115 }, 97 },
116 98
117 /** @override */ 99 /** @override */
118 ready: function() { 100 ready: function() {
119 this.grouped_ = loadTimeData.getBoolean('groupByDomain'); 101 this.grouped_ = loadTimeData.getBoolean('groupByDomain');
120 102
121 cr.ui.decorate('command', cr.ui.Command); 103 cr.ui.decorate('command', cr.ui.Command);
122 document.addEventListener('canExecute', this.onCanExecute_.bind(this)); 104 document.addEventListener('canExecute', this.onCanExecute_.bind(this));
123 document.addEventListener('command', this.onCommand_.bind(this)); 105 document.addEventListener('command', this.onCommand_.bind(this));
124
125 // Redirect legacy search URLs to URLs compatible with material history.
126 if (window.location.hash) {
127 window.location.href = window.location.href.split('#')[0] + '?' +
128 window.location.hash.substr(1);
129 }
130 }, 106 },
131 107
132 onFirstRender: function() { 108 onFirstRender: function() {
133 setTimeout(function() { 109 setTimeout(function() {
134 chrome.send( 110 chrome.send(
135 'metricsHandler:recordTime', 111 'metricsHandler:recordTime',
136 ['History.ResultsRenderedTime', window.performance.now()]); 112 ['History.ResultsRenderedTime', window.performance.now()]);
137 }); 113 });
138 114
139 // Focus the search field on load. Done here to ensure the history page 115 // Focus the search field on load. Done here to ensure the history page
140 // is rendered before we try to take focus. 116 // is rendered before we try to take focus.
141 if (!this.hasDrawer_) { 117 if (!this.hasDrawer_) {
142 this.focusToolbarSearchField(); 118 this.focusToolbarSearchField();
143 } 119 }
144 120
145 // Lazily load the remainder of the UI. 121 // Lazily load the remainder of the UI.
146 md_history.ensureLazyLoaded(); 122 md_history.ensureLazyLoaded();
147 }, 123 },
148 124
149 /** Overridden from IronScrollTargetBehavior */ 125 /** Overridden from IronScrollTargetBehavior */
150 _scrollHandler: function() { 126 _scrollHandler: function() {
151 this.toolbarShadow_ = this.scrollTarget.scrollTop != 0; 127 if (this.scrollTarget)
128 this.toolbarShadow_ = this.scrollTarget.scrollTop != 0;
152 }, 129 },
153 130
154 /** @private */ 131 /** @private */
155 onMenuTap_: function() { 132 onMenuTap_: function() {
156 var drawer = this.$$('#drawer'); 133 var drawer = this.$$('#drawer');
157 if (drawer) 134 if (drawer)
158 drawer.toggle(); 135 drawer.toggle();
159 }, 136 },
160 137
161 /** 138 /**
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 /** @type {HistoryListContainerElement} */ (this.$['history']); 174 /** @type {HistoryListContainerElement} */ (this.$['history']);
198 listContainer.historyResult(info, results); 175 listContainer.historyResult(info, results);
199 }, 176 },
200 177
201 /** 178 /**
202 * Focuses the search bar in the toolbar. 179 * Focuses the search bar in the toolbar.
203 */ 180 */
204 focusToolbarSearchField: function() { this.$.toolbar.showSearchField(); }, 181 focusToolbarSearchField: function() { this.$.toolbar.showSearchField(); },
205 182
206 /** 183 /**
207 * Fired when the user presses 'More from this site'.
208 * @param {{detail: {domain: string}}} e
209 */
210 searchDomain_: function(e) { this.$.toolbar.setSearchTerm(e.detail.domain); },
211
212 /**
213 * @param {Event} e 184 * @param {Event} e
214 * @private 185 * @private
215 */ 186 */
216 onCanExecute_: function(e) { 187 onCanExecute_: function(e) {
217 e = /** @type {cr.ui.CanExecuteEvent} */(e); 188 e = /** @type {cr.ui.CanExecuteEvent} */(e);
218 switch (e.command.id) { 189 switch (e.command.id) {
219 case 'find-command': 190 case 'find-command':
220 e.canExecute = true; 191 e.canExecute = true;
221 break; 192 break;
222 case 'slash-command': 193 case 'slash-command':
223 e.canExecute = !this.$.toolbar.searchBar.isSearchFocused(); 194 e.canExecute = !this.$.toolbar.searchField.isSearchFocused();
224 break; 195 break;
225 case 'delete-command': 196 case 'delete-command':
226 e.canExecute = this.$.toolbar.count > 0; 197 e.canExecute = this.$.toolbar.count > 0;
227 break; 198 break;
228 } 199 }
229 }, 200 },
230 201
231 /** 202 /**
232 * @param {string} searchTerm
233 * @private
234 */
235 searchTermChanged_: function(searchTerm) {
236 this.set('queryParams_.q', searchTerm || null);
237 this.$['history'].queryHistory(false);
238 // TODO(tsergeant): Ignore incremental searches in this metric.
239 if (this.queryState_.searchTerm)
240 md_history.BrowserService.getInstance().recordAction('Search');
241 },
242
243 /**
244 * @param {string} searchQuery
245 * @private
246 */
247 searchQueryParamChanged_: function(searchQuery) {
248 this.$.toolbar.setSearchTerm(searchQuery || '');
249 },
250
251 /**
252 * @param {Event} e 203 * @param {Event} e
253 * @private 204 * @private
254 */ 205 */
255 onCommand_: function(e) { 206 onCommand_: function(e) {
256 if (e.command.id == 'find-command' || e.command.id == 'slash-command') 207 if (e.command.id == 'find-command' || e.command.id == 'slash-command')
257 this.focusToolbarSearchField(); 208 this.focusToolbarSearchField();
258 if (e.command.id == 'delete-command') 209 if (e.command.id == 'delete-command')
259 this.deleteSelected(); 210 this.deleteSelected();
260 }, 211 },
261 212
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 * @param {boolean} hasSyncedResults 268 * @param {boolean} hasSyncedResults
318 * @param {string} selectedPage 269 * @param {string} selectedPage
319 * @return {boolean} Whether the (i) synced results notice should be shown. 270 * @return {boolean} Whether the (i) synced results notice should be shown.
320 * @private 271 * @private
321 */ 272 */
322 showSyncNotice_: function(hasSyncedResults, selectedPage) { 273 showSyncNotice_: function(hasSyncedResults, selectedPage) {
323 return hasSyncedResults && selectedPage != 'syncedTabs'; 274 return hasSyncedResults && selectedPage != 'syncedTabs';
324 }, 275 },
325 276
326 /** 277 /**
327 * @param {string} page
328 * @private 278 * @private
329 */ 279 */
330 routeDataChanged_: function(page) { this.selectedPage_ = page; }, 280 selectedPageChanged_: function() {
331 281 this.unselectAll();
332 /**
333 * @param {string} selectedPage
334 * @private
335 */
336 selectedPageChanged_: function(selectedPage) {
337 this.set('routeData_.page', selectedPage);
338 this.historyViewChanged_(); 282 this.historyViewChanged_();
339 }, 283 },
340 284
341 /** @private */ 285 /** @private */
342 historyViewChanged_: function() { 286 historyViewChanged_: function() {
343 // This allows the synced-device-manager to render so that it can be set as 287 // This allows the synced-device-manager to render so that it can be set as
344 // the scroll target. 288 // the scroll target.
345 requestAnimationFrame(function() { 289 requestAnimationFrame(function() {
346 this.scrollTarget = this.$.content.selectedItem.getContentScrollTarget(); 290 // <iron-pages> can occasionally end up with no item selected during
291 // tests.
292 if (!this.$.content.selectedItem)
293 return;
294 this.scrollTarget =
295 this.$.content.selectedItem.getContentScrollTarget();
347 this._scrollHandler(); 296 this._scrollHandler();
348 }.bind(this)); 297 }.bind(this));
349 this.recordHistoryPageView_(); 298 this.recordHistoryPageView_();
350 }, 299 },
351 300
352 /** 301 /**
353 * This computed binding is needed to make the iron-pages selector update when 302 * This computed binding is needed to make the iron-pages selector update when
354 * the synced-device-manager is instantiated for the first time. Otherwise the 303 * the synced-device-manager is instantiated for the first time. Otherwise the
355 * fallback selection will continue to be used after the corresponding item is 304 * fallback selection will continue to be used after the corresponding item is
356 * added as a child of iron-pages. 305 * added as a child of iron-pages.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 break; 339 break;
391 } 340 }
392 break; 341 break;
393 } 342 }
394 343
395 md_history.BrowserService.getInstance().recordHistogram( 344 md_history.BrowserService.getInstance().recordHistogram(
396 'History.HistoryPageView', histogramValue, HistoryPageViewHistogram.END 345 'History.HistoryPageView', histogramValue, HistoryPageViewHistogram.END
397 ); 346 );
398 }, 347 },
399 }); 348 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/md_history/app.html ('k') | chrome/browser/resources/md_history/app.crisper.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698