mirror of
https://gitlab.kit.edu/uskyk/typicalc.git
synced 2024-11-08 18:30:42 +00:00
Fix history issues
This commit is contained in:
parent
029b088b38
commit
37b3be5066
@ -38,6 +38,7 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
|
||||
private static final short MAX_INPUT_LENGTH = 1000;
|
||||
|
||||
private final transient Consumer<Pair<String, Map<String, String>>> callback;
|
||||
private final TextField inputField;
|
||||
private TypeAssumptionsArea typeAssumptionsArea;
|
||||
private final Button inferTypeButton;
|
||||
@ -50,6 +51,8 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
* @param callback Consumer to call the inferType()-method in UpperBar
|
||||
*/
|
||||
protected InputBar(Consumer<Pair<String, Map<String, String>>> callback) {
|
||||
this.callback = callback;
|
||||
|
||||
Button infoIcon = new Button(new Icon(VaadinIcon.INFO_CIRCLE));
|
||||
infoIcon.addClickListener(event -> onInfoIconClick());
|
||||
|
||||
@ -78,7 +81,7 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
typeAssumptionsArea = new TypeAssumptionsArea();
|
||||
Button exampleButton = new Button(VaadinIcon.PAPERCLIP.create(), event -> onExampleButtonClick());
|
||||
exampleButton.setId(EXAMPLE_BUTTON_ID);
|
||||
inferTypeButton = new Button("", event -> onTypeInferButtonClick(callback));
|
||||
inferTypeButton = new Button("", event -> onTypeInferButtonClick());
|
||||
inferTypeButton.addClickShortcut(Key.ENTER).listenOn(this);
|
||||
inferTypeButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
||||
inferTypeButton.setId(INFER_BUTTON_ID);
|
||||
@ -88,13 +91,12 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the provided string as the value of the inputField and starts the type inference algorithm.
|
||||
* Sets the provided string as the value of the inputField.
|
||||
*
|
||||
* @param term the provided string
|
||||
*/
|
||||
protected void inferTerm(String term) {
|
||||
protected void setTerm(String term) {
|
||||
inputField.setValue(term);
|
||||
UI.getCurrent().getPage().executeJs("document.getElementById($0).click()", INFER_BUTTON_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,15 +108,10 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
typeAssumptionsArea = new TypeAssumptionsArea(typeAssumptions);
|
||||
}
|
||||
|
||||
private void onTypeInferButtonClick(Consumer<Pair<String, Map<String, String>>> callback) {
|
||||
private void onTypeInferButtonClick() {
|
||||
String currentInput = inputField.getOptionalValue().orElse(StringUtils.EMPTY);
|
||||
inputField.blur();
|
||||
|
||||
if ("".equals(currentInput)) {
|
||||
UI.getCurrent().getPage().setTitle(getTranslation("root.typicalc"));
|
||||
} else {
|
||||
UI.getCurrent().getPage().setTitle(getTranslation("root.typicalc") + " - " + currentInput);
|
||||
}
|
||||
callback.accept(Pair.of(currentInput, typeAssumptionsArea.getTypeAssumptions()));
|
||||
}
|
||||
|
||||
@ -123,7 +120,7 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
|
||||
}
|
||||
|
||||
private void onExampleButtonClick() {
|
||||
Dialog exampleDialog = new ExampleDialog(this::inferTerm);
|
||||
Dialog exampleDialog = new ExampleDialog(this::setTerm);
|
||||
exampleDialog.open();
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -41,6 +42,7 @@ public class MainViewImpl extends AppLayout
|
||||
public static final String PAGE_TITLE = "Typicalc";
|
||||
|
||||
private final UpperBar upperBar;
|
||||
private transient Optional<TypeInferenceView> tiv = Optional.empty();
|
||||
|
||||
/**
|
||||
* Creates a new MainViewImpl.
|
||||
@ -55,8 +57,8 @@ public class MainViewImpl extends AppLayout
|
||||
|
||||
@Override
|
||||
public void setTypeInferenceView(TypeInfererInterface typeInferer) {
|
||||
TypeInferenceView tiv = new TypeInferenceView(typeInferer);
|
||||
setContent(tiv);
|
||||
tiv = Optional.of(new TypeInferenceView(typeInferer));
|
||||
setContent(tiv.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -67,6 +69,7 @@ public class MainViewImpl extends AppLayout
|
||||
|
||||
@Override
|
||||
public void beforeEnter(BeforeEnterEvent event) {
|
||||
tiv = Optional.empty();
|
||||
if (event.getLocation().getPath().matches(TypeInferenceView.ROUTE + "/.*")) {
|
||||
Location url = event.getLocation();
|
||||
List<String> segments = url.getSegments();
|
||||
@ -83,6 +86,11 @@ public class MainViewImpl extends AppLayout
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterNavigation() {
|
||||
// this method ensures that the content is visible after navigation
|
||||
tiv.ifPresent(this::setContent);
|
||||
}
|
||||
|
||||
private void setTermInURL(Pair<String, Map<String, String>> lambdaTermAndAssumptions) {
|
||||
String lambdaTerm = lambdaTermAndAssumptions.getLeft();
|
||||
@ -99,7 +107,7 @@ public class MainViewImpl extends AppLayout
|
||||
if (types.length() > 0) {
|
||||
typeAssumptions = "?" + types.toString();
|
||||
}
|
||||
UI.getCurrent().getPage().getHistory().replaceState(null,
|
||||
UI.getCurrent().getPage().getHistory().pushState(null,
|
||||
new Location(TypeInferenceView.ROUTE + "/" + lambdaTerm + typeAssumptions));
|
||||
}
|
||||
|
||||
|
@ -62,25 +62,30 @@ public class UpperBar extends HorizontalLayout {
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the type inference algorithm by passing the required arguments to the MainViewListener.
|
||||
* Starts the type inference algorithm by passing the required arguments to the MainViewListener
|
||||
* and updating the URL.
|
||||
*
|
||||
* @param termAndAssumptions the lambda term to be type-inferred and the type assumptions to use
|
||||
*/
|
||||
protected void typeInfer(Pair<String, Map<String, String>> termAndAssumptions) {
|
||||
setTermInURL.accept(termAndAssumptions);
|
||||
presenter.typeInferLambdaString(termAndAssumptions.getLeft(), termAndAssumptions.getRight());
|
||||
startInfer(termAndAssumptions.getLeft(), termAndAssumptions.getRight());
|
||||
}
|
||||
|
||||
private void startInfer(String term, Map<String, String> typeAssumptions) {
|
||||
presenter.typeInferLambdaString(term, typeAssumptions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the inferTerm method in {@link InputBar} with the provided
|
||||
* string as the argument.
|
||||
* Sets the lambda term and type assumptions in the InputBar and starts the inference.
|
||||
*
|
||||
* @param term the provided string
|
||||
* @param typeAssumptions type assumptions to use
|
||||
*/
|
||||
protected void inferTerm(String term, Map<String, String> typeAssumptions) {
|
||||
inputBar.setTypeAssumptions(typeAssumptions);
|
||||
inputBar.inferTerm(term);
|
||||
inputBar.setTerm(term);
|
||||
startInfer(term, typeAssumptions);
|
||||
}
|
||||
|
||||
private void onHelpIconClick() {
|
||||
|
Loading…
Reference in New Issue
Block a user