Piazza History Keybindings

Use left and right arrows to navigate Piazza post history

  1. // ==UserScript==
  2. // @name Piazza History Keybindings
  3. // @namespace https://piazza.com
  4. // @version 0.2
  5. // @description Use left and right arrows to navigate Piazza post history
  6. // @author David Harris, Yuto Takano
  7. // @match https://piazza.com/*
  8. // @grant none
  9. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
  10. // ==/UserScript==
  11.  
  12. // Avoid conflicts
  13. this.$ = this.jQuery = jQuery.noConflict(true);
  14.  
  15. function moveHistorySlider(increment) {
  16. // `P` is a Piazza internal variable
  17. // I discovered this while exploring their scripts
  18. var newVal = P.history_slider.slider.value[0] + increment;
  19. if(newVal < P.history_slider.slider.min) newVal = P.history_slider.slider.min;
  20. if(newVal > P.history_slider.slider.max) newVal = P.history_slider.slider.max;
  21. P.history_slider.slider.element.slider("setValue", newVal).trigger("slide");
  22. }
  23.  
  24. $(document).ready(function () {
  25. $(document).keydown(function(e) {
  26. var element;
  27. if(e.target) element = e.target;
  28. else if(e.srcElement) element = e.srcElement;
  29. if(element.nodeType == 3) element = element.parentNode;
  30.  
  31. if(element.tagName.toLowerCase() == "input" || element.tagName.toLowerCase() == "textarea") return;
  32. switch(e.which) {
  33. case 37:
  34. moveHistorySlider(-1);
  35. break;
  36. case 39:
  37. moveHistorySlider(1);
  38. break;
  39.  
  40. default: return;
  41. }
  42. e.preventDefault();
  43. });
  44. });
  45.