diff --git a/ea-scripts/Expand rectangles horizontally keep text centered.md b/ea-scripts/Expand rectangles horizontally keep text centered.md index 4e91da6..b9f605c 100644 --- a/ea-scripts/Expand rectangles horizontally keep text centered.md +++ b/ea-scripts/Expand rectangles horizontally keep text centered.md @@ -18,8 +18,12 @@ const elements = ea.getViewSelectedElements(); const topGroups = ea.getMaximumGroups(elements); const groupWidths = topGroups - .map((g) => - g.reduce( + .map((g) => { + if(g.length === 1 && (g[0].type === 'arrow' || g[0].type === 'line')) { + // ignore individual lines + return { minLeft: 0, maxRight: 0 }; + } + return g.reduce( (pre, cur, i) => { if (i === 0) { return { @@ -39,8 +43,8 @@ const groupWidths = topGroups } }, { minLeft: 0, maxRight: 0 } - ) - ) + ); + }) .map((r) => { r.width = r.maxRight - r.minLeft; return r; diff --git a/ea-scripts/Expand rectangles horizontally.md b/ea-scripts/Expand rectangles horizontally.md index 5657409..425ed4c 100644 --- a/ea-scripts/Expand rectangles horizontally.md +++ b/ea-scripts/Expand rectangles horizontally.md @@ -1,70 +1,74 @@ -/* - -![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-download-raw.jpg) - -Download this file and save to your Obsidian Vault including the first line, or open it in "Raw" and copy the entire contents to Obsidian. - -![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-expand-rectangles.gif) - -This script expands the width of the selected rectangles until they are all the same width. - -See documentation for more details: -https://zsviczian.github.io/obsidian-excalidraw-plugin/ExcalidrawScriptsEngine.html - -```javascript -*/ - -const elements = ea.getViewSelectedElements(); -const topGroups = ea.getMaximumGroups(elements); - -const groupWidths = topGroups - .map((g) => - g.reduce( - (pre, cur, i) => { - if (i === 0) { - return { - minLeft: cur.x, - maxRight: cur.x + cur.width, - index: i, - }; - } else { - return { - minLeft: cur.x < pre.minLeft ? cur.x : pre.minLeft, - maxRight: - cur.x + cur.width > pre.maxRight - ? cur.x + cur.width - : pre.maxRight, - index: i, - }; - } - }, - { minLeft: 0, maxRight: 0 } - ) - ) - .map((r) => { - r.width = r.maxRight - r.minLeft; - return r; - }); - -const maxGroupWidth = Math.max(...groupWidths.map((g) => g.width)); - -for (var i = 0; i < topGroups.length; i++) { - const rects = topGroups[i] - .filter((el) => el.type === "rectangle") - .sort((lha, rha) => lha.x - rha.x); - - const groupWith = groupWidths[i].width; - if (groupWith < maxGroupWidth) { - const distance = maxGroupWidth - groupWith; - const perRectDistance = distance / rects.length; - for (var j = 0; j < rects.length; j++) { - const rect = rects[j]; - rect.x = rect.x + perRectDistance * j; - rect.width += perRectDistance; - } - } -} - -ea.copyViewElementsToEAforEditing(elements); -ea.addElementsToView(false, false); - +/* + +![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-download-raw.jpg) + +Download this file and save to your Obsidian Vault including the first line, or open it in "Raw" and copy the entire contents to Obsidian. + +![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-expand-rectangles.gif) + +This script expands the width of the selected rectangles until they are all the same width. + +See documentation for more details: +https://zsviczian.github.io/obsidian-excalidraw-plugin/ExcalidrawScriptsEngine.html + +```javascript +*/ + +const elements = ea.getViewSelectedElements(); +const topGroups = ea.getMaximumGroups(elements); + +const groupWidths = topGroups + .map((g) => { + if(g.length === 1 && (g[0].type === 'arrow' || g[0].type === 'line')) { + // ignore individual lines + return { minLeft: 0, maxRight: 0 }; + } + return g.reduce( + (pre, cur, i) => { + if (i === 0) { + return { + minLeft: cur.x, + maxRight: cur.x + cur.width, + index: i, + }; + } else { + return { + minLeft: cur.x < pre.minLeft ? cur.x : pre.minLeft, + maxRight: + cur.x + cur.width > pre.maxRight + ? cur.x + cur.width + : pre.maxRight, + index: i, + }; + } + }, + { minLeft: 0, maxRight: 0 } + ); + }) + .map((r) => { + r.width = r.maxRight - r.minLeft; + return r; + }); + +const maxGroupWidth = Math.max(...groupWidths.map((g) => g.width)); + +for (var i = 0; i < topGroups.length; i++) { + const rects = topGroups[i] + .filter((el) => el.type === "rectangle") + .sort((lha, rha) => lha.x - rha.x); + + const groupWith = groupWidths[i].width; + if (groupWith < maxGroupWidth) { + const distance = maxGroupWidth - groupWith; + const perRectDistance = distance / rects.length; + for (var j = 0; j < rects.length; j++) { + const rect = rects[j]; + rect.x = rect.x + perRectDistance * j; + rect.width += perRectDistance; + } + } +} + +ea.copyViewElementsToEAforEditing(elements); +ea.addElementsToView(false, false); + diff --git a/ea-scripts/Expand rectangles vertically keep text centered.md b/ea-scripts/Expand rectangles vertically keep text centered.md index 6922c20..588e55a 100644 --- a/ea-scripts/Expand rectangles vertically keep text centered.md +++ b/ea-scripts/Expand rectangles vertically keep text centered.md @@ -18,8 +18,12 @@ const elements = ea.getViewSelectedElements(); const topGroups = ea.getMaximumGroups(elements); const groupHeights = topGroups - .map((g) => - g.reduce( + .map((g) => { + if(g.length === 1 && (g[0].type === 'arrow' || g[0].type === 'line')) { + // ignore individual lines + return { minTop: 0, maxBottom: 0 }; + } + return g.reduce( (pre, cur, i) => { if (i === 0) { return { @@ -39,8 +43,8 @@ const groupHeights = topGroups } }, { minTop: 0, maxBottom: 0 } - ) - ) + ); + }) .map((r) => { r.height = r.maxBottom - r.minTop; return r; diff --git a/ea-scripts/Expand rectangles vertically.md b/ea-scripts/Expand rectangles vertically.md index afe0c40..e2d3c4c 100644 --- a/ea-scripts/Expand rectangles vertically.md +++ b/ea-scripts/Expand rectangles vertically.md @@ -1,67 +1,71 @@ -/* - -![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-download-raw.jpg) - -Download this file and save to your Obsidian Vault including the first line, or open it in "Raw" and copy the entire contents to Obsidian. - -![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-expand-rectangles.gif) - -This script expands the height of the selected rectangles until they are all the same height. - -```javascript -*/ - -const elements = ea.getViewSelectedElements(); -const topGroups = ea.getMaximumGroups(elements); - -const groupHeights = topGroups - .map((g) => - g.reduce( - (pre, cur, i) => { - if (i === 0) { - return { - minTop: cur.y, - maxBottom: cur.y + cur.height, - index: i, - }; - } else { - return { - minTop: cur.y < pre.minTop ? cur.y : pre.minTop, - maxBottom: - cur.y + cur.height > pre.maxBottom - ? cur.y + cur.height - : pre.maxBottom, - index: i, - }; - } - }, - { minTop: 0, maxBottom: 0 } - ) - ) - .map((r) => { - r.height = r.maxBottom - r.minTop; - return r; - }); - -const maxGroupHeight = Math.max(...groupHeights.map((g) => g.height)); - -for (var i = 0; i < topGroups.length; i++) { - const rects = topGroups[i] - .filter((el) => el.type === "rectangle") - .sort((lha, rha) => lha.y - rha.y); - - const groupWith = groupHeights[i].height; - if (groupWith < maxGroupHeight) { - const distance = maxGroupHeight - groupWith; - const perRectDistance = distance / rects.length; - for (var j = 0; j < rects.length; j++) { - const rect = rects[j]; - rect.y = rect.y + perRectDistance * j; - rect.height += perRectDistance; - } - } -} - -ea.copyViewElementsToEAforEditing(elements); -ea.addElementsToView(false, false); - +/* + +![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-download-raw.jpg) + +Download this file and save to your Obsidian Vault including the first line, or open it in "Raw" and copy the entire contents to Obsidian. + +![](https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/images/scripts-expand-rectangles.gif) + +This script expands the height of the selected rectangles until they are all the same height. + +```javascript +*/ + +const elements = ea.getViewSelectedElements(); +const topGroups = ea.getMaximumGroups(elements); + +const groupHeights = topGroups + .map((g) => { + if(g.length === 1 && (g[0].type === 'arrow' || g[0].type === 'line')) { + // ignore individual lines + return { minTop: 0, maxBottom: 0 }; + } + return g.reduce( + (pre, cur, i) => { + if (i === 0) { + return { + minTop: cur.y, + maxBottom: cur.y + cur.height, + index: i, + }; + } else { + return { + minTop: cur.y < pre.minTop ? cur.y : pre.minTop, + maxBottom: + cur.y + cur.height > pre.maxBottom + ? cur.y + cur.height + : pre.maxBottom, + index: i, + }; + } + }, + { minTop: 0, maxBottom: 0 } + ); + }) + .map((r) => { + r.height = r.maxBottom - r.minTop; + return r; + }); + +const maxGroupHeight = Math.max(...groupHeights.map((g) => g.height)); + +for (var i = 0; i < topGroups.length; i++) { + const rects = topGroups[i] + .filter((el) => el.type === "rectangle") + .sort((lha, rha) => lha.y - rha.y); + + const groupWith = groupHeights[i].height; + if (groupWith < maxGroupHeight) { + const distance = maxGroupHeight - groupWith; + const perRectDistance = distance / rects.length; + for (var j = 0; j < rects.length; j++) { + const rect = rects[j]; + rect.y = rect.y + perRectDistance * j; + rect.height += perRectDistance; + } + } +} + +ea.copyViewElementsToEAforEditing(elements); +ea.addElementsToView(false, false); +