diff --git a/umap/static/umap/base.css b/umap/static/umap/base.css
index b7713a5a..78b7c342 100644
--- a/umap/static/umap/base.css
+++ b/umap/static/umap/base.css
@@ -47,6 +47,16 @@ p {
margin-top: 14px;
margin-bottom: 14px;
}
+kbd {
+ border: 1px solid #b4b4b4;
+ box-shadow:
+ 0 1px 1px rgba(0, 0, 0, 0.2),
+ 0 2px 0 0 rgba(255, 255, 255, 0.7) inset;
+ border-radius: 3px;
+ padding: 1px 4px;
+ display: inline-block;
+ white-space: nowrap;
+}
/*
* List
diff --git a/umap/static/umap/js/umap.controls.js b/umap/static/umap/js/umap.controls.js
index 67baa3dc..e250a329 100644
--- a/umap/static/umap/js/umap.controls.js
+++ b/umap/static/umap/js/umap.controls.js
@@ -1,6 +1,9 @@
L.U.BaseAction = L.ToolbarAction.extend({
initialize: function (map) {
this.map = map
+ if (this.options.label) {
+ this.options.tooltip = this.map.help.displayLabel(this.options.label, withKbdTag=false)
+ }
this.options.toolbarIcon = {
className: this.options.className,
tooltip: this.options.tooltip,
@@ -15,7 +18,7 @@ L.U.ImportAction = L.U.BaseAction.extend({
options: {
helpMenu: true,
className: 'upload-data dark',
- tooltip: `${L._('Import data')} (Ctrl+I)`,
+ label: 'IMPORT_PANEL'
},
addHooks: function () {
@@ -84,7 +87,7 @@ L.U.DrawMarkerAction = L.U.BaseAction.extend({
options: {
helpMenu: true,
className: 'umap-draw-marker dark',
- tooltip: `${L._('Draw a marker')} (Ctrl+M)`,
+ label: 'DRAW_MARKER'
},
addHooks: function () {
@@ -96,7 +99,7 @@ L.U.DrawPolylineAction = L.U.BaseAction.extend({
options: {
helpMenu: true,
className: 'umap-draw-polyline dark',
- tooltip: `${L._('Draw a polyline')} (Ctrl+L)`,
+ label: 'DRAW_LINE'
},
addHooks: function () {
@@ -108,7 +111,7 @@ L.U.DrawPolygonAction = L.U.BaseAction.extend({
options: {
helpMenu: true,
className: 'umap-draw-polygon dark',
- tooltip: `${L._('Draw a polygon')} (Ctrl+P)`,
+ label: 'DRAW_POLYGON'
},
addHooks: function () {
@@ -1020,7 +1023,7 @@ L.U.Map.include({
'mouseover',
function () {
this.ui.tooltip({
- content: `${L._('Cancel')} (Ctrl+Z)`,
+ content: this.help.displayLabel('CANCEL'),
anchor: controlEditCancel,
position: 'bottom',
delay: 500,
@@ -1044,7 +1047,7 @@ L.U.Map.include({
'mouseover',
function () {
this.ui.tooltip({
- content: `${L._('Back to preview')} (Ctrl+E)`,
+ content: this.help.displayLabel('PREVIEW'),
anchor: controlEditDisable,
position: 'bottom',
delay: 500,
@@ -1065,7 +1068,7 @@ L.U.Map.include({
'mouseover',
function () {
this.ui.tooltip({
- content: `${L._('Save current edits')} (Ctrl+S)`,
+ content: this.help.displayLabel('SAVE'),
anchor: controlEditSave,
position: 'bottom',
delay: 500,
diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js
index d2aa4433..e3ce8f02 100644
--- a/umap/static/umap/js/umap.core.js
+++ b/umap/static/umap/js/umap.core.js
@@ -434,6 +434,67 @@ L.U.Keys = {
}
L.U.Help = L.Class.extend({
+
+ SHORTCUTS: {
+ DRAW_MARKER: {
+ shortcut:'Modifier+M',
+ label: L._('Draw a marker')
+ },
+ DRAW_LINE: {
+ shortcut:'Modifier+L',
+ label: L._('Draw a polyline')
+ },
+ DRAW_POLYGON: {
+ shortcut:'Modifier+P',
+ label: L._('Draw a polygon')
+ },
+ TOGGLE_EDIT: {
+ shortcut:'Modifier+E',
+ label: L._('Toggle edit mode')
+ },
+ STOP_EDIT: {
+ shortcut:'Modifier+E',
+ label: L._('Stop editing')
+ },
+ SAVE_MAP: {
+ shortcut:'Modifier+S',
+ label: L._('Save map')
+ },
+ IMPORT_PANEL: {
+ shortcut:'Modifier+I',
+ label: L._('Import data')
+ },
+ SEARCH: {
+ shortcut:'Modifier+F',
+ label: L._('Search location')
+ },
+ CANCEL: {
+ shortcut:'Modifier+Z',
+ label: L._('Cancel edits')
+ },
+ PREVIEW: {
+ shortcut:'Modifier+E',
+ label: L._('Back to preview')
+ },
+ SAVE: {
+ shortcut:'Modifier+S',
+ label: L._('Save current edits')
+ },
+ },
+
+ displayLabel: function (action, withKbdTag=true) {
+ let {shortcut, label} = this.SHORTCUTS[action]
+ const modifier = this.isMacOS ? 'Cmd' : 'Ctrl'
+ shortcut = shortcut.replace('Modifier', modifier)
+ if (withKbdTag) {
+ shortcut = shortcut.split('+').map((el) => `${el}`).join('+')
+ label += ` ${shortcut}`
+ } else {
+ label += ` (${shortcut})`
+ }
+ return label
+ },
+
initialize: function (map) {
this.map = map
this.box = L.DomUtil.create(
@@ -452,6 +513,7 @@ L.U.Help = L.Class.extend({
const label = L.DomUtil.create('span', '', closeButton)
label.title = label.textContent = L._('Close')
this.content = L.DomUtil.create('div', 'umap-help-content', this.box)
+ this.isMacOS = /mac/i.test(navigator.userAgentData ? navigator.userAgentData.platform : navigator.platform)
},
onKeyDown: function (e) {
diff --git a/umap/static/umap/js/umap.js b/umap/static/umap/js/umap.js
index 159328ee..baed29cd 100644
--- a/umap/static/umap/js/umap.js
+++ b/umap/static/umap/js/umap.js
@@ -162,6 +162,9 @@ L.U.Map.include({
this.features_index = {}
this.facets = {}
+ // Needed for actions labels
+ this.help = new L.U.Help(this)
+
if (this.options.hash) this.addHash()
this.initTileLayers(this.options.tilelayers)
// Needs tilelayer to exist for minimap
@@ -235,7 +238,6 @@ L.U.Map.include({
}
}
- this.help = new L.U.Help(this)
this.slideshow = new L.U.Slideshow(this, this.options.slideshow)
this.permissions = new L.U.MapPermissions(this)
this.initCaptionBar()
@@ -1884,27 +1886,27 @@ L.U.Map.include({
if (this.editEnabled) {
if (!this.isDirty) {
items.push({
- text: `${L._('Stop editing')} (Ctrl+E)`,
+ text: this.help.displayLabel('STOP_EDIT'),
callback: this.disableEdit,
})
}
if (this.options.enableMarkerDraw) {
items.push({
- text: `${L._('Draw a marker')} (Ctrl+M)`,
+ text: this.help.displayLabel('DRAW_MARKER'),
callback: this.startMarker,
context: this,
})
}
if (this.options.enablePolylineDraw) {
items.push({
- text: `${L._('Draw a polygon')} (Ctrl+P)`,
+ text: this.help.displayLabel('DRAW_POLYGON'),
callback: this.startPolygon,
context: this,
})
}
if (this.options.enablePolygonDraw) {
items.push({
- text: `${L._('Draw a line')} (Ctrl+L)`,
+ text: this.help.displayLabel('DRAW_LINE'),
callback: this.startPolyline,
context: this,
})
@@ -1918,7 +1920,7 @@ L.U.Map.include({
})
} else {
items.push({
- text: `${L._('Start editing')} (Ctrl+E)`,
+ text: this.help.displayLabel('TOGGLE_EDIT'),
callback: this.enableEdit,
})
}
@@ -1939,7 +1941,7 @@ L.U.Map.include({
callback: this.displayCaption,
},
{
- text: L._('Search location'),
+ text: this.help.displayLabel('SEARCH'),
callback: this.search,
}
)