WME Keyboard Shortcuts

Adds Keyboard Shortcuts to WME

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/16071/628856/WME%20Keyboard%20Shortcuts.js

  1. // ==UserScript==
  2. // @name WME Keyboard Shortcuts
  3. // @namespace https://greasyfork.org/en/users/5920-rickzabel
  4. // @description Adds Keyboard Shortcuts to WME
  5. // @include https://www.waze.com/editor/*
  6. // @include https://www.waze.com/*/editor/*
  7. // @include https://editor-beta.waze.com/*
  8. // @version 0.0.8
  9. // ==/UserScript==
  10.  
  11. //setup keyboard shortcut's header and add a keyboard shortcuts
  12. function WMEKSRegisterKeyboardShortcut(ScriptName, ShortcutsHeader, NewShortcut, ShortcutDescription, FunctionToCall, ShortcutKeysObj) {
  13. // Figure out what language we are using
  14. var language = I18n.currentLocale();
  15. //check for and add keyboard shourt group to WME
  16. try {
  17. var x = I18n.translations[language].keyboard_shortcuts.groups[ScriptName].members.length;
  18. } catch (e) {
  19. //setup keyboard shortcut's header
  20. W.accelerators.Groups[ScriptName] = []; //setup your shortcut group
  21. W.accelerators.Groups[ScriptName].members = []; //set up the members of your group
  22. I18n.translations[language].keyboard_shortcuts.groups[ScriptName] = []; //setup the shortcuts text
  23. I18n.translations[language].keyboard_shortcuts.groups[ScriptName].description = ShortcutsHeader; //Scripts header
  24. I18n.translations[language].keyboard_shortcuts.groups[ScriptName].members = []; //setup the shortcuts text
  25. }
  26. //check if the function we plan on calling exists
  27. if (FunctionToCall && (typeof FunctionToCall == "function")) {
  28. I18n.translations[language].keyboard_shortcuts.groups[ScriptName].members[NewShortcut] = ShortcutDescription; //shortcut's text
  29. W.accelerators.addAction(NewShortcut, {
  30. group: ScriptName
  31. }); //add shortcut one to the group
  32. //clear the short cut other wise the previous shortcut will be reset MWE seems to keep it stored
  33. var ClearShortcut = '-1';
  34. var ShortcutRegisterObj = {};
  35. ShortcutRegisterObj[ClearShortcut] = NewShortcut;
  36. W.accelerators._registerShortcuts(ShortcutRegisterObj);
  37. if (ShortcutKeysObj !== null) {
  38. //add the new shortcut
  39. ShortcutRegisterObj = {};
  40. ShortcutRegisterObj[ShortcutKeysObj] = NewShortcut;
  41. W.accelerators._registerShortcuts(ShortcutRegisterObj);
  42. }
  43. //listen for the shortcut to happen and run a function
  44. W.accelerators.events.register(NewShortcut, null, function() {
  45. FunctionToCall();
  46. });
  47. } else {
  48. alert('The function ' + FunctionToCall + ' has not been declared');
  49. }
  50.  
  51. }
  52. //if saved load and set the shortcuts
  53. function WMEKSLoadKeyboardShortcuts(ScriptName) {
  54. if (localStorage[ScriptName + 'KBS']) {
  55. var LoadedKBS = JSON.parse(localStorage[ScriptName + 'KBS']); //JSON.parse(localStorage['WMEAwesomeKBS']);
  56. for (var i = 0; i < LoadedKBS.length; i++) {
  57. W.accelerators._registerShortcuts(LoadedKBS[i]);
  58. }
  59. }
  60. }
  61.  
  62. function WMEKSSaveKeyboardShortcuts(ScriptName) {
  63. //return function() {
  64. var TempToSave = [];
  65. for (var name in W.accelerators.Actions) {
  66. //console.log(name);
  67. var TempKeys = "";
  68. if (W.accelerators.Actions[name].group == ScriptName) {
  69. if (W.accelerators.Actions[name].shortcut) {
  70. if (W.accelerators.Actions[name].shortcut.altKey === true) {
  71. TempKeys += 'A';
  72. }
  73. if (W.accelerators.Actions[name].shortcut.shiftKey === true) {
  74. TempKeys += 'S';
  75. }
  76. if (W.accelerators.Actions[name].shortcut.ctrlKey === true) {
  77. TempKeys += 'C';
  78. }
  79. if (TempKeys !== "") {
  80. TempKeys += '+';
  81. }
  82. if (W.accelerators.Actions[name].shortcut.keyCode) {
  83. TempKeys += W.accelerators.Actions[name].shortcut.keyCode;
  84. }
  85. } else {
  86. TempKeys = "-1";
  87. }
  88. var ShortcutRegisterObj = {};
  89. ShortcutRegisterObj[TempKeys] = W.accelerators.Actions[name].id;
  90. TempToSave[TempToSave.length] = ShortcutRegisterObj;
  91. }
  92. }
  93. localStorage[ScriptName + 'KBS'] = JSON.stringify(TempToSave);
  94. //}
  95. }
  96.  
  97. //example function show show the shortcuts have been pressed
  98. function WMEKSKyboardShortcutToCall() {
  99. alert('Awesome keyboard shortcut was pressed');
  100. }
  101.  
  102. ///////////////////////
  103. //// Example Usage ////
  104. ///////////////////////
  105.  
  106. /*
  107. //add two short cuts
  108. WMERegisterKeyboardShortcut('WMEAwesome', 'WME Awesome Script', 'AwesomeShortcut1', 'Awesome Descrption 1', WMEKyboardShortcutToCall, '-1'); //shortcut1
  109. WMERegisterKeyboardShortcut('WMEAwesome', 'WME Awesome Script', 'AwesomeShortcut2', 'Awesome Descrption 2', WMEKyboardShortcutToCall, '-1'); //shortcut1
  110. WMERegisterKeyboardShortcut('WMEAwesome', 'WME Awesome Script', 'AwesomeShortcut3', 'Awesome Descrption 3', WMEKyboardShortcutToCall, 'ASC+l'); //shortcut1
  111. //WMERegisterKeyboardShortcut('WMEAwesome','AwesomeShortcut2','Awesome Descrption 2',doesnotexist,'-1'); //fuction does not exist
  112.  
  113.  
  114. //load the saved shortcuts
  115. WMELoadKeyboardShortcuts('WMEAwesome');
  116.  
  117. //before unloading WME save the shortcuts
  118. window.addEventListener("beforeunload", function() {
  119. WMESaveKeyboardShortcuts('WMEAwesome');
  120. }, false);
  121.  
  122. //displays all of the shortcuts in the console
  123. //W.accelerators.Actions;
  124.  
  125. //saved shortcuts to console
  126. //JSON.parse(localStorage['WMEAwesomeKBS']);
  127.  
  128. //enjoy
  129.  
  130. */