@@ -12,7 +12,7 @@ import {
12
12
import { point , latLng } from "leaflet" ;
13
13
14
14
//Local Imports
15
- import ' ./main.css' ;
15
+ import " ./main.css" ;
16
16
17
17
import { ObsidianLeafletSettingTab , DEFAULT_SETTINGS } from "./settings" ;
18
18
import {
@@ -86,16 +86,16 @@ export default class ObsidianLeaflet extends Plugin {
86
86
) ;
87
87
88
88
this . registerEvent (
89
- this . app . vault . on ( "delete" , async file => {
89
+ this . app . vault . on ( "delete" , async ( file ) => {
90
90
if (
91
- this . AppData . mapMarkers . find ( marker =>
91
+ this . AppData . mapMarkers . find ( ( marker ) =>
92
92
marker . path . includes ( file . path )
93
93
)
94
94
) {
95
95
this . AppData . mapMarkers = this . AppData . mapMarkers . filter (
96
- marker =>
96
+ ( marker ) =>
97
97
marker !=
98
- this . AppData . mapMarkers . find ( marker =>
98
+ this . AppData . mapMarkers . find ( ( marker ) =>
99
99
marker . path . includes ( file . path )
100
100
)
101
101
) ;
@@ -118,7 +118,7 @@ export default class ObsidianLeaflet extends Plugin {
118
118
ctx : MarkdownPostProcessorContextActual
119
119
) : Promise < void > {
120
120
let { image, height = "500px" } = Object . fromEntries (
121
- source . split ( "\n" ) . map ( l => l . split ( ": " ) )
121
+ source . split ( "\n" ) . map ( ( l ) => l . split ( ": " ) )
122
122
) ;
123
123
124
124
if ( ! image ) {
@@ -129,37 +129,38 @@ export default class ObsidianLeaflet extends Plugin {
129
129
return ;
130
130
}
131
131
132
+ const imageData = await this . toDataURL ( image ) ;
132
133
let map = new LeafletMap (
133
134
el ,
134
- image ,
135
+ imageData ,
135
136
height ,
136
- ctx . sourcePath ,
137
+ ` ${ ctx . sourcePath } / ${ image } ` ,
137
138
this . markerIcons
138
139
) ;
139
140
140
141
if (
141
142
this . AppData . mapMarkers . find (
142
- map => map . path == `${ ctx . sourcePath } /${ image } `
143
+ ( map ) => map . path == `${ ctx . sourcePath } /${ image } `
143
144
)
144
145
) {
145
146
await map . loadData (
146
147
this . AppData . mapMarkers . find (
147
- map => map . path == `${ ctx . sourcePath } /${ image } `
148
+ ( map ) => map . path == `${ ctx . sourcePath } /${ image } `
148
149
) . markers
149
150
) ;
150
151
}
151
152
152
- if ( this . maps . find ( map => map . path == `${ ctx . sourcePath } /${ image } ` ) ) {
153
+ if ( this . maps . find ( ( map ) => map . path == `${ ctx . sourcePath } /${ image } ` ) ) {
153
154
this . maps = this . maps . filter (
154
- map => map . path != `${ ctx . sourcePath } /${ image } `
155
+ ( map ) => map . path != `${ ctx . sourcePath } /${ image } `
155
156
) ;
156
157
}
157
158
this . maps . push ( map ) ;
158
159
159
- this . registerDomEvent ( el , "dragover" , evt => {
160
+ this . registerDomEvent ( el , "dragover" , ( evt ) => {
160
161
evt . preventDefault ( ) ;
161
162
} ) ;
162
- this . registerDomEvent ( el , "drop" , evt => {
163
+ this . registerDomEvent ( el , "drop" , ( evt ) => {
163
164
evt . stopPropagation ( ) ;
164
165
165
166
let file = decodeURIComponent (
@@ -201,29 +202,29 @@ export default class ObsidianLeaflet extends Plugin {
201
202
. setDesc (
202
203
"Path of note to open, e.g. Folder1/Folder2/Note.md"
203
204
)
204
- . addText ( text => {
205
+ . addText ( ( text ) => {
205
206
text . setPlaceholder ( "Path" )
206
207
. setValue ( marker . link )
207
- . onChange ( async value => {
208
+ . onChange ( async ( value ) => {
208
209
marker . link = value ;
209
210
await this . saveSettings ( ) ;
210
211
} ) ;
211
212
} ) ;
212
213
213
214
new Setting ( markerSettingsModal . contentEl )
214
215
. setName ( "Marker Type" )
215
- . addDropdown ( drop => {
216
+ . addDropdown ( ( drop ) => {
216
217
drop . addOption ( "default" , "Base Marker" ) ;
217
- this . AppData . markerIcons . forEach ( marker => {
218
+ this . AppData . markerIcons . forEach ( ( marker ) => {
218
219
drop . addOption ( marker . type , marker . type ) ;
219
220
} ) ;
220
221
drop . setValue ( marker . marker . type ) . onChange (
221
- async value => {
222
+ async ( value ) => {
222
223
let newMarker =
223
224
value == "default"
224
225
? this . AppData . defaultMarker
225
226
: this . AppData . markerIcons . find (
226
- m => m . type == value
227
+ ( m ) => m . type == value
227
228
) ;
228
229
let html : string ,
229
230
iconNode : AbstractElement = icon (
@@ -259,14 +260,14 @@ export default class ObsidianLeaflet extends Plugin {
259
260
) ;
260
261
} ) ;
261
262
262
- new Setting ( markerSettingsModal . contentEl ) . addButton ( b => {
263
+ new Setting ( markerSettingsModal . contentEl ) . addButton ( ( b ) => {
263
264
b . setIcon ( "trash" )
264
265
. setWarning ( )
265
266
. setTooltip ( "Delete Marker" )
266
267
. onClick ( async ( ) => {
267
268
marker . leafletInstance . remove ( ) ;
268
269
map . markers = map . markers . filter (
269
- m => m . id != marker . id
270
+ ( m ) => m . id != marker . id
270
271
) ;
271
272
markerSettingsModal . close ( ) ;
272
273
await this . saveSettings ( ) ;
@@ -311,13 +312,13 @@ export default class ObsidianLeaflet extends Plugin {
311
312
this . AppData . mapMarkers = markers ;
312
313
await this . saveData ( this . AppData ) ;
313
314
314
- this . AppData . markerIcons . forEach ( marker => {
315
+ this . AppData . markerIcons . forEach ( ( marker ) => {
315
316
addIcon ( marker . type , icon ( getIcon ( marker . iconName ) ) . html [ 0 ] ) ;
316
317
} ) ;
317
318
318
319
this . markerIcons = this . generateMarkerMarkup ( this . AppData . markerIcons ) ;
319
320
320
- this . maps . forEach ( map => map . setMarkerIcons ( this . markerIcons ) ) ;
321
+ this . maps . forEach ( ( map ) => map . setMarkerIcons ( this . markerIcons ) ) ;
321
322
}
322
323
getEditor ( ) {
323
324
let view = this . app . workspace . getActiveViewOfType ( MarkdownView ) ;
@@ -330,7 +331,7 @@ export default class ObsidianLeaflet extends Plugin {
330
331
generateMarkerMarkup (
331
332
markers : Marker [ ] = this . AppData . markerIcons
332
333
) : MarkerIcon [ ] {
333
- let ret = markers . map ( marker => {
334
+ let ret = markers . map ( ( marker ) => {
334
335
if ( ! marker . transform ) {
335
336
marker . transform = this . AppData . defaultMarker . transform ;
336
337
}
@@ -358,7 +359,6 @@ export default class ObsidianLeaflet extends Plugin {
358
359
return { type : marker . type , html : html } ;
359
360
} ) ;
360
361
if ( this . AppData . defaultMarker . iconName ) {
361
-
362
362
ret . unshift ( {
363
363
type : "default" ,
364
364
html : icon ( getIcon ( this . AppData . defaultMarker . iconName ) , {
@@ -372,4 +372,41 @@ export default class ObsidianLeaflet extends Plugin {
372
372
373
373
return ret ;
374
374
}
375
+
376
+ async toDataURL ( url : string ) : Promise < string > {
377
+ //determine link type
378
+ let response , blob : Blob ;
379
+ if ( / h t t p [ s ] * : / . test ( url ) ) {
380
+ //url
381
+ response = await fetch ( url ) ;
382
+ blob = await response . blob ( ) ;
383
+ } else if ( / o b s i d i a n : \/ \/ o p e n / . test ( url ) ) {
384
+ //obsidian link
385
+ let [ , vault , file ] = url . match (
386
+ / \? v a u l t = ( [ \w \s \d ] + ) & f i l e = ( [ \s \S ] + ) /
387
+ ) ;
388
+ file = decodeURIComponent ( file ) ;
389
+ if ( await this . app . vault . adapter . exists ( file ) ) {
390
+ let buffer = await this . app . vault . readBinary (
391
+ this . app . vault . getAbstractFileByPath ( file ) as TFile
392
+ ) ;
393
+ blob = new Blob ( [ new Uint8Array ( buffer ) ] ) ;
394
+ }
395
+ } else if ( await this . app . vault . adapter . exists ( url ) ) {
396
+ //file exists on disk
397
+ let buffer = await this . app . vault . readBinary (
398
+ this . app . vault . getAbstractFileByPath ( url ) as TFile
399
+ ) ;
400
+ blob = new Blob ( [ new Uint8Array ( buffer ) ] ) ;
401
+ }
402
+
403
+ return new Promise ( ( resolve , reject ) => {
404
+ const reader = new FileReader ( ) ;
405
+ reader . onloadend = ( ) => {
406
+ resolve ( reader . result as string ) ;
407
+ } ;
408
+ reader . onerror = reject ;
409
+ reader . readAsDataURL ( blob ) ;
410
+ } ) ;
411
+ }
375
412
}
0 commit comments