Platform-specific keybindings

Specifying keybindings that use a command key (⌘ on Mac,
Ctrl on Win/Linux) using the appropriate Mac binding, e.g.
'⌘Z'. Use iD.ui.cmd to translate it to an appropriate key
string for other platforms, e.g. 'Ctrl+Z'.
This commit is contained in:
John Firebaugh
2013-02-11 11:07:29 -08:00
parent e438a1521c
commit 66afcd9923
5 changed files with 29 additions and 15 deletions
-1
View File
@@ -1333,7 +1333,6 @@ a.success-action {
color: #222;
font-size: 10px;
padding: 0px 7px;
text-transform: uppercase;
font-weight: bold;
display: inline-block;
border-radius: 2px;
+1
View File
@@ -60,6 +60,7 @@
<script src='js/id/ui/radial_menu.js'></script>
<script src='js/id/ui/inspector.js'></script>
<script src='js/id/ui/modal.js'></script>
<script src='js/id/ui/cmd.js'></script>
<script src='js/id/ui/confirm.js'></script>
<script src='js/id/ui/commit.js'></script>
<script src='js/id/ui/success.js'></script>
+5 -13
View File
@@ -200,20 +200,14 @@ iD.ui = function(context) {
}
}
var mod = {
'mac': '⌘',
'win': 'Ctrl',
'linux': 'Ctrl'
}[iD.detect().os];
limiter.select('#undo')
.classed('disabled', !undo)
.attr('data-original-title', hintprefix(mod + ' + Z', undo || t('nothing_to_undo')))
.attr('data-original-title', hintprefix(iD.ui.cmd('⌘Z'), undo || t('nothing_to_undo')))
.call(refreshTooltip);
limiter.select('#redo')
.classed('disabled', !redo)
.attr('data-original-title', hintprefix(mod + ' + ⇧ + Z', redo || t('nothing_to_redo')))
.attr('data-original-title', hintprefix(iD.ui.cmd('⌘⇧Z'), redo || t('nothing_to_redo')))
.call(refreshTooltip);
});
@@ -232,16 +226,14 @@ iD.ui = function(context) {
var pa = 5;
var keybinding = d3.keybinding('main')
.on('⌘+Z', function() { history.undo(); })
.on('⌃+Z', function() { history.undo(); })
.on('⌘+⇧+Z', function() { history.redo(); })
.on('⌃+⇧+Z', function() { history.redo(); })
.on(iD.ui.cmd('⌘Z'), function() { history.undo(); })
.on(iD.ui.cmd('⌘⇧Z'), function() { history.redo(); })
.on('⌫', function() { d3.event.preventDefault(); })
.on('←', pan([pa, 0]))
.on('↑', pan([0, pa]))
.on('→', pan([-pa, 0]))
.on('↓', pan([0, -pa]))
.on('⇧+=', function() { map.zoomIn(); })
.on('⇧=', function() { map.zoomIn(); })
.on('+', function() { map.zoomIn(); })
.on('-', function() { map.zoomOut(); })
.on('dash', function() { map.zoomOut(); });
+22
View File
@@ -0,0 +1,22 @@
// Translate a MacOS key command into the appropriate Windows/Linux equivalent.
// For example, ⌘Z -> Ctrl+Z
iD.ui.cmd = function(code) {
if (iD.detect().os === 'mac')
return code;
var modifiers = {
'⌘': 'Ctrl',
'⇧': 'Shift',
'⌥': 'Alt'
}, keys = [];
for (var i = 0; i < code.length; i++) {
if (code[i] in modifiers) {
keys.push(modifiers[code[i]]);
} else {
keys.push(code[i]);
}
}
return keys.join('+');
};
+1 -1
View File
@@ -63,7 +63,7 @@ d3.keybinding = function(namespace) {
callback: callback
};
code = code.toLowerCase().match(/(?:(?:[^+])+|\+\+|^\+$)/g);
code = code.toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
for (var i = 0; i < code.length; i++) {
// Normalise matching errors