@@ -252,10 +235,6 @@ const genAttr = (attrs: IObject, focusName = "bookmark", cb: (dialog: Dialog, rm
-
+ const addDialog = new Dialog({
+ title: window.siyuan.languages.attrName,
+ content: `
+
+
+
+
`,
+ width: isMobile() ? "92vw" : "520px",
+ });
+ const inputElement = addDialog.element.querySelector("input") as HTMLInputElement;
+ const btnsElement = addDialog.element.querySelectorAll(".b3-button");
+ dialog.bindInput(inputElement, () => {
+ (btnsElement[1] as HTMLButtonElement).click();
+ });
+ inputElement.focus();
+ inputElement.select();
+ btnsElement[0].addEventListener("click", () => {
+ addDialog.destroy();
+ });
+ btnsElement[1].addEventListener("click", () => {
+ if (!isValidAttrName(inputElement.value)) {
+ showMessage(window.siyuan.languages.attrName + "
" + inputElement.value + " " + window.siyuan.languages.invalid)
+ return false;
+ }
+ target.parentElement.insertAdjacentHTML("beforebegin", `
-
-
+ ${inputElement.value}
-
+
`);
- const inputElements = dialog.element.querySelectorAll(".b3-text-field") as NodeListOf
;
- inputElements[inputElements.length - 2].focus();
- bindAttrInput(inputElements[inputElements.length - 1], dialog.element);
- bindAttrInput(inputElements[inputElements.length - 2], dialog.element);
+ const valueElement = target.parentElement.previousElementSibling.querySelector(".b3-text-field") as HTMLInputElement;
+ valueElement.focus();
+ bindAttrInput(valueElement, attrs.id);
+ addDialog.destroy();
+ });
event.stopPropagation();
event.preventDefault();
break;
- } else if (type === "closeDialog") {
- dialog.destroy();
- } else if (type === "confirm") {
- cb(dialog, removeAttrs);
}
target = target.parentElement;
}
@@ -349,74 +344,76 @@ const genAttr = (attrs: IObject, focusName = "bookmark", cb: (dialog: Dialog, rm
if (focusName === item.getAttribute("data-name")) {
item.focus();
}
- bindAttrInput(item, dialog.element);
+ bindAttrInput(item, attrs.id);
});
};
export const openFileAttr = (attrs: IObject, id: string, focusName = "bookmark") => {
- genAttr(attrs, focusName, (dialog) => {
- let nodeAttrHTML = "";
- let errorTip = "";
- const attrsResult: IObject = {};
- dialog.element.querySelectorAll(".b3-text-field").forEach((item: HTMLInputElement) => {
- let name = item.getAttribute("data-name");
- if (!name) {
- if (item.tagName === "INPUT") {
- return;
- }
- name = "custom-" + (item.parentElement.querySelector(".b3-text-field") as HTMLInputElement).value;
- }
- if (item.value.trim()) {
- if (!isValidAttrName(name)) {
- errorTip += name.replace(/^custom-/, "") + ", ";
- return;
- }
- attrsResult[name] = item.value;
- const escapeHTML = Lute.EscapeHTMLStr(item.value);
- if (name === "bookmark") {
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "name") {
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "alias") {
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "memo") {
- nodeAttrHTML += ``;
- }
- }
- });
- if (errorTip) {
- showMessage(errorTip.substr(0, errorTip.length - 2) + " " + window.siyuan.languages.invalid);
- }
- /// #if !MOBILE
- getAllModels().editor.forEach(item => {
- if (item.editor.protyle.block.rootID === id) {
- const refElement = item.editor.protyle.title.element.querySelector(".protyle-attr--refcount");
- if (refElement) {
- nodeAttrHTML += refElement.outerHTML;
- }
- item.editor.protyle.title.element.querySelector(".protyle-attr").innerHTML = nodeAttrHTML;
- item.editor.protyle.wysiwyg.renderCustom(attrsResult);
- }
- // https://github.com/siyuan-note/siyuan/issues/6398
- item.editor.protyle.wysiwyg.element.querySelectorAll(`[data-type~="block-ref"][data-id="${id}"][data-subtype="d"]`).forEach(item => {
- fetchPost("/api/block/getRefText", {id: id}, (response) => {
- item.innerHTML = response.data;
- });
- });
- });
- /// #endif
- fetchPost("/api/attr/resetBlockAttrs", {id, attrs: attrsResult}, () => {
- /// #if !MOBILE
- if (attrsResult.bookmark !== attrs.bookmark) {
- const bookmark = getDockByType("bookmark").data.bookmark;
- if (bookmark instanceof Bookmark) {
- bookmark.update();
- }
- }
- /// #endif
- });
- dialog.destroy();
- });
+ genAttr(attrs, focusName,
+ // (dialog) => {
+ // let nodeAttrHTML = "";
+ // let errorTip = "";
+ // const attrsResult: IObject = {};
+ // dialog.element.querySelectorAll(".b3-text-field").forEach((item: HTMLInputElement) => {
+ // let name = item.getAttribute("data-name");
+ // if (!name) {
+ // if (item.tagName === "INPUT") {
+ // return;
+ // }
+ // name = "custom-" + (item.parentElement.querySelector(".b3-text-field") as HTMLInputElement).value;
+ // }
+ // if (item.value.trim()) {
+ // if (!isValidAttrName(name)) {
+ // errorTip += name.replace(/^custom-/, "") + ", ";
+ // return;
+ // }
+ // attrsResult[name] = item.value;
+ // const escapeHTML = Lute.EscapeHTMLStr(item.value);
+ // if (name === "bookmark") {
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "name") {
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "alias") {
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "memo") {
+ // nodeAttrHTML += ``;
+ // }
+ // }
+ // });
+ // if (errorTip) {
+ // showMessage(errorTip.substr(0, errorTip.length - 2) + " " + window.siyuan.languages.invalid);
+ // }
+ // /// #if !MOBILE
+ // getAllModels().editor.forEach(item => {
+ // if (item.editor.protyle.block.rootID === id) {
+ // const refElement = item.editor.protyle.title.element.querySelector(".protyle-attr--refcount");
+ // if (refElement) {
+ // nodeAttrHTML += refElement.outerHTML;
+ // }
+ // item.editor.protyle.title.element.querySelector(".protyle-attr").innerHTML = nodeAttrHTML;
+ // item.editor.protyle.wysiwyg.renderCustom(attrsResult);
+ // }
+ // // https://github.com/siyuan-note/siyuan/issues/6398
+ // item.editor.protyle.wysiwyg.element.querySelectorAll(`[data-type~="block-ref"][data-id="${id}"][data-subtype="d"]`).forEach(item => {
+ // fetchPost("/api/block/getRefText", {id: id}, (response) => {
+ // item.innerHTML = response.data;
+ // });
+ // });
+ // });
+ // /// #endif
+ // fetchPost("/api/attr/resetBlockAttrs", {id, attrs: attrsResult}, () => {
+ // /// #if !MOBILE
+ // if (attrsResult.bookmark !== attrs.bookmark) {
+ // const bookmark = getDockByType("bookmark").data.bookmark;
+ // if (bookmark instanceof Bookmark) {
+ // bookmark.update();
+ // }
+ // }
+ // /// #endif
+ // });
+ // dialog.destroy();
+ // }
+ );
};
export const openAttr = (nodeElement: Element, protyle: IProtyle, focusName = "bookmark") => {
@@ -425,71 +422,73 @@ export const openAttr = (nodeElement: Element, protyle: IProtyle, focusName = "b
}
const id = nodeElement.getAttribute("data-node-id");
fetchPost("/api/attr/getBlockAttrs", {id}, (response) => {
- genAttr(response.data, focusName, (dialog, removeAttrs) => {
- let nodeAttrHTML = "";
- const oldHTML = nodeElement.outerHTML;
- let errorTip = "";
- dialog.element.querySelectorAll(".b3-text-field").forEach((item: HTMLInputElement) => {
- let name = item.getAttribute("data-name");
- if (!name) {
- if (item.tagName === "INPUT") {
- return;
- }
- name = "custom-" + (item.parentElement.querySelector(".b3-text-field") as HTMLInputElement).value;
- }
- if (item.value.trim()) {
- if (!isValidAttrName(name)) {
- errorTip += name.replace(/^custom-/, "") + ", ";
- return;
- }
- if (removeAttrs.includes(name)) {
- removeAttrs.find((rmAttr, index) => {
- if (rmAttr === name) {
- removeAttrs.splice(index, 1);
- return true;
- }
- });
- }
- const escapeHTML = Lute.EscapeHTMLStr(item.value);
- nodeElement.setAttribute(name, escapeHTML);
- if (name === "bookmark") {
- /// #if !MOBILE
- if (escapeHTML !== response.data.bookmark) {
- const bookmark = getDockByType("bookmark").data.bookmark;
- if (bookmark instanceof Bookmark) {
- setTimeout(() => {
- bookmark.update();
- }, 219);
- }
- }
- /// #endif
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "name") {
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "alias") {
- nodeAttrHTML += `${escapeHTML}
`;
- } else if (name === "memo") {
- nodeAttrHTML += ``;
- }
- } else {
- nodeElement.removeAttribute(name);
- }
- });
- removeAttrs.forEach(item => {
- nodeElement.removeAttribute(item);
- });
- if (errorTip) {
- showMessage(errorTip.substr(0, errorTip.length - 2) + " " + window.siyuan.languages.invalid);
- }
- const refElement = nodeElement.lastElementChild.querySelector(".protyle-attr--refcount");
- if (refElement) {
- nodeAttrHTML += refElement.outerHTML;
- }
- nodeElement.lastElementChild.innerHTML = nodeAttrHTML + Constants.ZWSP;
- nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
- updateTransaction(protyle, id, nodeElement.outerHTML, oldHTML);
- dialog.destroy();
- });
+ genAttr(response.data, focusName,
+ // (dialog, removeAttrs) => {
+ // let nodeAttrHTML = "";
+ // const oldHTML = nodeElement.outerHTML;
+ // let errorTip = "";
+ // dialog.element.querySelectorAll(".b3-text-field").forEach((item: HTMLInputElement) => {
+ // let name = item.getAttribute("data-name");
+ // if (!name) {
+ // if (item.tagName === "INPUT") {
+ // return;
+ // }
+ // name = "custom-" + (item.parentElement.querySelector(".b3-text-field") as HTMLInputElement).value;
+ // }
+ // if (item.value.trim()) {
+ // if (!isValidAttrName(name)) {
+ // errorTip += name.replace(/^custom-/, "") + ", ";
+ // return;
+ // }
+ // if (removeAttrs.includes(name)) {
+ // removeAttrs.find((rmAttr, index) => {
+ // if (rmAttr === name) {
+ // removeAttrs.splice(index, 1);
+ // return true;
+ // }
+ // });
+ // }
+ // const escapeHTML = Lute.EscapeHTMLStr(item.value);
+ // nodeElement.setAttribute(name, escapeHTML);
+ // if (name === "bookmark") {
+ // /// #if !MOBILE
+ // if (escapeHTML !== response.data.bookmark) {
+ // const bookmark = getDockByType("bookmark").data.bookmark;
+ // if (bookmark instanceof Bookmark) {
+ // setTimeout(() => {
+ // bookmark.update();
+ // }, 219);
+ // }
+ // }
+ // /// #endif
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "name") {
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "alias") {
+ // nodeAttrHTML += `${escapeHTML}
`;
+ // } else if (name === "memo") {
+ // nodeAttrHTML += ``;
+ // }
+ // } else {
+ // nodeElement.removeAttribute(name);
+ // }
+ // });
+ // removeAttrs.forEach(item => {
+ // nodeElement.removeAttribute(item);
+ // });
+ // if (errorTip) {
+ // showMessage(errorTip.substr(0, errorTip.length - 2) + " " + window.siyuan.languages.invalid);
+ // }
+ // const refElement = nodeElement.lastElementChild.querySelector(".protyle-attr--refcount");
+ // if (refElement) {
+ // nodeAttrHTML += refElement.outerHTML;
+ // }
+ // nodeElement.lastElementChild.innerHTML = nodeAttrHTML + Constants.ZWSP;
+ // nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
+ // updateTransaction(protyle, id, nodeElement.outerHTML, oldHTML);
+ // dialog.destroy();
+ // }
+ );
});
};