package com.kodcu.component;
import com.kodcu.controller.ApplicationController;
import com.kodcu.engine.AsciidocWebkitConverter;
import com.kodcu.other.Current;
import com.kodcu.service.ThreadService;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import netscape.javascript.JSObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* Created by usta on 09.04.2015.
*/
@Component
public class SlidePane extends ViewPanel {
private String backend = "revealjs";
private Logger logger = LoggerFactory.getLogger(SlidePane.class);
private final AsciidocWebkitConverter asciidocWebkitConverter;
@Autowired
public SlidePane(ThreadService threadService, ApplicationController controller, Current current, AsciidocWebkitConverter asciidocWebkitConverter) {
super(threadService, controller, current);
this.asciidocWebkitConverter = asciidocWebkitConverter;
}
@PostConstruct
public void afterInit() {
threadService.runActionLater(() -> {
getWindow().setMember("afx", controller);
ReadOnlyObjectProperty<Worker.State> stateProperty = webEngine().getLoadWorker().stateProperty();
stateProperty.addListener(this::stateListener);
});
}
private void stateListener(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
if (newValue == Worker.State.SUCCEEDED) {
getWindow().setMember("afx", controller);
if ("revealjs".equals(backend))
this.loadJs("/afx/worker/js/?p=js/jquery.js", "/afx/worker/js/?p=js/reveal-extensions.js");
if ("deckjs".equals(backend))
this.loadJs("/afx/worker/js/?p=js/deck-extensions.js");
}
}
public void replaceSlides(String rendered) {
getWindow().setMember("afx", controller);
String backendExt = backend + "Ext";
try {
((JSObject) getWindow().eval(backendExt)).call("replaceSlides", rendered);
} catch (Exception e) {
logger.debug("{} is not found while replacing slide, but don't worry.", backendExt, e);
}
}
@Override
public void runScroller(String text) {
String backendExt = backend + "Ext";
try {
((JSObject) getWindow().eval(backendExt)).call("flipCurrentPage", text);
} catch (Exception e) {
logger.debug("{} is not found while flipping page, but don't worry.", backendExt, e);
}
}
@Override
public void scrollByPosition(String text) {
if (stopScrolling.get())
return;
runScroller(text);
}
@Override
public void scrollByLine(String lineno) {
if (stopJumping.get())
return;
runScroller(lineno);
}
public String findRenderedSelection(String content) {
this.setMember("context", content);
return (String) webEngine().executeScript("findRenderedSelection(context)");
}
@Override
public void browse() {
super.browse();
}
public void setBackend(String backend) {
this.backend = backend;
}
public String getBackend() {
return backend;
}
}