Merge "Use imported DocsUrlBehavior"
diff --git a/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior.js b/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior.js
index a75d439..add1df4 100644
--- a/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior.js
+++ b/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior.js
@@ -16,64 +16,48 @@
  */
 import {BaseUrlBehavior} from '../base-url-behavior/base-url-behavior.js';
 
-(function(window) {
-  'use strict';
+const PROBE_PATH = '/Documentation/index.html';
+const DOCS_BASE_PATH = '/Documentation';
 
-  const PROBE_PATH = '/Documentation/index.html';
-  const DOCS_BASE_PATH = '/Documentation';
+let cachedPromise;
 
-  let cachedPromise;
+/** @polymerBehavior DocsUrlBehavior */
+export const DocsUrlBehavior = [{
 
-  window.Gerrit = window.Gerrit || {};
-
-  /** @polymerBehavior Gerrit.DocsUrlBehavior */
-  Gerrit.DocsUrlBehavior = [{
-
-    /**
-     * Get the docs base URL from either the server config or by probing.
-     *
-     * @param {Object} config The server config.
-     * @param {!Object} restApi A REST API instance
-     * @return {!Promise<string>} A promise that resolves with the docs base
-     *     URL.
-     */
-    getDocsBaseUrl(config, restApi) {
-      if (!cachedPromise) {
-        cachedPromise = new Promise(resolve => {
-          if (config && config.gerrit && config.gerrit.doc_url) {
-            resolve(config.gerrit.doc_url);
-          } else {
-            restApi.probePath(this.getBaseUrl() + PROBE_PATH).then(ok => {
-              resolve(ok ? (this.getBaseUrl() + DOCS_BASE_PATH) : null);
-            });
-          }
-        });
-      }
-      return cachedPromise;
-    },
-
-    /** For testing only. */
-    _clearDocsBaseUrlCache() {
-      cachedPromise = undefined;
-    },
+  /**
+   * Get the docs base URL from either the server config or by probing.
+   *
+   * @param {Object} config The server config.
+   * @param {!Object} restApi A REST API instance
+   * @return {!Promise<string>} A promise that resolves with the docs base
+   *     URL.
+   */
+  getDocsBaseUrl(config, restApi) {
+    if (!cachedPromise) {
+      cachedPromise = new Promise(resolve => {
+        if (config && config.gerrit && config.gerrit.doc_url) {
+          resolve(config.gerrit.doc_url);
+        } else {
+          restApi.probePath(this.getBaseUrl() + PROBE_PATH).then(ok => {
+            resolve(ok ? (this.getBaseUrl() + DOCS_BASE_PATH) : null);
+          });
+        }
+      });
+    }
+    return cachedPromise;
   },
-  BaseUrlBehavior,
-  ];
 
-  // eslint-disable-next-line no-unused-vars
-  function defineEmptyMixin() {
-    // This is a temporary function.
-    // Polymer linter doesn't process correctly the following code:
-    // class MyElement extends Polymer.mixinBehaviors([legacyBehaviors], ...) {...}
-    // To workaround this issue, the mock mixin is declared in this method.
-    // In the following changes, legacy behaviors will be converted to mixins.
+  /** For testing only. */
+  _clearDocsBaseUrlCache() {
+    cachedPromise = undefined;
+  },
+},
+BaseUrlBehavior,
+];
 
-    /**
-     * @polymer
-     * @mixinFunction
-     */
-    Gerrit.DocsUrlMixin = base =>
-      class extends base {
-      };
-  }
-})(window);
+// TODO(dmfilippov) Remove the following lines with assignments
+// Plugins can use the behavior because it was accessible with
+// the global Gerrit... variable. To avoid breaking changes in plugins
+// temporary assign global variables.
+window.Gerrit = window.Gerrit || {};
+window.Gerrit.DocsUrlBehavior = DocsUrlBehavior;
diff --git a/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior_test.html b/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior_test.html
index 36eec89..0efd80f 100644
--- a/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior_test.html
+++ b/polygerrit-ui/app/behaviors/docs-url-behavior/docs-url-behavior_test.html
@@ -29,8 +29,8 @@
 
 <script type="module">
 import '../../test/common-test-setup.js';
-import './docs-url-behavior.js';
 import {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';
+import {DocsUrlBehavior} from './docs-url-behavior.js';
 suite('docs-url-behavior tests', () => {
   let element;
 
@@ -38,7 +38,7 @@
     // Define a Polymer element that uses this behavior.
     Polymer({
       is: 'docs-url-behavior-element',
-      behaviors: [Gerrit.DocsUrlBehavior],
+      behaviors: [DocsUrlBehavior],
     });
   });
 
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
index 713583e..6ec8594 100644
--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
@@ -16,7 +16,6 @@
  */
 import '../../../scripts/bundled-polymer.js';
 
-import '../../../behaviors/docs-url-behavior/docs-url-behavior.js';
 import '../../../behaviors/fire-behavior/fire-behavior.js';
 import '../../../behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior.js';
 import '../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.js';
@@ -32,6 +31,7 @@
 import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 import {htmlTemplate} from './gr-main-header_html.js';
 import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
+import {DocsUrlBehavior} from '../../../behaviors/docs-url-behavior/docs-url-behavior.js';
 
 const DEFAULT_LINKS = [{
   title: 'Changes',
@@ -87,14 +87,13 @@
 
 /**
  * @appliesMixin Gerrit.AdminNavMixin
- * @appliesMixin Gerrit.DocsUrlMixin
  * @appliesMixin Gerrit.FireMixin
  * @extends Polymer.Element
  */
 class GrMainHeader extends mixinBehaviors( [
   Gerrit.AdminNavBehavior,
   BaseUrlBehavior,
-  Gerrit.DocsUrlBehavior,
+  DocsUrlBehavior,
   Gerrit.FireBehavior,
 ], GestureEventListeners(
     LegacyElementMixin(
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
index 733fa56..e86ae99 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
@@ -17,7 +17,6 @@
 import '../../../scripts/bundled-polymer.js';
 
 import '@polymer/iron-input/iron-input.js';
-import '../../../behaviors/docs-url-behavior/docs-url-behavior.js';
 import '@polymer/paper-toggle-button/paper-toggle-button.js';
 import '../../../styles/gr-form-styles.js';
 import '../../../styles/gr-menu-page-styles.js';
@@ -48,6 +47,7 @@
 import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
 import {PolymerElement} from '@polymer/polymer/polymer-element.js';
 import {htmlTemplate} from './gr-settings-view_html.js';
+import {DocsUrlBehavior} from '../../../behaviors/docs-url-behavior/docs-url-behavior.js';
 
 const PREFS_SECTION_FIELDS = [
   'changes_per_page',
@@ -78,13 +78,12 @@
 ];
 
 /**
- * @appliesMixin Gerrit.DocsUrlMixin
  * @appliesMixin Gerrit.ChangeTableMixin
  * @appliesMixin Gerrit.FireMixin
  * @extends Polymer.Element
  */
 class GrSettingsView extends mixinBehaviors( [
-  Gerrit.DocsUrlBehavior,
+  DocsUrlBehavior,
   Gerrit.ChangeTableBehavior,
   Gerrit.FireBehavior,
 ], GestureEventListeners(