mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
move i18n code to action list according to PR comment
This commit is contained in:
parent
58f3a76da7
commit
6657b2629f
@ -160,33 +160,19 @@ RED.actionList = (function() {
|
|||||||
createDialog();
|
createDialog();
|
||||||
}
|
}
|
||||||
dialog.slideDown(300);
|
dialog.slideDown(300);
|
||||||
searchInput.searchBox('value',v)
|
searchInput.searchBox('value',v);
|
||||||
searchResults.editableList('empty');
|
searchResults.editableList('empty');
|
||||||
results = [];
|
results = [];
|
||||||
var actions = RED.actions.list();
|
var actions = RED.actions.list();
|
||||||
actions.forEach(function (sc) {
|
|
||||||
var id = sc.id.replace(/^.*:/,"");
|
|
||||||
var key = "action-list."+id;
|
|
||||||
var translation = RED._(key);
|
|
||||||
if (translation !== key) {
|
|
||||||
sc.translation = translation;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
actions.sort(function(A,B) {
|
actions.sort(function(A,B) {
|
||||||
var Aid = A.translation ? A.translation : A.id;
|
var Akey = A.label;
|
||||||
var Bid = B.translation ? B.translation : B.id;
|
var Bkey = B.label;
|
||||||
return Aid.localeCompare(Bid);
|
return Akey.localeCompare(Bkey);
|
||||||
});
|
});
|
||||||
actions.forEach(function(action) {
|
actions.forEach(function(action) {
|
||||||
if (action.translation) {
|
|
||||||
action.label = action.translation;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
action.label = action.id.replace(/:/,": ").replace(/-/g," ").replace(/(^| )./g,function() { return arguments[0].toUpperCase()});
|
|
||||||
}
|
|
||||||
action._label = action.label.toLowerCase();
|
action._label = action.label.toLowerCase();
|
||||||
searchResults.editableList('addItem',action)
|
searchResults.editableList('addItem',action);
|
||||||
})
|
});
|
||||||
RED.events.emit("actionList:open");
|
RED.events.emit("actionList:open");
|
||||||
visible = true;
|
visible = true;
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,39 @@
|
|||||||
RED.actions = (function() {
|
RED.actions = (function() {
|
||||||
var actions = {
|
var actions = {
|
||||||
|
|
||||||
}
|
};
|
||||||
|
|
||||||
function addAction(name,handler) {
|
function addAction(name,handler,options) {
|
||||||
if (typeof handler !== 'function') {
|
if (typeof handler !== 'function') {
|
||||||
throw new Error("Action handler not a function");
|
throw new Error("Action handler not a function");
|
||||||
}
|
}
|
||||||
if (actions[name]) {
|
if (actions[name]) {
|
||||||
throw new Error("Cannot override existing action");
|
throw new Error("Cannot override existing action");
|
||||||
}
|
}
|
||||||
actions[name] = handler;
|
actions[name] = {
|
||||||
|
handler: handler,
|
||||||
|
options: options,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
function removeAction(name) {
|
function removeAction(name) {
|
||||||
delete actions[name];
|
delete actions[name].handler;
|
||||||
}
|
}
|
||||||
function getAction(name) {
|
function getAction(name) {
|
||||||
return actions[name];
|
return actions[name].handler;
|
||||||
}
|
}
|
||||||
function invokeAction() {
|
function invokeAction() {
|
||||||
var args = Array.prototype.slice.call(arguments);
|
var args = Array.prototype.slice.call(arguments);
|
||||||
var name = args.shift();
|
var name = args.shift();
|
||||||
if (actions.hasOwnProperty(name)) {
|
if (actions.hasOwnProperty(name)) {
|
||||||
actions[name].apply(null, args);
|
var handler = actions[name].handler;
|
||||||
|
handler.apply(null, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function listActions() {
|
function listActions() {
|
||||||
var result = [];
|
var result = [];
|
||||||
|
var missing = [];
|
||||||
Object.keys(actions).forEach(function(action) {
|
Object.keys(actions).forEach(function(action) {
|
||||||
|
var def = actions[action];
|
||||||
var shortcut = RED.keyboard.getShortcut(action);
|
var shortcut = RED.keyboard.getShortcut(action);
|
||||||
var isUser = false;
|
var isUser = false;
|
||||||
if (shortcut) {
|
if (shortcut) {
|
||||||
@ -35,13 +41,38 @@ RED.actions = (function() {
|
|||||||
} else {
|
} else {
|
||||||
isUser = !!RED.keyboard.getUserShortcut(action);
|
isUser = !!RED.keyboard.getUserShortcut(action);
|
||||||
}
|
}
|
||||||
|
if (!def.label) {
|
||||||
|
var name = action;
|
||||||
|
var options = def.options;
|
||||||
|
var key = options ? options.label : undefined;
|
||||||
|
if (!key) {
|
||||||
|
key = "action-list." +name.replace(/^.*:/,"");
|
||||||
|
}
|
||||||
|
var label = RED._(key);
|
||||||
|
if (label === key) {
|
||||||
|
// no translation. convert `name` to description
|
||||||
|
label = name.replace(/(^.+:([a-z]))|(-([a-z]))/g, function() {
|
||||||
|
if (arguments[5] === 0) {
|
||||||
|
return arguments[2].toUpperCase();
|
||||||
|
} else {
|
||||||
|
return " "+arguments[4].toUpperCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
missing.push(key);
|
||||||
|
}
|
||||||
|
def.label = label;
|
||||||
|
}
|
||||||
|
//console.log("; missing:", missing);
|
||||||
|
|
||||||
result.push({
|
result.push({
|
||||||
id:action,
|
id:action,
|
||||||
scope:shortcut?shortcut.scope:undefined,
|
scope:shortcut?shortcut.scope:undefined,
|
||||||
key:shortcut?shortcut.key:undefined,
|
key:shortcut?shortcut.key:undefined,
|
||||||
user:isUser
|
user:isUser,
|
||||||
})
|
label: def.label,
|
||||||
})
|
options: def.options,
|
||||||
|
});
|
||||||
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
@ -49,15 +49,15 @@ RED.keyboard = (function() {
|
|||||||
"]": 221,
|
"]": 221,
|
||||||
"{": 219,// <- QWERTY specific
|
"{": 219,// <- QWERTY specific
|
||||||
"}": 221 // <- QWERTY specific
|
"}": 221 // <- QWERTY specific
|
||||||
}
|
};
|
||||||
var metaKeyCodes = {
|
var metaKeyCodes = {
|
||||||
16: true,
|
16: true,
|
||||||
17: true,
|
17: true,
|
||||||
18: true,
|
18: true,
|
||||||
91: true,
|
91: true,
|
||||||
93: true
|
93: true
|
||||||
}
|
};
|
||||||
var actionToKeyMap = {}
|
var actionToKeyMap = {};
|
||||||
var defaultKeyMap = {};
|
var defaultKeyMap = {};
|
||||||
|
|
||||||
// FF generates some different keycodes because reasons.
|
// FF generates some different keycodes because reasons.
|
||||||
@ -65,7 +65,7 @@ RED.keyboard = (function() {
|
|||||||
59:186,
|
59:186,
|
||||||
61:187,
|
61:187,
|
||||||
173:189
|
173:189
|
||||||
}
|
};
|
||||||
|
|
||||||
function migrateOldKeymap() {
|
function migrateOldKeymap() {
|
||||||
// pre-0.18
|
// pre-0.18
|
||||||
@ -80,7 +80,7 @@ RED.keyboard = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getUserKey(action) {
|
function getUserKey(action) {
|
||||||
return RED.settings.get('editor.keymap',{})[action]
|
return RED.settings.get('editor.keymap',{})[action];
|
||||||
}
|
}
|
||||||
|
|
||||||
function mergeKeymaps(defaultKeymap, themeKeymap) {
|
function mergeKeymaps(defaultKeymap, themeKeymap) {
|
||||||
@ -105,7 +105,7 @@ RED.keyboard = (function() {
|
|||||||
scope:scope,
|
scope:scope,
|
||||||
key:key,
|
key:key,
|
||||||
user:false
|
user:false
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,13 +115,13 @@ RED.keyboard = (function() {
|
|||||||
if (themeKeymap.hasOwnProperty(action)) {
|
if (themeKeymap.hasOwnProperty(action)) {
|
||||||
if (!themeKeymap[action].key) {
|
if (!themeKeymap[action].key) {
|
||||||
// No key for this action - default is no keybinding
|
// No key for this action - default is no keybinding
|
||||||
delete mergedKeymap[action]
|
delete mergedKeymap[action];
|
||||||
} else {
|
} else {
|
||||||
mergedKeymap[action] = [{
|
mergedKeymap[action] = [{
|
||||||
scope: themeKeymap[action].scope || "*",
|
scope: themeKeymap[action].scope || "*",
|
||||||
key: themeKeymap[action].key,
|
key: themeKeymap[action].key,
|
||||||
user: false
|
user: false
|
||||||
}]
|
}];
|
||||||
if (mergedKeymap[action][0].scope === "workspace") {
|
if (mergedKeymap[action][0].scope === "workspace") {
|
||||||
mergedKeymap[action][0].scope = "red-ui-workspace";
|
mergedKeymap[action][0].scope = "red-ui-workspace";
|
||||||
}
|
}
|
||||||
@ -179,7 +179,7 @@ RED.keyboard = (function() {
|
|||||||
close: function() {
|
close: function() {
|
||||||
RED.menu.refreshShortcuts();
|
RED.menu.refreshShortcuts();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function revertToDefault(action) {
|
function revertToDefault(action) {
|
||||||
@ -327,7 +327,7 @@ RED.keyboard = (function() {
|
|||||||
scope:scope,
|
scope:scope,
|
||||||
key:key,
|
key:key,
|
||||||
user:false
|
user:false
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
if (!ondown) {
|
if (!ondown) {
|
||||||
var userAction = getUserKey(cbdown);
|
var userAction = getUserKey(cbdown);
|
||||||
@ -350,7 +350,7 @@ RED.keyboard = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
keys.push([key,mod])
|
keys.push([key,mod]);
|
||||||
}
|
}
|
||||||
var slot = handlers;
|
var slot = handlers;
|
||||||
for (i=0;i<keys.length;i++) {
|
for (i=0;i<keys.length;i++) {
|
||||||
@ -373,7 +373,7 @@ RED.keyboard = (function() {
|
|||||||
//slot[key] = {scope: scope, ondown:cbdown};
|
//slot[key] = {scope: scope, ondown:cbdown};
|
||||||
}
|
}
|
||||||
slot.handlers = slot.handlers || [];
|
slot.handlers = slot.handlers || [];
|
||||||
slot.handlers.push({scope:scope,ondown:cbdown})
|
slot.handlers.push({scope:scope,ondown:cbdown});
|
||||||
slot.scope = scope;
|
slot.scope = scope;
|
||||||
slot.ondown = cbdown;
|
slot.ondown = cbdown;
|
||||||
}
|
}
|
||||||
@ -390,12 +390,12 @@ RED.keyboard = (function() {
|
|||||||
if (parsedKey) {
|
if (parsedKey) {
|
||||||
keys.push(parsedKey);
|
keys.push(parsedKey);
|
||||||
} else {
|
} else {
|
||||||
console.log("Unrecognised key specifier:",key)
|
console.log("Unrecognised key specifier:",key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
keys.push([key,mod])
|
keys.push([key,mod]);
|
||||||
}
|
}
|
||||||
var slot = handlers;
|
var slot = handlers;
|
||||||
for (i=0;i<keys.length;i++) {
|
for (i=0;i<keys.length;i++) {
|
||||||
@ -417,7 +417,7 @@ RED.keyboard = (function() {
|
|||||||
}
|
}
|
||||||
if (typeof slot.ondown === "string") {
|
if (typeof slot.ondown === "string") {
|
||||||
if (typeof modifiers === 'boolean' && modifiers) {
|
if (typeof modifiers === 'boolean' && modifiers) {
|
||||||
actionToKeyMap[slot.ondown] = {user: modifiers}
|
actionToKeyMap[slot.ondown] = {user: modifiers};
|
||||||
} else {
|
} else {
|
||||||
delete actionToKeyMap[slot.ondown];
|
delete actionToKeyMap[slot.ondown];
|
||||||
}
|
}
|
||||||
@ -433,11 +433,11 @@ RED.keyboard = (function() {
|
|||||||
function formatKey(key,plain) {
|
function formatKey(key,plain) {
|
||||||
var formattedKey = isMac?key.replace(/ctrl-?/,"⌘"):key;
|
var formattedKey = isMac?key.replace(/ctrl-?/,"⌘"):key;
|
||||||
formattedKey = isMac?formattedKey.replace(/alt-?/,"⌥"):key;
|
formattedKey = isMac?formattedKey.replace(/alt-?/,"⌥"):key;
|
||||||
formattedKey = formattedKey.replace(/shift-?/,"⇧")
|
formattedKey = formattedKey.replace(/shift-?/,"⇧");
|
||||||
formattedKey = formattedKey.replace(/left/,"←")
|
formattedKey = formattedKey.replace(/left/,"←");
|
||||||
formattedKey = formattedKey.replace(/up/,"↑")
|
formattedKey = formattedKey.replace(/up/,"↑");
|
||||||
formattedKey = formattedKey.replace(/right/,"→")
|
formattedKey = formattedKey.replace(/right/,"→");
|
||||||
formattedKey = formattedKey.replace(/down/,"↓")
|
formattedKey = formattedKey.replace(/down/,"↓");
|
||||||
if (plain) {
|
if (plain) {
|
||||||
return formattedKey;
|
return formattedKey;
|
||||||
}
|
}
|
||||||
@ -461,7 +461,6 @@ RED.keyboard = (function() {
|
|||||||
var container = $(this);
|
var container = $(this);
|
||||||
var object = container.data('data');
|
var object = container.data('data');
|
||||||
|
|
||||||
|
|
||||||
if (!container.hasClass('keyboard-shortcut-entry-expanded')) {
|
if (!container.hasClass('keyboard-shortcut-entry-expanded')) {
|
||||||
endEditShortcut();
|
endEditShortcut();
|
||||||
|
|
||||||
@ -485,7 +484,7 @@ RED.keyboard = (function() {
|
|||||||
}
|
}
|
||||||
$(this).toggleClass("input-error",!valid);
|
$(this).toggleClass("input-error",!valid);
|
||||||
okButton.attr("disabled",!valid);
|
okButton.attr("disabled",!valid);
|
||||||
})
|
});
|
||||||
|
|
||||||
var scopeSelect = $('<select><option value="*" data-i18n="keyboard.global"></option><option value="red-ui-workspace" data-i18n="keyboard.workspace"></option></select>').appendTo(scope);
|
var scopeSelect = $('<select><option value="*" data-i18n="keyboard.global"></option><option value="red-ui-workspace" data-i18n="keyboard.workspace"></option></select>').appendTo(scope);
|
||||||
scopeSelect.i18n();
|
scopeSelect.i18n();
|
||||||
@ -495,7 +494,7 @@ RED.keyboard = (function() {
|
|||||||
scopeSelect.val(object.scope||'*');
|
scopeSelect.val(object.scope||'*');
|
||||||
scopeSelect.on("change", function() {
|
scopeSelect.on("change", function() {
|
||||||
keyInput.trigger("change");
|
keyInput.trigger("change");
|
||||||
})
|
});
|
||||||
|
|
||||||
var div = $('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(scope);
|
var div = $('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(scope);
|
||||||
var okButton = $('<button class="red-ui-button red-ui-button-small"><i class="fa fa-check"></i></button>').appendTo(div);
|
var okButton = $('<button class="red-ui-button red-ui-button-small"><i class="fa fa-check"></i></button>').appendTo(div);
|
||||||
@ -521,10 +520,13 @@ RED.keyboard = (function() {
|
|||||||
id:object.id,
|
id:object.id,
|
||||||
scope:shortcut?shortcut.scope:undefined,
|
scope:shortcut?shortcut.scope:undefined,
|
||||||
key:shortcut?shortcut.key:undefined,
|
key:shortcut?shortcut.key:undefined,
|
||||||
user:shortcut?shortcut.user:undefined
|
user:shortcut?shortcut.user:undefined,
|
||||||
}
|
|
||||||
|
label: object.label,
|
||||||
|
options: object.options,
|
||||||
|
};
|
||||||
buildShortcutRow(container,obj);
|
buildShortcutRow(container,obj);
|
||||||
})
|
});
|
||||||
|
|
||||||
keyInput.trigger("focus");
|
keyInput.trigger("focus");
|
||||||
}
|
}
|
||||||
@ -559,7 +561,7 @@ RED.keyboard = (function() {
|
|||||||
delete object.scope;
|
delete object.scope;
|
||||||
} else {
|
} else {
|
||||||
keyDiv.parent().removeClass("keyboard-shortcut-entry-unassigned");
|
keyDiv.parent().removeClass("keyboard-shortcut-entry-unassigned");
|
||||||
keyDiv.append(RED.keyboard.formatKey(key))
|
keyDiv.append(RED.keyboard.formatKey(key));
|
||||||
$("<span>").text(scope).appendTo(scopeDiv);
|
$("<span>").text(scope).appendTo(scopeDiv);
|
||||||
object.key = key;
|
object.key = key;
|
||||||
object.scope = scope;
|
object.scope = scope;
|
||||||
@ -572,7 +574,7 @@ RED.keyboard = (function() {
|
|||||||
userKeymap[object.id] = {
|
userKeymap[object.id] = {
|
||||||
scope:shortcut.scope,
|
scope:shortcut.scope,
|
||||||
key:shortcut.key
|
key:shortcut.key
|
||||||
}
|
};
|
||||||
RED.settings.set('editor.keymap',userKeymap);
|
RED.settings.set('editor.keymap',userKeymap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -588,16 +590,7 @@ RED.keyboard = (function() {
|
|||||||
var item = $('<div class="keyboard-shortcut-entry">').appendTo(container);
|
var item = $('<div class="keyboard-shortcut-entry">').appendTo(container);
|
||||||
container.data('data',object);
|
container.data('data',object);
|
||||||
|
|
||||||
var text = object.translation;
|
var text = object.label;
|
||||||
if (!object.translation) {
|
|
||||||
text = object.id.replace(/(^.+:([a-z]))|(-([a-z]))/g,function() {
|
|
||||||
if (arguments[5] === 0) {
|
|
||||||
return arguments[2].toUpperCase();
|
|
||||||
} else {
|
|
||||||
return " "+arguments[4].toUpperCase();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
var label = $('<div>').addClass("keyboard-shortcut-entry-text").text(text).appendTo(item);
|
var label = $('<div>').addClass("keyboard-shortcut-entry-text").text(text).appendTo(item);
|
||||||
|
|
||||||
var user = $('<i class="fa fa-user"></i>').prependTo(label);
|
var user = $('<i class="fa fa-user"></i>').prependTo(label);
|
||||||
@ -638,15 +631,9 @@ RED.keyboard = (function() {
|
|||||||
} else {
|
} else {
|
||||||
filterValue = filterValue.replace(/\s/g,"");
|
filterValue = filterValue.replace(/\s/g,"");
|
||||||
shortcutList.editableList('filter', function(data) {
|
shortcutList.editableList('filter', function(data) {
|
||||||
var label;
|
var label = data.label.toLowerCase();
|
||||||
if (data.translation) {
|
|
||||||
label = data.translation.toLowerCase();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
label = data.id.toLowerCase().replace(/^.*:/,"").replace("-","");
|
|
||||||
}
|
|
||||||
return label.indexOf(filterValue) > -1;
|
return label.indexOf(filterValue) > -1;
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -666,25 +653,10 @@ RED.keyboard = (function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
var shortcuts = RED.actions.list();
|
var shortcuts = RED.actions.list();
|
||||||
var missing = [];
|
|
||||||
shortcuts.forEach(function (sc) {
|
|
||||||
var id = sc.id.replace(/^.*:/,"");
|
|
||||||
var key = "action-list."+id;
|
|
||||||
var translation = RED._(key);
|
|
||||||
|
|
||||||
if (translation !== key) {
|
|
||||||
sc.translation = translation;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
missing.push(id);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// console.log("; missing:", missing);
|
|
||||||
|
|
||||||
shortcuts.sort(function(A,B) {
|
shortcuts.sort(function(A,B) {
|
||||||
var Aid = A.translation ? A.translation : A.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase();
|
var Akey = A.label;
|
||||||
var Bid = B.translation ? B.translation : B.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase();
|
var Bkey = B.label;
|
||||||
return Aid.localeCompare(Bid);
|
return Akey.localeCompare(Bkey);
|
||||||
});
|
});
|
||||||
knownShortcuts = new Set();
|
knownShortcuts = new Set();
|
||||||
shortcuts.forEach(function(s) {
|
shortcuts.forEach(function(s) {
|
||||||
|
Loading…
Reference in New Issue
Block a user