Skip to content
Snippets Groups Projects
Commit e683da1d authored by srosse's avatar srosse
Browse files
parents f65eb240 a7b91dfd
No related branches found
No related tags found
No related merge requests found
......@@ -52,7 +52,9 @@ import org.olat.modules.ceditor.ui.component.ContentEditorContainerComponent;
import org.olat.modules.ceditor.ui.component.ContentEditorFragment;
import org.olat.modules.ceditor.ui.component.ContentEditorFragmentComponent;
import org.olat.modules.ceditor.ui.event.AddElementEvent;
import org.olat.modules.ceditor.ui.event.ChangePartEvent;
import org.olat.modules.ceditor.ui.event.CloseElementsEvent;
import org.olat.modules.ceditor.ui.event.ClosePartEvent;
import org.olat.modules.ceditor.ui.event.DeleteElementEvent;
import org.olat.modules.ceditor.ui.event.DropToEditorEvent;
import org.olat.modules.ceditor.ui.event.DropToPageElementEvent;
......@@ -171,6 +173,12 @@ public class PageEditorV2Controller extends BasicController {
cleanUp();
} else if(cmc == source) {
cleanUp();
} else if(event instanceof ChangePartEvent) {
ChangePartEvent cpe = (ChangePartEvent)event;
doSaveElement(ureq, cpe.getElement());
} else if(event instanceof ClosePartEvent) {
ClosePartEvent cpe = (ClosePartEvent)event;
doCloseEditor(ureq, cpe.getElement());
}
super.event(ureq, source, event);
}
......@@ -211,6 +219,18 @@ public class PageEditorV2Controller extends BasicController {
}
}
private void doCloseEditor(UserRequest ureq, PageElement element) {
new ComponentTraverser((comp, uureq) -> {
if(comp instanceof ContentEditorFragment) {
ContentEditorFragment elementCmp = (ContentEditorFragment)comp;
if(elementCmp.getElementId().equals(element.getId()) && elementCmp.isEditMode()) {
elementCmp.setEditMode(false);
}
}
return true;
}, editorCmp, false).visitAll(ureq);
}
private void doCloseEditionEvent(UserRequest ureq, String elementId) {
new ComponentTraverser((comp, uureq) -> {
if(comp instanceof ContentEditorFragment) {
......@@ -361,6 +381,11 @@ public class PageEditorV2Controller extends BasicController {
return fragment;
}
private void doSaveElement(UserRequest ureq, PageElement element) {
doCloseEditor(ureq, element);
fireEvent(ureq, Event.CHANGED_EVENT);
}
private void doSaveElement(UserRequest ureq, ContentEditorFragment fragment) {
fragment.setEditMode(false);
fireEvent(ureq, Event.CHANGED_EVENT);
......
......@@ -56,7 +56,8 @@ public class ContentEditorComponentRenderer extends AbstractContentEditorCompone
sb.append("<script>\n")
.append("jQuery(function() {\n")
.append(" jQuery('#o_c").append(cmp.getDispatchID()).append("').ceditor({\n")
.append(" componentUrl: '").append(renderer.getUrlBuilder().getJavascriptURI()).append("'\n")
.append(" componentUrl: '").append(renderer.getUrlBuilder().getJavascriptURI()).append("',\n")
.append(" csrfToken: '").append(renderer.getCsrfToken()).append("'\n")
.append(" });\n")
.append("});\n")
.append("</script>");
......
......@@ -37,7 +37,7 @@ import org.olat.modules.ceditor.PageEditorSecurityCallback;
import org.olat.modules.ceditor.PageElement;
import org.olat.modules.ceditor.PageElementHandler;
import org.olat.modules.ceditor.ui.FullEditorSecurityCallback;
import org.olat.modules.ceditor.ui.PageEditorController;
import org.olat.modules.ceditor.ui.PageEditorV2Controller;
import org.olat.modules.forms.handler.ContainerHandler;
import org.olat.modules.forms.handler.DisclaimerHandler;
import org.olat.modules.forms.handler.FileUploadHandler;
......@@ -73,7 +73,7 @@ public class EvaluationFormEditorController extends BasicController {
private final boolean restrictedEdit;
private final boolean restrictedEditWeight;
private PageEditorController pageEditCtrl;
private PageEditorV2Controller pageEditCtrl;
public EvaluationFormEditorController(UserRequest ureq, WindowControl wControl, File formFile, DataStorage storage,
boolean restrictedEdit, boolean restrictedEditWeight) {
......@@ -92,7 +92,7 @@ public class EvaluationFormEditorController extends BasicController {
mainVC = createVelocityContainer("editor");
PageEditorSecurityCallback secCallback = restrictedEdit ? new RestrictedEditorSecurityCallback() : new FullEditorSecurityCallback();
pageEditCtrl = new PageEditorController(ureq, getWindowControl(), new FormPageEditorProvider(), secCallback, getTranslator());
pageEditCtrl = new PageEditorV2Controller(ureq, getWindowControl(), new FormPageEditorProvider(), secCallback, getTranslator());
listenTo(pageEditCtrl);
mainVC.put("page", pageEditCtrl.getInitialComponent());
......
......@@ -28,21 +28,23 @@
if(typeof editor === "undefined") {
editor = new ContentEditor(this.get(0), options);
this.data("data-oo-ceditor", editor);
jQuery('#o_main_wrapper').css('z-index', 5);
} else {// if the same DOM element exists
editor.initWindowListener();
editor.initWindowListener(editor.settings);
editor.initInteractJs(editor.settings);
}
initInteractJs();
return editor;
};
var ContentEditor = function(container, params) {
this.settings = $.extend({
componentUrl: ''
componentUrl: '',
csrfToken: ''
}, params);
initWindowListener();
initWindowListener(this.settings);
this.container = container;
initInteractJs();
initInteractJs(this.settings);
};
function isTop(target, y) {
......@@ -64,8 +66,9 @@
return parseInt(style.height) + parseInt(style.marginTop) + parseInt(style.marginBottom);
}
function initInteractJs() {
var position = { x: 0, y: 0 }
function initInteractJs(settings) {
var position = { x: 0, y: 0 };
var $settings = settings;
function setPositionClass(target, top) {
if(top) {
......@@ -114,7 +117,7 @@
setPositionClass(event.target, top);
},
drop: function(event) {
drop(event, event.target, event.relatedTarget);
drop($settings, event, event.target, event.relatedTarget);
}
},
checker: function (dragEvent, event, dropped, dropzone, dropElement, draggable, draggableElement) {
......@@ -133,7 +136,7 @@
return null;
}
function initWindowListener() {
function initWindowListener(settings) {
if(o_info.contentEditorWindowListener === undefined || o_info.contentEditorWindowListener == null) {
o_info.contentEditorWindowListener = function(e) {
var componentUrl = jQuery(".o_page_content_editor").data("oo-content-editor-url");
......@@ -159,9 +162,9 @@
if(parts.length == 1) {
var element = jQuery(parts.get(0));
var elementUrl = element.data("oo-content-editor-url");
o_XHREvent(elementUrl, false, false, 'cid', 'edit_fragment', 'fragment', element.data('oo-page-fragment'));
o_XHREvent(elementUrl, false, false, '_csrf', settings.csrfToken, 'cid', 'edit_fragment', 'fragment', element.data('oo-page-fragment'));
} else if(!edited) {
o_XHREvent(componentUrl, false, false, 'cid', 'close_edit_fragment');
o_XHREvent(componentUrl, false, false, '_csrf', settings.csrfToken, 'cid', 'close_edit_fragment');
}
}
}
......@@ -170,7 +173,7 @@
}
}
function drop(event, target, source) {
function drop(settings, event, target, source) {
var draggedId = jQuery(source).data('oo-page-fragment');
var slotId = null;
......@@ -193,7 +196,7 @@
componentUrl = jQuery(target).closest(".o_page_content_editor")
}
o_XHREvent(componentUrl, false, false, "cid", "drop_fragment", "fragment", targetId, "dragged", draggedId, "source", draggedId, "target", targetId, "container", containerId, "slot", slotId, "position", position);
o_XHREvent(componentUrl, false, false, "_csrf", settings.csrfToken, "cid", "drop_fragment", "fragment", targetId, "dragged", draggedId, "source", draggedId, "target", targetId, "container", containerId, "slot", slotId, "position", position);
}
}(jQuery));
\ No newline at end of file
......@@ -308,14 +308,17 @@ div.o_page_content_editor .gu-mirror, .o_page_content_editor .gu-transit {
content: '';
}
.o_page_part.oo-dragging {
opacity: 0.4;
background-color: white;
.oo-dragging {
z-index: 4;
}
.o_page_part.oo-dragging, .o_page_fragment_edit.oo-dragging .o_page_part {
opacity: 0.6;
background-color: rgba(255, 255, 255, 0.6);
border: $o-panel-placeholder-border-width dotted $o-editor-drag-accepted-color;
box-shadow: 0px 0px 20px #aaa;
}
.gu-transit {
border: $o-panel-placeholder-border-width dotted $o-editor-drag-accepted-color;
opacity: 0.4;
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
source diff could not be displayed: it is too large. Options to address this: view the blob.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment