Bandcamp Keyboard Play/Pause

Allows you to pause and resume playback with the Space bar and Pause keys.

  1. // ==UserScript==
  2. // @name Bandcamp Keyboard Play/Pause
  3. // @version 2.4
  4. // @author raina
  5. // @namespace raina
  6. // @description Allows you to pause and resume playback with the Space bar and Pause keys.
  7. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAtBAMAAADMwS+UAAAAMFBMVEVNTU3///8tLS3Q0NDT09P6+vr+/v75+fnS0tL9/f38/Pz7+/vR0dHPz8+QkJD4+PiM28Q0AAAAAXRSTlMAQObYZgAAAKJJREFUOMtjYHDBBhwYGFgEsQERBgZHrBKCBmRJiCWiCc7elohDYvdGiFFiaagSmTMnQiWmoUqAjMAukbUQn0QjWELskZKSkqAQkHgGMwooIZgoKK0Ek9CG+aMRTIvDJdRRJeThEvpE6qCtxMGhJWFIHwlgusISURAJnDoE4ankNaodWFI7TomLNJWApF1SJAg4l1nweygGKBRmYGAwxgYMGAAd3YaWDmVo4gAAAABJRU5ErkJggg==
  8. // @license http://www.gnu.org/licenses/gpl-3.0.txt
  9. // @include /^https?:\/\//
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. window.self === window.top && window.siteroot && "https://bandcamp.com" == window.siteroot && (function() {
  14. "use strict";
  15.  
  16. if (window.self === window.top) {
  17. var startTime = new Date().getTime();
  18. console.log("BCKP: \"Anything I can do here?\"");
  19.  
  20. var BCKP = function BCKP(startTime) {
  21. this.startTime = startTime;
  22. this.init = function() {
  23. var message = "BCKP: ";
  24. if (typeof window.siteroot !== "undefined" && window.siteroot === "https://bandcamp.com") {
  25. var pauseButton = document.getElementsByClassName('playbutton')[0];
  26. var pauseToggle;
  27.  
  28. var initToggle = function() {
  29. pauseToggle = document.createEvent("MouseEvents");
  30. pauseToggle.initEvent("click", false, false);
  31. };
  32.  
  33. initToggle();
  34.  
  35. if (pauseButton && pauseToggle) {
  36. window.addEventListener("keydown", function(e) {
  37. if ( // Catch pressed key
  38. (e.keyCode === 32 && 0 > ["INPUT", "TEXTAREA", "SELECT"].indexOf(document.activeElement.tagName)) || // Space bar when a control isn't active
  39. e.keyCode === 19 || // Pause
  40. false) {
  41. e.preventDefault(); // Cancel whatever default action the key might have
  42. pauseButton.dispatchEvent(pauseToggle); // Simulate a click on the Play/Pause button
  43. initToggle(); // Chrome seems to require redefinition of the simulated event for it to work more than once
  44. return false;
  45. }
  46. }, false);
  47. }
  48. message += "Initialized";
  49. } else {
  50. message += "Exited";
  51. }
  52. message += " in " + (new Date().getTime() - this.startTime) / 1000 + " seconds.";
  53. console.log(message);
  54. };
  55. };
  56.  
  57. var inject = function(fn, startTime) {
  58. var script = document.createElement('script');
  59. script.type = "text/javascript";
  60. script.textContent = fn.toString() + '\nnew BCKP(' + startTime +').init();';
  61. document.body.appendChild(script);
  62. };
  63.  
  64. var init = function(startTime) {
  65. if (typeof window.siteroot !== "undefined" && window.siteroot === "http://bandcamp.com") {
  66. new BCKP(startTime).init();
  67. } else {
  68. inject(BCKP, startTime);
  69. }
  70. };
  71. window.addEventListener('load', init(startTime), false);
  72. }
  73.  
  74. }());