Submit to Tab with Ctrl + Click / Ctrl + Enter / Middle click

Sets form's target to `_blank` when submitted while Control key is being pressed. Allow submit with middle mouse button.

  1. // ==UserScript==
  2. // @name Submit to Tab with Ctrl + Click / Ctrl + Enter / Middle click
  3. // @description Sets form's target to `_blank` when submitted while Control key is being pressed. Allow submit with middle mouse button.
  4. // @namespace http://eldar.cz/myf/
  5. // @license CC0
  6. // @version 2.2.0
  7. // @grant none
  8. // @include *
  9. // ==/UserScript==
  10. // https://greasyfork.org/en/scripts/9954/versions/new
  11. const controlKey = "Control";
  12. const middleMouseButton = 4;
  13. let isControlPressed = false;
  14. let formElement = null;
  15. let pressedButton = null;
  16. let originalTarget = '';
  17. window.addEventListener( 'submit', onSubmit, true );
  18. window.addEventListener( 'keydown', onKeydown, true );
  19. window.addEventListener( 'keyup', onKeyup, true );
  20. window.addEventListener( 'mousedown', onMousedown, true );
  21. window.addEventListener( 'mouseup', onMouseup, true );
  22. window.addEventListener( 'blur', onBlur, false );
  23. function onSubmit ( event ) {
  24. if ( isControlPressed === true && formElement === null ) {
  25. formElement = event.target;
  26. originalTarget = formElement.target;
  27. formElement.target = '_blank';
  28. }
  29. }
  30. function onKeydown ( event ) {
  31. if ( event.key === controlKey ) {
  32. isControlPressed = true;
  33. }
  34. }
  35. function onKeyup ( event ) {
  36. if ( event.key === controlKey ) {
  37. isControlPressed = false;
  38. if ( formElement !== null ) {
  39. formElement.target = originalTarget;
  40. formElement = null;
  41. originalTarget = '';
  42. }
  43. }
  44. }
  45. function onMousedown ( event ) {
  46. if ( event.buttons === middleMouseButton ) {
  47. if ( event.target?.type === 'submit' ) {
  48. pressedButton = event.target;
  49. }
  50. }
  51. }
  52. function onMouseup ( event ) {
  53. if ( pressedButton === event.target ) {
  54. let _origTarget = pressedButton.form.target;
  55. pressedButton.form.target = '_blank';
  56. pressedButton.form.dispatchEvent(
  57. new SubmitEvent("submit", { submitter: pressedButton })
  58. );
  59. pressedButton.form.target = _origTarget;
  60. }
  61. pressedButton = null;
  62. }
  63. function onBlur ( event ) {
  64. onKeyup( { key: controlKey } );
  65. }