|
@@ -1134,6 +1134,35 @@ export class Toolbar {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private updateLanguage(languageElement: HTMLElement, protyle: IProtyle, id: string, nodeElement: HTMLElement, oldHtml: string, selectedLang: string) {
|
|
|
|
+ languageElement.textContent = selectedLang === window.siyuan.languages.clear ? "" : selectedLang;
|
|
|
|
+ window.siyuan.storage[Constants.LOCAL_CODELANG] = languageElement.textContent;
|
|
|
|
+ setStorageVal(Constants.LOCAL_CODELANG, window.siyuan.storage[Constants.LOCAL_CODELANG]);
|
|
|
|
+ const editElement = getContenteditableElement(nodeElement);
|
|
|
|
+ if (Constants.SIYUAN_RENDER_CODE_LANGUAGES.includes(languageElement.textContent)) {
|
|
|
|
+ nodeElement.dataset.content = editElement.textContent.trim();
|
|
|
|
+ nodeElement.dataset.subtype = languageElement.textContent
|
|
|
|
+ nodeElement.className = "render-node"
|
|
|
|
+ nodeElement.innerHTML = `<div spin="1"></div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div>`;
|
|
|
|
+ processRender(nodeElement);
|
|
|
|
+ } else {
|
|
|
|
+ const lineNumber = nodeElement.getAttribute("linenumber");
|
|
|
|
+ if (lineNumber === "true" || (lineNumber !== "false" && window.siyuan.config.editor.codeSyntaxHighlightLineNum)) {
|
|
|
|
+ editElement.classList.add("protyle-linenumber");
|
|
|
|
+ } else {
|
|
|
|
+ editElement.classList.remove("protyle-linenumber");
|
|
|
|
+ }
|
|
|
|
+ (editElement as HTMLElement).textContent = editElement.textContent;
|
|
|
|
+ editElement.removeAttribute("data-render");
|
|
|
|
+ highlightRender(nodeElement);
|
|
|
|
+ }
|
|
|
|
+ nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
|
|
|
|
+ updateTransaction(protyle, id, nodeElement.outerHTML, oldHtml);
|
|
|
|
+ this.subElement.classList.add("fn__none");
|
|
|
|
+ focusByRange(this.range);
|
|
|
|
+ return nodeElement.outerHTML;
|
|
|
|
+ }
|
|
|
|
+
|
|
public showCodeLanguage(protyle: IProtyle, languageElement: HTMLElement) {
|
|
public showCodeLanguage(protyle: IProtyle, languageElement: HTMLElement) {
|
|
const nodeElement = hasClosestBlock(languageElement);
|
|
const nodeElement = hasClosestBlock(languageElement);
|
|
if (!nodeElement) {
|
|
if (!nodeElement) {
|
|
@@ -1167,27 +1196,12 @@ export class Toolbar {
|
|
}
|
|
}
|
|
upDownHint(listElement, event);
|
|
upDownHint(listElement, event);
|
|
if (event.key === "Enter") {
|
|
if (event.key === "Enter") {
|
|
- const activeText = this.subElement.querySelector(".b3-list-item--focus").textContent;
|
|
|
|
- languageElement.textContent = activeText === window.siyuan.languages.clear ? "" : activeText;
|
|
|
|
- window.siyuan.storage[Constants.LOCAL_CODELANG] = languageElement.textContent;
|
|
|
|
- setStorageVal(Constants.LOCAL_CODELANG, window.siyuan.storage[Constants.LOCAL_CODELANG]);
|
|
|
|
- const editElement = getContenteditableElement(nodeElement);
|
|
|
|
- const lineNumber = nodeElement.getAttribute("linenumber");
|
|
|
|
- if (lineNumber === "true" || (lineNumber !== "false" && window.siyuan.config.editor.codeSyntaxHighlightLineNum)) {
|
|
|
|
- editElement.classList.add("protyle-linenumber");
|
|
|
|
- } else {
|
|
|
|
- editElement.classList.remove("protyle-linenumber");
|
|
|
|
- }
|
|
|
|
- (editElement as HTMLElement).textContent = editElement.textContent;
|
|
|
|
- editElement.removeAttribute("data-render");
|
|
|
|
- highlightRender(nodeElement);
|
|
|
|
- nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
|
|
|
|
- updateTransaction(protyle, id, nodeElement.outerHTML, oldHtml);
|
|
|
|
- oldHtml = nodeElement.outerHTML;
|
|
|
|
|
|
+ oldHtml = this.updateLanguage(languageElement, protyle, id, nodeElement, oldHtml, this.subElement.querySelector(".b3-list-item--focus").textContent);
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
event.stopPropagation();
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- if (event.key === "Escape" || event.key === "Enter") {
|
|
|
|
|
|
+ if (event.key === "Escape") {
|
|
this.subElement.classList.add("fn__none");
|
|
this.subElement.classList.add("fn__none");
|
|
focusByRange(this.range);
|
|
focusByRange(this.range);
|
|
}
|
|
}
|
|
@@ -1238,27 +1252,7 @@ export class Toolbar {
|
|
if (!listElement) {
|
|
if (!listElement) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- languageElement.textContent = listElement.textContent === window.siyuan.languages.clear ? "" : listElement.textContent;
|
|
|
|
- window.siyuan.storage[Constants.LOCAL_CODELANG] = languageElement.textContent;
|
|
|
|
- setStorageVal(Constants.LOCAL_CODELANG, window.siyuan.storage[Constants.LOCAL_CODELANG]);
|
|
|
|
- const nodeElement = hasClosestBlock(languageElement);
|
|
|
|
- if (nodeElement) {
|
|
|
|
- const editElement = getContenteditableElement(nodeElement);
|
|
|
|
- const lineNumber = nodeElement.getAttribute("linenumber");
|
|
|
|
- if (lineNumber === "true" || (lineNumber !== "false" && window.siyuan.config.editor.codeSyntaxHighlightLineNum)) {
|
|
|
|
- editElement.classList.add("protyle-linenumber");
|
|
|
|
- } else {
|
|
|
|
- editElement.classList.remove("protyle-linenumber");
|
|
|
|
- }
|
|
|
|
- (editElement as HTMLElement).textContent = editElement.textContent;
|
|
|
|
- editElement.removeAttribute("data-render");
|
|
|
|
- highlightRender(nodeElement);
|
|
|
|
- nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
|
|
|
|
- updateTransaction(protyle, id, nodeElement.outerHTML, oldHtml);
|
|
|
|
- oldHtml = nodeElement.outerHTML;
|
|
|
|
- this.subElement.classList.add("fn__none");
|
|
|
|
- focusByRange(this.range);
|
|
|
|
- }
|
|
|
|
|
|
+ oldHtml = this.updateLanguage(languageElement, protyle, id, nodeElement, oldHtml, listElement.textContent);
|
|
});
|
|
});
|
|
this.subElement.style.zIndex = (++window.siyuan.zIndex).toString();
|
|
this.subElement.style.zIndex = (++window.siyuan.zIndex).toString();
|
|
this.subElement.classList.remove("fn__none");
|
|
this.subElement.classList.remove("fn__none");
|
|
@@ -1436,7 +1430,7 @@ export class Toolbar {
|
|
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
|
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
|
</span></div>`;
|
|
</span></div>`;
|
|
});
|
|
});
|
|
- this.subElement.querySelector(".b3-list--background").innerHTML = html ||`<li class="b3-list--empty">${window.siyuan.languages.emptyContent}</li>`;
|
|
|
|
|
|
+ this.subElement.querySelector(".b3-list--background").innerHTML = html || `<li class="b3-list--empty">${window.siyuan.languages.emptyContent}</li>`;
|
|
/// #if !MOBILE
|
|
/// #if !MOBILE
|
|
const rangePosition = getSelectionPosition(nodeElement, range);
|
|
const rangePosition = getSelectionPosition(nodeElement, range);
|
|
setPosition(this.subElement, rangePosition.left, rangePosition.top + 18, Constants.SIZE_TOOLBAR_HEIGHT);
|
|
setPosition(this.subElement, rangePosition.left, rangePosition.top + 18, Constants.SIZE_TOOLBAR_HEIGHT);
|