diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 8d1cf95..81f6ab4 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -20,9 +20,9 @@ jobs:
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
- java-version: 17
+ java-version: 21
architecture: x64
- distribution: corretto
+ distribution: temurin
cache: maven
- name: Build with Maven
run: mvn -B package --file sources/pom.xml
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index fc758d8..c475aac 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,9 +18,9 @@ jobs:
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
- java-version: 17
+ java-version: 21
architecture: x64
- distribution: corretto
+ distribution: temurin
cache: maven
server-id: ossrh
server-username: MAVEN_USERNAME # env variable for username in deploy
diff --git a/README.md b/README.md
index 0582dc1..ef6a747 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://search.maven.org/search?q=g:%22tools.dynamia.themes%22%20AND%20a:%22tools.dynamia.themes.dynamical%22)
[](https://github.com/dynamiatools/theme-dynamical/actions/workflows/maven.yml)
[](https://github.com/dynamiatools/theme-dynamical/actions/workflows/release.yml)
-
+
# Bootstrap theme for DynamiaTools
@@ -26,13 +26,13 @@ This template is based on https://adminlte.io/ free (MIT) admin template. Which
tools.dynamia.themes
tools.dynamia.themes.dynamical
- 5.1.3
+ 5.4.0
```
**Gradle**
```groovy
-compile 'tools.dynamia.themes:tools.dynamia.themes.dynamical:5.1.3'
+compile 'tools.dynamia.themes:tools.dynamia.themes.dynamical:5.4.0'
```
Edit Spring Boot properties ```application.properties```
diff --git a/sources/pom.xml b/sources/pom.xml
index a9038c6..c2a4df9 100644
--- a/sources/pom.xml
+++ b/sources/pom.xml
@@ -23,7 +23,7 @@
tools.dynamia.themes
tools.dynamia.themes.dynamical
- 5.3.6
+ 5.4.0
Themes - ZK Dynamical
https://www.dynamia.tools/themes/dynamical
Boostrap theme for DynamiaTools apps
@@ -56,9 +56,9 @@
- 5.3.6
- 17
- 3.13.0
+ 5.4.0
+ 21
+ 3.14.0
UTF-8
@@ -122,7 +122,7 @@
org.zkoss.theme
iceblue_c
- 10.0.0
+ 10.0.0.1
@@ -137,6 +137,13 @@
+
+
+ zkoss-ce
+ https://mavensync.zkoss.org/maven2/
+
+
+
release-sign-artifacts
diff --git a/sources/src/main/java/tools/dynamia/themes/dynamical/DynamicalTemplate.java b/sources/src/main/java/tools/dynamia/themes/dynamical/DynamicalTemplate.java
index 20812d8..9f47dfb 100644
--- a/sources/src/main/java/tools/dynamia/themes/dynamical/DynamicalTemplate.java
+++ b/sources/src/main/java/tools/dynamia/themes/dynamical/DynamicalTemplate.java
@@ -24,6 +24,7 @@
import tools.dynamia.templates.ApplicationTemplate;
import tools.dynamia.templates.ApplicationTemplateSkin;
import tools.dynamia.templates.InstallApplicationTemplate;
+import tools.dynamia.themes.dynamical.viewers.DynamicalCrudViewRenderer;
import tools.dynamia.viewers.ViewTypeFactory;
import tools.dynamia.zk.viewers.BootstrapConfigViewRender;
import tools.dynamia.zk.viewers.BootstrapCrudViewRenderer;
@@ -60,7 +61,7 @@ public DynamicalTemplate(ViewTypeFactory viewTypeFactory) {
createSkins();
properties = MapBuilder.put(AUTHOR, "Mario Serrano", DATE, "2017", COPYRIGHT, "Dynamia Soluciones IT 2017",
- VERSION, "5.3.1", ORIGINAL_AUTHOR, "Almsaeed Studio");
+ VERSION, "5.4.0", ORIGINAL_AUTHOR, "Almsaeed Studio");
}
@@ -79,7 +80,7 @@ public void init() {
Library.setProperty("org.zkoss.theme.preferred", "iceblue_c");
- viewTypeFactory.setCustomViewRenderer("crud", BootstrapCrudViewRenderer.class);
+ viewTypeFactory.setCustomViewRenderer("crud", DynamicalCrudViewRenderer.class);
viewTypeFactory.setCustomViewRenderer("table", BootstrapTableViewRenderer.class);
viewTypeFactory.setCustomViewRenderer("form", BootstrapFormViewRenderer.class);
viewTypeFactory.setCustomViewRenderer("config", BootstrapConfigViewRender.class);
diff --git a/sources/src/main/java/tools/dynamia/themes/dynamical/viewers/DynamicalCrudView.java b/sources/src/main/java/tools/dynamia/themes/dynamical/viewers/DynamicalCrudView.java
index 15c7571..8c09370 100644
--- a/sources/src/main/java/tools/dynamia/themes/dynamical/viewers/DynamicalCrudView.java
+++ b/sources/src/main/java/tools/dynamia/themes/dynamical/viewers/DynamicalCrudView.java
@@ -17,342 +17,30 @@
package tools.dynamia.themes.dynamical.viewers;
-import org.zkoss.zk.ui.Component;
-import org.zkoss.zk.ui.HtmlBasedComponent;
-import org.zkoss.zul.*;
-import tools.dynamia.actions.Action;
-import tools.dynamia.actions.ActionGroup;
-import tools.dynamia.actions.ActionRenderer;
-import tools.dynamia.actions.Actions;
-import tools.dynamia.commons.StringUtils;
-import tools.dynamia.crud.ChangedStateEvent;
-import tools.dynamia.crud.CrudState;
-import tools.dynamia.crud.actions.CancelAction;
-import tools.dynamia.ui.icons.Icon;
import tools.dynamia.ui.icons.IconSize;
-import tools.dynamia.ui.icons.IconType;
-import tools.dynamia.ui.icons.IconsTheme;
-import tools.dynamia.web.util.HttpUtils;
-import tools.dynamia.zk.actions.ActionToolbar;
-import tools.dynamia.zk.actions.ButtonActionRenderer;
-import tools.dynamia.zk.actions.MenuitemActionRenderer;
-import tools.dynamia.zk.actions.ToolbarbuttonActionRenderer;
-import tools.dynamia.zk.crud.CrudView;
import tools.dynamia.zk.crud.CrudViewRenderer;
-import tools.dynamia.zk.crud.actions.FindAction;
import tools.dynamia.zk.util.ZKUtil;
-import tools.dynamia.zk.viewers.ZKWrapperView;
+import tools.dynamia.zk.viewers.BootstrapCrudView;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class DynamicalCrudView extends CrudView {
+public class DynamicalCrudView extends BootstrapCrudView {
/**
*
*/
private static final long serialVersionUID = 1773528227238113127L;
- private Div formLeftActions;
- private Div formRightActions;
- private Div formActions;
- private Component leftActions;
- private Component rightActions;
- private Menupopup actionsMenu;
- private Button actionsButton;
- private Borderlayout borderlayout;
- private Map actionGroupContainers;
- private ButtonActionRenderer defaultActionRenderer;
@Override
protected void buildGeneralView() {
super.buildGeneralView();
-
- borderlayout = (Borderlayout) layout;
-
- Div header = new Div();
- header.setZclass("crudview-header " + ActionToolbar.CONTAINER_SCLASS);
- header.setSclass("clearfix");
- header.setParent(borderlayout.getNorth());
- toolbarContainer = header;
-
- formActions = new Div();
- formActions.setZclass("crudview-footer row");
-
- formLeftActions = new Div();
- formLeftActions.setZclass("col-xs-12 col-md-12");
- formLeftActions.setParent(formActions);
-
- formRightActions = new Div();
- formRightActions.setZclass("col-xs-12 col-md-12");
- formRightActions.setStyle("text-align: right");
- formRightActions.setParent(formActions);
-
- String menuId = "actionMenu" + StringUtils.randomString().substring(0, 4);
- actionsMenu = new Menupopup();
- actionsMenu.setId(menuId);
- actionsMenu.setParent(this);
- actionsButton = new Button();
- actionsButton.setZclass("btn btn-primary actions");
- actionsButton.setPopup(menuId + ", after_start");
- ZKUtil.configureComponentIcon("process", actionsButton, IconSize.NORMAL);
-
- addCrudStateChangedListener(this::controlChangedState);
- }
-
- @Override
- protected void buildToolbars() {
- if (!HttpUtils.isSmartphone()) {
- Div toolbar = new Div();
- toolbar.setZclass("btn-toolbar");
-
- leftActions = toolbar;
-
- toolbar = new Div();
- toolbar.setZclass("btn-toolbar");
- toolbar.setSclass("actiontb-right");
- rightActions = toolbar;
- }
- }
-
- @Override
- protected void buildToolbarContainer() {
- if (!HttpUtils.isSmartphone()) {
- toolbarContainer.appendChild(leftActions);
- toolbarContainer.appendChild(rightActions);
- }
-
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- protected ActionRenderer getDefaultActionRenderer() {
- if (defaultActionRenderer == null) {
- defaultActionRenderer = new ButtonActionRenderer();
- defaultActionRenderer.setZclass("btn btn-default");
- defaultActionRenderer.setShowLabels(false);
-
- }
- return defaultActionRenderer;
- }
-
- @Override
- protected void loadActions(CrudState state) {
- actionsMenu.getChildren().clear();
-
- if (HttpUtils.isSmartphone()) {
-
- toolbarContainer.getChildren().clear();
- if (state == CrudState.READ) {
-
- toolbarContainer.appendChild(actionsButton);
- } else {
- borderlayout.getNorth().setVisible(false);
- }
- }
-
- super.loadActions(state);
- }
-
- protected Component renderAction(Action action) {
- ActionRenderer actionRenderer = action.getRenderer();
- if (actionRenderer == null) {
- actionRenderer = getDefaultActionRenderer();
- }
- Component component = (Component) Actions.render(actionRenderer, action, this);
-
- String actionId = action.getId();
- if (action.getAttribute("internalId") != null) {
- actionId = action.getAttribute("internalId").toString();
- }
- if (component instanceof HtmlBasedComponent) {
- HtmlBasedComponent hcom = (HtmlBasedComponent) component;
- hcom.setSclass("actiontb-a " + actionId);
- if (hcom instanceof Toolbarbutton) {
- hcom.setZclass("none");
- hcom.setSclass("btn btn-default " + hcom.getSclass());
- }
-
- hcom.setTooltiptext(action.getName());
- if (HttpUtils.isSmartphone()) {
- if (!(component instanceof Button)) {
- hcom.setSclass(hcom.getSclass() + " flexit");
- }
- }
- }
-
- return component;
-
- }
-
- @Override
- protected void showActionGroup(ActionGroup actionGroup) {
- if (HttpUtils.isSmartphone() && getState() == CrudState.READ) {
- MenuitemActionRenderer renderer = new MenuitemActionRenderer();
- for (Action action : actionGroup.getActions()) {
- if (action.getRenderer() == null || action.getRenderer() instanceof ToolbarbuttonActionRenderer) {
- Menuitem menuitem = Actions.render(renderer, action, this);
- actionsMenu.appendChild(menuitem);
- } else {
- showAction(actionGroup, action);
- }
- }
- } else {
-
- actionGroup.getActions().forEach(a -> {
- showAction(actionGroup, a);
- });
- }
- }
-
- @Override
- protected void showAction(ActionGroup actionGroup, Action action) {
- if ((getState() == CrudState.CREATE || getState() == CrudState.UPDATE)
- && (action.getRenderer() == null || action.getRenderer() instanceof ToolbarbuttonActionRenderer)) {
- ButtonActionRenderer renderer = new ButtonActionRenderer();
- Button button = Actions.render(renderer, action, this);
- button.setAttribute(ACTION, action);
- applyButtonStyle(button, action);
- addButton(actionGroup, button);
- } else {
- fixFindAction(action);
-
- Component actionComp = renderAction(action);
- if (!HttpUtils.isSmartphone()) {
- Component group = getActionGroupContainer(actionGroup);
- group.appendChild(actionComp);
- if (group.getParent() == null) {
- group.setParent("left".equals(actionGroup.getAlign()) ? leftActions : rightActions);
- }
-
- } else {
- toolbarContainer.appendChild(actionComp);
- }
- }
- }
-
- private Component getActionGroupContainer(ActionGroup actionGroup) {
- if (actionGroupContainers == null) {
- this.actionGroupContainers = new HashMap<>();
- }
-
- Div group = this.actionGroupContainers.get(actionGroup);
- if (group == null) {
- group = new Div();
- group.setZclass("btn-group");
- this.actionGroupContainers.put(actionGroup, group);
- }
-
- return group;
- }
-
- private void fixFindAction(Action action) {
- if (HttpUtils.isSmartphone()) {
- if (action instanceof FindAction) {
- action.setAttribute("zclass", "form-control");
-
- }
+ if (actionsButton != null) {
+ actionsButton.setIconSclass("fa fa-bars");
}
- }
-
- private void displayMenuActions(List actionComponents) {
- toolbarContainer.appendChild(actionsButton);
- MenuitemActionRenderer menuRenderer = new MenuitemActionRenderer();
- for (Component component : actionComponents) {
- System.out.println("MENU ACTION: " + component);
- Action action = (Action) component.getAttribute(ACTION);
- if (action != null) {
- System.out.println(" " + action);
- Menuitem menuitem = Actions.render(menuRenderer, action, this);
- actionsMenu.appendChild(menuitem);
- }
- }
}
- private void addButton(ActionGroup group, Component btn) {
-
- Div btnGroup = new Div();
- if (HttpUtils.isSmartphone()) {
- btnGroup.setZclass("btn-group col-md-3 col-sm-3 col-xs-12");
- } else {
- btnGroup.setZclass("btn-group");
- }
- btnGroup.appendChild(btn);
-
- if ("right".equals(group.getAlign())) {
- btnGroup.setSclass("pull-right");
- formRightActions.appendChild(btnGroup);
- } else {
- formLeftActions.appendChild(btnGroup);
- }
-
- }
-
- private void applyButtonStyle(Button button, Action action) {
- if (action instanceof CancelAction) {
- button.setZclass("btn btn-danger");
- } else if (action.getPosition() <= 1) {
- button.setZclass("btn btn-primary");
- } else {
- button.setZclass("btn btn-default");
- }
-
- if (action != null && action.getAttribute("type") != null) {
- button.setZclass("btn btn-" + action.getAttribute("type"));
- }
-
- Icon icon = IconsTheme.get().getIcon(action.getImage());
- if (icon.getType() == IconType.IMAGE) {
- button.setImage(null);
- }
- }
-
-
- protected void controlChangedState(ChangedStateEvent evt) {
- CrudState crudState = evt.newState();
-
- switch (crudState) {
-
- case READ:
-
- borderlayout.getNorth().setVisible(true);
- break;
- default:
- if (leftActions != null && rightActions != null) {
- if (leftActions.getChildren().isEmpty() && rightActions.getChildren().isEmpty()) {
- borderlayout.getNorth().setVisible(false);
- }
- }
- break;
- }
- }
-
- @Override
- public void clearActions() {
- super.clearActions();
- actionsMenu.getChildren().clear();
- formLeftActions.getChildren().clear();
- formRightActions.getChildren().clear();
- if (leftActions != null && rightActions != null) {
- leftActions.getChildren().clear();
- rightActions.getChildren().clear();
- }
- if (actionGroupContainers != null) {
- this.actionGroupContainers.clear();
- }
-
- }
-
- @Override
- protected void addFormViewToContainer(String formViewTitle) {
- ZKWrapperView