@reaty : It works perfectly now ! Thanks to the new code.
You’re kind of time (or life) saver for providing me this code (and time). Thannk you very much about.
Can I ask you one last thing ? Is there a way to choose content that I “import” ? Like “only import was is after “—”” or just after a Title ?
@holroy I was using regular obsidian links, like that → [[link]]. But it’s solved now. Thanks for your help.
If you have titles in your content notes, and they are all the same for all notes, you can change tp.file.include(link) for tp.file.include(link + "#my title"), just write your title instead of “my title”. It will paste the section between the given title and another title in your note, if there is one.
If all the titles in notes are different, it’s more complicated.
Woops ! I have seen that my edit didn’t make it through : About titles, I understand, Then no need to change anything, it awesome like that.
If you have titles in your content notes, and they are all the same for all notes, you can change tp.file.include(link) for tp.file.include(link + "#my title") , just write your title instead of “my title”. It will paste the section between the given title and another title in your note, if there is one.
I have a lot of notes with just links like that but they are all different.
I noticed a little issue : If I have 42 links, I activate the script and have only 16 notes left. Some are vanishing in the process.
I try to look for a pattern of missings links and there is none. It does something like (number = number of missing links between each note displayed ) :
3 - 8 - 2 - 0 - 0 - 1 - 1 - 1 - 3 - 1 - 2 - 3 - 1 (26 links lost on the procces out of 42)
I notice that after activating the script, some links became bold and some other don’t. I don’t know if there a reason.
But I don’t really inderstand what make them become bold. there is not some ** around or ## …
After some time, I have seen that some links are not recognized by Templater as an Obsidian link. That’s why I have some missing links.
I have to find a way to solve this issue. I will dig on it, at least, as much as I can. Currently, I don’t see any difference between a valid and invalid link.
Maybe templater doesn’t recognise some characters in notes names, or something like this. But I don’t know what can be done with it.
Did you try to open developers tools? There should be messages about wrong links. Maybe there is some pattern, like the same specific character used in them.
I’d still say that if you provided some test data, it would enable others to actually looking into your issues, instead of having us guessing on your setup and issues.
Failed to load resource: net::ERR_CONNECTION_REFUSED 127.0.0.1:8765/:1
It’s appearing like 500 times.
I have another error but I’am not sure it’s related :
app.js:1 TypeError: Cannot read properties of null (reading 'sections')
at ObsidianTextEditor.acceptsTableEdit (plugin:table-editor-obsidian:23254:24)
at TableEditor.cursorIsInTable (plugin:table-editor-obsidian:22350:34)
at TableEditor.cursorIsInTable (plugin:table-editor-obsidian:23334:30)
at eval (plugin:table-editor-obsidian:23610:28)
at run (plugin:table-editor-obsidian:23584:102)
at h (app.js:1:456462)
at zs (app.js:1:456530)
at Object.keydown (app.js:1:453996)
at e.runCustomHandlers (app.js:1:378748)
at n (app.js:1:377244)
And in issues : Audit usage of navigator.userAgent, navigator.appVersion, and navigator.platform
Instead of making a screenshot, you can just copy the text from the source mode, and insert it into a forum post, where you enter three backticks, ```, on the line in front and the line after the pasted text.
This will allow us to detect if there is something strange in your markup.
I don’t see in your console output what I was looking for. There should be messages like: “Invalid link: ‘[[Link]]’” in the very end. Don’t you get anything like this, after you trying to use the template?
Are you using dataview or dataviewjs to produce the links in the first place? If the latter, then why don’t use that to also include the content of the files using something like await dv.io.load() directly instead of doing this as a secondary step?
Here is another version attempting to pull the content from the various links. This is slightly safer than previous versions since it checks for the full link, and allows for some text in front and after.
So save the following into a template file:
<%*
const content = tp.file.selection()
const lines = content.split("\n")
const LINK_RE = /\[\[.*\]\]/
for (const line of lines) {
tR += line + "\n"
const link = line.match(LINK_RE)
if ( link ) {
try {
const linkContent = await tp.file.include( link[0] )
tR += linkContent + "\n"
} catch (error) {
console.log(`Templater error for link: ${ link }:\n`, error)
tR += "==No content found==\n"
}
}
}
%>
And to run you either choose a hotkey for the template, or use the insert templater modal command, but before you insert the template be sure to select all the links you want to replace with a link and the content.
The previous versions, which doesn’t have this requirement will insert all the links from the current document at the point of the cursor when inserting the template, and leave other parts (aka all the links) untouched. This would appear to be some faulty links, but in fact it’s a faulty design choice since inserting a template by default will either be inserted at the cursor location, or replace the selected text with the output of the template.
To reiterate, after the inital setup of the template code into a template file of your choice, and potentially adding a hotkey of your choice, do the following:
Select all the lines containing links. This could very well be the entire file selected by doing Cmd A (or Ctrl A on windows)
Insert/run the template on the selected text, and it’ll get replaced by links following by the content of that link, if it has any
In addition, this version will produce an error message on the console if something fails, and add ==No content found== after the link in question
It looks to work perfectly well ! And it doesn’t forget any links, that’s even better. (@reaty : I really valuate your work as well !)
But it works only if I don’t generate links thanks to dataview. And if I want to copy/past links generated by Dataview, links are like that [link] and not like that [[link]]. So it’s a mess to deal with it …
The thing is that at the beginning of this topic, I didn’t use Dataview.
Now, It helps me organized my note automatically. On notes, I have on top, something like :
MoC : [[PSYCHOLOGY]]. So, when there’s a new note, there’s an automatic link on the page PSYCHOLOGY that link to my note. That’s an awesome add-on.
So now, Where would I put await dv.io.load() on your code to make it works with links generated by Dataview ?
Humm I am not sure if it would be possible to use your code on links generated by dataview.
When I select the content, click on the templater button, content is not selected anymore.