PY-30474 reST preview: don't jump to a preview beginning on each edit

This commit is contained in:
Ekaterina Tuzova
2018-06-21 12:42:50 +03:00
parent d5a568766f
commit 2112caff6d

View File

@@ -24,6 +24,9 @@ import org.w3c.dom.html.HTMLAnchorElement;
import java.net.URL;
public class RestJavaFxHtmlPanel extends JavaFxHtmlPanel implements RestPreviewPanel {
private volatile int myYScrollPosition = 0;
private volatile int myXScrollPosition = 0;
public RestJavaFxHtmlPanel() {
super();
LafManager.getInstance().addLafManagerListener(new RestLafManagerListener());
@@ -34,6 +37,12 @@ public class RestJavaFxHtmlPanel extends JavaFxHtmlPanel implements RestPreviewP
webView.getEngine().getLoadWorker().stateProperty().addListener(new HyperlinkRedirectListener(webView));
updateLaf(LafManager.getInstance().getCurrentLookAndFeel() instanceof DarculaLookAndFeelInfo);
webView.getEngine().getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
scrollTo(webView, myXScrollPosition, myYScrollPosition);
}
});
});
}
@@ -97,4 +106,25 @@ public class RestJavaFxHtmlPanel extends JavaFxHtmlPanel implements RestPreviewP
};
}
}
private static void scrollTo(WebView view, int x, int y) {
view.getEngine().executeScript("window.scrollTo(" + x + ", " + y + ")");
}
private static int getVScrollValue(WebView view) {
return (Integer) view.getEngine().executeScript("document.body.scrollTop");
}
private static int getHScrollValue(WebView view) {
return (Integer) view.getEngine().executeScript("document.body.scrollLeft");
}
@Override
public void setHtml(@NotNull String html) {
runInPlatformWhenAvailable(() -> {
myYScrollPosition = getVScrollValue(getWebViewGuaranteed());
myXScrollPosition = getHScrollValue(getWebViewGuaranteed());
});
super.setHtml(html);
}
}