Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#3411 - Resize sidebars using mouse #3414

Open
wants to merge 27 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
98a57b5
#3411 - Resize sidebars using mouse
reckart Oct 1, 2022
18c3842
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 1, 2022
84a55f3
#3411 - Resize sidebars using mouse
reckart Oct 1, 2022
8adeab2
#3411 - Resize sidebars using mouse
reckart Oct 1, 2022
e824fff
#3411 - Resize sidebars using mouse
reckart Oct 3, 2022
f1280a7
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 3, 2022
5c53779
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 3, 2022
c6da694
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 3, 2022
a50a120
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 4, 2022
b417d0c
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 10, 2022
de93c52
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 11, 2022
a35c70e
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 11, 2022
22b2517
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 11, 2022
7751ae0
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 28, 2022
950544a
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Nov 18, 2022
3a57cd0
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Dec 5, 2022
9a2dbfd
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Dec 6, 2022
da485f5
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Dec 31, 2022
9df73b4
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Jan 4, 2023
c80ca49
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Feb 5, 2023
e363881
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Feb 14, 2023
8e2d2c4
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Feb 27, 2023
77e9c36
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Mar 7, 2023
cb1b0cb
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Mar 28, 2023
0d023e7
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart May 17, 2023
b403030
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Oct 14, 2023
2037dc2
Merge branch 'main' into feature/3411-Resize-sidebars-using-mouse
reckart Nov 25, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions inception/inception-ui-annotation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,6 @@
<artifactId>inception-preferences</artifactId>
</dependency>

<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-kendo-ui</artifactId>
</dependency>

<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
Expand Down Expand Up @@ -158,6 +153,14 @@
<groupId>de.agilecoders.wicket</groupId>
<artifactId>wicket-bootstrap-extensions</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-jquery-ui-core</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.wicket-jquery-ui</groupId>
<artifactId>wicket-kendo-ui</artifactId>
</dependency>
<dependency>
<groupId>org.danekja</groupId>
<artifactId>jdk-serializable-functional</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,33 @@
<html xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:extend>
<div class="flex-content flex-v-container">
<div class="annotation-editor-container flex-content flex-h-container flex-gutter flex-no-initial-gutter">
<div wicket:id="leftSidebar" class="flex-v-container flex-gutter"></div>
<div wicket:id="centerArea" class="flex-content flex-v-container flex-gutter">
<div class="flex-content card">
<div class="card-header border-bottom-0">
<span wicket:id="documentNamePanel"/>
<span wicket:id="numberOfPages" class="small text-muted float-end"/>
<div class="flex-content flex-v-container annotation-editor-container">
<div wicket:id="splitter-right" class="flex-content">
<div class="fit-child-snug">
<div wicket:id="splitter-left">
<div wicket:id="leftSidebarContainer">
<div wicket:id="leftSidebar" class="flex-v-container flex-gutter"></div>
</div>
<div class="card-body flex-v-container" style="padding: 0px;">
<nav wicket:id="actionBar" class="action-bar"/>
<div wicket:id="editor" class="flex-content flex-v-container" style="padding: 0px;"/>
<div wicket:id="centerAreaContainer">
<div wicket:id="centerArea" class="flex-content flex-v-container flex-gutter">
<div class="flex-content card">
<div class="card-header border-bottom-0">
<span wicket:id="documentNamePanel"/>
<span wicket:id="numberOfPages" class="small text-muted float-end"/>
</div>
<div class="card-body flex-v-container" style="padding: 0px;">
<nav wicket:id="actionBar" class="action-bar"/>
<div wicket:id="editor" class="flex-content flex-v-container" style="padding: 0px;"/>
</div>
</div>
</div>
</div>
</div>
</div>
<div wicket:id="rightSidebar" class="flex-sidebar flex-v-container">
<wicket:container wicket:id="annotationDetailEditorPanel"/>
<div class="fit-child-snug">
<div wicket:id="rightSidebar" class="flex-sidebar flex-v-container">
<wicket:container wicket:id="annotationDetailEditorPanel"/>
</div>
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@
import static de.tudarmstadt.ukp.clarin.webanno.model.SourceDocumentStateTransition.NEW_TO_ANNOTATION_IN_PROGRESS;
import static de.tudarmstadt.ukp.clarin.webanno.ui.core.page.ProjectPageBase.NS_PROJECT;
import static de.tudarmstadt.ukp.clarin.webanno.ui.core.page.ProjectPageBase.PAGE_PARAM_PROJECT;
import static de.tudarmstadt.ukp.inception.rendering.editorstate.AnnotationPreference.SIDEBAR_SIZE_DEFAULT;
import static de.tudarmstadt.ukp.inception.rendering.selection.FocusPosition.TOP;
import static de.tudarmstadt.ukp.inception.support.WebAnnoConst.CURATION_USER;
import static de.tudarmstadt.ukp.inception.support.WebAnnoConst.SPAN_TYPE;
import static de.tudarmstadt.ukp.inception.support.lambda.LambdaBehavior.visibleWhen;
import static java.util.Collections.emptyMap;
import static java.util.Collections.emptySet;

import java.io.IOException;
import java.lang.invoke.MethodHandles;
Expand All @@ -39,10 +42,12 @@
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;

import org.apache.uima.cas.CAS;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ClassAttributeModifier;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.StyleAttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.feedback.IFeedback;
import org.apache.wicket.markup.html.WebMarkupContainer;
Expand All @@ -59,6 +64,10 @@
import org.wicketstuff.annotation.mount.MountPath;
import org.wicketstuff.event.annotation.OnEvent;

import com.googlecode.wicket.jquery.core.Options;
import com.googlecode.wicket.kendo.ui.widget.splitter.SplitterAdapter;
import com.googlecode.wicket.kendo.ui.widget.splitter.SplitterBehavior;

import de.tudarmstadt.ukp.clarin.webanno.api.annotation.actionbar.ActionBar;
import de.tudarmstadt.ukp.clarin.webanno.api.annotation.page.AnnotationEditorState;
import de.tudarmstadt.ukp.clarin.webanno.api.annotation.page.AnnotationPageBase;
Expand All @@ -76,6 +85,7 @@
import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.component.DocumentNamePanel;
import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.detail.AnnotationDetailEditorPanel;
import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.sidebar.SidebarPanel;
import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.sidebar.SidebarStateChangedEvent;
import de.tudarmstadt.ukp.inception.annotation.events.AnnotationEvent;
import de.tudarmstadt.ukp.inception.annotation.events.BeforeDocumentOpenedEvent;
import de.tudarmstadt.ukp.inception.annotation.events.DocumentOpenedEvent;
Expand All @@ -99,7 +109,6 @@
import de.tudarmstadt.ukp.inception.schema.api.adapter.AnnotationException;
import de.tudarmstadt.ukp.inception.support.spring.ApplicationEventPublisherHolder;
import de.tudarmstadt.ukp.inception.support.wicket.DecoratedObject;
import de.tudarmstadt.ukp.inception.support.wicket.WicketUtil;

@MountPath(NS_PROJECT + "/${" + PAGE_PARAM_PROJECT + "}/annotate/#{" + PAGE_PARAM_DOCUMENT + "}")
public class AnnotationPage
Expand All @@ -126,11 +135,17 @@ public class AnnotationPage

private long currentProjectId;

private WebMarkupContainer centerArea;
private WebMarkupContainer actionBar;
private final WebMarkupContainer leftSplitterContainer;
private final SplitterBehavior leftSplitterBehavior;
private final WebMarkupContainer leftSidebarContainer;
private final WebMarkupContainer rightSplitterContainer;
private final WebMarkupContainer centerAreaContainer;
private final WebMarkupContainer centerArea;
private final WebMarkupContainer actionBar;
private final SidebarPanel leftSidebar;
private final AnnotationDetailEditorPanel detailEditor;

private AnnotationEditorBase annotationEditor;
private AnnotationDetailEditorPanel detailEditor;
private SidebarPanel leftSidebar;

public AnnotationPage(final PageParameters aPageParameters)
{
Expand All @@ -155,30 +170,145 @@ public AnnotationPage(final PageParameters aPageParameters)

handleParameters(document, focus, user);

createChildComponents();
add(createUrlFragmentBehavior());

updateDocumentView(null, null, null, focus);
}
detailEditor = createDetailEditor();

private void createChildComponents()
{
add(createUrlFragmentBehavior());
leftSplitterContainer = new WebMarkupContainer("splitter-left");
leftSplitterContainer.setOutputMarkupId(true);

leftSplitterBehavior = new SplitterBehavior("#" + leftSplitterContainer.getMarkupId(),
new Options("orientation", Options.asString("horizontal")) //
.set("panes", //
new Options("size", Options.asString(SIDEBAR_SIZE_DEFAULT + "%")), //
new Options()), //
new SplitterAdapter());

leftSplitterContainer.add(new StyleAttributeModifier()
{
private static final long serialVersionUID = 7341058776832932461L;

@Override
protected Map<String, String> update(Map<String, String> aOldStyles)
{
if (!leftSidebar.isCollapsed()) {
return Map.of("width", "100%", "height", "100%");
}
return emptyMap();
}
});

leftSplitterContainer.add(new ClassAttributeModifier()
{
private static final long serialVersionUID = 1L;

@Override
protected Set<String> update(Set<String> aOldClasses)
{
if (leftSidebar.isCollapsed()) {
return Set.of("flex-h-container");
}
return emptySet();
}
});

rightSplitterContainer = new WebMarkupContainer("splitter-right");
rightSplitterContainer.setOutputMarkupId(true);

rightSplitterContainer.add(new SplitterBehavior("#" + rightSplitterContainer.getMarkupId(),
new Options("orientation", Options.asString("horizontal")) //
.set("panes", //
new Options(), //
new Options("size", Options.asString(SIDEBAR_SIZE_DEFAULT + "%"))), //
new SplitterAdapter()));

rightSplitterContainer.add(leftSplitterContainer);
add(rightSplitterContainer);

rightSplitterContainer.add(createRightSidebar());

leftSidebarContainer = new WebMarkupContainer("leftSidebarContainer");
leftSidebarContainer.add(new ClassAttributeModifier()
{
private static final long serialVersionUID = 1L;

@Override
protected Set<String> update(Set<String> aOldClasses)
{
if (leftSidebar.isCollapsed()) {
return Set.of("flex-h-container");
}

return Set.of("fit-child-snug");
}
});
leftSplitterContainer.add(leftSidebarContainer);

leftSidebar = createLeftSidebar();
leftSidebarContainer.add(leftSidebar);

if (!leftSidebar.isCollapsed()) {
leftSplitterContainer.add(leftSplitterBehavior);
}

centerAreaContainer = new WebMarkupContainer("centerAreaContainer");
centerAreaContainer.add(new ClassAttributeModifier()
{
private static final long serialVersionUID = 1L;

@Override
protected Set<String> update(Set<String> aOldClasses)
{
if (leftSidebar.isCollapsed()) {
return Set.of("flex-content", "flex-h-container", "ps-3");
}

return Set.of("fit-child-snug");
}
});

centerArea = new WebMarkupContainer("centerArea");
centerArea.add(visibleWhen(() -> getModelObject().getDocument() != null));
centerArea.setOutputMarkupPlaceholderTag(true);
centerArea.add(createDocumentInfoLabel());
add(centerArea);
centerAreaContainer.add(centerArea);

actionBar = new ActionBar("actionBar");
centerArea.add(actionBar);

add(createRightSidebar());

createAnnotationEditor();

leftSidebar = createLeftSidebar();
add(leftSidebar);
leftSplitterContainer.add(centerAreaContainer);

updateDocumentView(null, null, null, focus);
}

private WebMarkupContainer buildRightSplitter()
{
var splitter = new WebMarkupContainer("splitter-right");
splitter.setOutputMarkupId(true);

splitter.add(new SplitterBehavior("#" + splitter.getMarkupId(),
new Options("orientation", Options.asString("horizontal")) //
.set("panes", //
new Options("size", Options.asString("80%")), //
new Options("size", Options.asString("20%"))), //
new SplitterAdapter()));

return splitter;
}

@OnEvent
public void onSidebarStateChanged(SidebarStateChangedEvent aEvent)
{
if (aEvent.isCollapsed()) {
leftSplitterContainer.remove(leftSplitterBehavior);
}
else {
leftSplitterContainer.add(leftSplitterBehavior);
}

aEvent.getTarget().add(rightSplitterContainer);
}

@Override
Expand Down Expand Up @@ -355,11 +485,7 @@ private WebMarkupContainer createRightSidebar()
{
WebMarkupContainer rightSidebar = new WebMarkupContainer("rightSidebar");
rightSidebar.setOutputMarkupPlaceholderTag(true);
// Override sidebar width from preferences
rightSidebar.add(new AttributeModifier("style",
LoadableDetachableModel.of(() -> String.format("flex-basis: %d%%;",
getModelObject().getPreferences().getSidebarSizeRight()))));
detailEditor = createDetailEditor();

rightSidebar.add(detailEditor);
rightSidebar.add(visibleWhen(getModel() //
.map(AnnotatorState::getAnnotationLayers) //
Expand Down Expand Up @@ -535,7 +661,8 @@ protected void actionLoadDocument(AjaxRequestTarget aTarget, int aFocus)
if (aTarget != null) {
// Update URL for current document
updateUrlFragment(aTarget);
WicketUtil.refreshPage(aTarget, getPage());

aTarget.add(rightSplitterContainer);
}

LOG.trace("Document opened {}@{} {}", state.getUser(), state.getDocument(), aFocus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,10 @@
*/
package de.tudarmstadt.ukp.clarin.webanno.ui.annotation.sidebar;

import static java.lang.String.format;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.Validate;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.panel.Panel;
Expand Down Expand Up @@ -60,7 +57,6 @@ public SidebarPanel(String aId, IModel<AnnotatorState> aModel, IModel<Integer> a

Validate.notNull(aActionHandler, "Action handler must not be null");

setOutputMarkupId(true);
setOutputMarkupPlaceholderTag(true);

actionHandler = aActionHandler;
Expand All @@ -73,12 +69,11 @@ public SidebarPanel(String aId, IModel<AnnotatorState> aModel, IModel<Integer> a

add(new AttributeAppender("class",
LoadableDetachableModel.of(() -> tabsPanel.isExpanded() ? "" : "collapsed"), " "));
}

// Override sidebar width from preferences
add(new AttributeModifier("style",
LoadableDetachableModel.of(() -> tabsPanel.isExpanded()
? format("flex-basis: %d%%;", aWidthModel.orElse(20).getObject())
: "")));
public boolean isCollapsed()
{
return !tabsPanel.isExpanded();
}

@Override
Expand Down
Loading