Use gitweb rather than gitiles in weblink (when available)

Besides using a plugin such as gitiles to add web_links information to
the commit, Gerrit also supports configuring the link through the gitweb
section of the server config. Use this information rather than web_links
when it's available.

Related to change: https://gerrit-review.googlesource.com/c/76655/

Bug: Issue 3950
Bug: Issue 4032
Change-Id: I346824c6db0f5451bca60a56ec61efafcb9cf715
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
index 5f76a79..98e8e9a 100644
--- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
+++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.html
@@ -106,11 +106,11 @@
     <section>
       <span class="title">Commit</span>
       <span class="value">
-        <template is="dom-if" if="[[_computeShowWebLink(commitInfo)]]">
+        <template is="dom-if" if="[[_showWebLink]]">
           <a target="_blank"
-              href$="[[_computeWebLink(commitInfo)]]">[[_computeShortHash(change)]]</a>
+              href$="[[_webLink]]">[[_computeShortHash(change)]]</a>
         </template>
-        <template is="dom-if" if="[[!_computeShowWebLink(commitInfo)]]">
+        <template is="dom-if" if="[[!_showWebLink]]">
           [[_computeShortHash(change)]]
         </template>
       </span>
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js
index 8e2e000..825b88b 100644
--- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js
+++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.js
@@ -30,17 +30,35 @@
       commitInfo: Object,
       mutable: Boolean,
       serverConfig: Object,
+      _showWebLink: {
+        type: Boolean,
+        computed: '_computeShowWebLink(change, commitInfo, serverConfig)',
+      },
+      _webLink: {
+        type: String,
+        computed: '_computeWebLink(change, commitInfo, serverConfig)',
+      },
     },
 
     behaviors: [
       Gerrit.RESTClientBehavior,
     ],
 
-    _computeShowWebLink: function(commitInfo) {
-      return commitInfo.web_links && commitInfo.web_links.length;
+    _computeShowWebLink: function(change, commitInfo, serverConfig) {
+      return (commitInfo.web_links && commitInfo.web_links.length) || (
+          serverConfig.gitweb && serverConfig.gitweb.url &&
+          serverConfig.gitweb.type && serverConfig.gitweb.type.revision);
     },
 
-    _computeWebLink: function(commitInfo) {
+    _computeWebLink: function(change, commitInfo, serverConfig) {
+      if (serverConfig.gitweb && serverConfig.gitweb.url &&
+          serverConfig.gitweb.type && serverConfig.gitweb.type.revision) {
+        return serverConfig.gitweb.url +
+            serverConfig.gitweb.type.revision
+                .replace('${project}', change.project)
+                .replace('${commit}', commitInfo.commit);
+      }
+
       return '../../' + commitInfo.web_links[0].url;
     },