Skip to content

Commit a038e7b

Browse files
Fixed default node style attributes got applied to all node types. Renamed StyleableAttribute and style setting to style attribute
1 parent 646259c commit a038e7b

File tree

7 files changed

+40
-37
lines changed

7 files changed

+40
-37
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,14 +195,14 @@ Set the pathfinding method of the edges (arrows) to default, straight, squared o
195195
</details>
196196

197197
## Custom Styles
198-
Custom styles for nodes and edges can easily be added.
198+
Custom style attributes for nodes and edges can easily be added.
199199

200200
1. Add a popup menu option
201201
- Open the `<VAULT-PATH>/.obsidian/plugins/obsidian-advanced-canvas/data.json` file
202-
- If you want to add an option to node popup menu, search for `customNodeStyleSettings` property, otherwise search for `customEdgeStyleSettings` property. (Create it if it doesn't exist yet)
202+
- If you want to add an option to node popup menu, search for `customNodeStyleAttributes` property, otherwise search for `customEdgeStyleAttributes` property. (Create it if it doesn't exist yet)
203203
- Add the custom popup menu option (Remove the comments!)
204204
```json
205-
"customNodeStyleSettings": [
205+
"customNodeStyleAttributes": [
206206
{
207207
"datasetKey": "exampleStyleAttribute", // Must be unique and written in camelCase
208208
"label": "Example Style Attribute",

src/canvas-extensions/advanced-styles/edge-styles.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ import * as SvgPathHelper from "src/utils/svg-path-helper"
55
import { CanvasEvent } from "src/core/events"
66
import * as BBoxHelper from "src/utils/bbox-helper"
77
import CanvasExtension from "../../core/canvas-extension"
8-
import { DEFAULT_EDGE_STYLE_SETTINGS, StylableAttribute } from "./style-config"
8+
import { BUILTIN_EDGE_STYLE_ATTRIBUTES, StyleAttribute } from "./style-config"
99
import SettingsManager from "src/settings"
1010

1111
export default class EdgeStylesExtension extends CanvasExtension {
12-
allEdgeStyles: StylableAttribute[]
12+
allEdgeStyleAttributes: StyleAttribute[]
1313

1414
isEnabled() { return 'edgesStylingFeatureEnabled' as const }
1515

1616
init() {
17-
this.allEdgeStyles = [...DEFAULT_EDGE_STYLE_SETTINGS, ...this.plugin.settings.getSetting('customEdgeStyleSettings')]
17+
this.allEdgeStyleAttributes = [...BUILTIN_EDGE_STYLE_ATTRIBUTES, ...this.plugin.settings.getSetting('customEdgeStyleAttributes')]
1818
this.plugin.registerEvent(this.plugin.app.workspace.on(
1919
SettingsManager.SETTINGS_CHANGED_EVENT,
20-
() => this.allEdgeStyles = [...DEFAULT_EDGE_STYLE_SETTINGS, ...this.plugin.settings.getSetting('customEdgeStyleSettings')]
20+
() => this.allEdgeStyleAttributes = [...BUILTIN_EDGE_STYLE_ATTRIBUTES, ...this.plugin.settings.getSetting('customEdgeStyleAttributes')]
2121
))
2222

2323
this.plugin.registerEvent(this.plugin.app.workspace.on(
@@ -65,13 +65,13 @@ export default class EdgeStylesExtension extends CanvasExtension {
6565
return
6666

6767
CanvasHelper.createStyleDropdownMenu(
68-
canvas, this.allEdgeStyles,
68+
canvas, this.allEdgeStyleAttributes,
6969
selectedEdges[0].getData().styleAttributes ?? {},
7070
(attribute, value) => this.setStyleAttributeForSelection(canvas, attribute, value)
7171
)
7272
}
7373

74-
private setStyleAttributeForSelection(canvas: Canvas, attribute: StylableAttribute, value: string | null): void {
74+
private setStyleAttributeForSelection(canvas: Canvas, attribute: StyleAttribute, value: string | null): void {
7575
const selectedEdges = [...canvas.selection].filter((item: any) => item.path !== undefined) as CanvasEdge[]
7676

7777
for (const edge of selectedEdges) {

src/canvas-extensions/advanced-styles/node-styles.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@ import { Canvas } from "src/@types/Canvas"
22
import * as CanvasHelper from "src/utils/canvas-helper"
33
import { CanvasEvent } from "src/core/events"
44
import CanvasExtension from "../../core/canvas-extension"
5-
import { DEFAULT_NODE_STYLE_SETTINGS, StylableAttribute } from "./style-config"
5+
import { BUILTIN_NODE_STYLE_ATTRIBUTES, StyleAttribute } from "./style-config"
66
import SettingsManager from "src/settings"
77

88
export default class NodeStylesExtension extends CanvasExtension {
9-
allNodeStyles: StylableAttribute[]
9+
allNodeStyles: StyleAttribute[]
1010

1111
isEnabled() { return 'nodeStylingFeatureEnabled' as const }
1212

1313
init() {
14-
this.allNodeStyles = [...DEFAULT_NODE_STYLE_SETTINGS, ...this.plugin.settings.getSetting('customNodeStyleSettings')]
14+
this.allNodeStyles = [...BUILTIN_NODE_STYLE_ATTRIBUTES, ...this.plugin.settings.getSetting('customNodeStyleAttributes')]
1515
this.plugin.registerEvent(this.plugin.app.workspace.on(
1616
SettingsManager.SETTINGS_CHANGED_EVENT,
17-
() => this.allNodeStyles = [...DEFAULT_NODE_STYLE_SETTINGS, ...this.plugin.settings.getSetting('customNodeStyleSettings')]
17+
() => this.allNodeStyles = [...BUILTIN_NODE_STYLE_ATTRIBUTES, ...this.plugin.settings.getSetting('customNodeStyleAttributes')]
1818
))
1919

2020
this.plugin.registerEvent(this.plugin.app.workspace.on(
@@ -38,7 +38,7 @@ export default class NodeStylesExtension extends CanvasExtension {
3838
)
3939
}
4040

41-
private setStyleAttributeForSelection(canvas: Canvas, attribute: StylableAttribute, value: string | null): void {
41+
private setStyleAttributeForSelection(canvas: Canvas, attribute: StyleAttribute, value: string | null): void {
4242
const selectionNodeData = canvas.getSelectionData().nodes
4343
for (const nodeData of selectionNodeData) {
4444
const node = canvas.nodes.get(nodeData.id)

src/canvas-extensions/advanced-styles/style-config.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { CanvasNodeType } from "src/@types/Canvas"
22

3-
export interface StylableAttributeOption {
3+
export interface StyleAttributeOption {
44
icon: string
55
label: string
66
value: string | null // The element with the null value is the default
77
}
88

9-
export interface StylableAttribute {
9+
export interface StyleAttribute {
1010
datasetKey: string
1111
label: string
1212
nodeTypes?: CanvasNodeType[]
13-
options: StylableAttributeOption[]
13+
options: StyleAttributeOption[]
1414
}
1515

16-
export const DEFAULT_NODE_STYLE_SETTINGS = [
16+
export const BUILTIN_NODE_STYLE_ATTRIBUTES = [
1717
{
1818
datasetKey: 'textAlign',
1919
label: 'Text Alignment',
@@ -109,9 +109,9 @@ export const DEFAULT_NODE_STYLE_SETTINGS = [
109109
}
110110
]
111111
}
112-
] as StylableAttribute[]
112+
] as StyleAttribute[]
113113

114-
export const DEFAULT_EDGE_STYLE_SETTINGS = [
114+
export const BUILTIN_EDGE_STYLE_ATTRIBUTES = [
115115
{
116116
datasetKey: 'path',
117117
label: 'Path Style',
@@ -210,4 +210,4 @@ export const DEFAULT_EDGE_STYLE_SETTINGS = [
210210
}
211211
]
212212
}
213-
] as StylableAttribute[]
213+
] as StyleAttribute[]

src/canvas-extensions/better-default-settings-canvas-extension.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,13 @@ export default class BetterDefaultSettingsCanvasExtension extends CanvasExtensi
7979

8080
private applyDefaultNodeStyles(_canvas: Canvas, node: CanvasNode) {
8181
const nodeData = node.getData()
82+
if (nodeData.type !== 'text') return
8283

8384
node.setData({
8485
...nodeData,
8586
styleAttributes: {
8687
...nodeData.styleAttributes,
87-
...this.plugin.settings.getSetting('defaultNodeStyleSettings')
88+
...this.plugin.settings.getSetting('defaultTextNodeStyleAttributes')
8889
}
8990
})
9091
}
@@ -96,7 +97,7 @@ export default class BetterDefaultSettingsCanvasExtension extends CanvasExtensi
9697
...edgeData,
9798
styleAttributes: {
9899
...edgeData.styleAttributes,
99-
...this.plugin.settings.getSetting('defaultEdgeStyleSettings')
100+
...this.plugin.settings.getSetting('defaultEdgeStyleAttributes')
100101
}
101102
})
102103
}

src/settings.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Notice, PluginSettingTab, Setting } from "obsidian"
22
import AdvancedCanvasPlugin from "./main"
3-
import { DEFAULT_EDGE_STYLE_SETTINGS as BUILTIN_EDGE_STYLE_SETTINGS, DEFAULT_NODE_STYLE_SETTINGS as BUILTIN_NODE_STYLE_SETTINGS, StylableAttribute } from "./canvas-extensions/advanced-styles/style-config"
3+
import { BUILTIN_EDGE_STYLE_ATTRIBUTES, BUILTIN_NODE_STYLE_ATTRIBUTES, StyleAttribute } from "./canvas-extensions/advanced-styles/style-config"
44

55
const NODE_TYPES_ON_DOUBLE_CLICK = {
66
'text': 'Text',
@@ -17,12 +17,12 @@ export interface AdvancedCanvasPluginSettings {
1717
performanceOptimizationEnabled: boolean
1818

1919
nodeStylingFeatureEnabled: boolean
20-
customNodeStyleSettings: StylableAttribute[]
21-
defaultNodeStyleSettings: { [key: string]: string }
20+
customNodeStyleAttributes: StyleAttribute[]
21+
defaultTextNodeStyleAttributes: { [key: string]: string }
2222

2323
edgesStylingFeatureEnabled: boolean
24-
customEdgeStyleSettings: StylableAttribute[]
25-
defaultEdgeStyleSettings: { [key: string]: string }
24+
customEdgeStyleAttributes: StyleAttribute[]
25+
defaultEdgeStyleAttributes: { [key: string]: string }
2626
edgeStyleDirectRotateArrow: boolean
2727
edgeStylePathfinderGridResolution: number
2828
edgeStylePathfinderPathLiveUpdate: boolean
@@ -68,12 +68,12 @@ export const DEFAULT_SETTINGS: Partial<AdvancedCanvasPluginSettings> = {
6868
performanceOptimizationEnabled: false,
6969

7070
nodeStylingFeatureEnabled: true,
71-
customNodeStyleSettings: [],
72-
defaultNodeStyleSettings: {},
71+
customNodeStyleAttributes: [],
72+
defaultTextNodeStyleAttributes: {},
7373

7474
edgesStylingFeatureEnabled: true,
75-
customEdgeStyleSettings: [],
76-
defaultEdgeStyleSettings: {},
75+
customEdgeStyleAttributes: [],
76+
defaultEdgeStyleAttributes: {},
7777
edgeStyleDirectRotateArrow: false,
7878
edgeStylePathfinderGridResolution: 10,
7979
edgeStylePathfinderPathLiveUpdate: true,
@@ -231,7 +231,9 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
231231
.onClick(() => window.open("https://github.com/Developer-Mike/obsidian-advanced-canvas/blob/main/README.md#custom-styles"))
232232
)
233233

234-
this.createDefaultStylesSection(containerEl, 'Default node styles', 'defaultNodeStyleSettings', [ ...BUILTIN_NODE_STYLE_SETTINGS, ...this.settingsManager.getSetting('customNodeStyleSettings') ])
234+
const allNodeStyleAttributes = [ ...BUILTIN_NODE_STYLE_ATTRIBUTES, ...this.settingsManager.getSetting('customNodeStyleAttributes') ]
235+
.filter((setting) => setting.nodeTypes === undefined || setting.nodeTypes?.includes('text'))
236+
this.createDefaultStylesSection(containerEl, 'Default text node style attributes', 'defaultTextNodeStyleAttributes', allNodeStyleAttributes)
235237

236238
this.createFeatureHeading(
237239
containerEl,
@@ -249,7 +251,7 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
249251
.onClick(() => window.open("https://github.com/Developer-Mike/obsidian-advanced-canvas/blob/main/README.md#custom-styles"))
250252
)
251253

252-
this.createDefaultStylesSection(containerEl, 'Default edge styles', 'defaultEdgeStyleSettings', [ ...BUILTIN_EDGE_STYLE_SETTINGS, ...this.settingsManager.getSetting('customEdgeStyleSettings') ])
254+
this.createDefaultStylesSection(containerEl, 'Default edge style attributes', 'defaultEdgeStyleAttributes', [ ...BUILTIN_EDGE_STYLE_ATTRIBUTES, ...this.settingsManager.getSetting('customEdgeStyleAttributes') ])
253255

254256
new Setting(containerEl)
255257
.setName("Rotate arrow if pathfinding method is \"Direct\"")
@@ -484,7 +486,7 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
484486
)
485487
}
486488

487-
private createDefaultStylesSection(containerEl: HTMLElement, label: string, settingsKey: keyof AdvancedCanvasPluginSettings, allStylableAttributes: StylableAttribute[]) {
489+
private createDefaultStylesSection(containerEl: HTMLElement, label: string, settingsKey: keyof AdvancedCanvasPluginSettings, allStylableAttributes: StyleAttribute[]) {
488490
const defaultNodeStylesEl = document.createElement('details')
489491
defaultNodeStylesEl.classList.add('setting-item')
490492

src/utils/canvas-helper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { addIcon, setIcon, setTooltip } from "obsidian"
22
import { BBox, Canvas, CanvasNode, CanvasNodeData, Position, Size } from "src/@types/Canvas"
3-
import { StylableAttribute } from "src/canvas-extensions/advanced-styles/style-config"
3+
import { StyleAttribute } from "src/canvas-extensions/advanced-styles/style-config"
44
import AdvancedCanvasPlugin from "src/main"
55
import * as BBoxHelper from "src/utils/bbox-helper"
66

@@ -160,7 +160,7 @@ export function zoomToBBox(canvas: Canvas, bbox: BBox) {
160160
canvas.tZoom = Math.log2(scaleFactor)
161161
}
162162

163-
export function createStyleDropdownMenu(canvas: Canvas, stylableAttributes: StylableAttribute[], currentStyleAttributes: { [key: string]: string | null }, setStyleAttribute: (attribute: StylableAttribute, value: string | null) => void) {
163+
export function createStyleDropdownMenu(canvas: Canvas, stylableAttributes: StyleAttribute[], currentStyleAttributes: { [key: string]: string | null }, setStyleAttribute: (attribute: StyleAttribute, value: string | null) => void) {
164164
const STYLE_MENU_ID = 'style-menu'
165165
const STYLE_MENU_DROPDOWN_ID = 'style-menu-dropdown'
166166
const STYLE_MENU_DROPDOWN_SUBMENU_ID = 'style-menu-dropdown-submenu'

0 commit comments

Comments
 (0)