feat(obsidian): add manual browse option for coordinate matches

Problem: When a single note was found by coordinates, it would
automatically load that note without giving the user any choice.
This removed the ability to manually browse/search for a different note.

Solution: Add showSingleMatchDialog() that appears when one note is
found by coordinates, giving the user 3 options:
1. "Use This Note" - Use the matched note (default/fast path)
2. "Browse/Search" - Manually browse/search for a different note
3. "Cancel" - Close without doing anything

This gives users control over note selection in all scenarios:
- Linked note found (via FMG ID) → Can choose different note
- Single match by coordinates → Can choose different note
- Multiple matches → Selection dialog (already had manual option)
- No matches → Browse/search/create dialog

Now users always have the option to manually browse, regardless of
what the automatic search finds.
This commit is contained in:
Claude 2025-11-14 05:55:22 +00:00
parent d58dc10b55
commit d45ca10748
No known key found for this signature in database

View file

@ -44,15 +44,16 @@ async function findOrCreateNote(elementId, elementType, coordinates) {
}
if (matches.length === 1) {
// Single match - load it
// Single match - show dialog with option to use it or choose different one
const match = matches[0];
const content = await ObsidianBridge.getNote(match.path);
return {
const noteData = {
path: match.path,
name: match.name,
content,
frontmatter: match.frontmatter
};
return await showSingleMatchDialog(noteData, elementId, elementType, coordinates);
}
// Multiple matches - show selection dialog
@ -99,6 +100,46 @@ async function showLinkedNoteDialog(note, elementId, elementType, coordinates) {
});
}
async function showSingleMatchDialog(note, elementId, elementType, coordinates) {
return new Promise((resolve, reject) => {
alertMessage.innerHTML = `
<div style="padding: 1em;">
<p style="margin-bottom: 1em;"><strong> Found note by coordinates:</strong></p>
<div style="padding: 12px; background: #f0fff0; border: 1px solid #00aa00; border-radius: 4px; margin-bottom: 1.5em;">
<div style="font-weight: bold; margin-bottom: 4px;">${note.name}</div>
<div style="font-size: 0.9em; color: #666;">Path: ${note.path}</div>
</div>
<p style="font-size: 0.9em; color: #666;">Found a note near this location. You can use it or browse for a different one.</p>
</div>
`;
$("#alert").dialog({
title: "Note Found Nearby",
width: "500px",
buttons: {
"Use This Note": function () {
$(this).dialog("close");
resolve(note);
},
"Browse/Search": async function () {
$(this).dialog("close");
try {
const differentNote = await promptCreateNewNote(elementId, elementType, coordinates);
resolve(differentNote);
} catch (error) {
reject(error);
}
},
Cancel: function () {
$(this).dialog("close");
reject(new Error("Cancelled"));
}
},
position: {my: "center", at: "center", of: "svg"}
});
});
}
function showLoadingDialog() {
alertMessage.innerHTML = `
<div style="text-align: center; padding: 2em;">