mirror of
https://github.com/zsviczian/obsidian-excalidraw-plugin.git
synced 2025-08-06 05:46:28 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a1512fce26 | |||
| c2e79f3439 | |||
| 01780a2bf8 | |||
| 10e54eb03e | |||
| 2760a9966b | |||
| a297dbbe52 | |||
| 74c0af2032 | |||
| 813c85accd | |||
| c97d08c997 |
@@ -1,5 +1,5 @@
|
||||
name: Bug report
|
||||
description: When something is clearly broken. Everything else is a feature request.
|
||||
description: If something is clearly broken, it’s a bug. Everything else is a feature or support request. Most reported “bugs” are actually how-to questions or feature requests.
|
||||
title: "BUG: "
|
||||
body:
|
||||
- type: markdown
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> 此说明当前更新至 `5569cff`。
|
||||
|
||||
[English](./AutomateHowTo.md)
|
||||
[English](../../AutomateHowTo.md)
|
||||
|
||||
Excalidraw 自动化允许您使用 [Templater](https://github.com/SilentVoid13/Templater) 插件创建 Excalidraw 绘图。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> 此说明当前更新至 `5569cff`。
|
||||
|
||||
[English](./README.md)
|
||||
[English](../../README.md)
|
||||
|
||||
👉👉👉 快来查看并为新的 [Obsidian-Excalidraw 社区维基](https://excalidraw-obsidian.online/Hobbies/Excalidraw+Blog/WIKI/Welcome+to+the+WIKI)贡献你的力量吧
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "2.5.0-beta-5",
|
||||
"version": "2.5.0",
|
||||
"minAppVersion": "1.1.6",
|
||||
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
|
||||
"author": "Zsolt Viczian",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "2.4.3",
|
||||
"version": "2.5.0",
|
||||
"minAppVersion": "1.1.6",
|
||||
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
|
||||
"author": "Zsolt Viczian",
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@zsviczian/excalidraw": "0.17.1-obsidian-52",
|
||||
"@zsviczian/excalidraw": "0.17.1-obsidian-53",
|
||||
"chroma-js": "^2.4.2",
|
||||
"clsx": "^2.0.0",
|
||||
"@zsviczian/colormaster": "^1.2.2",
|
||||
|
||||
@@ -281,8 +281,17 @@ export class ExcalidrawAutomate {
|
||||
return LZString.compressToBase64(str);
|
||||
}
|
||||
|
||||
public decompressFromBase64(str:string): string {
|
||||
return LZString.decompressFromBase64(str);
|
||||
public decompressFromBase64(data:string): string {
|
||||
if (!data) throw new Error("No input string provided for decompression.");
|
||||
let cleanedData = '';
|
||||
const length = data.length;
|
||||
for (let i = 0; i < length; i++) {
|
||||
const char = data[i];
|
||||
if (char !== '\\n' && char !== '\\r') {
|
||||
cleanedData += char;
|
||||
}
|
||||
}
|
||||
return LZString.decompressFromBase64(cleanedData);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+31
-11
@@ -9,6 +9,8 @@ import {
|
||||
MarkdownView,
|
||||
request,
|
||||
requireApiVersion,
|
||||
HoverParent,
|
||||
HoverPopover,
|
||||
} from "obsidian";
|
||||
//import * as React from "react";
|
||||
//import * as ReactDOM from "react-dom";
|
||||
@@ -251,7 +253,8 @@ type ActionButtons = "save" | "isParsed" | "isRaw" | "link" | "scriptInstall";
|
||||
|
||||
let windowMigratedDisableZoomOnce = false;
|
||||
|
||||
export default class ExcalidrawView extends TextFileView {
|
||||
export default class ExcalidrawView extends TextFileView implements HoverParent{
|
||||
public hoverPopover: HoverPopover;
|
||||
private freedrawLastActiveTimestamp: number = 0;
|
||||
public exportDialog: ExportDialog;
|
||||
public excalidrawData: ExcalidrawData;
|
||||
@@ -1348,7 +1351,7 @@ export default class ExcalidrawView extends TextFileView {
|
||||
|
||||
//if link will open in the same pane I want to save the drawing before opening the link
|
||||
await this.forceSaveIfRequired();
|
||||
const {leaf, promise} = openLeaf({
|
||||
const { promise } = openLeaf({
|
||||
plugin: this.plugin,
|
||||
fnGetLeaf: () => getLeaf(this.plugin,this.leaf,keys),
|
||||
file,
|
||||
@@ -1802,6 +1805,7 @@ export default class ExcalidrawView extends TextFileView {
|
||||
new Notice("Unknown error, save is taking too long");
|
||||
return;
|
||||
}
|
||||
await this.forceSaveIfRequired();
|
||||
}
|
||||
|
||||
private async forceSaveIfRequired():Promise<boolean> {
|
||||
@@ -1810,9 +1814,9 @@ export default class ExcalidrawView extends TextFileView {
|
||||
let dirty = false;
|
||||
//if saving was already in progress
|
||||
//the function awaits the save to finish.
|
||||
while (this.semaphores.saving && watchdog++ < 10) {
|
||||
while (this.semaphores.saving && watchdog++ < 200) {
|
||||
dirty = true;
|
||||
await sleep(20);
|
||||
await sleep(40);
|
||||
}
|
||||
if(this.excalidrawAPI) {
|
||||
this.checkSceneVersion(this.excalidrawAPI.getSceneElements());
|
||||
@@ -2337,8 +2341,8 @@ export default class ExcalidrawView extends TextFileView {
|
||||
|
||||
if (this.plugin.settings.gridSettings.DYNAMIC_COLOR) {
|
||||
// Dynamic color: concatenate opacity to the HEX string
|
||||
Regular = (isDark ? cm.lighterBy(7) : cm.darkerBy(7)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
Bold = (isDark ? cm.lighterBy(14) : cm.darkerBy(14)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
Regular = (isDark ? cm.lighterBy(10) : cm.darkerBy(10)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
Bold = (isDark ? cm.lighterBy(5) : cm.darkerBy(5)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
} else {
|
||||
// Custom color handling
|
||||
const customCM = this.plugin.ea.getCM(this.plugin.settings.gridSettings.COLOR);
|
||||
@@ -2348,7 +2352,7 @@ export default class ExcalidrawView extends TextFileView {
|
||||
Regular = customCM.alphaTo(opacity).stringRGB({ alpha: true });
|
||||
|
||||
// Bold is 7 shades lighter or darker based on the custom color's darkness
|
||||
Bold = (customIsDark ? customCM.lighterBy(7) : customCM.darkerBy(7)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
Bold = (customIsDark ? customCM.lighterBy(10) : customCM.darkerBy(10)).alphaTo(opacity).stringRGB({ alpha: true });
|
||||
}
|
||||
|
||||
return { Bold, Regular };
|
||||
@@ -3362,6 +3366,13 @@ export default class ExcalidrawView extends TextFileView {
|
||||
toDelete.forEach((k) => delete files[k]);
|
||||
}
|
||||
|
||||
const activeTool = st.activeTool;
|
||||
if(!["freedraw","hand"].includes(activeTool.type)) {
|
||||
activeTool.type = "selection";
|
||||
}
|
||||
activeTool.customType = null;
|
||||
activeTool.lastActiveTool = null;
|
||||
|
||||
return {
|
||||
type: "excalidraw",
|
||||
version: 2,
|
||||
@@ -3396,7 +3407,7 @@ export default class ExcalidrawView extends TextFileView {
|
||||
currentStrokeOptions: st.currentStrokeOptions,
|
||||
frameRendering: st.frameRendering,
|
||||
objectsSnapModeEnabled: st.objectsSnapModeEnabled,
|
||||
activeTool: st.activeTool,
|
||||
activeTool,
|
||||
},
|
||||
prevTextMode: this.prevTextMode,
|
||||
files,
|
||||
@@ -3424,7 +3435,15 @@ export default class ExcalidrawView extends TextFileView {
|
||||
}
|
||||
|
||||
private clearHoverPreview() {
|
||||
if (this.hoverPreviewTarget) {
|
||||
if (this.hoverPopover) {
|
||||
this.hoverPreviewTarget = null;
|
||||
//@ts-ignore
|
||||
if(this.hoverPopover.embed?.editor) {
|
||||
return;
|
||||
}
|
||||
//@ts-ignore
|
||||
this.hoverPopover?.hide();
|
||||
} else if (this.hoverPreviewTarget) {
|
||||
(process.env.NODE_ENV === 'development') && DEBUGGING && debug(this.clearHoverPreview, "ExcalidrawView.clearHoverPreview", this);
|
||||
const event = new MouseEvent("click", {
|
||||
view: this.ownerWindow,
|
||||
@@ -3610,7 +3629,7 @@ export default class ExcalidrawView extends TextFileView {
|
||||
this.app.workspace.trigger("hover-link", {
|
||||
event: this.lastMouseEvent,
|
||||
source: VIEW_TYPE_EXCALIDRAW,
|
||||
hoverParent: this.hoverPreviewTarget,
|
||||
hoverParent: this,
|
||||
targetEl: this.hoverPreviewTarget, //null //0.15.0 hover editor!!
|
||||
linktext: this.plugin.hover.linkText,
|
||||
sourcePath: this.plugin.hover.sourcePath,
|
||||
@@ -5073,7 +5092,8 @@ export default class ExcalidrawView extends TextFileView {
|
||||
React,
|
||||
t("COPY_DRAWING_LINK"),
|
||||
() => {
|
||||
navigator.clipboard.writeText(`![[${this.file.path}]]`);
|
||||
const path = this.file.path.match(/(.*)(\.md)$/)?.[1];
|
||||
navigator.clipboard.writeText(`![[${path ?? this.file.path}]]`);
|
||||
},
|
||||
onClose
|
||||
),
|
||||
|
||||
@@ -17,6 +17,20 @@ I develop this plugin as a hobby, spending my free time doing this. If you find
|
||||
|
||||
<div class="ex-coffee-div"><a href="https://ko-fi.com/zsolt"><img src="https://cdn.ko-fi.com/cdn/kofi3.png?v=3" height=45></a></div>
|
||||
`,
|
||||
"2.5.0": `
|
||||
The new [Community Wiki](https://excalidraw-obsidian.online/Hobbies/Excalidraw+Blog/WIKI/Welcome+to+the+WIKI) is waiting for your contribution!
|
||||
|
||||
## Fixed
|
||||
- Regression from 2.4.3: Text flickers when editing text in a container [#2015](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2015).
|
||||
- Significantly improved the performance of group and frame [image fragments](https://youtu.be/sjZfdqpxqsg) when the source drawing includes many images, but the fragment does not.
|
||||
- Minor styling tweaks. Note that with Obsidian 1.7.1, the font size and zoom settings in Obsidian > Appearance will affect the size of buttons and menu items in Excalidraw as well.
|
||||
|
||||
## New
|
||||
- New Canvas Search from Excalidraw.com (CTRL/CMD+F). The "old" search is still available in the Obsidian Command Palette _"Search for text in drawing"_. The old search will also search in image-file names and frame titles, but the result set is not as sophisticated as the one built by Excalidraw.com. If you want to use the old search, you can set up a hotkey in Obsidian settings, e.g., CTRL+ALT/CMD+OPT+F. [#8438](https://github.com/excalidraw/excalidraw/pull/8438)
|
||||
- Grid Color settings under **Excalidraw Appearance and Behavior**. Note that the grid color and opacity also affect the color and transparency of the binding box when using the arrow tool. [#2007](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2007)
|
||||
- Refactoring the code to be compatible with the upcoming Obsidian 1.7.2.
|
||||
- ${String.fromCharCode(96)}ExcalidrawAutomate.decompressFromBase64()${String.fromCharCode(96)} will now remove line breaks from the input string so you can directly supply the compressed JSON string for decompression by script.
|
||||
`,
|
||||
"2.4.3": `
|
||||
Check out the [Excalidraw Plugin's Community WIKI](https://excalidraw-obsidian.online/Hobbies/Excalidraw+Blog/WIKI/Welcome+to+the+WIKI) and help with your content contribution.
|
||||
|
||||
|
||||
@@ -402,7 +402,7 @@ FILENAME_HEAD: "Filename",
|
||||
GRID_COLOR_NAME: "Grid color",
|
||||
GRID_OPACITY_NAME: "Grid opacity",
|
||||
GRID_OPACITY_DESC: "Grid opacity will also control the opacity of the binding box when binding an arrow to an element.<br>" +
|
||||
"Set the opacity of the grid. 0 is transparent, 1 is opaque.",
|
||||
"Set the opacity of the grid. 0 is transparent, 100 is opaque.",
|
||||
LASER_HEAD: "Laser pointer",
|
||||
LASER_COLOR: "Laser pointer color",
|
||||
LASER_DECAY_TIME_NAME: "Laser pointer decay time",
|
||||
|
||||
@@ -395,7 +395,15 @@ FILENAME_HEAD: "文件名",
|
||||
ZOOM_TO_FIT_MAX_LEVEL_NAME: "自动缩放的最高级别",
|
||||
ZOOM_TO_FIT_MAX_LEVEL_DESC:
|
||||
"自动缩放画布时,允许放大的最高级别。该值不能低于 0.5(50%)且不能超过 10(1000%)。",
|
||||
LASER_HEAD: "激光笔工具(More Tools > Laser pointer)",
|
||||
GRID_HEAD: "网格",
|
||||
GRID_DYNAMIC_COLOR_NAME: "动态网格颜色",
|
||||
GRID_DYNAMIC_COLOR_DESC:
|
||||
"<b><u>开启:</u></b>更改网格颜色以匹配画布颜色<br><b><u>关闭:</u></b>将以下颜色用作网格颜色",
|
||||
GRID_COLOR_NAME: "网格颜色",
|
||||
GRID_OPACITY_NAME: "网格透明度",
|
||||
GRID_OPACITY_DESC: "网格透明度还将控制将箭头绑定到元素时绑定框的透明度。<br>"+
|
||||
"设置网格的不透明度。 0 表示完全透明,100 表示完全不透明。",
|
||||
LASER_HEAD: "激光笔工具(更多工具 > 激光笔)",
|
||||
LASER_COLOR: "激光笔颜色",
|
||||
LASER_DECAY_TIME_NAME: "激光笔消失时间",
|
||||
LASER_DECAY_TIME_DESC: "单位是毫秒,默认是 1000(即 1 秒)。",
|
||||
|
||||
@@ -83,8 +83,9 @@ export const setDynamicStyle = (
|
||||
[`--color-on-primary-container`]: str(!isDark?accent().darkerBy(15):accent().lighterBy(15)),
|
||||
[`--color-surface-primary-container`]: str(isDark?accent().darkerBy(step):accent().lighterBy(step)),
|
||||
[`--bold-color`]: str(!isDark?accent().darkerBy(15):accent().lighterBy(15)),
|
||||
//[`--color-primary-darker`]: str(accent().darkerBy(step)),
|
||||
//[`--color-primary-darkest`]: str(accent().darkerBy(step)),
|
||||
[`--color-primary-darker`]: str(accent().darkerBy(step)),
|
||||
[`--color-primary-darkest`]: str(accent().darkerBy(2*step)),
|
||||
['--button-bg-color']: str(gray1()),
|
||||
[`--button-gray-1`]: str(gray1()),
|
||||
[`--button-gray-2`]: str(gray2()),
|
||||
[`--input-border-color`]: str(gray1()),
|
||||
@@ -97,12 +98,11 @@ export const setDynamicStyle = (
|
||||
[`--overlay-bg-color`]: gray2().alphaTo(0.6).stringHEX(),
|
||||
[`--popup-bg-color`]: str(gray1()),
|
||||
[`--color-on-surface`]: str(text),
|
||||
[`--default-border-color`]: str(text),
|
||||
[`--default-border-color`]: str(gray1()),
|
||||
//[`--color-gray-100`]: str(text),
|
||||
[`--color-gray-40`]: str(text), //frame
|
||||
[`--color-gray-50`]: str(text), //frame
|
||||
[`--color-surface-highlight`]: str(gray1()),
|
||||
//[`--color-gray-30`]: str(gray1),
|
||||
[`--color-gray-20`]: str(gray1()),
|
||||
[`--sidebar-border-color`]: str(gray1()),
|
||||
[`--color-primary-light`]: str(accent().lighterBy(step)),
|
||||
[`--button-hover-bg`]: str(gray1()),
|
||||
@@ -118,9 +118,11 @@ export const setDynamicStyle = (
|
||||
[`color`]: str(text),
|
||||
['--excalidraw-caret-color']: str(isLightTheme ? text : cmBG()),
|
||||
[`--select-highlight-color`]: str(gray1()),
|
||||
[`--color-gray-80`]: str(isDark?text.darkerBy(40):text.lighterBy(40)), //frame
|
||||
[`--color-gray-90`]: str(isDark?text.darkerBy(5):text.lighterBy(5)), //search background
|
||||
[`--default-bg-color`]: str(text), //search background,
|
||||
[`--color-gray-80`]: str(isDark?text.darkerBy(10):text.lighterBy(10)), //frame
|
||||
[`--color-gray-70`]: str(isDark?text.darkerBy(10):text.lighterBy(10)), //frame
|
||||
[`--default-bg-color`]: str(isDark?text.darkerBy(20):text.lighterBy(20)), //search background,
|
||||
[`--color-gray-50`]: str(text), //frame
|
||||
};
|
||||
|
||||
const styleString = Object.keys(styleObject)
|
||||
|
||||
@@ -638,4 +638,12 @@ textarea.excalidraw-wysiwyg, .excalidraw input {
|
||||
|
||||
.ExcTextField__input input::placeholder {
|
||||
color: var(--select-highlight-color);
|
||||
}
|
||||
|
||||
.excalidraw textarea::placeholder {
|
||||
color: var(--color-gray-50);
|
||||
}
|
||||
|
||||
.excalidraw textarea.ttd-dialog-input {
|
||||
caret-color: var(--excalidraw-caret-color);
|
||||
}
|
||||
Reference in New Issue
Block a user