From de3790a269bcab383314a8f92b71f07e2ef2b8ba Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Wed, 3 Oct 2018 10:18:55 +0200 Subject: [PATCH] OO-3620: accept at the top or at the bottom of a target element The drag and drop make a difference if the element is droppped at the top of an element or at the bottom and behave like the UI of dragula --- .../olat/modules/ceditor/PageEditorProvider.java | 2 +- .../ceditor/ui/HTMLRawEditorController.java | 10 +++++----- .../modules/ceditor/ui/PageEditorController.java | 15 +++++++++------ .../ceditor/ui/component/PageEditorModel.java | 12 ++++++++++-- .../ceditor/ui/event/DropFragmentEvent.java | 12 ++++++++++++ .../modules/ceditor/ui/model/EditorFragment.java | 5 ++++- .../org/olat/modules/forms/model/xml/Form.java | 12 ++++++++---- .../forms/ui/EvaluationFormEditorController.java | 6 +++--- .../olat/modules/portfolio/PortfolioService.java | 2 +- .../olat/modules/portfolio/manager/PageDAO.java | 16 ++++++++++++---- .../portfolio/manager/PortfolioServiceImpl.java | 4 ++-- .../modules/portfolio/ui/PageRunController.java | 6 +++--- 12 files changed, 70 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java b/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java index 36b551ef0c2..01bdaab6199 100644 --- a/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java +++ b/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java @@ -46,6 +46,6 @@ public interface PageEditorProvider extends PageProvider { * @param element * @param sibling The reference object */ - public void movePageElement(PageElement element, PageElement sibling); + public void movePageElement(PageElement elementToMove, PageElement sibling, boolean after); } diff --git a/src/main/java/org/olat/modules/ceditor/ui/HTMLRawEditorController.java b/src/main/java/org/olat/modules/ceditor/ui/HTMLRawEditorController.java index 4535ac775ca..ffd80280069 100644 --- a/src/main/java/org/olat/modules/ceditor/ui/HTMLRawEditorController.java +++ b/src/main/java/org/olat/modules/ceditor/ui/HTMLRawEditorController.java @@ -117,7 +117,7 @@ public class HTMLRawEditorController extends FormBasicController implements Page @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { String cmpId = "html-" + CodeHelper.getRAMUniqueID() + "h"; - String content = htmlPart.getContent(); + String content = contentOrExample(htmlPart.getContent()); if(minimalEditor) { htmlItem = uifactory.addRichTextElementForParagraphEditor(cmpId, null, content, 8, 80, formLayout, getWindowControl()); @@ -128,8 +128,8 @@ public class HTMLRawEditorController extends FormBasicController implements Page htmlItem.getEditorConfiguration().setSendOnBlur(true); htmlItem.getEditorConfiguration().disableImageAndMovie(); htmlItem.getEditorConfiguration().setAutoResizeEnabled(true, -1, 40, 0); - - String formattedContent = Formatter.formatLatexFormulas(contentOrExample(content)); + + String formattedContent = Formatter.formatLatexFormulas(content); staticItem = uifactory.addStaticTextElement(cmpId + "_static", formattedContent, formLayout); ((FormLayoutContainer)formLayout).contextPut("htmlCmpId", cmpId); @@ -160,7 +160,7 @@ public class HTMLRawEditorController extends FormBasicController implements Page String content = htmlItem.getValue(); htmlPart.setContent(content); htmlPart = store.savePageElement(htmlPart); - String formattedContent = Formatter.formatLatexFormulas(contentOrExample(content)); + String formattedContent = Formatter.formatLatexFormulas(content); staticItem.setValue(formattedContent); fireEvent(ureq, new ChangePartEvent(htmlPart)); } @@ -173,7 +173,7 @@ public class HTMLRawEditorController extends FormBasicController implements Page htmlPart.setContent(content); htmlPart = store.savePageElement(htmlPart); - String formattedContent = Formatter.formatLatexFormulas(contentOrExample(content)); + String formattedContent = Formatter.formatLatexFormulas(content); staticItem.setValue(formattedContent); fireEvent(ureq, new ChangePartEvent(htmlPart)); } diff --git a/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java b/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java index 93fff601255..9b27fbf7014 100644 --- a/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java +++ b/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java @@ -359,7 +359,7 @@ public class PageEditorController extends BasicController { PageElement pageElement = provider.appendPageElementAt(element, index); newFragment = createFragment(ureq, pageElement); - editorModel.add(index, newFragment); + editorModel.add(index, newFragment, false); } } } @@ -414,7 +414,7 @@ public class PageEditorController extends BasicController { if(index >= 0) { provider.moveUpPageElement(fragment.getPageElement()); editorModel.remove(fragment); - editorModel.add(index, fragment); + editorModel.add(index, fragment, false); } } @@ -435,8 +435,7 @@ public class PageEditorController extends BasicController { if(index < editorModel.size()) { provider.moveDownPageElement(fragment.getPageElement()); editorModel.remove(fragment); - editorModel.add(index, fragment); - + editorModel.add(index, fragment, false); } } @@ -524,15 +523,19 @@ public class PageEditorController extends BasicController { int index = editorModel.size(); PageElement nextElement = null; + boolean after = false; if(sibling != null && editorModel.contains(sibling)) { + // dropped at the top of the target element index = editorModel.indexOf(sibling); nextElement = sibling.getPageElement(); } else if(target != null && editorModel.contains(target)) { + // target: dropped at the bottom of the target element index = editorModel.indexOf(target); nextElement = target.getPageElement(); + after = true; } - editorModel.add(index, fragment); - provider.movePageElement(fragment.getPageElement(), nextElement); + editorModel.add(index, fragment, after); + provider.movePageElement(fragment.getPageElement(), nextElement, after); fragment.setEditMode(false); } } diff --git a/src/main/java/org/olat/modules/ceditor/ui/component/PageEditorModel.java b/src/main/java/org/olat/modules/ceditor/ui/component/PageEditorModel.java index 1de3030f7a2..536a8e169ae 100644 --- a/src/main/java/org/olat/modules/ceditor/ui/component/PageEditorModel.java +++ b/src/main/java/org/olat/modules/ceditor/ui/component/PageEditorModel.java @@ -57,8 +57,16 @@ public class PageEditorModel { return fragments.size(); } - public void add(int index, EditorFragment fragment) { - fragments.add(index, fragment); + public void add(int index, EditorFragment fragment, boolean after) { + if(after) { + index++; + } + + if(index >= 0 && index < fragments.size()) { + fragments.add(index, fragment); + } else { + fragments.add(fragment); + } } public boolean add(EditorFragment fragment) { diff --git a/src/main/java/org/olat/modules/ceditor/ui/event/DropFragmentEvent.java b/src/main/java/org/olat/modules/ceditor/ui/event/DropFragmentEvent.java index 4015e20cd1d..0f672286ac4 100644 --- a/src/main/java/org/olat/modules/ceditor/ui/event/DropFragmentEvent.java +++ b/src/main/java/org/olat/modules/ceditor/ui/event/DropFragmentEvent.java @@ -72,4 +72,16 @@ public class DropFragmentEvent extends Event { public String getSlotId() { return slotId; } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(256); + sb.append("dropFragment[dragged=").append(dragged == null ? "" : dragged).append(";") + .append("source=").append(source == null ? "" : source).append(";") + .append("target=").append(targetCmpId == null ? "" : targetCmpId).append(";") + .append("sibling=").append(siblingCmpId == null ? "" : siblingCmpId).append(";") + .append("container=").append(containerCmpId == null ? "" : containerCmpId).append(";") + .append("slot=").append(slotId == null ? "" : slotId).append("]"); + return sb.toString(); + } } diff --git a/src/main/java/org/olat/modules/ceditor/ui/model/EditorFragment.java b/src/main/java/org/olat/modules/ceditor/ui/model/EditorFragment.java index e791f2487b4..0209fbb217b 100644 --- a/src/main/java/org/olat/modules/ceditor/ui/model/EditorFragment.java +++ b/src/main/java/org/olat/modules/ceditor/ui/model/EditorFragment.java @@ -60,7 +60,10 @@ public class EditorFragment { public void setEditMode(boolean editMode) { this.editMode = editMode; if(editorPart instanceof PageElementEditorController) { - ((PageElementEditorController)editorPart).setEditMode(editMode); + PageElementEditorController editorCtrl = (PageElementEditorController)editorPart; + if(editorCtrl.isEditMode() != editMode) { + ((PageElementEditorController)editorPart).setEditMode(editMode); + } } } diff --git a/src/main/java/org/olat/modules/forms/model/xml/Form.java b/src/main/java/org/olat/modules/forms/model/xml/Form.java index 689b0430f3f..040c05ffb4a 100644 --- a/src/main/java/org/olat/modules/forms/model/xml/Form.java +++ b/src/main/java/org/olat/modules/forms/model/xml/Form.java @@ -84,8 +84,8 @@ public class Form { } } - public void moveElement(AbstractElement element, AbstractElement sibling) { - if(elements.remove(element)) { + public void moveElement(AbstractElement elementToMove, AbstractElement sibling, boolean after) { + if(elements.remove(elementToMove)) { int index; if(sibling == null) { index = elements.size(); @@ -93,10 +93,14 @@ public class Form { index = elements.indexOf(sibling); } + if(after) { + index++; + } + if(index >= 0 && index <= elements.size()) { - elements.add(index, element); + elements.add(index, elementToMove); } else { - elements.add(element); + elements.add(elementToMove); } } } diff --git a/src/main/java/org/olat/modules/forms/ui/EvaluationFormEditorController.java b/src/main/java/org/olat/modules/forms/ui/EvaluationFormEditorController.java index 7725d16c473..c55176da361 100644 --- a/src/main/java/org/olat/modules/forms/ui/EvaluationFormEditorController.java +++ b/src/main/java/org/olat/modules/forms/ui/EvaluationFormEditorController.java @@ -231,9 +231,9 @@ public class EvaluationFormEditorController extends BasicController { } @Override - public void movePageElement(PageElement element, PageElement sibling) { - if(element instanceof AbstractElement && (sibling == null || sibling instanceof AbstractElement)) { - form.moveElement((AbstractElement)element, (AbstractElement)sibling); + public void movePageElement(PageElement elementToMove, PageElement sibling, boolean after) { + if(elementToMove instanceof AbstractElement && (sibling == null || sibling instanceof AbstractElement)) { + form.moveElement((AbstractElement)elementToMove, (AbstractElement)sibling, after); persistForm(); } } diff --git a/src/main/java/org/olat/modules/portfolio/PortfolioService.java b/src/main/java/org/olat/modules/portfolio/PortfolioService.java index ce445e198e3..688cb90d724 100644 --- a/src/main/java/org/olat/modules/portfolio/PortfolioService.java +++ b/src/main/java/org/olat/modules/portfolio/PortfolioService.java @@ -560,7 +560,7 @@ public interface PortfolioService { public void moveDownPagePart(Page page, PagePart part); - public void movePagePart(Page page, PagePart part, PagePart sibling); + public void movePagePart(Page page, PagePart partToMove, PagePart sibling, boolean after); /** * Remove the page from the section, remove relations to the diff --git a/src/main/java/org/olat/modules/portfolio/manager/PageDAO.java b/src/main/java/org/olat/modules/portfolio/manager/PageDAO.java index 2f6a4ab9c4b..2093818d9ec 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/PageDAO.java +++ b/src/main/java/org/olat/modules/portfolio/manager/PageDAO.java @@ -521,7 +521,7 @@ public class PageDAO { } } - public void movePart(PageBody body, PagePart part, PagePart sibling) { + public void movePart(PageBody body, PagePart part, PagePart sibling, boolean after) { body.getParts().size(); body.getParts().remove(part); @@ -530,9 +530,17 @@ public class PageDAO { index = body.getParts().size(); } else { index = body.getParts().indexOf(sibling); - } - - body.getParts().add(index, part); + } + if(after) { + index++; + } + + List<PagePart> parts = body.getParts(); + if(index >= 0 && index < parts.size()) { + parts.add(index, part); + } else { + parts.add(part); + } ((PageBodyImpl)body).setLastModified(new Date()); dbInstance.getCurrentEntityManager().merge(body); } diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java index 8d3b063a585..4dbe1b32e01 100644 --- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java +++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java @@ -995,9 +995,9 @@ public class PortfolioServiceImpl implements PortfolioService { } @Override - public void movePagePart(Page page, PagePart part, PagePart sibling) { + public void movePagePart(Page page, PagePart partToMove, PagePart sibling, boolean after) { PageBody body = pageDao.loadPageBodyByKey(page.getBody().getKey()); - pageDao.movePart(body, part, sibling); + pageDao.movePart(body, partToMove, sibling, after); } @Override diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java index 60d6a7408dd..e061bcd213c 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java @@ -836,9 +836,9 @@ public class PageRunController extends BasicController implements TooledControll } @Override - public void movePageElement(PageElement element, PageElement sibling) { - if(element instanceof PagePart && (sibling == null || sibling instanceof PagePart)) { - portfolioService.movePagePart(page, (PagePart)element, (PagePart)sibling); + public void movePageElement(PageElement elementToMove, PageElement sibling, boolean after) { + if(elementToMove instanceof PagePart && (sibling == null || sibling instanceof PagePart)) { + portfolioService.movePagePart(page, (PagePart)elementToMove, (PagePart)sibling, after); } } } -- GitLab