feat(geo_map): add option to open location

This commit is contained in:
Elian Doran 2025-01-22 21:07:40 +02:00
parent 47b02da021
commit 9b1279ce14
No known key found for this signature in database
5 changed files with 24 additions and 6 deletions

View File

@ -23,6 +23,7 @@ import type LoadResults from "../services/load_results.js";
import type { Attribute } from "../services/attribute_parser.js"; import type { Attribute } from "../services/attribute_parser.js";
import type NoteTreeWidget from "../widgets/note_tree.js"; import type NoteTreeWidget from "../widgets/note_tree.js";
import type { default as NoteContext, GetTextEditorCallback } from "./note_context.js"; import type { default as NoteContext, GetTextEditorCallback } from "./note_context.js";
import type { ContextMenuEvent } from "../menus/context_menu.js";
interface Layout { interface Layout {
getRootWidget: (appContext: AppContext) => RootWidget; getRootWidget: (appContext: AppContext) => RootWidget;
@ -195,9 +196,8 @@ export type CommandMappings = {
} }
// Geomap // Geomap
deleteFromMap: { deleteFromMap: { noteId: string },
noteId: string; openGeoLocation: { noteId: string, event: JQuery.MouseDownEvent }
}
}; };
type EventMappings = { type EventMappings = {

View File

@ -12,7 +12,7 @@ function openContextMenu(notePath: string, e: ContextMenuEvent, viewScope: ViewS
}); });
} }
function getItems(): MenuItem<any>[] { function getItems(): MenuItem<CommandNames>[] {
return [ return [
{ title: t("link_context_menu.open_note_in_new_tab"), command: "openNoteInNewTab", uiIcon: "bx bx-link-external" }, { title: t("link_context_menu.open_note_in_new_tab"), command: "openNoteInNewTab", uiIcon: "bx bx-link-external" },
{ title: t("link_context_menu.open_note_in_new_split"), command: "openNoteInNewSplit", uiIcon: "bx bx-dock-right" }, { title: t("link_context_menu.open_note_in_new_split"), command: "openNoteInNewSplit", uiIcon: "bx bx-dock-right" },

View File

@ -234,7 +234,7 @@ function goToLink(evt: MouseEvent | JQuery.ClickEvent) {
return goToLinkExt(evt, hrefLink, $link); return goToLinkExt(evt, hrefLink, $link);
} }
function goToLinkExt(evt: MouseEvent | JQuery.ClickEvent | React.PointerEvent<HTMLCanvasElement>, hrefLink: string | undefined, $link: JQuery<HTMLElement> | null) { function goToLinkExt(evt: MouseEvent | JQuery.ClickEvent | JQuery.MouseDownEvent | React.PointerEvent<HTMLCanvasElement>, hrefLink: string | undefined, $link?: JQuery<HTMLElement> | null) {
if (hrefLink?.startsWith("data:")) { if (hrefLink?.startsWith("data:")) {
return true; return true;
} }

View File

@ -10,6 +10,7 @@ import { t } from "../../services/i18n.js";
import attributes from "../../services/attributes.js"; import attributes from "../../services/attributes.js";
import asset_path from "../../../../services/asset_path.js"; import asset_path from "../../../../services/asset_path.js";
import openContextMenu from "./geo_map_context_menu.js"; import openContextMenu from "./geo_map_context_menu.js";
import link from "../../services/link.js";
const TPL = `\ const TPL = `\
<div class="note-detail-geo-map note-detail-printable"> <div class="note-detail-geo-map note-detail-printable">
@ -294,6 +295,17 @@ export default class GeoMapTypeWidget extends TypeWidget {
} }
} }
openGeoLocationEvent({ noteId, event }: EventData<"openGeoLocation">) {
const marker = this.currentMarkerData[noteId];
if (!marker) {
return;
}
const latLng = this.currentMarkerData[noteId].getLatLng();
const url = `geo:${latLng.lat},${latLng.lng}`;
link.goToLinkExt(event, url);
}
deleteFromMapEvent({ noteId }: EventData<"deleteFromMap">) { deleteFromMapEvent({ noteId }: EventData<"deleteFromMap">) {
this.moveMarker(noteId, null); this.moveMarker(noteId, null);
} }

View File

@ -9,15 +9,21 @@ export default function openContextMenu(noteId: string, e: ContextMenuEvent) {
y: e.pageY, y: e.pageY,
items: [ items: [
...linkContextMenu.getItems(), ...linkContextMenu.getItems(),
{ title: "Open location", command: "openGeoLocation", uiIcon: "bx bx-map-alt" },
{ title: "----" }, { title: "----" },
{ title: "Remove from map", command: "deleteFromMap", uiIcon: "bx bx-trash" } { title: "Remove from map", command: "deleteFromMap", uiIcon: "bx bx-trash" }
], ],
selectMenuItemHandler: ({ command }) => { selectMenuItemHandler: ({ command }, e) => {
if (command === "deleteFromMap") { if (command === "deleteFromMap") {
appContext.triggerCommand(command, { noteId }); appContext.triggerCommand(command, { noteId });
return; return;
} }
if (command === "openGeoLocation") {
appContext.triggerCommand(command, { noteId, event: e });
return;
}
// Pass the events to the link context menu // Pass the events to the link context menu
linkContextMenu.handleLinkContextMenuItem(command, noteId); linkContextMenu.handleLinkContextMenuItem(command, noteId);
} }