fix: editable title in edit layout mode only

This commit is contained in:
Clayton 2026-02-04 00:21:34 -06:00 committed by sokumon
parent 492f730b42
commit 203b39a42a
2 changed files with 24 additions and 11 deletions

View file

@ -509,10 +509,18 @@
position: relative;
}
.title-widget:hover .title-input-label {
.title-widget--read-only {
cursor: default;
}
.title-widget--editable:hover .title-input-label {
opacity: 0.9;
}
.desktop-modal-heading .title-widget--read-only .title-input-label:hover {
background-color: transparent;
}
.desktop-modal-heading .title-widget .title-input-label {
color: var(--neutral-white);
font-size: var(--text-2xl);
@ -522,7 +530,7 @@
transition: background-color 0.15s ease;
}
.desktop-modal-heading .title-widget:hover .title-input-label {
.desktop-modal-heading .title-widget--editable:hover .title-input-label {
background-color: rgba(255, 255, 255, 0.08);
}

View file

@ -1038,7 +1038,8 @@ class DesktopIcon {
let modal = frappe.desktop_utils.create_desktop_modal(me);
modal.setup(me.icon_title, me.child_icons, 4);
let $title = modal.modal.find(".modal-title");
let title = new InlineEditor($title, this.icon_data.label, function (
const edit_mode = frappe.pages["desktop"].desktop_page.edit_mode;
let title = new InlineEditor($title, this.icon_data.label, edit_mode, function (
old_value,
new_value
) {
@ -1051,11 +1052,8 @@ class DesktopIcon {
frappe.pages["desktop"].desktop_page.update();
let desktop_page = frappe.pages["desktop"].desktop_page;
if (desktop_page.edit_mode) {
save_desktop(frappe.new_desktop_icons);
} else {
desktop_page.save_layout(frappe.desktop_icons, []);
if (!frappe.pages["desktop"].desktop_page.edit_mode) {
frappe.pages["desktop"].desktop_page.save_layout(frappe.desktop_icons, []);
}
});
modal.show();
@ -1245,10 +1243,14 @@ class IconsPane {
}
class InlineEditor {
constructor(container, initialValue = "", onRename = () => {}) {
constructor(container, initialValue = "", editMode = false, onRename = () => {}) {
this.container = container;
this.currentValue = initialValue;
this.onRename = onRename;
this.editMode = editMode;
this.onRename = typeof editMode === "function" ? editMode : onRename;
if (typeof editMode === "function") {
this.editMode = false;
}
this.isEditing = false;
this.render();
@ -1256,8 +1258,10 @@ class InlineEditor {
}
render() {
const tooltip = this.editMode ? __("Click to edit") : "";
const editableClass = this.editMode ? "title-widget--editable" : "title-widget--read-only";
this.container.html(`
<div class="title-widget" title="${__("Click to edit")}">
<div class="title-widget ${editableClass}" title="${tooltip}">
<span class="title-input-label">${__(this.currentValue)}</span>
<div class="title-input-wrapper" style="display: none;">
<input type="text" class="title-input" />
@ -1274,6 +1278,7 @@ class InlineEditor {
bindEvents() {
this.label.on("click", (e) => {
e.stopPropagation();
if (!frappe.pages["desktop"].desktop_page.edit_mode) return;
this.startEditing();
});