1
0
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:
Hiroyasu Nishiyama 2022-01-16 12:10:19 +09:00
parent 58f3a76da7
commit 6657b2629f
3 changed files with 82 additions and 93 deletions

View File

@ -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;
} }

View File

@ -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 {

View File

@ -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-?/,"&#8984;"):key; var formattedKey = isMac?key.replace(/ctrl-?/,"&#8984;"):key;
formattedKey = isMac?formattedKey.replace(/alt-?/,"&#8997;"):key; formattedKey = isMac?formattedKey.replace(/alt-?/,"&#8997;"):key;
formattedKey = formattedKey.replace(/shift-?/,"&#8679;") formattedKey = formattedKey.replace(/shift-?/,"&#8679;");
formattedKey = formattedKey.replace(/left/,"&#x2190;") formattedKey = formattedKey.replace(/left/,"&#x2190;");
formattedKey = formattedKey.replace(/up/,"&#x2191;") formattedKey = formattedKey.replace(/up/,"&#x2191;");
formattedKey = formattedKey.replace(/right/,"&#x2192;") formattedKey = formattedKey.replace(/right/,"&#x2192;");
formattedKey = formattedKey.replace(/down/,"&#x2193;") formattedKey = formattedKey.replace(/down/,"&#x2193;");
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) {