{$_('gpx.file')}
{$_('menu.new')}
{$_('menu.open')}
{$_('menu.duplicate')}
{$_('menu.close')}
{$_('menu.close_all')}
($exportState = ExportState.SELECTION)}
disabled={$selection.size == 0}
>
{$_('menu.export')}
($exportState = ExportState.ALL)}
disabled={$fileObservers.size == 0}
>
{$_('menu.export_all')}
{$_('menu.edit')}
{$_('menu.undo')}
{$_('menu.redo')}
item instanceof ListFileItem || item instanceof ListTrackItem)}
on:click={() => ($editMetadata = true)}
>
{$_('menu.metadata.button')}
item instanceof ListFileItem || item instanceof ListTrackItem)}
on:click={() => ($editStyle = true)}
>
{$_('menu.style.button')}
{
if ($allHidden) {
dbUtils.setHiddenToSelection(false);
} else {
dbUtils.setHiddenToSelection(true);
}
}}
disabled={$selection.size == 0}
>
{#if $allHidden}
{$_('menu.unhide')}
{:else}
{$_('menu.hide')}
{/if}
{#if $verticalFileView}
{#if $selection.getSelected().some((item) => item instanceof ListFileItem)}
dbUtils.addNewTrack($selection.getSelected()[0].getFileId())}
disabled={$selection.size !== 1}
>
{$_('menu.new_track')}
{:else if $selection.getSelected().some((item) => item instanceof ListTrackItem)}
{
let item = $selection.getSelected()[0];
dbUtils.addNewSegment(item.getFileId(), item.getTrackIndex());
}}
disabled={$selection.size !== 1}
>
{$_('menu.new_segment')}
{/if}
{/if}
{$_('menu.select_all')}
{
if ($selection.size > 0) {
centerMapOnSelection();
}
}}
>
{$_('menu.center')}
{#if $verticalFileView}
{$_('menu.copy')}
{$_('menu.cut')}
0 &&
!allowedPastes[$copied[0].level].includes($selection.getSelected().pop()?.level))}
on:click={pasteSelection}
>
{$_('menu.paste')}
{/if}
{$_('menu.delete')}
{$_('menu.view')}
{$_('menu.elevation_profile')}
{$_('menu.vertical_file_view')}
{$_('menu.switch_basemap')}
{$_('menu.toggle_overlays')}
{$_('menu.distance_markers')}
{$_('menu.direction_markers')}
{$_('menu.toggle_3d')}
{$_('menu.settings')}
{$_('menu.distance_units')}
{$_('menu.metric')}
{$_('menu.imperial')}
{$_('menu.nautical')}
{$_('menu.velocity_units')}
{$_('quantities.speed')}
{$_('quantities.pace')}
{$_('menu.temperature_units')}
{$_('menu.celsius')}
{$_('menu.fahrenheit')}
{$_('menu.language')}
{#each Object.entries(languages) as [lang, label]}
{label}
{/each}
{#if selectedMode === 'light'}
{:else}
{/if}
{$_('menu.mode')}
{
setMode(value);
}}
>
{$_('menu.light')}
{$_('menu.dark')}
{$_('menu.street_view_source')}
{$_('menu.mapillary')}
{$_('menu.google')}
(layerSettingsOpen = true)}>
{$_('menu.layers')}
{
let targetInput =
e.target.tagName === 'INPUT' ||
e.target.tagName === 'TEXTAREA' ||
e.target.tagName === 'SELECT' ||
e.target.role === 'combobox' ||
e.target.role === 'radio' ||
e.target.role === 'menu' ||
e.target.role === 'menuitem' ||
e.target.role === 'menuitemradio' ||
e.target.role === 'menuitemcheckbox';
if (e.key === '+' && (e.metaKey || e.ctrlKey)) {
createFile();
e.preventDefault();
} else if (e.key === 'o' && (e.metaKey || e.ctrlKey)) {
triggerFileInput();
e.preventDefault();
} else if (e.key === 'd' && (e.metaKey || e.ctrlKey)) {
dbUtils.duplicateSelection();
e.preventDefault();
} else if (e.key === 'c' && (e.metaKey || e.ctrlKey)) {
if (!targetInput) {
copySelection();
e.preventDefault();
}
} else if (e.key === 'x' && (e.metaKey || e.ctrlKey)) {
if (!targetInput) {
cutSelection();
e.preventDefault();
}
} else if (e.key === 'v' && (e.metaKey || e.ctrlKey)) {
if (!targetInput) {
pasteSelection();
e.preventDefault();
}
} else if ((e.key === 's' || e.key == 'S') && (e.metaKey || e.ctrlKey)) {
if (e.shiftKey) {
if ($fileObservers.size > 0) {
$exportState = ExportState.ALL;
}
} else if ($selection.size > 0) {
$exportState = ExportState.SELECTION;
}
e.preventDefault();
} else if ((e.key === 'z' || e.key == 'Z') && (e.metaKey || e.ctrlKey)) {
if (e.shiftKey) {
dbUtils.redo();
} else {
dbUtils.undo();
}
e.preventDefault();
} else if ((e.key === 'Backspace' || e.key === 'Delete') && (e.metaKey || e.ctrlKey)) {
if (!targetInput) {
if (e.shiftKey) {
dbUtils.deleteAllFiles();
} else {
dbUtils.deleteSelection();
}
e.preventDefault();
}
} else if (e.key === 'a' && (e.metaKey || e.ctrlKey)) {
if (!targetInput) {
selectAll();
e.preventDefault();
}
} else if (e.key === 'i' && (e.metaKey || e.ctrlKey)) {
if (
$selection.size === 1 &&
$selection
.getSelected()
.every((item) => item instanceof ListFileItem || item instanceof ListTrackItem)
) {
$editMetadata = true;
}
e.preventDefault();
} else if (e.key === 'p' && (e.metaKey || e.ctrlKey)) {
$elevationProfile = !$elevationProfile;
e.preventDefault();
} else if (e.key === 'l' && (e.metaKey || e.ctrlKey)) {
$verticalFileView = !$verticalFileView;
e.preventDefault();
} else if (e.key === 'h' && (e.metaKey || e.ctrlKey)) {
if ($allHidden) {
dbUtils.setHiddenToSelection(false);
} else {
dbUtils.setHiddenToSelection(true);
}
e.preventDefault();
} else if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {
if ($selection.size > 0) {
centerMapOnSelection();
}
} else if (e.key === 'F1') {
switchBasemaps();
e.preventDefault();
} else if (e.key === 'F2') {
toggleOverlays();
e.preventDefault();
} else if (e.key === 'F3') {
$distanceMarkers = !$distanceMarkers;
e.preventDefault();
} else if (e.key === 'F4') {
$directionMarkers = !$directionMarkers;
e.preventDefault();
} else if (e.key === 'F5') {
$routing = !$routing;
e.preventDefault();
} else if (
e.key === 'ArrowRight' ||
e.key === 'ArrowDown' ||
e.key === 'ArrowLeft' ||
e.key === 'ArrowUp'
) {
if (!targetInput) {
updateSelectionFromKey(e.key === 'ArrowRight' || e.key === 'ArrowDown', e.shiftKey);
e.preventDefault();
}
}
}}
on:dragover={(e) => e.preventDefault()}
on:drop={(e) => {
e.preventDefault();
if (e.dataTransfer.files.length > 0) {
loadFiles(e.dataTransfer.files);
}
}}
/>