added some tabindex fix scripts

This commit is contained in:
anhefti 2021-08-03 17:57:03 +02:00
parent fe3a6519e0
commit 9be252f333
6 changed files with 36 additions and 13 deletions

View file

@ -12,12 +12,10 @@ import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.widgets.IControlAdapter;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Text;
@ -30,7 +28,6 @@ import org.springframework.stereotype.Component;
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
import ch.ethz.seb.sebserver.gui.service.i18n.I18nSupport;
import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey;
import ch.ethz.seb.sebserver.gui.service.page.ComposerService;
import ch.ethz.seb.sebserver.gui.service.page.PageContext;
import ch.ethz.seb.sebserver.gui.service.page.PageService;
import ch.ethz.seb.sebserver.gui.service.page.TemplateComposer;
@ -142,11 +139,6 @@ public class LoginPage implements TemplateComposer {
registerButton.setLayoutData(gridData);
registerButton.addListener(SWT.Selection, event -> pageContext.forwardToPage(this.defaultRegisterPage));
}
ComposerService.traversePageTree(
parent,
comp -> comp instanceof Control,
comp -> comp.getAdapter(IControlAdapter.class).setTabIndex(0));
}
private void login(

View file

@ -11,8 +11,9 @@ package ch.ethz.seb.sebserver.gui.service.page;
/** interface defining a RAP page template composer */
public interface TemplateComposer {
/** Validate given PageContext for completeness to compose a specific TemplateComposer implementation
* Default returns always true.
/** Validate given PageContext for completeness to compose a specific TemplateComposer implementation
* Default returns always true.
*
* @param pageContext The PageContext instance to check
* @return true if the PageContext contains all mandatory data to compose this page template */
default boolean validate(final PageContext pageContext) {

View file

@ -13,6 +13,8 @@ import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MessageBox;
@ -44,6 +46,20 @@ public class ComposerServiceImpl implements ComposerService {
private static final Logger log = LoggerFactory.getLogger(ComposerServiceImpl.class);
public static final String TABINDEX_RESET_SCRIPT =
"try {\n"
+ " document.body.setAttribute(\"tabindex\", \"0\");\n"
+ " var items = document.body.getElementsByTagName('div');\n"
+ " console.log('*** '+items.length);\n"
+ " for (i = 0; i < items.length; i++) {\n"
+ " if(items[i].hasAttribute(\"tabindex\")) {\n"
+ " items[i].setAttribute(\"tabindex\", \"0\");\n"
+ " }\n"
+ " }\n"
+ "} catch (error) {\n"
+ " console.error(error);\n"
+ "}";
private final Class<? extends PageDefinition> loginPageType = DefaultLoginPage.class;
private final Class<? extends PageDefinition> mainPageType = DefaultMainPage.class;
@ -138,6 +154,11 @@ public class ComposerServiceImpl implements ComposerService {
PageService.clearComposite(pageContext.getParent());
try {
// apply tabindex reset script
final JavaScriptExecutor executor = RWT.getClient().getService(JavaScriptExecutor.class);
executor.execute(ComposerServiceImpl.TABINDEX_RESET_SCRIPT);
composer.compose(pageContext);
PageService.updateScrolledComposite(pageContext.getParent());

View file

@ -58,6 +58,7 @@ import ch.ethz.seb.sebserver.gui.service.i18n.I18nSupport;
import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey;
import ch.ethz.seb.sebserver.gui.service.i18n.PolyglotPageService;
import ch.ethz.seb.sebserver.gui.service.page.PageService;
import ch.ethz.seb.sebserver.gui.service.page.impl.ComposerServiceImpl;
import ch.ethz.seb.sebserver.gui.service.page.impl.DefaultPageLayout;
import ch.ethz.seb.sebserver.gui.service.push.ServerPushService;
@ -944,6 +945,14 @@ public class WidgetFactory {
final String $el = widget instanceof Text ? "$input" : "$el";
final String id = WidgetUtil.getId(widget);
exec("rap.getObject( '", id, "' ).", $el, ".attr( '", name, "', '", value, "' );");
// apply tabindex reset script
final JavaScriptExecutor executor = RWT.getClient().getService(JavaScriptExecutor.class);
executor.execute(ComposerServiceImpl.TABINDEX_RESET_SCRIPT);
// exec("rap.getObject( '", id, "' ).", $el, ".attr( 'tabindex', '0' );");
// if (widget instanceof Text) {
// exec("rap.getObject( '", id, "' ).$el.attr( 'tabindex', '0' );");
// }
}
}

View file

@ -1,11 +1,11 @@
server.address=localhost
server.port=8090
server.port=8080
sebserver.gui.http.external.scheme=http
sebserver.gui.entrypoint=/gui
sebserver.gui.webservice.protocol=http
sebserver.gui.webservice.address=localhost
sebserver.gui.webservice.port=8090
sebserver.gui.webservice.port=8080
sebserver.gui.webservice.apipath=/admin-api/v1
# defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page
sebserver.gui.webservice.poll-interval=1000

View file

@ -22,7 +22,7 @@ sebserver.webservice.clean-db-on-startup=false
# webservice configuration
sebserver.init.adminaccount.gen-on-init=false
sebserver.webservice.distributed=true
sebserver.webservice.distributed=false
sebserver.webservice.master.delay.threshold=10000
sebserver.webservice.http.external.scheme=http
sebserver.webservice.http.external.servername=localhost