diff --git a/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java b/src/main/java/org/olat/modules/ceditor/PageEditorProvider.java index 36b551ef0c2c68fd745c0dcab602f545fd4aac60..01bdaab6199e5f5c0666d7eab815783b622a298d 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 4535ac775caec86f65c7a92bb18154731f1638b9..ffd802800695851e77eeedd6c0e5255f56e63bb8 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 93fff6012558f6098779eaac0ad1308ea029676f..9b27fbf7014526eaddf194eb0e68ec253fefcb8f 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 1de3030f7a24ea372c43a07b8b7f111d2b21a174..536a8e169aed10d3f050956ba88ae0fee9d59a14 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 4015e20cd1da21b3cbdd4ca215946c29ea13ef14..0f672286ac4389c14a4fe47eca06c37ec38de79e 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 e791f2487b431adb91bc578cdc8646624869a69c..0209fbb217b12607d6fd8cbf2dff5c071c2719b3 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 689b0430f3f8aa925785bcf1b39276a913953628..040c05ffb4a16168b76fe9245efa03b6e496f3fe 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 7725d16c473bc6e70023386a626cb6f337780026..c55176da3611835115069f66f0bfd84d2314c077 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 ce445e198e35ca59559230273ff1df23ca1fae1c..688cb90d7246c623eae198f989b7a03ef951e3cc 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 2f6a4ab9c4b03c32078b5f5c93629a23211bfa2e..2093818d9ec80f22120def9477e2aa824223d175 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 8d3b063a58501ec11b90b6ab6731e32e4143ecff..4dbe1b32e01141cc4d8d278c5894795353e75a92 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 60d6a7408dd48b30fd09f670914805ccb1336273..e061bcd213c93594d30d06acd1a42ab2384a038c 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); } } }