mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-09-18 17:31:53 +08:00
feat(geo_map): add option to open location
This commit is contained in:
parent
47b02da021
commit
9b1279ce14
@ -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 = {
|
||||||
|
@ -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" },
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user