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

Side by Side Diff: chrome/browser/resources/md_extensions/navigation_helper.js

Issue 2960293002: MD Extensions: Convert classes to use ES6 class syntax. (Closed)
Patch Set: Created 3 years, 5 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 /** 5 /**
6 * The different pages that can be shown at a time. 6 * The different pages that can be shown at a time.
7 * Note: This must remain in sync with the page ids in manager.html! 7 * Note: This must remain in sync with the page ids in manager.html!
8 * @enum {string} 8 * @enum {string}
9 */ 9 */
10 var Page = { 10 var Page = {
(...skipping 13 matching lines...) Expand all
24 subpage: (!Dialog|undefined)}} */ 24 subpage: (!Dialog|undefined)}} */
25 var PageState; 25 var PageState;
26 26
27 cr.define('extensions', function() { 27 cr.define('extensions', function() {
28 'use strict'; 28 'use strict';
29 29
30 /** 30 /**
31 * A helper object to manage in-page navigations. Since the extensions page 31 * A helper object to manage in-page navigations. Since the extensions page
32 * needs to support different urls for different subpages (like the details 32 * needs to support different urls for different subpages (like the details
33 * page), we use this object to manage the history and url conversions. 33 * page), we use this object to manage the history and url conversions.
34 * @param {!function(!PageState):void} onHistoryChange A function to call when 34 */
35 * the page has changed as a result of the user going back or forward in 35 class NavigationHelper {
36 * history; called with the new active page. 36 /**
37 * @constructor */ 37 * @param {!function(!PageState):void} onHistoryChange A function to call
38 function NavigationHelper(onHistoryChange) { 38 * when the page has changed as a result of the user going back or
39 this.onHistoryChange_ = onHistoryChange; 39 * forward in history; called with the new active page.
40 window.addEventListener('popstate', this.onPopState_.bind(this)); 40 */
41 } 41 constructor(onHistoryChange) {
42 this.onHistoryChange_ = onHistoryChange;
43 window.addEventListener('popstate', this.onPopState_.bind(this));
44 }
42 45
43 NavigationHelper.prototype = {
44 /** @private */ 46 /** @private */
45 onPopState_: function() { 47 onPopState_() {
46 this.onHistoryChange_(this.getCurrentPage()); 48 this.onHistoryChange_(this.getCurrentPage());
47 }, 49 }
48 50
49 /** 51 /**
50 * Returns the page that should be displayed for the current URL. 52 * @return {!PageState} The page that should be displayed for the current
51 * @return {!PageState} 53 * URL.
52 */ 54 */
53 getCurrentPage: function() { 55 getCurrentPage() {
54 var search = new URLSearchParams(location.search); 56 var search = new URLSearchParams(location.search);
55 var id = search.get('id'); 57 var id = search.get('id');
56 if (id) 58 if (id)
57 return {page: Page.DETAILS, extensionId: id}; 59 return {page: Page.DETAILS, extensionId: id};
58 id = search.get('options'); 60 id = search.get('options');
59 if (id) 61 if (id)
60 return {page: Page.DETAILS, extensionId: id, subpage: Dialog.OPTIONS}; 62 return {page: Page.DETAILS, extensionId: id, subpage: Dialog.OPTIONS};
61 id = search.get('errors'); 63 id = search.get('errors');
62 if (id) 64 if (id)
63 return {page: Page.ERRORS, extensionId: id}; 65 return {page: Page.ERRORS, extensionId: id};
64 66
65 if (location.pathname == '/shortcuts') 67 if (location.pathname == '/shortcuts')
66 return {page: Page.SHORTCUTS}; 68 return {page: Page.SHORTCUTS};
67 69
68 return {page: Page.LIST}; 70 return {page: Page.LIST};
69 }, 71 }
70 72
71 /** 73 /**
72 * Called when a page changes, and pushes state to history to reflect it. 74 * Called when a page changes, and pushes state to history to reflect it.
73 * @param {!PageState} entry 75 * @param {!PageState} entry
74 */ 76 */
75 updateHistory: function(entry) { 77 updateHistory(entry) {
76 var path; 78 var path;
77 switch (entry.page) { 79 switch (entry.page) {
78 case Page.LIST: 80 case Page.LIST:
79 path = '/'; 81 path = '/';
80 break; 82 break;
81 case Page.DETAILS: 83 case Page.DETAILS:
82 if (entry.subpage) { 84 if (entry.subpage) {
83 assert(entry.subpage == Dialog.OPTIONS); 85 assert(entry.subpage == Dialog.OPTIONS);
84 path = '/?options=' + entry.extensionId; 86 path = '/?options=' + entry.extensionId;
85 } else { 87 } else {
(...skipping 13 matching lines...) Expand all
99 var isDialogNavigation = currentPage.page == entry.page && 101 var isDialogNavigation = currentPage.page == entry.page &&
100 currentPage.extensionId == entry.extensionId; 102 currentPage.extensionId == entry.extensionId;
101 // Navigating to a dialog doesn't visually change pages; it just opens 103 // Navigating to a dialog doesn't visually change pages; it just opens
102 // a dialog. As such, we replace state rather than pushing a new state 104 // a dialog. As such, we replace state rather than pushing a new state
103 // on the stack so that hitting the back button doesn't just toggle the 105 // on the stack so that hitting the back button doesn't just toggle the
104 // dialog. 106 // dialog.
105 if (isDialogNavigation) 107 if (isDialogNavigation)
106 history.replaceState(state, '', path); 108 history.replaceState(state, '', path);
107 else 109 else
108 history.pushState(state, '', path); 110 history.pushState(state, '', path);
109 }, 111 }
110 }; 112 }
111 113
112 return {NavigationHelper: NavigationHelper}; 114 return {NavigationHelper: NavigationHelper};
113 }); 115 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/md_extensions/manager.js ('k') | chrome/browser/resources/md_extensions/service.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698