Add file web links for preview in side-by-side diff view In the side-by-side diff view there is now a preview icon to render Markdown files as HTML. This way the formatting can be easily checked while reviewing. Change-Id: I24bffa1ebdab31bd18c965d9b76c0f5b1a9ec509 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java index b2de009..28c89a5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java
@@ -18,6 +18,7 @@ import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.webui.BranchWebLink; +import com.google.gerrit.extensions.webui.FileWebLink; import com.google.gerrit.extensions.webui.GerritTopMenu; import com.google.gerrit.extensions.webui.ProjectWebLink; import com.google.gerrit.extensions.webui.TopMenu; @@ -42,6 +43,8 @@ .to(XDocWebLink.class); DynamicSet.bind(binder(), BranchWebLink.class) .to(XDocWebLink.class); + DynamicSet.bind(binder(), FileWebLink.class) + .to(XDocPatchWebLink.class); DynamicSet.bind(binder(), TopMenu.class).toInstance(new TopMenu() { @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocPatchWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocPatchWebLink.java new file mode 100644 index 0000000..912e520 --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocPatchWebLink.java
@@ -0,0 +1,45 @@ +// Copyright (C) 2014 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.googlesource.gerrit.plugins.xdocs; + +import com.google.common.cache.LoadingCache; +import com.google.gerrit.extensions.annotations.PluginName; +import com.google.gerrit.extensions.webui.FileWebLink; +import com.google.gerrit.httpd.resources.Resource; +import com.google.gerrit.server.git.GitRepositoryManager; +import com.google.inject.Inject; +import com.google.inject.name.Named; + +public class XDocPatchWebLink extends XDocWebLink implements FileWebLink { + + @Inject + XDocPatchWebLink( + @PluginName String pluginName, + GitRepositoryManager repoManager, + @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache) { + super(pluginName, repoManager, cache); + } + + @Override + public String getLinkName() { + return "preview"; + } + + @Override + public String getFileUrl(String projectName, String revision, + String fileName) { + return super.getPatchUrl(projectName, revision, fileName); + } +}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java index 8a8ac59..9d28b04 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java +++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java
@@ -65,25 +65,34 @@ @Override public String getBranchUrl(String projectName, String branchName) { + return getPatchUrl(projectName, branchName, "README.md"); + } + + public String getPatchUrl(String projectName, String revision, + String fileName) { + if (!fileName.endsWith(".md")) { + return null; + } + Project.NameKey p = new Project.NameKey(projectName); try { Repository repo = repoManager.openRepository(p); try { - ObjectId revId = repo.resolve(branchName); + ObjectId revId = repo.resolve(revision); if (revId == null) { return null; } Resource rsc = docCache.getUnchecked( - (new XDocResourceKey(p, "README.md", revId)).asString()); + (new XDocResourceKey(p, fileName, revId)).asString()); if (rsc != Resource.NOT_FOUND) { StringBuilder url = new StringBuilder(); url.append("plugins/"); url.append(pluginName); url.append(XDocServlet.PATH_PREFIX); url.append(Url.encode(projectName)); - if (branchName != null && !Constants.HEAD.equals(branchName)) { + if (revision != null && !Constants.HEAD.equals(revision)) { url.append("/rev/"); - url.append(Url.encode(branchName)); + url.append(Url.encode(revision)); } url.append("/README.md"); return url.toString();