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

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: More minor cleanup Created 4 years, 3 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 Polymer({ 5 Polymer({
6 is: 'history-app', 6 is: 'history-app',
7 7
8 behaviors: [Polymer.IronScrollTargetBehavior], 8 behaviors: [Polymer.IronScrollTargetBehavior],
9 9
10 properties: { 10 properties: {
11 // Used to display notices for profile sign-in status. 11 // Used to display notices for profile sign-in status.
12 showSidebarFooter: Boolean, 12 showSidebarFooter: Boolean,
13 13
14 hasSyncedResults: Boolean, 14 hasSyncedResults: Boolean,
15 15
16 // The id of the currently selected page. 16 // The id of the currently selected page.
17 selectedPage_: {type: String, observer: 'unselectAll'}, 17 selectedPage_: {type: String, observer: 'selectedPageChanged_'},
18 18
19 // Whether domain-grouped history is enabled. 19 // Whether domain-grouped history is enabled.
20 grouped_: {type: Boolean, reflectToAttribute: true}, 20 grouped_: {type: Boolean, reflectToAttribute: true},
21 21
22 /** @type {!QueryState} */ 22 /** @type {!QueryState} */
23 queryState_: { 23 queryState_: {
24 type: Object, 24 type: Object,
25 value: function() { 25 value: function() {
26 return { 26 return {
27 // Whether the most recent query was incremental. 27 // Whether the most recent query was incremental.
(...skipping 17 matching lines...) Expand all
45 type: Object, 45 type: Object,
46 value: function() { 46 value: function() {
47 return { 47 return {
48 info: null, 48 info: null,
49 results: null, 49 results: null,
50 sessionList: null, 50 sessionList: null,
51 }; 51 };
52 } 52 }
53 }, 53 },
54 54
55 // Route data for the current page.
56 routeData_: Object,
57
58 // The query params for the page.
59 queryParams_: Object,
60
61 // True if the window is narrow enough for the page to have a drawer. 55 // True if the window is narrow enough for the page to have a drawer.
62 hasDrawer_: Boolean, 56 hasDrawer_: Boolean,
63 57
64 isUserSignedIn_: { 58 isUserSignedIn_: {
65 type: Boolean, 59 type: Boolean,
66 // Updated on synced-device-manager attach by chrome.sending 60 // Updated on synced-device-manager attach by chrome.sending
67 // 'otherDevicesInitialized'. 61 // 'otherDevicesInitialized'.
68 value: loadTimeData.getBoolean('isUserSignedIn'), 62 value: loadTimeData.getBoolean('isUserSignedIn'),
69 }, 63 },
70 64
71 toolbarShadow_: { 65 toolbarShadow_: {
72 type: Boolean, 66 type: Boolean,
73 reflectToAttribute: true, 67 reflectToAttribute: true,
74 notify: true, 68 notify: true,
75 } 69 }
76 }, 70 },
77 71
78 observers: [
79 // routeData_.page <=> selectedPage
80 'routeDataChanged_(routeData_.page)',
81 'selectedPageChanged_(selectedPage_)',
82
83 // queryParams_.q <=> queryState.searchTerm
84 'searchTermChanged_(queryState_.searchTerm)',
85 'searchQueryParamChanged_(queryParams_.q)',
86
87 ],
88
89 // TODO(calamity): Replace these event listeners with data bound properties. 72 // TODO(calamity): Replace these event listeners with data bound properties.
90 listeners: { 73 listeners: {
91 'cr-menu-tap': 'onMenuTap_', 74 'cr-menu-tap': 'onMenuTap_',
92 'history-checkbox-select': 'checkboxSelected', 75 'history-checkbox-select': 'checkboxSelected',
93 'unselect-all': 'unselectAll', 76 'unselect-all': 'unselectAll',
94 'delete-selected': 'deleteSelected', 77 'delete-selected': 'deleteSelected',
95 'search-domain': 'searchDomain_', 78 'search-domain': 'searchDomain_',
calamity 2016/09/22 05:12:26 Remove.
tsergeant 2016/09/22 23:57:42 Good pickup, done.
96 'history-close-drawer': 'closeDrawer_', 79 'history-close-drawer': 'closeDrawer_',
97 'history-view-changed': 'historyViewChanged_', 80 'history-view-changed': 'historyViewChanged_',
98 }, 81 },
99 82
100 /** @override */ 83 /** @override */
101 ready: function() { 84 ready: function() {
102 this.grouped_ = loadTimeData.getBoolean('groupByDomain'); 85 this.grouped_ = loadTimeData.getBoolean('groupByDomain');
103 86
104 cr.ui.decorate('command', cr.ui.Command); 87 cr.ui.decorate('command', cr.ui.Command);
105 document.addEventListener('canExecute', this.onCanExecute_.bind(this)); 88 document.addEventListener('canExecute', this.onCanExecute_.bind(this));
106 document.addEventListener('command', this.onCommand_.bind(this)); 89 document.addEventListener('command', this.onCommand_.bind(this));
107
108 // Redirect legacy search URLs to URLs compatible with material history.
109 if (window.location.hash) {
110 window.location.href = window.location.href.split('#')[0] + '?' +
111 window.location.hash.substr(1);
112 }
113 }, 90 },
114 91
115 onFirstRender: function() { 92 onFirstRender: function() {
116 // requestAnimationFrame allows measurement immediately before the next 93 // requestAnimationFrame allows measurement immediately before the next
117 // repaint, but after the first page of <iron-list> items has stamped. 94 // repaint, but after the first page of <iron-list> items has stamped.
118 requestAnimationFrame(function() { 95 requestAnimationFrame(function() {
119 chrome.send( 96 chrome.send(
120 'metricsHandler:recordTime', 97 'metricsHandler:recordTime',
121 ['History.ResultsRenderedTime', window.performance.now()]); 98 ['History.ResultsRenderedTime', window.performance.now()]);
122 }); 99 });
123 100
124 // Focus the search field on load. Done here to ensure the history page 101 // Focus the search field on load. Done here to ensure the history page
125 // is rendered before we try to take focus. 102 // is rendered before we try to take focus.
126 if (!this.hasDrawer_) { 103 if (!this.hasDrawer_) {
127 this.focusToolbarSearchField(); 104 this.focusToolbarSearchField();
128 } 105 }
129 }, 106 },
130 107
131 /** Overridden from IronScrollTargetBehavior */ 108 /** Overridden from IronScrollTargetBehavior */
132 _scrollHandler: function() { 109 _scrollHandler: function() {
133 this.toolbarShadow_ = this.scrollTarget.scrollTop != 0; 110 if (this.scrollTarget)
111 this.toolbarShadow_ = this.scrollTarget.scrollTop != 0;
134 }, 112 },
135 113
136 /** @private */ 114 /** @private */
137 onMenuTap_: function() { 115 onMenuTap_: function() {
138 var drawer = this.$$('#drawer'); 116 var drawer = this.$$('#drawer');
139 if (drawer) 117 if (drawer)
140 drawer.toggle(); 118 drawer.toggle();
141 }, 119 },
142 120
143 /** 121 /**
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 /** @type {HistoryListContainerElement} */ (this.$['history']); 157 /** @type {HistoryListContainerElement} */ (this.$['history']);
180 listContainer.historyResult(info, results); 158 listContainer.historyResult(info, results);
181 }, 159 },
182 160
183 /** 161 /**
184 * Focuses the search bar in the toolbar. 162 * Focuses the search bar in the toolbar.
185 */ 163 */
186 focusToolbarSearchField: function() { this.$.toolbar.showSearchField(); }, 164 focusToolbarSearchField: function() { this.$.toolbar.showSearchField(); },
187 165
188 /** 166 /**
189 * Fired when the user presses 'More from this site'.
190 * @param {{detail: {domain: string}}} e
191 */
192 searchDomain_: function(e) { this.$.toolbar.setSearchTerm(e.detail.domain); },
193
194 /**
195 * @param {Event} e 167 * @param {Event} e
196 * @private 168 * @private
197 */ 169 */
198 onCanExecute_: function(e) { 170 onCanExecute_: function(e) {
199 e = /** @type {cr.ui.CanExecuteEvent} */(e); 171 e = /** @type {cr.ui.CanExecuteEvent} */(e);
200 switch (e.command.id) { 172 switch (e.command.id) {
201 case 'find-command': 173 case 'find-command':
202 e.canExecute = true; 174 e.canExecute = true;
203 break; 175 break;
204 case 'slash-command': 176 case 'slash-command':
205 e.canExecute = !this.$.toolbar.searchBar.isSearchFocused(); 177 e.canExecute = !this.$.toolbar.searchBar.isSearchFocused();
206 break; 178 break;
207 case 'delete-command': 179 case 'delete-command':
208 e.canExecute = this.$.toolbar.count > 0; 180 e.canExecute = this.$.toolbar.count > 0;
209 break; 181 break;
210 } 182 }
211 }, 183 },
212 184
213 /** 185 /**
214 * @param {string} searchTerm
215 * @private
216 */
217 searchTermChanged_: function(searchTerm) {
218 this.set('queryParams_.q', searchTerm || null);
219 this.$['history'].queryHistory(false);
220 // TODO(tsergeant): Ignore incremental searches in this metric.
221 if (this.queryState_.searchTerm)
222 md_history.BrowserService.getInstance().recordAction('Search');
223 },
224
225 /**
226 * @param {string} searchQuery
227 * @private
228 */
229 searchQueryParamChanged_: function(searchQuery) {
230 this.$.toolbar.setSearchTerm(searchQuery || '');
231 },
232
233 /**
234 * @param {Event} e 186 * @param {Event} e
235 * @private 187 * @private
236 */ 188 */
237 onCommand_: function(e) { 189 onCommand_: function(e) {
238 if (e.command.id == 'find-command' || e.command.id == 'slash-command') 190 if (e.command.id == 'find-command' || e.command.id == 'slash-command')
239 this.focusToolbarSearchField(); 191 this.focusToolbarSearchField();
240 if (e.command.id == 'delete-command') 192 if (e.command.id == 'delete-command')
241 this.deleteSelected(); 193 this.deleteSelected();
242 }, 194 },
243 195
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 * @param {boolean} hasSyncedResults 251 * @param {boolean} hasSyncedResults
300 * @param {string} selectedPage 252 * @param {string} selectedPage
301 * @return {boolean} Whether the (i) synced results notice should be shown. 253 * @return {boolean} Whether the (i) synced results notice should be shown.
302 * @private 254 * @private
303 */ 255 */
304 showSyncNotice_: function(hasSyncedResults, selectedPage) { 256 showSyncNotice_: function(hasSyncedResults, selectedPage) {
305 return hasSyncedResults && selectedPage != 'syncedTabs'; 257 return hasSyncedResults && selectedPage != 'syncedTabs';
306 }, 258 },
307 259
308 /** 260 /**
309 * @param {string} page
310 * @private 261 * @private
311 */ 262 */
312 routeDataChanged_: function(page) { this.selectedPage_ = page; }, 263 selectedPageChanged_: function() {
313 264 this.unselectAll();
314 /**
315 * @param {string} selectedPage
316 * @private
317 */
318 selectedPageChanged_: function(selectedPage) {
319 this.set('routeData_.page', selectedPage);
320 this.historyViewChanged_(); 265 this.historyViewChanged_();
321 }, 266 },
322 267
323 /** @private */ 268 /** @private */
324 historyViewChanged_: function() { 269 historyViewChanged_: function() {
325 // This allows the synced-device-manager to render so that it can be set as 270 // This allows the synced-device-manager to render so that it can be set as
326 // the scroll target. 271 // the scroll target.
327 requestAnimationFrame(function() { 272 requestAnimationFrame(function() {
328 this.scrollTarget = this.$.content.selectedItem.getContentScrollTarget(); 273 if (this.$.content.selectedItem) {
tsergeant 2016/09/21 07:57:47 These guards are necessary because of tests. I do
calamity 2016/09/22 05:12:26 Looks fine. Invert and early return with comment.
tsergeant 2016/09/22 23:57:42 Done.
329 this._scrollHandler(); 274 this.scrollTarget =
275 this.$.content.selectedItem.getContentScrollTarget();
276 this._scrollHandler();
277 }
330 }.bind(this)); 278 }.bind(this));
331 this.recordHistoryPageView_(); 279 this.recordHistoryPageView_();
332 }, 280 },
333 281
334 /** 282 /**
335 * This computed binding is needed to make the iron-pages selector update when 283 * This computed binding is needed to make the iron-pages selector update when
336 * the synced-device-manager is instantiated for the first time. Otherwise the 284 * the synced-device-manager is instantiated for the first time. Otherwise the
337 * fallback selection will continue to be used after the corresponding item is 285 * fallback selection will continue to be used after the corresponding item is
338 * added as a child of iron-pages. 286 * added as a child of iron-pages.
339 * @param {string} selectedPage 287 * @param {string} selectedPage
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 break; 320 break;
373 } 321 }
374 break; 322 break;
375 } 323 }
376 324
377 md_history.BrowserService.getInstance().recordHistogram( 325 md_history.BrowserService.getInstance().recordHistogram(
378 'History.HistoryPageView', histogramValue, HistoryPageViewHistogram.END 326 'History.HistoryPageView', histogramValue, HistoryPageViewHistogram.END
379 ); 327 );
380 }, 328 },
381 }); 329 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698