1- import { Notice , PluginSettingTab , Setting as SettingEl } from "obsidian"
2- import { BooleanSetting , ButtonSetting , DropdownSetting , NumberSetting , Setting , SettingsHeading , StyleAttributesSetting , TextSetting } from "./@types/Settings"
1+ import { Notice , PluginSettingTab , Setting as SettingEl , TextComponent } from "obsidian"
2+ import { BooleanSetting , ButtonSetting , DimensionSetting , DropdownSetting , NumberSetting , Setting , SettingsHeading , StyleAttributesSetting , TextSetting } from "./@types/Settings"
33import { BUILTIN_EDGE_STYLE_ATTRIBUTES , BUILTIN_NODE_STYLE_ATTRIBUTES , StyleAttribute } from "./canvas-extensions/advanced-styles/style-config"
44import { VARIABLE_BREAKPOINT_CSS_VAR } from "./canvas-extensions/variable-breakpoint-canvas-extension"
55import AdvancedCanvasPlugin from "./main"
@@ -18,10 +18,8 @@ export interface AdvancedCanvasPluginSettingsValues {
1818
1919 nodeTypeOnDoubleClick : keyof typeof SETTINGS . general . children . nodeTypeOnDoubleClick . options
2020 alignNewNodesToGrid : boolean
21- defaultTextNodeWidth : number
22- defaultTextNodeHeight : number
23- defaultFileNodeWidth : number
24- defaultFileNodeHeight : number
21+ defaultTextNodeDimensions : [ number , number ]
22+ defaultFileNodeDimensions : [ number , number ]
2523 minNodeSize : number
2624 maxNodeWidth : number
2725 disableFontSizeRelativeToZoom : boolean
@@ -84,7 +82,7 @@ export interface AdvancedCanvasPluginSettingsValues {
8482
8583 presentationFeatureEnabled : boolean
8684 showSetStartNodeInPopup : boolean
87- defaultSlideSize : string
85+ defaultSlideDimensions : [ number , number ]
8886 wrapInSlidePadding : number
8987 resetViewportOnPresentationEnd : boolean
9088 useArrowKeysToChangeSlides : boolean
@@ -106,10 +104,8 @@ export const DEFAULT_SETTINGS_VALUES: AdvancedCanvasPluginSettingsValues = {
106104
107105 nodeTypeOnDoubleClick : 'text' ,
108106 alignNewNodesToGrid : true ,
109- defaultTextNodeWidth : 260 ,
110- defaultTextNodeHeight : 60 ,
111- defaultFileNodeWidth : 400 ,
112- defaultFileNodeHeight : 400 ,
107+ defaultTextNodeDimensions : [ 260 , 60 ] ,
108+ defaultFileNodeDimensions : [ 400 , 400 ] ,
113109 minNodeSize : 60 ,
114110 maxNodeWidth : - 1 ,
115111 disableFontSizeRelativeToZoom : false ,
@@ -172,7 +168,7 @@ export const DEFAULT_SETTINGS_VALUES: AdvancedCanvasPluginSettingsValues = {
172168
173169 presentationFeatureEnabled : true ,
174170 showSetStartNodeInPopup : false ,
175- defaultSlideSize : '1200x675' ,
171+ defaultSlideDimensions : [ 1200 , 675 ] ,
176172 wrapInSlidePadding : 20 ,
177173 resetViewportOnPresentationEnd : true ,
178174 useArrowKeysToChangeSlides : true ,
@@ -209,33 +205,29 @@ export const SETTINGS = {
209205 description : 'When enabled, new nodes will be aligned to the grid.' ,
210206 type : 'boolean'
211207 } ,
212- defaultTextNodeWidth : {
213- label : 'Default text node width' ,
214- description : 'The default width of a text node.' ,
215- type : 'number' ,
216- parse : ( value : string ) => Math . max ( 1 , parseInt ( value ) || 0 )
217- } ,
218- defaultTextNodeHeight : {
219- label : 'Default text node height' ,
220- description : 'The default height of a text node.' ,
221- type : 'number' ,
222- parse : ( value : string ) => Math . max ( 1 , parseInt ( value ) || 0 )
223- } ,
224- defaultFileNodeWidth : {
225- label : 'Default file node width' ,
226- description : 'The default width of a file node.' ,
227- type : 'number' ,
228- parse : ( value : string ) => Math . max ( 1 , parseInt ( value ) || 0 )
208+ defaultTextNodeDimensions : {
209+ label : 'Default text node dimensions' ,
210+ description : 'The default dimensions of a text node.' ,
211+ type : 'dimension' ,
212+ parse : ( value : [ string , string ] ) => {
213+ const width = Math . max ( 1 , parseInt ( value [ 0 ] ) || 0 )
214+ const height = Math . max ( 1 , parseInt ( value [ 1 ] ) || 0 )
215+ return [ width , height ]
216+ }
229217 } ,
230- defaultFileNodeHeight : {
231- label : 'Default file node height' ,
232- description : 'The default height of a file node.' ,
233- type : 'number' ,
234- parse : ( value : string ) => Math . max ( 1 , parseInt ( value ) || 0 )
218+ defaultFileNodeDimensions : {
219+ label : 'Default file node dimensions' ,
220+ description : 'The default dimensions of a file node.' ,
221+ type : 'dimension' ,
222+ parse : ( value : [ string , string ] ) => {
223+ const width = Math . max ( 1 , parseInt ( value [ 0 ] ) || 0 )
224+ const height = Math . max ( 1 , parseInt ( value [ 1 ] ) || 0 )
225+ return [ width , height ]
226+ }
235227 } ,
236228 minNodeSize : {
237229 label : 'Minimum node size' ,
238- description : 'The minimum size of a node.' ,
230+ description : 'The minimum size (either width or height) of a node.' ,
239231 type : 'number' ,
240232 parse : ( value : string ) => Math . max ( 1 , parseInt ( value ) || 0 )
241233 } ,
@@ -427,10 +419,15 @@ export const SETTINGS = {
427419 description : 'If turned off, you can still set the start node using the corresponding command.' ,
428420 type : 'boolean'
429421 } ,
430- defaultSlideSize : {
431- label : 'Default slide ratio' ,
432- description : 'The default ratio of the slide. For example, 16:9 is 1200x675 and 3:2 is 1350x900.' ,
433- type : 'text'
422+ defaultSlideDimensions : {
423+ label : 'Default slide dimensions' ,
424+ description : 'The default dimensions of a slide.' ,
425+ type : 'dimension' ,
426+ parse : ( value : [ string , string ] ) => {
427+ const width = Math . max ( 1 , parseInt ( value [ 0 ] ) || 0 )
428+ const height = Math . max ( 1 , parseInt ( value [ 1 ] ) || 0 )
429+ return [ width , height ]
430+ }
434431 } ,
435432 wrapInSlidePadding : {
436433 label : 'Wrap in slide padding' ,
@@ -625,6 +622,9 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
625622 case 'number' :
626623 this . createNumberSetting ( settingsHeaderChildrenContainerEl , settingId , setting as NumberSetting )
627624 break
625+ case 'dimension' :
626+ this . createDimensionSetting ( settingsHeaderChildrenContainerEl , settingId , setting as DimensionSetting )
627+ break
628628 case 'boolean' :
629629 this . createBooleanSetting ( settingsHeaderChildrenContainerEl , settingId , setting as BooleanSetting )
630630 break
@@ -707,6 +707,23 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
707707 )
708708 }
709709
710+ private createDimensionSetting ( containerEl : HTMLElement , settingId : keyof AdvancedCanvasPluginSettingsValues , setting : DimensionSetting ) {
711+ let text1 : TextComponent
712+ let text2 : TextComponent
713+
714+ new SettingEl ( containerEl )
715+ . setName ( setting . label )
716+ . setDesc ( setting . description )
717+ . addText ( text => {
718+ text1 = text . setValue ( ( this . settingsManager . getSetting ( settingId ) as [ number , number ] ) [ 0 ] . toString ( ) )
719+ . onChange ( async ( value ) => await this . settingsManager . setSetting ( { [ settingId ] : setting . parse ( [ value , text2 . getValue ( ) ] ) } ) )
720+ } )
721+ . addText ( text => {
722+ text2 = text . setValue ( ( this . settingsManager . getSetting ( settingId ) as [ number , number ] ) [ 1 ] . toString ( ) )
723+ . onChange ( async ( value ) => await this . settingsManager . setSetting ( { [ settingId ] : setting . parse ( [ text1 . getValue ( ) , value ] ) } ) )
724+ } )
725+ }
726+
710727 private createBooleanSetting ( containerEl : HTMLElement , settingId : keyof AdvancedCanvasPluginSettingsValues , setting : BooleanSetting ) {
711728 new SettingEl ( containerEl )
712729 . setName ( setting . label )
0 commit comments