CCM NG: PageModel Admin UI for Vaadin Prototype
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5155 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
71cadb3da1
commit
c11bdaaa03
|
|
@ -73,6 +73,7 @@ public class CategoryTreeComponentEditor
|
||||||
showFullTreeCheckBox = new CheckBox(textsUtil
|
showFullTreeCheckBox = new CheckBox(textsUtil
|
||||||
.getText(
|
.getText(
|
||||||
"cms.ui.pagemodel.category_tree_component_form.show_full_tree.label"));
|
"cms.ui.pagemodel.category_tree_component_form.show_full_tree.label"));
|
||||||
|
addComponent(showFullTreeCheckBox);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,7 +82,9 @@ public class CategoryTreeComponentEditor
|
||||||
|
|
||||||
final CategoryTreeComponent component = getComponentModel();
|
final CategoryTreeComponent component = getComponentModel();
|
||||||
|
|
||||||
showFullTreeCheckBox.setValue(component.isShowFullTree());
|
if (component != null) {
|
||||||
|
showFullTreeCheckBox.setValue(component.isShowFullTree());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ public class ItemListComponentEditor
|
||||||
|
|
||||||
pageSizeField = new TextField(textsUtil
|
pageSizeField = new TextField(textsUtil
|
||||||
.getText("cms.ui.pagemodel.itemlist_component_form.page_size.label"));
|
.getText("cms.ui.pagemodel.itemlist_component_form.page_size.label"));
|
||||||
|
pageSizeField.setValue("25");
|
||||||
addComponent(pageSizeField);
|
addComponent(pageSizeField);
|
||||||
|
|
||||||
listOrderArea = new TextArea(textsUtil
|
listOrderArea = new TextArea(textsUtil
|
||||||
|
|
@ -106,9 +107,13 @@ public class ItemListComponentEditor
|
||||||
|
|
||||||
if (itemListComponent != null) {
|
if (itemListComponent != null) {
|
||||||
descendingCheckBox.setValue(itemListComponent.isDescending());
|
descendingCheckBox.setValue(itemListComponent.isDescending());
|
||||||
}
|
limitToTypeField.setValue(itemListComponent.getLimitToType());
|
||||||
|
pageSizeField
|
||||||
|
.setValue(Integer.toString(itemListComponent.getPageSize()));
|
||||||
|
listOrderArea.setValue(String.join("\n",
|
||||||
|
itemListComponent.getListOrder()));
|
||||||
|
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -137,14 +137,16 @@ public abstract class AbstractPageModelComponentEditor<T extends ComponentModel>
|
||||||
componentModel = createComponentModel();
|
componentModel = createComponentModel();
|
||||||
componentModel.setKey(key);
|
componentModel.setKey(key);
|
||||||
updateComponentModel();
|
updateComponentModel();
|
||||||
controller.getPageModelManager().addComponentModel(pageModel,
|
controller
|
||||||
componentModel);
|
.getPageModelsController()
|
||||||
|
.addComponentModel(pageModel, componentModel);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
componentModel.setKey(key);
|
componentModel.setKey(key);
|
||||||
updateComponentModel();
|
updateComponentModel();
|
||||||
controller.getComponentModelRepository().save(componentModel);
|
controller.getComponentModelRepository().save(componentModel);
|
||||||
}
|
}
|
||||||
|
controller.refreshComponentModels();
|
||||||
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PageModelComponentEditorController getController() {
|
protected PageModelComponentEditorController getController() {
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,18 @@ public class PageModelComponentEditorController {
|
||||||
@Inject
|
@Inject
|
||||||
private GlobalizationHelper globalizationHelper;
|
private GlobalizationHelper globalizationHelper;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PageModelsController pageModelsController;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private PageModelManager pageModelManager;
|
private PageModelManager pageModelManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PageModelsTableDataProvider pageModelsTableDataProvider;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PageModelComponentModelsTableDataProvider pageModelComponentModelsTableDataProvider;
|
||||||
|
|
||||||
public ComponentModelRepository getComponentModelRepository() {
|
public ComponentModelRepository getComponentModelRepository() {
|
||||||
return componentModelRepository;
|
return componentModelRepository;
|
||||||
}
|
}
|
||||||
|
|
@ -49,8 +58,20 @@ public class PageModelComponentEditorController {
|
||||||
return globalizationHelper;
|
return globalizationHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PageModelsController getPageModelsController() {
|
||||||
|
return pageModelsController;
|
||||||
|
}
|
||||||
|
|
||||||
public PageModelManager getPageModelManager() {
|
public PageModelManager getPageModelManager() {
|
||||||
return pageModelManager;
|
return pageModelManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void refreshPageModelsTable() {
|
||||||
|
pageModelsTableDataProvider.refreshAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshComponentModels() {
|
||||||
|
pageModelComponentModelsTableDataProvider.refreshAll();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,12 @@ package org.libreccm.admin.ui;
|
||||||
import com.vaadin.cdi.ViewScoped;
|
import com.vaadin.cdi.ViewScoped;
|
||||||
import com.vaadin.data.provider.AbstractDataProvider;
|
import com.vaadin.data.provider.AbstractDataProvider;
|
||||||
import com.vaadin.data.provider.Query;
|
import com.vaadin.data.provider.Query;
|
||||||
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
import org.libreccm.l10n.LocalizedTextsUtil;
|
||||||
import org.libreccm.pagemodel.ComponentModels;
|
import org.libreccm.pagemodel.ComponentModels;
|
||||||
import org.libreccm.pagemodel.PageModelComponentModel;
|
import org.libreccm.pagemodel.PageModelComponentModel;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
@ -41,6 +44,9 @@ class PageModelComponentModelTypesDataProvider
|
||||||
@Inject
|
@Inject
|
||||||
private ComponentModels componentModels;
|
private ComponentModels componentModels;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private GlobalizationHelper globalizationHelper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInMemory() {
|
public boolean isInMemory() {
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -49,18 +55,50 @@ class PageModelComponentModelTypesDataProvider
|
||||||
@Override
|
@Override
|
||||||
public int size(final Query<PageModelComponentModel, String> query) {
|
public int size(final Query<PageModelComponentModel, String> query) {
|
||||||
|
|
||||||
return componentModels
|
final Optional<String> filter = query.getFilter();
|
||||||
.findAvailableComponentModels()
|
|
||||||
.size();
|
if (filter.isPresent()) {
|
||||||
|
return (int) componentModels
|
||||||
|
.findAvailableComponentModels()
|
||||||
|
.stream()
|
||||||
|
.filter(model -> filterModels(model, filter.get()))
|
||||||
|
.count();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return componentModels
|
||||||
|
.findAvailableComponentModels()
|
||||||
|
.size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<PageModelComponentModel> fetch(
|
public Stream<PageModelComponentModel> fetch(
|
||||||
final Query<PageModelComponentModel, String> query) {
|
final Query<PageModelComponentModel, String> query) {
|
||||||
|
|
||||||
return componentModels
|
final Optional<String> filter = query.getFilter();
|
||||||
.findAvailableComponentModels()
|
|
||||||
.stream();
|
if (filter.isPresent()) {
|
||||||
|
return componentModels
|
||||||
|
.findAvailableComponentModels()
|
||||||
|
.stream()
|
||||||
|
.filter(model -> filterModels(model, filter.get()));
|
||||||
|
} else {
|
||||||
|
return componentModels
|
||||||
|
.findAvailableComponentModels()
|
||||||
|
.stream();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean filterModels(final PageModelComponentModel model,
|
||||||
|
final String filter) {
|
||||||
|
|
||||||
|
final LocalizedTextsUtil textsUtil = globalizationHelper
|
||||||
|
.getLocalizedTextsUtil(model.descBundle());
|
||||||
|
|
||||||
|
final String title = textsUtil
|
||||||
|
.getText(textsUtil.getText(model.titleKey()));
|
||||||
|
|
||||||
|
return title.startsWith(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ import java.util.Objects;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -41,6 +45,9 @@ class PageModelComponentModelsTableDataProvider
|
||||||
|
|
||||||
private static final long serialVersionUID = -8880329002442808769L;
|
private static final long serialVersionUID = -8880329002442808769L;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private PageModelRepository pageModelRepo;
|
private PageModelRepository pageModelRepo;
|
||||||
|
|
||||||
|
|
@ -60,8 +67,16 @@ class PageModelComponentModelsTableDataProvider
|
||||||
protected Stream<ComponentModel> fetchFromBackEnd(
|
protected Stream<ComponentModel> fetchFromBackEnd(
|
||||||
final Query<ComponentModel, String> query) {
|
final Query<ComponentModel, String> query) {
|
||||||
|
|
||||||
return retrievePageModel()
|
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||||
.getComponents()
|
final CriteriaQuery<ComponentModel> criteriaQuery = builder
|
||||||
|
.createQuery(ComponentModel.class);
|
||||||
|
final Root<ComponentModel> from = criteriaQuery
|
||||||
|
.from(ComponentModel.class);
|
||||||
|
criteriaQuery.where(builder.equal(from.get("pageModel"), pageModel));
|
||||||
|
|
||||||
|
return entityManager
|
||||||
|
.createQuery(criteriaQuery)
|
||||||
|
.getResultList()
|
||||||
.stream();
|
.stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,7 +84,19 @@ class PageModelComponentModelsTableDataProvider
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
protected int sizeInBackEnd(final Query<ComponentModel, String> query) {
|
protected int sizeInBackEnd(final Query<ComponentModel, String> query) {
|
||||||
|
|
||||||
return retrievePageModel().getComponents().size();
|
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||||
|
final CriteriaQuery<Long> criteriaQuery = builder
|
||||||
|
.createQuery(Long.class);
|
||||||
|
final Root<ComponentModel> from = criteriaQuery
|
||||||
|
.from(ComponentModel.class);
|
||||||
|
criteriaQuery.select(builder.count(from));
|
||||||
|
criteriaQuery.where(builder.equal(from.get("pageModel"), pageModel));
|
||||||
|
|
||||||
|
return entityManager
|
||||||
|
.createQuery(criteriaQuery)
|
||||||
|
.getSingleResult()
|
||||||
|
.intValue();
|
||||||
|
// return retrievePageModel().getComponents().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
private PageModel retrievePageModel() {
|
private PageModel retrievePageModel() {
|
||||||
|
|
|
||||||
|
|
@ -23,18 +23,19 @@ import com.arsdigita.ui.admin.AdminUiConstants;
|
||||||
|
|
||||||
import com.vaadin.icons.VaadinIcons;
|
import com.vaadin.icons.VaadinIcons;
|
||||||
import com.vaadin.ui.Button;
|
import com.vaadin.ui.Button;
|
||||||
|
import com.vaadin.ui.ComboBox;
|
||||||
import com.vaadin.ui.Component;
|
import com.vaadin.ui.Component;
|
||||||
import com.vaadin.ui.FormLayout;
|
import com.vaadin.ui.FormLayout;
|
||||||
import com.vaadin.ui.Grid;
|
import com.vaadin.ui.Grid;
|
||||||
import com.vaadin.ui.HorizontalLayout;
|
import com.vaadin.ui.HorizontalLayout;
|
||||||
import com.vaadin.ui.Label;
|
import com.vaadin.ui.Label;
|
||||||
import com.vaadin.ui.NativeSelect;
|
|
||||||
import com.vaadin.ui.Notification;
|
import com.vaadin.ui.Notification;
|
||||||
import com.vaadin.ui.UI;
|
import com.vaadin.ui.UI;
|
||||||
import com.vaadin.ui.VerticalLayout;
|
import com.vaadin.ui.VerticalLayout;
|
||||||
import com.vaadin.ui.Window;
|
import com.vaadin.ui.Window;
|
||||||
import com.vaadin.ui.components.grid.HeaderCell;
|
import com.vaadin.ui.components.grid.HeaderCell;
|
||||||
import com.vaadin.ui.components.grid.HeaderRow;
|
import com.vaadin.ui.components.grid.HeaderRow;
|
||||||
|
import com.vaadin.ui.themes.ValoTheme;
|
||||||
import org.libreccm.configuration.ConfigurationManager;
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
import org.libreccm.core.UnexpectedErrorException;
|
import org.libreccm.core.UnexpectedErrorException;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
|
@ -68,7 +69,8 @@ class PageModelDetails extends Window {
|
||||||
private final CcmApplication application;
|
private final CcmApplication application;
|
||||||
private final PageModel pageModel;
|
private final PageModel pageModel;
|
||||||
|
|
||||||
private final NativeSelect<PageModelComponentModel> componentModelTypeSelect;
|
// private final NativeSelect<PageModelComponentModel> componentModelTypeSelect;
|
||||||
|
private final ComboBox<PageModelComponentModel> componentModelTypeSelect;
|
||||||
|
|
||||||
PageModelDetails(final PageModel pageModel,
|
PageModelDetails(final PageModel pageModel,
|
||||||
final CcmApplication application,
|
final CcmApplication application,
|
||||||
|
|
@ -121,6 +123,8 @@ class PageModelDetails extends Window {
|
||||||
editPropertiesButton.setIcon(VaadinIcons.EDIT);
|
editPropertiesButton.setIcon(VaadinIcons.EDIT);
|
||||||
editPropertiesButton
|
editPropertiesButton
|
||||||
.addClickListener(this::editBasicPropertiesButtonClicked);
|
.addClickListener(this::editBasicPropertiesButtonClicked);
|
||||||
|
final HorizontalLayout buttonsLayout = new HorizontalLayout(
|
||||||
|
editPropertiesButton);
|
||||||
|
|
||||||
final PageModelsController pageModelsController = controller
|
final PageModelsController pageModelsController = controller
|
||||||
.getPageModelsController();
|
.getPageModelsController();
|
||||||
|
|
@ -154,16 +158,32 @@ class PageModelDetails extends Window {
|
||||||
.setId(COL_DEL);
|
.setId(COL_DEL);
|
||||||
componentsModelGrid.setWidth("100%");
|
componentsModelGrid.setWidth("100%");
|
||||||
|
|
||||||
componentModelTypeSelect = new NativeSelect<>(
|
// componentModelTypeSelect = new NativeSelect<>(
|
||||||
textsUtil.getText("ui.admin.pagemodels.add_new_component.type"),
|
// textsUtil.getText("ui.admin.pagemodels.add_new_component.type"),
|
||||||
pageModelsController.getComponentModelTypesDataProvider());
|
// pageModelsController.getComponentModelTypesDataProvider());
|
||||||
|
componentModelTypeSelect = new ComboBox<>();
|
||||||
|
componentModelTypeSelect.setTextInputAllowed(false);
|
||||||
|
componentModelTypeSelect.setEmptySelectionAllowed(false);
|
||||||
|
componentModelTypeSelect.setDescription(textsUtil
|
||||||
|
.getText("ui.admin.pagemodels.add_new_component.type"));
|
||||||
|
componentModelTypeSelect.setDataProvider(pageModelsController
|
||||||
|
.getComponentModelTypesDataProvider());
|
||||||
componentModelTypeSelect
|
componentModelTypeSelect
|
||||||
.setItemCaptionGenerator(this::generateComponentModelTypeCaption);
|
.setItemCaptionGenerator(this::generateComponentModelTypeCaption);
|
||||||
|
componentModelTypeSelect.addStyleName(ValoTheme.COMBOBOX_TINY);
|
||||||
final Button addComponentModelButton = new Button(textsUtil
|
final Button addComponentModelButton = new Button(textsUtil
|
||||||
.getText("ui.admin.pagemodels.add_new_component.submit"));
|
.getText("ui.admin.pagemodels.add_new_component.submit"));
|
||||||
|
addComponentModelButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||||
addComponentModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
|
addComponentModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
|
||||||
addComponentModelButton
|
addComponentModelButton
|
||||||
.addClickListener(this::addComponentButtonClicked);
|
.addClickListener(this::addComponentButtonClicked);
|
||||||
|
// final Panel componentsPanel = new Panel(
|
||||||
|
// "Components",
|
||||||
|
// new VerticalLayout(new HorizontalLayout(
|
||||||
|
// new FormLayout(componentModelTypeSelect),
|
||||||
|
// addComponentModelButton),
|
||||||
|
// componentsModelGrid));
|
||||||
|
|
||||||
final HeaderRow headerRow = componentsModelGrid.prependHeaderRow();
|
final HeaderRow headerRow = componentsModelGrid.prependHeaderRow();
|
||||||
final HeaderCell headerCell = headerRow.join(COL_KEY,
|
final HeaderCell headerCell = headerRow.join(COL_KEY,
|
||||||
COL_TYPE,
|
COL_TYPE,
|
||||||
|
|
@ -171,8 +191,12 @@ class PageModelDetails extends Window {
|
||||||
COL_DEL);
|
COL_DEL);
|
||||||
headerCell.setComponent(new HorizontalLayout(componentModelTypeSelect,
|
headerCell.setComponent(new HorizontalLayout(componentModelTypeSelect,
|
||||||
addComponentModelButton));
|
addComponentModelButton));
|
||||||
|
super.setContent(new VerticalLayout(propertiesSheetLayout,
|
||||||
super.setContent(new VerticalLayout(propertiesSheetLayout));
|
buttonsLayout,
|
||||||
|
componentsModelGrid));
|
||||||
|
// super.setContent(new VerticalLayout(propertiesSheetLayout,
|
||||||
|
// buttonsLayout,
|
||||||
|
// componentsPanel));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|
@ -222,6 +246,7 @@ class PageModelDetails extends Window {
|
||||||
| InvocationTargetException ex) {
|
| InvocationTargetException ex) {
|
||||||
throw new UnexpectedErrorException(ex);
|
throw new UnexpectedErrorException(ex);
|
||||||
}
|
}
|
||||||
|
editor.initWidgets();
|
||||||
|
|
||||||
editor.setModal(true);
|
editor.setModal(true);
|
||||||
editor.setWidth("50%");
|
editor.setWidth("50%");
|
||||||
|
|
@ -270,6 +295,7 @@ class PageModelDetails extends Window {
|
||||||
final Button editButton = new Button(textsUtil
|
final Button editButton = new Button(textsUtil
|
||||||
.getText("ui.admin.pagemodels.components.edit"));
|
.getText("ui.admin.pagemodels.components.edit"));
|
||||||
editButton.setIcon(VaadinIcons.EDIT);
|
editButton.setIcon(VaadinIcons.EDIT);
|
||||||
|
editButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||||
editButton.addClickListener(event -> editComponentModel(componentModel));
|
editButton.addClickListener(event -> editComponentModel(componentModel));
|
||||||
|
|
||||||
return editButton;
|
return editButton;
|
||||||
|
|
@ -315,8 +341,8 @@ class PageModelDetails extends Window {
|
||||||
try {
|
try {
|
||||||
constructor = editorClass
|
constructor = editorClass
|
||||||
.getDeclaredConstructor(PageModel.class,
|
.getDeclaredConstructor(PageModel.class,
|
||||||
ComponentModel.class,
|
componentModelInfo.get().modelClass(),
|
||||||
PageModelComponentEditorController.class
|
PageModelComponentEditorController.class
|
||||||
);
|
);
|
||||||
} catch (NoSuchMethodException ex) {
|
} catch (NoSuchMethodException ex) {
|
||||||
throw new UnexpectedErrorException(ex);
|
throw new UnexpectedErrorException(ex);
|
||||||
|
|
@ -333,6 +359,7 @@ class PageModelDetails extends Window {
|
||||||
| InvocationTargetException ex) {
|
| InvocationTargetException ex) {
|
||||||
throw new UnexpectedErrorException(ex);
|
throw new UnexpectedErrorException(ex);
|
||||||
}
|
}
|
||||||
|
editor.initWidgets();
|
||||||
|
|
||||||
editor.setModal(true);
|
editor.setModal(true);
|
||||||
editor.setWidth("50%");
|
editor.setWidth("50%");
|
||||||
|
|
@ -357,7 +384,9 @@ class PageModelDetails extends Window {
|
||||||
|
|
||||||
final Button deleteButton = new Button(textsUtil
|
final Button deleteButton = new Button(textsUtil
|
||||||
.getText("ui.admin.pagemodels.components.delete"));
|
.getText("ui.admin.pagemodels.components.delete"));
|
||||||
deleteButton.setIcon(VaadinIcons.EDIT);
|
deleteButton.setIcon(VaadinIcons.MINUS_CIRCLE_O);
|
||||||
|
deleteButton.addStyleNames(ValoTheme.BUTTON_TINY,
|
||||||
|
ValoTheme.BUTTON_DANGER);
|
||||||
deleteButton.addClickListener(event -> {
|
deleteButton.addClickListener(event -> {
|
||||||
|
|
||||||
final ConfirmDialog confirmDialog = new ConfirmDialog(() -> {
|
final ConfirmDialog confirmDialog = new ConfirmDialog(() -> {
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,13 @@ import com.vaadin.server.UserError;
|
||||||
import com.vaadin.ui.Button;
|
import com.vaadin.ui.Button;
|
||||||
import com.vaadin.ui.FormLayout;
|
import com.vaadin.ui.FormLayout;
|
||||||
import com.vaadin.ui.HorizontalLayout;
|
import com.vaadin.ui.HorizontalLayout;
|
||||||
|
import com.vaadin.ui.Panel;
|
||||||
import com.vaadin.ui.TextField;
|
import com.vaadin.ui.TextField;
|
||||||
import com.vaadin.ui.VerticalLayout;
|
import com.vaadin.ui.VerticalLayout;
|
||||||
import com.vaadin.ui.Window;
|
import com.vaadin.ui.Window;
|
||||||
import com.vaadin.ui.themes.ValoTheme;
|
import com.vaadin.ui.themes.ValoTheme;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
|
import org.libreccm.l10n.LocalizedString;
|
||||||
import org.libreccm.l10n.LocalizedTextsUtil;
|
import org.libreccm.l10n.LocalizedTextsUtil;
|
||||||
import org.libreccm.l10n.ui.LocalizedStringEditor;
|
import org.libreccm.l10n.ui.LocalizedStringEditor;
|
||||||
import org.libreccm.pagemodel.PageModel;
|
import org.libreccm.pagemodel.PageModel;
|
||||||
|
|
@ -36,6 +38,9 @@ import org.libreccm.pagemodel.PageModelManager;
|
||||||
import org.libreccm.pagemodel.PageModelRepository;
|
import org.libreccm.pagemodel.PageModelRepository;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
|
@ -88,18 +93,39 @@ class PageModelForm extends Window {
|
||||||
nameField = new TextField(textsUtil.getText("ui.admin.pagemodels.name"));
|
nameField = new TextField(textsUtil.getText("ui.admin.pagemodels.name"));
|
||||||
nameField.setRequiredIndicatorVisible(true);
|
nameField.setRequiredIndicatorVisible(true);
|
||||||
|
|
||||||
titleEditor = new LocalizedStringEditor(pageModel.getTitle(),
|
if (pageModel == null) {
|
||||||
globalizationHelper);
|
titleEditor = new LocalizedStringEditor(globalizationHelper);
|
||||||
titleEditor.setCaption(textsUtil.getText("ui.admin.pagemodels.title"));
|
} else {
|
||||||
|
titleEditor = new LocalizedStringEditor(pageModel.getTitle(),
|
||||||
|
globalizationHelper);
|
||||||
|
}
|
||||||
|
// titleEditor.setCaption(textsUtil.getText("ui.admin.pagemodels.title"));
|
||||||
|
titleEditor.setHeight("10em");
|
||||||
|
final Panel titlePanel = new Panel(
|
||||||
|
textsUtil.getText("ui.admin.pagemodels.title"),
|
||||||
|
titleEditor);
|
||||||
|
|
||||||
descriptionEditor = new LocalizedStringEditor(
|
if (pageModel == null) {
|
||||||
pageModel.getDescription(), globalizationHelper);
|
descriptionEditor = new LocalizedStringEditor(globalizationHelper);
|
||||||
descriptionEditor
|
} else {
|
||||||
.setCaption(textsUtil.getText("ui.admin.pagemodels.desc"));
|
descriptionEditor = new LocalizedStringEditor(
|
||||||
|
pageModel.getDescription(), globalizationHelper);
|
||||||
|
}
|
||||||
|
// descriptionEditor
|
||||||
|
// .setCaption(textsUtil.getText("ui.admin.pagemodels.desc"));
|
||||||
|
descriptionEditor.setHeight("10em");
|
||||||
|
final Panel descPanel = new Panel(
|
||||||
|
textsUtil.getText("ui.admin.pagemodels.desc"),
|
||||||
|
descriptionEditor);
|
||||||
|
|
||||||
final FormLayout formLayout = new FormLayout(nameField,
|
if (pageModel == null) {
|
||||||
titleEditor,
|
setCaption(textsUtil.getText("ui.admin.pagemodels.caption.new"));
|
||||||
descriptionEditor);
|
} else {
|
||||||
|
setCaption(textsUtil.getText("ui.admin.pagemodels.caption.edit",
|
||||||
|
new String[]{pageModel.getName()}));
|
||||||
|
}
|
||||||
|
|
||||||
|
final FormLayout formLayout = new FormLayout(nameField);
|
||||||
|
|
||||||
final Button saveButton = new Button(textsUtil
|
final Button saveButton = new Button(textsUtil
|
||||||
.getText("ui.admin.pagemodels.buttons.save"));
|
.getText("ui.admin.pagemodels.buttons.save"));
|
||||||
|
|
@ -113,7 +139,10 @@ class PageModelForm extends Window {
|
||||||
cancelButton);
|
cancelButton);
|
||||||
|
|
||||||
final VerticalLayout layout = new VerticalLayout(formLayout,
|
final VerticalLayout layout = new VerticalLayout(formLayout,
|
||||||
|
titlePanel,
|
||||||
|
descPanel,
|
||||||
buttonsLayout);
|
buttonsLayout);
|
||||||
|
layout.setMargin(true);
|
||||||
setContent(layout);
|
setContent(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,15 +169,30 @@ class PageModelForm extends Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pageModel == null) {
|
if (pageModel == null) {
|
||||||
|
|
||||||
pageModel = pageModelManager.createPageModel(name, application);
|
pageModel = pageModelManager.createPageModel(name, application);
|
||||||
|
final LocalizedString title = titleEditor.getLocalizedString();
|
||||||
|
for (final Map.Entry<Locale, String> entry : title.getValues()
|
||||||
|
.entrySet()) {
|
||||||
|
pageModel.getTitle().addValue(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
final LocalizedString desc = descriptionEditor.getLocalizedString();
|
||||||
|
for (final Map.Entry<Locale, String> entry : desc.getValues()
|
||||||
|
.entrySet()) {
|
||||||
|
pageModel.getDescription().addValue(entry.getKey(),
|
||||||
|
entry.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pageModel.setName(name);
|
pageModel.setName(name);
|
||||||
|
|
||||||
final PageModelRepository pageModelRepo = pageModelsController
|
final PageModelRepository pageModelRepo = pageModelsController
|
||||||
.getPageModelRepo();
|
.getPageModelRepo();
|
||||||
pageModelRepo.save(pageModel);
|
pageModelRepo.save(pageModel);
|
||||||
|
|
||||||
|
controller
|
||||||
|
.getPageModelsController()
|
||||||
|
.getPageModelsTableDataProvider()
|
||||||
|
.refreshAll();
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,22 @@ class PageModelsController implements Serializable {
|
||||||
pageModelsTableDataProvider.refreshAll();
|
pageModelsTableDataProvider.refreshAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
protected void addComponentModel(final PageModel pageModel,
|
||||||
|
final ComponentModel componentModel) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(pageModel);
|
||||||
|
Objects.requireNonNull(componentModel);
|
||||||
|
|
||||||
|
final PageModel toPageModel = pageModelRepo
|
||||||
|
.findById(pageModel.getPageModelId())
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No PageModel with ID %d in the database.",
|
||||||
|
pageModel.getPageModelId())));
|
||||||
|
|
||||||
|
pageModelManager.addComponentModel(toPageModel, componentModel);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
protected void removeComponentModel(final PageModel pageModel,
|
protected void removeComponentModel(final PageModel pageModel,
|
||||||
final ComponentModel componentModel) {
|
final ComponentModel componentModel) {
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ class PageModelsTab extends CustomComponent {
|
||||||
|
|
||||||
final Button addPageModelButton = new Button(localizedTextsUtil
|
final Button addPageModelButton = new Button(localizedTextsUtil
|
||||||
.getText("ui.admin.pagemodels.create_new"));
|
.getText("ui.admin.pagemodels.create_new"));
|
||||||
|
addPageModelButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||||
addPageModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
|
addPageModelButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
|
||||||
addPageModelButton.addClickListener(event -> {
|
addPageModelButton.addClickListener(event -> {
|
||||||
final CcmApplication application
|
final CcmApplication application
|
||||||
|
|
@ -118,7 +119,7 @@ class PageModelsTab extends CustomComponent {
|
||||||
adminViewController, application);
|
adminViewController, application);
|
||||||
pageModelForm.setModal(true);
|
pageModelForm.setModal(true);
|
||||||
pageModelForm.setWidth("40%");
|
pageModelForm.setWidth("40%");
|
||||||
pageModelForm.setHeight("30%");
|
pageModelForm.setHeight("60%");
|
||||||
|
|
||||||
UI.getCurrent().addWindow(pageModelForm);
|
UI.getCurrent().addWindow(pageModelForm);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,11 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides the locale which has been selected based on the available languages
|
* Provides the locale which has been selected based on the available languages
|
||||||
|
|
@ -185,6 +187,21 @@ public class GlobalizationHelper implements Serializable {
|
||||||
return selected;
|
return selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Locale> getAvailableLocales() {
|
||||||
|
|
||||||
|
final KernelConfig kernelConfig = confManager
|
||||||
|
.findConfiguration(KernelConfig.class);
|
||||||
|
|
||||||
|
return kernelConfig
|
||||||
|
.getSupportedLanguages()
|
||||||
|
.stream()
|
||||||
|
.map(lang -> new Locale(lang))
|
||||||
|
.sorted((locale1, locale2) -> {
|
||||||
|
return locale1.toString().compareTo(locale2.toString());
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
public void setSelectedLocale(final Locale locale) {
|
public void setSelectedLocale(final Locale locale) {
|
||||||
|
|
||||||
final HttpSession session = request.getSession(true);
|
final HttpSession session = request.getSession(true);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,18 @@
|
||||||
package org.libreccm.l10n.ui;
|
package org.libreccm.l10n.ui;
|
||||||
|
|
||||||
|
import com.vaadin.data.provider.ListDataProvider;
|
||||||
import com.vaadin.data.provider.QuerySortOrder;
|
import com.vaadin.data.provider.QuerySortOrder;
|
||||||
|
import com.vaadin.icons.VaadinIcons;
|
||||||
|
import com.vaadin.server.SerializableToIntFunction;
|
||||||
|
import com.vaadin.ui.Button;
|
||||||
|
import com.vaadin.ui.ComboBox;
|
||||||
|
import com.vaadin.ui.Component;
|
||||||
import com.vaadin.ui.CustomComponent;
|
import com.vaadin.ui.CustomComponent;
|
||||||
import com.vaadin.ui.Grid;
|
import com.vaadin.ui.Grid;
|
||||||
|
import com.vaadin.ui.HorizontalLayout;
|
||||||
|
import com.vaadin.ui.components.grid.HeaderCell;
|
||||||
|
import com.vaadin.ui.components.grid.HeaderRow;
|
||||||
|
import com.vaadin.ui.themes.ValoTheme;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.libreccm.l10n.LocalizedString;
|
import org.libreccm.l10n.LocalizedString;
|
||||||
|
|
||||||
|
|
@ -10,6 +20,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -74,7 +85,39 @@ public class LocalizedStringEditor extends CustomComponent {
|
||||||
grid.addColumn(LocalizedStringValue::getLocaleLabel)
|
grid.addColumn(LocalizedStringValue::getLocaleLabel)
|
||||||
.setCaption("Language")
|
.setCaption("Language")
|
||||||
.setId(COL_LOCALE);
|
.setId(COL_LOCALE);
|
||||||
|
grid.addColumn(LocalizedStringValue::getValue)
|
||||||
|
.setCaption("Value")
|
||||||
|
.setId(COL_VALUE);
|
||||||
|
grid.addComponentColumn(this::buildEditButton)
|
||||||
|
.setCaption("Edit")
|
||||||
|
.setId(COL_EDIT);
|
||||||
|
grid.addComponentColumn(this::buildDeleteButton)
|
||||||
|
.setCaption("Delete")
|
||||||
|
.setId(COL_REMOVE);
|
||||||
|
|
||||||
|
final ComboBox<Locale> localeSelect = new ComboBox<>();
|
||||||
|
localeSelect.setDataProvider(this::fetchAvailableLocales,
|
||||||
|
this::countAvailableLocales);
|
||||||
|
localeSelect.setDescription("Select locale to add");
|
||||||
|
localeSelect.addStyleName(ValoTheme.COMBOBOX_TINY);
|
||||||
|
localeSelect.setEmptySelectionAllowed(false);
|
||||||
|
localeSelect.setTextInputAllowed(false);
|
||||||
|
localeSelect.setItemCaptionGenerator(Locale::toString);
|
||||||
|
final Button addButton = new Button("Add value");
|
||||||
|
addButton.addStyleName(ValoTheme.BUTTON_TINY);
|
||||||
|
addButton.setIcon(VaadinIcons.PLUS_CIRCLE_O);
|
||||||
|
addButton.addClickListener(event -> {
|
||||||
|
});
|
||||||
|
|
||||||
|
final HeaderRow headerRow = grid.prependHeaderRow();
|
||||||
|
final HeaderCell headerCell = headerRow.join(COL_LOCALE,
|
||||||
|
COL_VALUE,
|
||||||
|
COL_EDIT,
|
||||||
|
COL_REMOVE);
|
||||||
|
headerCell.setComponent(new HorizontalLayout(localeSelect, addButton));
|
||||||
|
|
||||||
|
localizedString = new LocalizedString();
|
||||||
|
super.setCompositionRoot(grid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalizedStringEditor(final LocalizedString localizedString,
|
public LocalizedStringEditor(final LocalizedString localizedString,
|
||||||
|
|
@ -90,6 +133,7 @@ public class LocalizedStringEditor extends CustomComponent {
|
||||||
final GlobalizationHelper globalizationHelper) {
|
final GlobalizationHelper globalizationHelper) {
|
||||||
this(globalizationHelper);
|
this(globalizationHelper);
|
||||||
this.multiline = multiline;
|
this.multiline = multiline;
|
||||||
|
localizedString = new LocalizedString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalizedStringEditor(final LocalizedString localizedString,
|
public LocalizedStringEditor(final LocalizedString localizedString,
|
||||||
|
|
@ -116,6 +160,58 @@ public class LocalizedStringEditor extends CustomComponent {
|
||||||
this.localizedString = localizedString;
|
this.localizedString = localizedString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Stream<Locale> fetchAvailableLocales(final String filter,
|
||||||
|
final int offset,
|
||||||
|
final int limit) {
|
||||||
|
|
||||||
|
final List<Locale> values = globalizationHelper
|
||||||
|
.getAvailableLocales()
|
||||||
|
.stream()
|
||||||
|
.filter(locale -> localizedString.hasValue(locale))
|
||||||
|
.sorted((locale1, locale2) -> {
|
||||||
|
return locale1.toString().compareTo(locale2.toString());
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (values.size() > limit) {
|
||||||
|
return values.subList(offset, offset + limit).stream();
|
||||||
|
} else {
|
||||||
|
return values.stream();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int countAvailableLocales(final String value) {
|
||||||
|
|
||||||
|
return (int) globalizationHelper
|
||||||
|
.getAvailableLocales()
|
||||||
|
.stream()
|
||||||
|
.filter(locale -> localizedString.hasValue(locale))
|
||||||
|
.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component buildEditButton(final LocalizedStringValue value) {
|
||||||
|
|
||||||
|
final Button button = new Button("Edit");
|
||||||
|
button.setIcon(VaadinIcons.EDIT);
|
||||||
|
button.addStyleName(ValoTheme.BUTTON_TINY);
|
||||||
|
button.addClickListener(event -> {
|
||||||
|
});
|
||||||
|
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component buildDeleteButton(final LocalizedStringValue value) {
|
||||||
|
|
||||||
|
final Button button = new Button("Edit");
|
||||||
|
button.setIcon(VaadinIcons.MINUS_CIRCLE_O);
|
||||||
|
button.addStyleNames(ValoTheme.BUTTON_TINY,
|
||||||
|
ValoTheme.BUTTON_DANGER);
|
||||||
|
button.addClickListener(event -> {
|
||||||
|
});
|
||||||
|
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
private class LocalizedStringValue {
|
private class LocalizedStringValue {
|
||||||
|
|
||||||
private Locale locale;
|
private Locale locale;
|
||||||
|
|
@ -176,11 +272,19 @@ public class LocalizedStringEditor extends CustomComponent {
|
||||||
.compareTo(Objects.toString(locale2));
|
.compareTo(Objects.toString(locale2));
|
||||||
});
|
});
|
||||||
|
|
||||||
return locales
|
if (locales.size() > limit) {
|
||||||
.subList(offset, limit)
|
return locales
|
||||||
.stream()
|
.subList(offset, limit)
|
||||||
.map(locale -> new LocalizedStringValue(
|
.stream()
|
||||||
locale, localizedString.getValue(locale)));
|
.map(locale -> new LocalizedStringValue(
|
||||||
|
locale, localizedString.getValue(locale)));
|
||||||
|
} else {
|
||||||
|
return locales
|
||||||
|
.subList(offset, locales.size())
|
||||||
|
.stream()
|
||||||
|
.map(locale -> new LocalizedStringValue(
|
||||||
|
locale, localizedString.getValue(locale)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -690,3 +690,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
|
||||||
ui.admin.pagemodels.select_application=Please select an application
|
ui.admin.pagemodels.select_application=Please select an application
|
||||||
ui.admin.pagemodels.table.columns.edit.label=Edit
|
ui.admin.pagemodels.table.columns.edit.label=Edit
|
||||||
ui.admin.pagemodels.table.columns.delete.label=Delete
|
ui.admin.pagemodels.table.columns.delete.label=Delete
|
||||||
|
ui.admin.pagemodels.edit_basic_properties=Edit
|
||||||
|
ui.admin.pagemodels.components.save=Save
|
||||||
|
ui.admin.pagemodels.components.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.buttons.save=Save
|
||||||
|
ui.admin.pagemodels.buttons.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.caption.new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.caption.edit=Edit PageModel {0}
|
||||||
|
|
|
||||||
|
|
@ -694,3 +694,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Ist publiziert?
|
||||||
ui.admin.pagemodels.select_application=Bitte eine Applikation ausw\u00e4hlen
|
ui.admin.pagemodels.select_application=Bitte eine Applikation ausw\u00e4hlen
|
||||||
ui.admin.pagemodels.table.columns.edit.label=Bearbeiten
|
ui.admin.pagemodels.table.columns.edit.label=Bearbeiten
|
||||||
ui.admin.pagemodels.table.columns.delete.label=L\u00f6schen
|
ui.admin.pagemodels.table.columns.delete.label=L\u00f6schen
|
||||||
|
ui.admin.pagemodels.edit_basic_properties=Bearbeiten
|
||||||
|
ui.admin.pagemodels.components.save=Speichern
|
||||||
|
ui.admin.pagemodels.components.cancel=Abbrechen
|
||||||
|
ui.admin.pagemodels.buttons.save=Speichern
|
||||||
|
ui.admin.pagemodels.buttons.cancel=Abbrechen
|
||||||
|
ui.admin.pagemodels.caption.new=Neues PageModel erstellen
|
||||||
|
ui.admin.pagemodels.caption.edit=PageModel {0} bearbeiten
|
||||||
|
|
|
||||||
|
|
@ -687,3 +687,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
|
||||||
ui.admin.pagemodels.select_application=Please select an application
|
ui.admin.pagemodels.select_application=Please select an application
|
||||||
ui.admin.pagemodels.table.columns.edit.label=Edit
|
ui.admin.pagemodels.table.columns.edit.label=Edit
|
||||||
ui.admin.pagemodels.table.columns.delete.label=Delete
|
ui.admin.pagemodels.table.columns.delete.label=Delete
|
||||||
|
ui.admin.pagemodels.edit_basic_properties=Edit
|
||||||
|
ui.admin.pagemodels.components.save=Save
|
||||||
|
ui.admin.pagemodels.components.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.buttons.save=Save
|
||||||
|
ui.admin.pagemodels.buttons.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.caption.new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.caption.edit=Edit PageModel {0}
|
||||||
|
|
|
||||||
|
|
@ -678,3 +678,10 @@ ui.admin.pagemodels.table.columns.headers.islive=Is live?
|
||||||
ui.admin.pagemodels.select_application=Please select an application
|
ui.admin.pagemodels.select_application=Please select an application
|
||||||
ui.admin.pagemodels.table.columns.edit.label=Edit
|
ui.admin.pagemodels.table.columns.edit.label=Edit
|
||||||
ui.admin.pagemodels.table.columns.delete.label=Delete
|
ui.admin.pagemodels.table.columns.delete.label=Delete
|
||||||
|
ui.admin.pagemodels.edit_basic_properties=Edit
|
||||||
|
ui.admin.pagemodels.components.save=Save
|
||||||
|
ui.admin.pagemodels.components.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.buttons.save=Save
|
||||||
|
ui.admin.pagemodels.buttons.cancel=Cancel
|
||||||
|
ui.admin.pagemodels.caption.new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.caption.edit=Edit PageModel {0}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue