@@ -10,6 +10,7 @@ const between = 40;
10
10
export class AddToCanvasConfirmModal extends Modal {
11
11
targetFilePath : string ;
12
12
resultArr : TAbstractFile [ ] ;
13
+ includeReslovedLinksFlag : boolean ;
13
14
14
15
constructor ( app : App , resultArr : TAbstractFile [ ] , targetFilePath : string ) {
15
16
super ( app ) ;
@@ -27,12 +28,23 @@ export class AddToCanvasConfirmModal extends Modal {
27
28
contentEl . createEl ( "div" , { text : info . path } ) ;
28
29
} )
29
30
31
+ new Setting ( contentEl )
32
+ . addToggle ( ( toggle ) => {
33
+ toggle . setTooltip ( "Include resolved links!" ) ;
34
+ toggle . onChange ( ( val ) => {
35
+ this . includeReslovedLinksFlag = val ;
36
+ } )
37
+ } )
38
+
30
39
new Setting ( contentEl )
31
40
. addButton ( ( btn ) =>
32
41
btn . setButtonText ( "Confirm" )
33
42
. setCta ( )
34
43
. onClick ( async ( ) => {
35
44
this . close ( ) ;
45
+
46
+ let pathNodeMap = new Map ( ) ;
47
+
36
48
let activeFile = this . app . workspace . getActiveFile ( ) ;
37
49
38
50
// 如果当前活动文档与目标文档不同,则尝试打开目标文档
@@ -55,38 +67,35 @@ export class AddToCanvasConfirmModal extends Modal {
55
67
let idx = 0 ;
56
68
for ( const key in this . resultArr ) {
57
69
let file = this . resultArr [ key ] as TFile ;
58
- let tempChildNode ;
59
- if ( ! requireApiVersion ( "1.1.10" ) ) {
60
- tempChildNode = canvas . createFileNode ( file , "" , { x : between + ( ( width + between ) * idx ) , y : between , height : height , width : width } , true ) ;
61
- } else {
62
- tempChildNode = canvas . createFileNode ( {
63
- file : file ,
64
- pos : {
65
- x : between + ( ( width + between ) * idx ) ,
66
- y : between ,
67
- width : width ,
68
- height : height
69
- } ,
70
- size : {
71
- x : between ,
72
- y : between ,
73
- width : width ,
74
- height : height
75
- } ,
76
- save : true ,
77
- focus : false ,
78
- } ) ;
79
- }
80
- canvas . deselectAll ( ) ;
81
- canvas . addNode ( tempChildNode ) ;
70
+ let tempChildNode = this . createFileNode ( canvas , file , idx ) ;
82
71
idx ++ ;
83
- }
84
72
73
+ if ( this . includeReslovedLinksFlag ) {
74
+ // 同时添加内页
75
+ pathNodeMap . set ( file . path , tempChildNode ) ;
76
+
77
+ let linkObj = this . app . metadataCache . resolvedLinks [ file . path ] ;
78
+ for ( let innerFilePath in linkObj ) {
79
+ let existFileNode = pathNodeMap . get ( innerFilePath ) ;
80
+ if ( existFileNode ) {
81
+ this . createEdge ( tempChildNode , existFileNode , canvas ) ;
82
+ } else {
83
+ console . log ( innerFilePath ) ;
84
+ let resolvedFile = this . app . vault . getAbstractFileByPath ( innerFilePath ) as TFile ;
85
+ console . log ( resolvedFile ) ;
86
+ let innerChildNode = this . createFileNode ( canvas , resolvedFile , idx ) ;
87
+ idx ++ ;
88
+ pathNodeMap . set ( innerFilePath , innerChildNode ) ;
89
+ this . createEdge ( tempChildNode , innerChildNode , canvas ) ;
90
+ }
91
+ }
92
+ }
93
+ }
85
94
canvas . requestSave ( ) ;
86
95
87
96
new Notice ( "Add to Canvas Success!" ) ;
88
97
} else {
89
- new Notice ( targetFile . name + " is not a Canvas!" ) ;
98
+ new Notice ( this . targetFilePath + " is not a Canvas!" ) ;
90
99
}
91
100
} ) )
92
101
. addButton ( ( btn ) =>
@@ -98,4 +107,54 @@ export class AddToCanvasConfirmModal extends Modal {
98
107
new Notice ( "Add to Canvas Canceled!" ) ;
99
108
} ) ) ;
100
109
}
110
+
111
+ private createFileNode ( canvas : any , file : TFile , idx : number ) {
112
+ let tempChildNode ;
113
+ if ( ! requireApiVersion ( "1.1.10" ) ) {
114
+ tempChildNode = canvas . createFileNode ( file , "" , { x : between + ( ( width + between ) * idx ) , y : between , height : height , width : width } , true ) ;
115
+ } else {
116
+ tempChildNode = canvas . createFileNode ( {
117
+ file : file ,
118
+ pos : {
119
+ x : between + ( ( width + between ) * idx ) ,
120
+ y : between ,
121
+ width : width ,
122
+ height : height
123
+ } ,
124
+ size : {
125
+ x : between ,
126
+ y : between ,
127
+ width : width ,
128
+ height : height
129
+ } ,
130
+ save : true ,
131
+ focus : false ,
132
+ } ) ;
133
+ }
134
+ canvas . deselectAll ( ) ;
135
+ canvas . addNode ( tempChildNode ) ;
136
+ return tempChildNode ;
137
+ }
138
+
139
+ random ( e : number ) {
140
+ let t = [ ] ;
141
+ for ( let n = 0 ; n < e ; n ++ ) {
142
+ t . push ( ( 16 * Math . random ( ) | 0 ) . toString ( 16 ) ) ;
143
+ }
144
+ return t . join ( "" )
145
+ }
146
+
147
+ createEdge ( node1 : any , node2 : any , canvas : any ) {
148
+
149
+ const edge = canvas . edges . get ( canvas . getData ( ) . edges . first ( ) ?. id ) ;
150
+
151
+ if ( edge ) {
152
+ const tempEdge = new edge . constructor ( canvas , this . random ( 16 ) , { side : "right" , node : node1 } , { side : "left" , node : node2 } )
153
+ canvas . addEdge ( tempEdge ) ;
154
+ tempEdge . attach ( ) ;
155
+ tempEdge . render ( ) ;
156
+ } else {
157
+ console . log ( "You should have at least one edge in the canvas to use this feature!" ) ;
158
+ }
159
+ }
101
160
}
0 commit comments