diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js index a9597126d772bca026c384cf618624e505bece19..ef531dcfd69ca5d9d704c08e21ba188a2841b28a 100644 --- a/src/core/js/edit_mode.js +++ b/src/core/js/edit_mode.js @@ -526,7 +526,7 @@ var edit_mode = new function() { /** - * Todo: Documentation missing + * Initializes the edit mode and loads the tool box. */ this.enter_edit_mode = function(editApp = undefined) { window.localStorage.edit_mode = "true"; @@ -559,21 +559,41 @@ var edit_mode = new function() { * Reload the toolbox, e.g. when new Properties or RecordTypes have been added. */ this.reload_edit_mode_toolbox = async function() { - model = edit_mode.retrieve_data_model(); - edit_mode.init_tool_box(model); + var model = await edit_mode.retrieve_data_model(); + edit_mode.load_tool_box(model); } - this.retrieve_data_model = retrieve_data_model; + /** + * Make all draggable elements in this model (as defined by the css class + * caosdb-f-edit-drag draggable by adding the html attribute draggable and + * setting it to true + */ + this.add_draggable_property_to_model = function (model) { + var props = model.querySelectorAll(".caosdb-f-edit-drag"); + for (var pel of props) { + pel.setAttribute("draggable", true); + } + } + this.retrieve_data_model = retrieve_data_model; /** - * Todo: Documentation missing + * Load the tool box and make it draggable. */ this.init_tool_box = function(model) { + edit_mode.load_tool_box(model); + edit_mode.init_dragable(); + } + + /** + * Remove all warnings and set the HTML of the toolbox panel to + * the model given by model. + */ + this.load_tool_box = function(model) { + edit_mode.add_draggable_property_to_model(model); var editPanel = edit_mode.get_edit_panel(); removeAllWaitingNotifications(editPanel); editPanel.innerHTML = xml2str(model); - edit_mode.init_dragable(); } @@ -1169,6 +1189,13 @@ var edit_mode = new function() { edit_mode.add_property_trash_button($(element).find(".caosdb-property-edit")[0],element); } + + /** + * Create a new Record using an existing RecordType. + * The RecordType can be specified using recordtype_id. + * + * Currently name is ignored. TODO: check whether that behavior is intended. + */ this.create_new_record = async function(recordtype_id, name = undefined) { var rt = await retrieve(recordtype_id); var newrecord = createEntityXML("Record", undefined, undefined, @@ -1191,7 +1218,7 @@ var edit_mode = new function() { */ this.init_dragable = function() { // The old approach, clumsy - use bubbling instead. - // var props = document.getElementsByClassName("caosdb-f-edit-drag"); + //var props = document.getElementsByClassName("caosdb-f-edit-drag"); // for (var pel of props) { // pel.addEventListener("dragstart", edit_mode.dragstart); // pel.setAttribute("draggable", true); @@ -1202,7 +1229,7 @@ var edit_mode = new function() { if (event.target.classList.contains("caosdb-f-edit-drag")) { edit_mode.dragstart(event); } - } + }); } /** @@ -1558,6 +1585,7 @@ var edit_mode = new function() { edit_mode.unfreeze(); resolve_references.init(); preview.init(); + edit_mode.reload_edit_mode_toolbox(); } app.waiting = createWaitingNotification("Please wait."); $(app.waiting).hide();