diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fb68fdc81cf6f6a86971be70c321eaea3750f1f..a50eb436599300354f5b26ec853f3940a313ac0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * `BUILD_FOOTER_SOURCES_HREF` * `BUILD_FOOTER_LICENCE_HREF` See `build.properties.d/00_default.properties` for more information +* Start editing an entity/creating a new record directly by adding an `#edit` or + `#new_record` URI fragment, respectively. ### Changed (for changes in existing functionality) diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js index 85645aabaf7d05cb7abe928b4792b5de6ef9e352..d1b922c413e13072a3d2a9cb5079aa1dda27a110 100644 --- a/src/core/js/edit_mode.js +++ b/src/core/js/edit_mode.js @@ -76,11 +76,52 @@ var edit_mode = new function () { } } + this.has_edit_fragment = function () { + const fragment = window.location.hash.substr(1); + return fragment === "edit"; + } + + this.has_new_record_fragment = function () { + const fragment = window.location.hash.substr(1); + return fragment === "new_record"; + } + this._init = function () { var target = $("#top-navbar").find("ul").first(); this.add_edit_mode_button(target, edit_mode.toggle_edit_mode); + + var after_setup_callback = () => {} // do nothing + if (this.has_edit_fragment()) { + // find first entity + const first_entity = $(".caosdb-entity-panel")[0]; + if (first_entity) { + window.localStorage["edit_mode"] = true; + after_setup_callback = () => { + logger.debug("Edit this entity after #edit in the uri", first_entity); + edit_mode.edit(first_entity); + } + } + } else if (this.has_new_record_fragment()) { + for (let entity of $(".caosdb-entity-panel")) { + // find first record type + if (getEntityRole(entity) === "RecordType") { + window.localStorage["edit_mode"] = true; + const new_record = edit_mode.create_new_record(getEntityID(entity)); + after_setup_callback = () => { + logger.debug("Create a new record after #new_record in the uri", entity); + new_record.then((new_record) => { + edit_mode.app.newEntity(new_record); + }, edit_mode.handle_error); + } + break; + } + } + } + + // intialize the edit mode panel and add all necessary buttons if the edit mode is if (this.is_edit_mode()) { - edit_mode.enter_edit_mode(); + + edit_mode.enter_edit_mode().then(after_setup_callback); edit_mode.toggle_edit_panel(); // This is for the very specific case of reloading the // page while the edit mode is active on small screens @@ -88,6 +129,9 @@ var edit_mode = new function () { $(".caosdb-edit-min-width-warning").addClass("d-block"); } $('.caosdb-f-edit').css("transition", "top 1s"); + + // add drag-n-drop listener (needed for the edit_mode toolbox). + edit_mode.init_dragable(); } @@ -444,9 +488,6 @@ var edit_mode = new function () { file_path = getEntityPath(entity_form); file_checksum = getEntityChecksum(entity_form); file_size = getEntitySize(entity_form); - console.log(file_path); - console.log(file_checksum); - console.log(file_size); } return createEntityXML( entityRole, @@ -580,7 +621,6 @@ var edit_mode = new function () { $(".caosdb-f-btn-toggle-edit-mode").text("Leave Edit Mode"); edit_mode.init_tool_box(); - edit_mode.init_dragable(); var nextEditApp = editApp; if (typeof nextEditApp == "undefined") { @@ -639,6 +679,7 @@ var edit_mode = new function () { * the model given by model. */ this.init_tool_box = async function () { + // remove previously added model $(".caosdb-f-edit-mode-existing").remove() @@ -649,6 +690,12 @@ var edit_mode = new function () { removeAllWaitingNotifications(editPanel[0]); editPanel.children()[0].appendChild(model); + + if (edit_mode.app && edit_mode.app.entity && edit_mode.app.entity.parentElement && (edit_mode.app.state === "changed")) { + // an entity is being editted + $(".caosdb-f-edit-mode-existing").toggleClass("d-none", false); + $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", true); + } } @@ -1485,6 +1532,7 @@ var edit_mode = new function () { init_drag_n_drop(); } app.onEnterInitial = async function (e) { + $(".caosdb-f-edit-mode-existing").toggleClass("d-none", true); $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", false); app.old = undefined; @@ -1559,6 +1607,7 @@ var edit_mode = new function () { }, edit_mode.handle_error); }; app.onEnterChanged = function (e) { + // show existing entities in toolbox $(".caosdb-f-edit-mode-existing").toggleClass("d-none", false); $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", true);