Skip to content

Commit

Permalink
simulation ui, visualization container expand/collapse
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 15, 2023
1 parent 4380ec4 commit 3cb4814
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="card-header" wicket:id="header"/>
<div class="card-body">
<div class="d-flex gap-2 border-bottom border-gray align-items-center pb-3 mb-3" wicket:id="header"/>
<div wicket:id="bodyHeader"/>

<wicket:child/>
</div>

<wicket:fragment wicket:id="header">
<wicket:fragment wicket:id="bodyHeader">
<h5 class="mb-0" wicket:id="title"/>
<span wicket:id="badge"/>
</wicket:fragment>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
Expand All @@ -28,9 +29,10 @@ public class CardOutlineLeftPanel<T extends Serializable> extends BasePanel<T> {

private static final long serialVersionUID = 1L;

private static final String FRAGMENT_ID_HEADER = "header";
private static final String FRAGMENT_ID_BODY_HEADER = "bodyHeader";

private static final String ID_HEADER = "header";
private static final String ID_BODY_HEADER = "bodyHeader";
private static final String ID_TITLE = "title";
private static final String ID_BADGE = "badge";

Expand All @@ -46,10 +48,21 @@ private void initLayout() {

Component header = createHeader(ID_HEADER);
add(header);

Component bodyHeader = createBodyHeader(ID_BODY_HEADER);
add(bodyHeader);
}

protected Component createHeader(String id) {
Fragment fragment = new Fragment(id, FRAGMENT_ID_HEADER, this);
WebMarkupContainer header = new WebMarkupContainer(id);
header.add(VisibleBehaviour.ALWAYS_INVISIBLE);

return header;
}

protected Component createBodyHeader(String id) {
Fragment fragment = new Fragment(id, FRAGMENT_ID_BODY_HEADER, this);
fragment.add(AttributeAppender.append("class", "d-flex gap-2 align-items-center border-bottom border-gray pb-3 mb-3"));
fragment.add(new Label(ID_TITLE, createTitleModel()));

IModel<Badge> badgeModel = createBadgeModel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:extend>

<wicket:fragment wicket:id="header">
<i wicket:id="icon"/>
<h3 class="card-title flex-grow-1" wicket:id="title"/>
<a wicket:id="link"/>
</wicket:fragment>
</wicket:extend>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,31 @@

package com.evolveum.midpoint.gui.impl.page.admin.simulation.visualization;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.web.component.AjaxIconButton;

/**
* Created by Viliam Repan (lazyman).
*/
public class ContainerVisualizationPanel extends CardOutlineLeftPanel<ContainerVisualization> {

private static final long serialVersionUID = 1L;

private static final String FRAGMENT_ID_HEADER = "header";
private static final String ID_ICON = "icon";
private static final String ID_TITLE = "title";
private static final String ID_LINK = "link";

private IModel<Boolean> expanded = Model.of(false);

public ContainerVisualizationPanel(String id, IModel<ContainerVisualization> model) {
super(id, model);

Expand All @@ -24,4 +41,53 @@ public ContainerVisualizationPanel(String id, IModel<ContainerVisualization> mod
private void initLayout() {
add(AttributeAppender.append("class", () -> VisualizationGuiUtil.createChangeTypeCssClassForOutlineCard(getModelObject().getChangeType())));
}

@Override
protected Component createBodyHeader(String id) {
setOutputMarkupId(true);

Fragment fragment = new Fragment(id, FRAGMENT_ID_HEADER, this);
fragment.add(AttributeAppender.append("class", () -> {
String css = expanded.getObject() ? " border-bottom border-gray pb-3 mb-3" : "";
return "d-flex gap-2 align-items-center" + css;
}));

WebComponent icon = new WebComponent(ID_ICON);
icon.add(AttributeAppender.append("class", "fa-solid fa-user")); // todo fix
fragment.add(icon);

// todo make sure to handle escaping inside model
Label title = new Label(ID_TITLE, () -> "<b>Basic information</b> was modified");// todo fix createTitleModel()));
title.setEscapeModelStrings(false);
fragment.add(title);

AjaxIconButton link = new AjaxIconButton(ID_LINK,
() -> {
final String prefix = "mr-2 ";
if (expanded.getObject()) {
return prefix + "fa-solid fa-down-left-and-up-right-to-center";
}

return prefix + "fa-solid fa-up-right-and-down-left-from-center";
},
() -> {
String key = expanded.getObject() ? "ContainerVisualizationPanel.collapse" : "ContainerVisualizationPanel.expand";
return getString(key);
}) {
@Override
public void onClick(AjaxRequestTarget target) {
onExpandCollapseClicked(target);
}
};
link.showTitleAsLabel(true);
fragment.add(link);

return fragment;
}

private void onExpandCollapseClicked(AjaxRequestTarget target) {
expanded.setObject(!expanded.getObject());

target.add(this);
}
}

0 comments on commit 3cb4814

Please sign in to comment.