Skip to content

Commit 5dde7f6

Browse files
committed
testBodyReplace
1 parent 024d833 commit 5dde7f6

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

org.eclipse.lsp4e/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Export-Package: org.eclipse.lsp4e;x-friends:="org.eclipse.lsp4e.debug,org.eclips
6262
org.eclipse.lsp4e.ui
6363
Bundle-Vendor: Eclipse LSP4E
6464
Import-Package: com.google.common.base,
65-
com.google.gson;version="2.7.0"
65+
com.google.gson;version="2.7.0",
66+
org.apache.commons.lang;version="[2.6.0,3.0.0)"
6667
Automatic-Module-Name: org.eclipse.lsp4e
6768
Service-Component: OSGI-INF/org.eclipse.lsp4e.format.DefaultFormatRegionsProvider.xml

org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/hover/FocusableBrowserInformationControl.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@
1212
*******************************************************************************/
1313
package org.eclipse.lsp4e.operations.hover;
1414

15+
import java.lang.reflect.Field;
1516
import java.net.URL;
17+
import java.util.Objects;
1618
import java.util.UUID;
1719

20+
import org.apache.commons.lang.StringEscapeUtils;
1821
import org.eclipse.core.runtime.FileLocator;
1922
import org.eclipse.core.runtime.Platform;
2023
import org.eclipse.jdt.annotation.Nullable;
@@ -93,6 +96,13 @@ protected void createContent(Composite parent) {
9396
b.setJavascriptEnabled(true);
9497
}
9598

99+
100+
public void setTextInBrowser(final Browser browser, final String text) {
101+
String escapedHtmlBody = StringEscapeUtils.escapeJavaScript(text);
102+
safeExecute(browser, "document.body.innerHTML = \"" + escapedHtmlBody + "\";"); //$NON-NLS-1$//$NON-NLS-2$
103+
updateBrowserSize(browser);
104+
}
105+
96106
private void updateBrowserSize(final Browser browser) {
97107
if (getShell().isDisposed() || browser.isDisposed() || getInput() == null)
98108
return;
@@ -102,7 +112,7 @@ private void updateBrowserSize(final Browser browser) {
102112
Point hint = computeSizeHint();
103113
setSize(hint.x, hint.y);
104114

105-
if (!"complete".equals(safeEvaluate(browser, "return document.readyState"))) { //$NON-NLS-1$ //$NON-NLS-2$
115+
if (!"complete".equals(safeEvaluate(browser, "if (document.documentElement === null) {return 'no content';} return document.readyState;"))) { //$NON-NLS-1$ //$NON-NLS-2$
106116
UI.getDisplay().timerExec(200, () -> updateBrowserSize(browser));
107117
return;
108118
}
@@ -183,7 +193,15 @@ public void setInput(@Nullable Object input) {
183193
return;
184194
}
185195
if (html != null && !html.isBlank()) {
186-
super.setInput(styleHtml(html));
196+
try {
197+
Field f = BrowserInformationControl.class.getDeclaredField("fBrowser"); //$NON-NLS-1$
198+
f.setAccessible(true);
199+
Browser browser = (Browser) f.get(this);
200+
Objects.requireNonNull(browser);
201+
setTextInBrowser(browser, html);
202+
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
203+
super.setInput(html);
204+
}
187205
} else {
188206
// No content from LS; hide placeholder
189207
super.setInput(""); //$NON-NLS-1$

0 commit comments

Comments
 (0)