Get rid of global Gerrit.Nav

* Replace the global Gerrit.Nav variable with named imports.
* Update gr-app-global-var-init.js

Note: This is not a recommended approach. The change focuses on
removing global variable. See todo in gr-navigation.js

Change-Id: If389574d6d3bc1d643538f6776740bca82f71049
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
index 7e42a9f..ec63079 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
@@ -17,7 +17,6 @@
 
 import '../../../scripts/bundled-polymer.js';
 import '../../../styles/gr-change-list-styles.js';
-import '../../core/gr-navigation/gr-navigation.js';
 import '../../shared/gr-account-link/gr-account-link.js';
 import '../../shared/gr-change-star/gr-change-star.js';
 import '../../shared/gr-change-status/gr-change-status.js';
@@ -38,6 +37,7 @@
 import {PathListBehavior} from '../../../behaviors/gr-path-list-behavior/gr-path-list-behavior.js';
 import {URLEncodingBehavior} from '../../../behaviors/gr-url-encoding-behavior/gr-url-encoding-behavior.js';
 import {RESTClientBehavior} from '../../../behaviors/rest-client-behavior/rest-client-behavior.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 const CHANGE_SIZE = {
   XS: 10,
@@ -105,7 +105,7 @@
   }
 
   _computeChangeURL(change) {
-    return Gerrit.Nav.getUrlForChange(change);
+    return GerritNav.getUrlForChange(change);
   }
 
   _computeLabelTitle(change, labelName) {
@@ -166,18 +166,18 @@
   }
 
   _computeRepoUrl(change) {
-    return Gerrit.Nav.getUrlForProjectChanges(change.project, true,
+    return GerritNav.getUrlForProjectChanges(change.project, true,
         change.internalHost);
   }
 
   _computeRepoBranchURL(change) {
-    return Gerrit.Nav.getUrlForBranch(change.branch, change.project, null,
+    return GerritNav.getUrlForBranch(change.branch, change.project, null,
         change.internalHost);
   }
 
   _computeTopicURL(change) {
     if (!change.topic) { return ''; }
-    return Gerrit.Nav.getUrlForTopic(change.topic, change.internalHost);
+    return GerritNav.getUrlForTopic(change.topic, change.internalHost);
   }
 
   /**
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
index 8af8592..f7361d2 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
@@ -33,6 +33,8 @@
 <script type="module">
 import '../../../test/common-test-setup.js';
 import './gr-change-list-item.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
+
 suite('gr-change-list-item tests', () => {
   let element;
   let sandbox;
@@ -242,7 +244,7 @@
   });
 
   test('change params passed to gr-navigation', () => {
-    sandbox.stub(Gerrit.Nav);
+    sandbox.stub(GerritNav);
     const change = {
       internalHost: 'test-host',
       project: 'test-repo',
@@ -252,12 +254,12 @@
     element.change = change;
     flushAsynchronousOperations();
 
-    assert.deepEqual(Gerrit.Nav.getUrlForChange.lastCall.args, [change]);
-    assert.deepEqual(Gerrit.Nav.getUrlForProjectChanges.lastCall.args,
+    assert.deepEqual(GerritNav.getUrlForChange.lastCall.args, [change]);
+    assert.deepEqual(GerritNav.getUrlForProjectChanges.lastCall.args,
         [change.project, true, change.internalHost]);
-    assert.deepEqual(Gerrit.Nav.getUrlForBranch.lastCall.args,
+    assert.deepEqual(GerritNav.getUrlForBranch.lastCall.args,
         [change.branch, change.project, null, change.internalHost]);
-    assert.deepEqual(Gerrit.Nav.getUrlForTopic.lastCall.args,
+    assert.deepEqual(GerritNav.getUrlForTopic.lastCall.args,
         [change.topic, change.internalHost]);
   });
 
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
index ba68027..c416b11 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.js
@@ -16,7 +16,6 @@
  */
 
 import '../../../scripts/bundled-polymer.js';
-import '../../core/gr-navigation/gr-navigation.js';
 import '../../shared/gr-icons/gr-icons.js';
 import '../../shared/gr-rest-api-interface/gr-rest-api-interface.js';
 import '../gr-change-list/gr-change-list.js';
@@ -31,6 +30,7 @@
 import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
 import {URLEncodingBehavior} from '../../../behaviors/gr-url-encoding-behavior/gr-url-encoding-behavior.js';
 import page from 'page/page.mjs';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 const LookupQueryPatterns = {
   CHANGE_ID: /^\s*i?[0-9a-f]{7,40}\s*$/i,
@@ -163,7 +163,7 @@
   }
 
   _paramsChanged(value) {
-    if (value.view !== Gerrit.Nav.View.SEARCH) { return; }
+    if (value.view !== GerritNav.View.SEARCH) { return; }
 
     this._loading = true;
     this._query = value.query;
@@ -193,7 +193,7 @@
             for (const query in LookupQueryPatterns) {
               if (LookupQueryPatterns.hasOwnProperty(query) &&
               this._query.match(LookupQueryPatterns[query])) {
-                Gerrit.Nav.navigateToChange(changes[0]);
+                GerritNav.navigateToChange(changes[0]);
                 return;
               }
             }
@@ -237,7 +237,7 @@
     offset = +(offset || 0);
     const limit = this._limitFor(query, changesPerPage);
     const newOffset = Math.max(0, offset + (limit * direction));
-    return Gerrit.Nav.getUrlForSearchQuery(query, newOffset);
+    return GerritNav.getUrlForSearchQuery(query, newOffset);
   }
 
   _computePrevArrowClass(offset) {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
index ab57143e..33e70a0 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_test.html
@@ -35,6 +35,7 @@
 import '../../../test/common-test-setup.js';
 import './gr-change-list-view.js';
 import page from 'page/page.mjs';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 const CHANGE_ID = 'IcA3dAB3edAB9f60B8dcdA6ef71A75980e4B7127';
 const COMMIT_HASH = '12345678';
@@ -78,7 +79,7 @@
   });
 
   test('_computeNavLink', () => {
-    const getUrlStub = sandbox.stub(Gerrit.Nav, 'getUrlForSearchQuery')
+    const getUrlStub = sandbox.stub(GerritNav, 'getUrlForSearchQuery')
         .returns('');
     const query = 'status:open';
     let offset = 0;
@@ -209,44 +210,44 @@
       const change = {_number: 1};
       sandbox.stub(element, '_getChanges')
           .returns(Promise.resolve([change]));
-      sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+      sandbox.stub(GerritNav, 'navigateToChange', url => {
         assert.equal(url, change);
         done();
       });
 
-      element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
+      element.params = {view: GerritNav.View.SEARCH, query: CHANGE_ID};
     });
 
     test('Searching for a change num redirects to change', done => {
       const change = {_number: 1};
       sandbox.stub(element, '_getChanges')
           .returns(Promise.resolve([change]));
-      sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+      sandbox.stub(GerritNav, 'navigateToChange', url => {
         assert.equal(url, change);
         done();
       });
 
-      element.params = {view: Gerrit.Nav.View.SEARCH, query: '1'};
+      element.params = {view: GerritNav.View.SEARCH, query: '1'};
     });
 
     test('Commit hash redirects to change', done => {
       const change = {_number: 1};
       sandbox.stub(element, '_getChanges')
           .returns(Promise.resolve([change]));
-      sandbox.stub(Gerrit.Nav, 'navigateToChange', url => {
+      sandbox.stub(GerritNav, 'navigateToChange', url => {
         assert.equal(url, change);
         done();
       });
 
-      element.params = {view: Gerrit.Nav.View.SEARCH, query: COMMIT_HASH};
+      element.params = {view: GerritNav.View.SEARCH, query: COMMIT_HASH};
     });
 
     test('Searching for an invalid change ID searches', () => {
       sandbox.stub(element, '_getChanges')
           .returns(Promise.resolve([]));
-      const stub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
+      const stub = sandbox.stub(GerritNav, 'navigateToChange');
 
-      element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
+      element.params = {view: GerritNav.View.SEARCH, query: CHANGE_ID};
       flushAsynchronousOperations();
 
       assert.isFalse(stub.called);
@@ -255,9 +256,9 @@
     test('Change ID with multiple search results searches', () => {
       sandbox.stub(element, '_getChanges')
           .returns(Promise.resolve([{}, {}]));
-      const stub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
+      const stub = sandbox.stub(GerritNav, 'navigateToChange');
 
-      element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
+      element.params = {view: GerritNav.View.SEARCH, query: CHANGE_ID};
       flushAsynchronousOperations();
 
       assert.isFalse(stub.called);
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.js b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.js
index d6da71a..9455ba6 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.js
@@ -17,7 +17,6 @@
 
 import '../../../scripts/bundled-polymer.js';
 import '../../../styles/gr-change-list-styles.js';
-import '../../core/gr-navigation/gr-navigation.js';
 import '../../shared/gr-cursor-manager/gr-cursor-manager.js';
 import '../../shared/gr-rest-api-interface/gr-rest-api-interface.js';
 import '../gr-change-list-item/gr-change-list-item.js';
@@ -36,6 +35,7 @@
 import {URLEncodingBehavior} from '../../../behaviors/gr-url-encoding-behavior/gr-url-encoding-behavior.js';
 import {KeyboardShortcutBehavior} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js';
 import {RESTClientBehavior} from '../../../behaviors/rest-client-behavior/rest-client-behavior.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 const NUMBER_FIXED_COLUMNS = 3;
 const CLOSED_STATUS = ['MERGED', 'ABANDONED'];
@@ -271,7 +271,7 @@
   }
 
   _sectionHref(query) {
-    return Gerrit.Nav.getUrlForSearchQuery(this._processQuery(query));
+    return GerritNav.getUrlForSearchQuery(this._processQuery(query));
   }
 
   /**
@@ -333,7 +333,7 @@
         this.modifierPressed(e)) { return; }
 
     e.preventDefault();
-    Gerrit.Nav.navigateToChange(this._changeForIndex(this.selectedIndex));
+    GerritNav.navigateToChange(this._changeForIndex(this.selectedIndex));
   }
 
   _nextPage(e) {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.html
index e736682..c535600 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_test.html
@@ -43,6 +43,8 @@
 import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';
 import {afterNextRender} from '@polymer/polymer/lib/utils/render-status.js';
 import {KeyboardShortcutBinder} from '../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
+
 suite('gr-change-list basic tests', () => {
   // Define keybindings before attaching other fixtures.
   const kb = KeyboardShortcutBinder;
@@ -192,7 +194,7 @@
       assert.equal(element.selectedIndex, 2);
       assert.isTrue(elementItems[2].hasAttribute('selected'));
 
-      const navStub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
+      const navStub = sandbox.stub(GerritNav, 'navigateToChange');
       assert.equal(element.selectedIndex, 2);
       MockInteractions.pressAndReleaseKeyOn(element, 13, null, 'enter');
       assert.deepEqual(navStub.lastCall.args[0], {_number: 2},
@@ -559,7 +561,7 @@
         assert.equal(element.selectedIndex, 1);
         MockInteractions.pressAndReleaseKeyOn(element, 74); // 'j'
 
-        const navStub = sandbox.stub(Gerrit.Nav, 'navigateToChange');
+        const navStub = sandbox.stub(GerritNav, 'navigateToChange');
         assert.equal(element.selectedIndex, 2);
 
         MockInteractions.pressAndReleaseKeyOn(element, 13); // 'enter'
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.js b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.js
index e9ddd1e..8b8b981 100644
--- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.js
+++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.js
@@ -33,6 +33,7 @@
 import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 import {htmlTemplate} from './gr-dashboard-view_html.js';
 import {RESTClientBehavior} from '../../../behaviors/rest-client-behavior/rest-client-behavior.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 const PROJECT_PLACEHOLDER_PATTERN = /\$\{project\}/g;
 
@@ -155,7 +156,7 @@
   }
 
   _isViewActive(params) {
-    return params.view === Gerrit.Nav.View.DASHBOARD;
+    return params.view === GerritNav.View.DASHBOARD;
   }
 
   _paramsChanged(paramsChangeRecord) {
@@ -178,7 +179,7 @@
     const {project, dashboard, title, user, sections} = this.params;
     const dashboardPromise = project ?
       this._getProjectDashboard(project, dashboard) :
-      Promise.resolve(Gerrit.Nav.getUserDashboard(
+      Promise.resolve(GerritNav.getUserDashboard(
           user,
           sections,
           title || this._computeTitle(user)));
@@ -319,7 +320,7 @@
   }
 
   _computeDraftsLink() {
-    return Gerrit.Nav.getUrlForSearchQuery('has:draft -is:open');
+    return GerritNav.getUrlForSearchQuery('has:draft -is:open');
   }
 
   _createChangeTap(e) {
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.html b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.html
index 9e9a8f2..19742a5 100644
--- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.html
@@ -34,6 +34,8 @@
 import '../../../test/common-test-setup.js';
 import './gr-dashboard-view.js';
 import {isHidden} from '../../../test/test-utils.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
+
 suite('gr-dashboard-view tests', () => {
   let element;
   let sandbox;
@@ -186,7 +188,7 @@
 
     test('content is refreshed when user param is updated', () => {
       element.params = {
-        view: Gerrit.Nav.View.DASHBOARD,
+        view: GerritNav.View.DASHBOARD,
         user: 'self',
       };
       return paramsChangedPromise.then(() => {
@@ -198,7 +200,7 @@
   suite('selfOnly sections', () => {
     test('viewing self dashboard includes selfOnly sections', () => {
       element.params = {
-        view: Gerrit.Nav.View.DASHBOARD,
+        view: GerritNav.View.DASHBOARD,
         sections: [
           {query: '1'},
           {query: '2', selfOnly: true},
@@ -213,7 +215,7 @@
 
     test('viewing another user\'s dashboard omits selfOnly sections', () => {
       element.params = {
-        view: Gerrit.Nav.View.DASHBOARD,
+        view: GerritNav.View.DASHBOARD,
         sections: [
           {query: '1'},
           {query: '2', selfOnly: true},
@@ -228,7 +230,7 @@
 
   test('suffixForDashboard is included in getChanges query', () => {
     element.params = {
-      view: Gerrit.Nav.View.DASHBOARD,
+      view: GerritNav.View.DASHBOARD,
       sections: [
         {query: '1'},
         {query: '2', suffixForDashboard: 'suffix'},
@@ -357,7 +359,7 @@
       done();
     });
     element.params = {
-      view: Gerrit.Nav.View.DASHBOARD,
+      view: GerritNav.View.DASHBOARD,
       project: 'project',
       dashboard: 'dashboard',
     };
@@ -366,7 +368,7 @@
   test('params change triggers dashboardDisplayed()', () => {
     sandbox.stub(element.$.reporting, 'dashboardDisplayed');
     element.params = {
-      view: Gerrit.Nav.View.DASHBOARD,
+      view: GerritNav.View.DASHBOARD,
       project: 'project',
       dashboard: 'dashboard',
     };
diff --git a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header.js b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header.js
index e9a0387..5f0021e 100644
--- a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header.js
+++ b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header.js
@@ -18,13 +18,13 @@
 
 import '../../../styles/dashboard-header-styles.js';
 import '../../../styles/shared-styles.js';
-import '../../core/gr-navigation/gr-navigation.js';
 import '../../shared/gr-date-formatter/gr-date-formatter.js';
 import '../../shared/gr-rest-api-interface/gr-rest-api-interface.js';
 import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
 import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
 import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 import {htmlTemplate} from './gr-repo-header_html.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 /** @extends Polymer.Element */
 class GrRepoHeader extends GestureEventListeners(
@@ -51,7 +51,7 @@
       this._repoUrl = null;
       return;
     }
-    this._repoUrl = Gerrit.Nav.getUrlForRepo(repoName);
+    this._repoUrl = GerritNav.getUrlForRepo(repoName);
   }
 }
 
diff --git a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_test.html b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_test.html
index a075870..b0a8d1c 100644
--- a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_test.html
@@ -33,6 +33,8 @@
 <script type="module">
 import '../../../test/common-test-setup.js';
 import './gr-repo-header.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
+
 suite('gr-repo-header tests', () => {
   let element;
   let sandbox;
@@ -45,7 +47,7 @@
   teardown(() => { sandbox.restore(); });
 
   test('repoUrl reset once repo changed', () => {
-    sandbox.stub(Gerrit.Nav, 'getUrlForRepo',
+    sandbox.stub(GerritNav, 'getUrlForRepo',
         repoName => `http://test.com/${repoName}`
     );
     assert.equal(element._repoUrl, undefined);
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
index 3fc4291..6bb1bf8 100644
--- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
+++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.js
@@ -17,7 +17,6 @@
 import '../../../scripts/bundled-polymer.js';
 
 import '../../../styles/shared-styles.js';
-import '../../core/gr-navigation/gr-navigation.js';
 import '../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.js';
 import '../../plugins/gr-endpoint-param/gr-endpoint-param.js';
 import '../../shared/gr-avatar/gr-avatar.js';
@@ -28,6 +27,7 @@
 import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
 import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 import {htmlTemplate} from './gr-user-header_html.js';
+import {GerritNav} from '../../core/gr-navigation/gr-navigation.js';
 
 /**
  * @extends Polymer.Element
@@ -105,7 +105,7 @@
     const id = accountDetails._account_id;
     const email = accountDetails.email;
     if (!id && !email ) { return null; }
-    return Gerrit.Nav.getUrlForUserDashboard(id ? id : email);
+    return GerritNav.getUrlForUserDashboard(id ? id : email);
   }
 
   _computeDashboardLinkClass(showDashboardLink, loggedIn) {