@@ -11,10 +11,9 @@ import {
11
11
sanitizeHTMLToDom ,
12
12
Setting ,
13
13
TFile ,
14
+ normalizePath ,
14
15
} from 'obsidian' ;
15
16
16
- const path = require ( 'path' ) ; // eslint-disable-line
17
-
18
17
interface PasteAsEmbedSettings {
19
18
// TODO: replace Record with Map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
20
19
userRules : Record < string , PasteRule > ;
@@ -71,11 +70,12 @@ export default class PasteAsEmbed extends Plugin {
71
70
72
71
const embedNoteName = this . getEmbedNoteName ( matchingRule , view . file ) ;
73
72
const embedFolder = this . getEmbedFolder ( matchingRule , view . file )
74
- const embedFilePath = path . join ( embedFolder , embedNoteName + ".md" ) ;
75
73
76
- if ( ! this . app . vault . getFolderByPath ( embedFolder ) )
77
- await this . app . vault . createFolder ( embedFolder ) ;
74
+ const cleanEmbedFolder = normalizePath ( embedFolder ) ;
75
+ if ( ! this . app . vault . getFolderByPath ( cleanEmbedFolder ) )
76
+ await this . app . vault . createFolder ( cleanEmbedFolder ) ;
78
77
78
+ const embedFilePath = [ cleanEmbedFolder , embedNoteName . concat ( ".md" ) ] . join ( '/' ) ;
79
79
this . app . vault . create ( embedFilePath , txt )
80
80
81
81
editor . replaceSelection ( `![[${ embedNoteName } ]]\n` ) ;
@@ -106,20 +106,18 @@ export default class PasteAsEmbed extends Plugin {
106
106
}
107
107
108
108
getEmbedFolder ( rule : PasteRule , file : TFile ) {
109
- const folder = path . dirname ( file . path ) ;
110
-
111
109
const ruleFolder = rule . folder . replace ( '${notename}' , file . basename ) ;
112
110
113
111
let embedFolder ;
114
112
if ( rule . folder . startsWith ( './' ) ) {
115
- embedFolder = path . join ( folder , ruleFolder ) ;
113
+ embedFolder = [ file . parent ?. path , ruleFolder . substring ( 2 ) ] . join ( '/' ) ;
116
114
} else {
117
115
embedFolder = ruleFolder ;
118
116
}
119
-
117
+
120
118
return embedFolder ;
121
119
}
122
-
120
+
123
121
async onload ( ) { // Configure resources needed by the plugin.
124
122
await this . loadSettings ( ) ;
125
123
// This adds a settings tab so the user can configure various aspects of the plugin
@@ -201,7 +199,7 @@ class PasteAsEmbedSettingTab extends PluginSettingTab {
201
199
) ;
202
200
203
201
new Setting ( containerEl )
204
- . setName ( sanitizeHTMLToDom ( "Add new rule" ) )
202
+ . setName ( "Add new rule" )
205
203
. addButton ( ( button : ButtonComponent ) : ButtonComponent => {
206
204
const b = button
207
205
. setTooltip ( "Add rule" )
@@ -409,7 +407,7 @@ class SettingsModal extends Modal {
409
407
) ;
410
408
411
409
new Setting ( settingDiv )
412
- . setName ( 'Folder ' )
410
+ . setName ( 'Embedded note folder ' )
413
411
. setDesc ( 'Where to save the embedded notes. Leave empty to save in the active folder. Start with "./" for a path relative to the active folder. Use ${notename} for the name of the active note. ' )
414
412
. addText ( text => text
415
413
. setPlaceholder ( '' )
0 commit comments