From 367c7751a6ff9234fd47bc5a48e6ef9a4117a7a2 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Wed, 27 Sep 2017 11:40:17 +0300 Subject: Add option to use PushState instead of URI fragments in Navigator (#10042) * Navigator now by default uses pushState and normal URLs * added documentation for pushState and updated Navigator documentation * improving docs etc, adding one TODO to be solved before merging * pushState/replaceState no work better with changing titles * Making uri fragment navigator work when not using specially mapped UI * Revert to older default, add annotation for selecting * Fix tests, add null checks * Reorder if-clause, fix tests * Revert unnecessary test change * Use correct variable in UI, fix test clean up * Updates to JavaDocs, fix some methods and tests * Add comments, fix test ui, TODO for fallbacks * Navigation documentation, JavaDocs, removed TODOs * Documentation fixes * Improve JavaDocs * Fix link name in documentation * Improve throws declaration in getLocation * Change documentation about the PushState based navigation * Add since tags * Add since tags for UI --- .../java/com/vaadin/launcher/ApplicationRunnerServlet.java | 9 +++++++++ .../tests/components/ui/PushStateAndReplaceState.java | 3 +++ .../navigator/NavigatorViewBlocksBackButtonAction.java | 2 ++ uitest/src/main/webapp/WEB-INF/web.xml | 14 ++++++++++++++ .../combobox/ComboBoxPopupPositionEmbeddedInDivTest.java | 5 +++++ 5 files changed, 33 insertions(+) (limited to 'uitest') diff --git a/uitest/src/main/java/com/vaadin/launcher/ApplicationRunnerServlet.java b/uitest/src/main/java/com/vaadin/launcher/ApplicationRunnerServlet.java index 6835b5fb0b..97689033d5 100644 --- a/uitest/src/main/java/com/vaadin/launcher/ApplicationRunnerServlet.java +++ b/uitest/src/main/java/com/vaadin/launcher/ApplicationRunnerServlet.java @@ -52,6 +52,7 @@ import com.vaadin.server.SystemMessages; import com.vaadin.server.SystemMessagesInfo; import com.vaadin.server.SystemMessagesProvider; import com.vaadin.server.UIClassSelectionEvent; +import com.vaadin.server.UICreateEvent; import com.vaadin.server.UIProvider; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinService; @@ -59,6 +60,7 @@ import com.vaadin.server.VaadinServlet; import com.vaadin.server.VaadinServletRequest; import com.vaadin.server.VaadinServletService; import com.vaadin.server.VaadinSession; +import com.vaadin.shared.ApplicationConstants; import com.vaadin.tests.components.TestBase; import com.vaadin.ui.UI; import com.vaadin.util.CurrentInstance; @@ -267,6 +269,13 @@ public class ApplicationRunnerServlet extends LegacyVaadinServlet { public Class getUIClass(UIClassSelectionEvent event) { return (Class) classToRun; } + + @Override + public UI createInstance(UICreateEvent event) { + event.getRequest().setAttribute(ApplicationConstants.UI_ROOT_PATH, + "/" + event.getUIClass().getName()); + return super.createInstance(event); + } } // TODO Don't need to use a data object now that there's only one field diff --git a/uitest/src/main/java/com/vaadin/tests/components/ui/PushStateAndReplaceState.java b/uitest/src/main/java/com/vaadin/tests/components/ui/PushStateAndReplaceState.java index 22788f326c..962bcb95ca 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/ui/PushStateAndReplaceState.java +++ b/uitest/src/main/java/com/vaadin/tests/components/ui/PushStateAndReplaceState.java @@ -2,6 +2,7 @@ package com.vaadin.tests.components.ui; import java.net.URI; +import com.vaadin.annotations.Title; import com.vaadin.server.Page; import com.vaadin.server.Page.PopStateEvent; import com.vaadin.server.Page.PopStateListener; @@ -13,6 +14,7 @@ import com.vaadin.ui.CheckBox; import com.vaadin.ui.Label; import com.vaadin.ui.Notification; +@Title("Original title") public class PushStateAndReplaceState extends AbstractReindeerTestUI { private final Label locationLabel = new Label(); @@ -48,6 +50,7 @@ public class PushStateAndReplaceState extends AbstractReindeerTestUI { Button button = new Button(caption, new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { + getPage().setTitle(caption); if (replace.getValue()) { getPage().replaceState(newUri); } else { diff --git a/uitest/src/main/java/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java b/uitest/src/main/java/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java index 60be2f6e74..9a62729bd3 100644 --- a/uitest/src/main/java/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java +++ b/uitest/src/main/java/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java @@ -1,6 +1,7 @@ package com.vaadin.tests.navigator; import com.vaadin.navigator.Navigator; +import com.vaadin.navigator.PushStateNavigation; import com.vaadin.navigator.View; import com.vaadin.navigator.ViewChangeListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; @@ -13,6 +14,7 @@ import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; +@PushStateNavigation public class NavigatorViewBlocksBackButtonAction extends AbstractReindeerTestUI { diff --git a/uitest/src/main/webapp/WEB-INF/web.xml b/uitest/src/main/webapp/WEB-INF/web.xml index b1ec909d21..1771a0bd98 100644 --- a/uitest/src/main/webapp/WEB-INF/web.xml +++ b/uitest/src/main/webapp/WEB-INF/web.xml @@ -151,6 +151,20 @@ true + + Navigator test + com.vaadin.server.VaadinServlet + + UI + com.vaadin.tests.navigator.NavigatorViewBlocksBackButtonAction + + true + + + + Navigator test + /navigator-test/* + Embed App 1 /embed1/* diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupPositionEmbeddedInDivTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupPositionEmbeddedInDivTest.java index 2845283c7a..682712dcbb 100644 --- a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupPositionEmbeddedInDivTest.java +++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupPositionEmbeddedInDivTest.java @@ -49,4 +49,9 @@ public class ComboBoxPopupPositionEmbeddedInDivTest extends MultiBrowserTest { Assert.assertTrue("Popup should be left aligned with the combobox", popupLocation.getX() == comboboxLocation.getX()); } + + @Override + protected Class getUIClass() { + return ComboBoxEmbeddedInDiv.class; + } } -- cgit v1.2.3