Skip to content

Commit

Permalink
fix: open external links with a target attribute like plain external …
Browse files Browse the repository at this point in the history
…links
  • Loading branch information
jansorg authored and ahtrotta committed Mar 6, 2024
1 parent bb25a8b commit 4494a4b
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,10 @@ public void showAppMapTreePanel() {

if (c instanceof CollapsiblePanel) {
((CollapsiblePanel) c).setCollapsed(false);
} else if (c instanceof Splitter) {
if (previous != null) {
var splitter = (Splitter) c;
if (previous.equals(splitter.getFirstComponent())) {
splitter.setProportion(1.0f);
} else if (previous.equals(splitter.getSecondComponent())) {
splitter.setProportion(0.0f);
}
}
} else if (c instanceof Splitter && previous != null) {
var splitter = (Splitter) c;
// 1.0 to display the first component, 0.0 to display the other component
splitter.setProportion(previous.equals(splitter.getFirstComponent()) ? 1.0f : 0.0f);
}

previous = c;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package appland.toolwindow.signInView;

import appland.webviews.OpenExternalTargetLinksHandler;
import appland.oauth.AppMapLoginAction;
import appland.toolwindow.AppMapToolWindowContent;
import appland.utils.GsonUtils;
import appland.webviews.ConsoleInitMessageHandler;
import appland.webviews.OpenExternalLinksHandler;
import appland.webviews.webserver.AppMapWebview;
import com.google.gson.JsonObject;
import com.intellij.ide.BrowserUtil;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.ui.SimpleToolWindowPanel;
Expand All @@ -18,7 +18,6 @@
import com.intellij.ui.jcef.JCEFHtmlPanel;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.handler.CefLifeSpanHandlerAdapter;
import org.cef.handler.CefRequestHandlerAdapter;
import org.cef.network.CefRequest;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -72,16 +71,7 @@ public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest req
}, htmlPanel.getCefBrowser());

// open new webview windows, which are opened via <a href="..." target="_blank", in the external browser
htmlPanel.getJBCefClient().addLifeSpanHandler(new CefLifeSpanHandlerAdapter() {
@Override
public boolean onBeforePopup(CefBrowser browser, CefFrame frame, String target_url, String target_frame_name) {
if (target_url.startsWith("http://") || target_url.startsWith("https://")) {
BrowserUtil.browse(target_url);
return true;
}
return false;
}
}, htmlPanel.getCefBrowser());
htmlPanel.getJBCefClient().addLifeSpanHandler(new OpenExternalTargetLinksHandler(), htmlPanel.getCefBrowser());

htmlPanel.getJBCefClient().addDisplayHandler(new ConsoleInitMessageHandler(this::initWebView), htmlPanel.getCefBrowser());

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package appland.webviews;

import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.handler.CefLifeSpanHandlerAdapter;

/**
* Links with 'target="_blank"' are not passed by JCEF to our external link handler.
* This handler takes care of links with a target.
*/
public final class OpenExternalTargetLinksHandler extends CefLifeSpanHandlerAdapter {
@Override
public boolean onBeforePopup(CefBrowser browser, CefFrame frame, String target_url, String target_frame_name) {
return OpenExternalLinksHandler.openExternalLink(target_url);
}
}
2 changes: 2 additions & 0 deletions plugin-core/src/main/java/appland/webviews/WebviewEditor.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ protected boolean isWebViewReady() {
private void setupJCEF() {
// open links to https://appmap.io in the external browser
contentPanel.getJBCefClient().addRequestHandler(new OpenExternalLinksHandler(), contentPanel.getCefBrowser());
// open new webview windows, which are opened via <a href="..." target="_blank", in the external browser
contentPanel.getJBCefClient().addLifeSpanHandler(new OpenExternalTargetLinksHandler(), contentPanel.getCefBrowser());
// add auth tokens to our localhost requests
contentPanel.getJBCefClient().addRequestHandler(new WebviewAuthTokenRequestHandler(), contentPanel.getCefBrowser());

Expand Down

0 comments on commit 4494a4b

Please sign in to comment.