c3 Favorites

12/15/2019, 2:37:06 PM

  1. // ==UserScript==
  2. // @name c3 Favorites
  3. // @namespace Violentmonkey Scripts
  4. // @match https://fahrplan.events.ccc.de/*
  5. // @match https://programm.froscon.de/*
  6. // @grant none
  7. // @version 1.0
  8. // @author -
  9. // @description 12/15/2019, 2:37:06 PM
  10. // ==/UserScript==
  11.  
  12.  
  13. var links = document.getElementsByTagName("a");
  14. var event_links = [];
  15. window.faved_events = [];
  16.  
  17. var myRegexp = /^.*fahrplan\.events\.ccc\.de\/(.*events\/([0-9]*))\.html$/;
  18.  
  19. for(var i=0; i<links.length; i++) {
  20. var isEventlink = myRegexp.test(links[i].href);
  21. var isNoIcon = (links[i].querySelectorAll(".image.small").length == 0);
  22. if (isEventlink && isNoIcon){
  23. event_links.push(links[i]);
  24. }
  25. }
  26.  
  27. function insertAfter(newNode, referenceNode) {
  28. referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
  29. }
  30.  
  31. function save() {
  32. localStorage.setItem('faved_events', JSON.stringify(faved_events));
  33. }
  34.  
  35. function load() {
  36. if(localStorage.faved_events){
  37. var loaded_faved_events = localStorage.getItem('faved_events');
  38. faved_events = JSON.parse(loaded_faved_events);
  39. }
  40. }
  41.  
  42. load();
  43.  
  44.  
  45. window.favour_fav = function(eventId, el) {
  46. var index = faved_events.indexOf(eventId); //check state before load. this way we don't toggle state, but change it to the opposite of what's currently reflected in the UI
  47. //SMELL: only helps the first element that's wrong XD
  48. load();
  49. if ( index != -1){
  50. // console.log("un-faving "+eventId);
  51. faved_events.splice(index,1);
  52. el.setAttribute("class", "favor_favable");
  53. }else{
  54. // console.log("faving "+eventId);
  55. faved_events.push(eventId);
  56. el.setAttribute("class", "favor_faved");
  57. }
  58. save();
  59. return;
  60. }
  61.  
  62. function makeFavable(originalElement, eventId){
  63. var el = document.createElement("span");
  64. el.innerHTML = " ";
  65. el.setAttribute("eventID", eventId);
  66. var index = faved_events.indexOf(eventId);
  67. if ( index != -1){
  68. el.setAttribute("class", "favor_faved");
  69. }else{
  70. el.setAttribute("class", "favor_favable");
  71. }
  72. el.setAttribute("onclick", "favour_fav('"+eventId+"',this)");
  73. insertAfter(el, originalElement);
  74. }
  75.  
  76.  
  77. for(var i=0; i<event_links.length; i++) {
  78. var eventLink = event_links[i].href;
  79. var match = myRegexp.exec(eventLink);
  80. var eventId = match[2];
  81. makeFavable(event_links[i], eventId);
  82. }
  83.  
  84. if(myRegexp.test(window.location.href)){
  85. var match = myRegexp.exec(window.location.href);
  86. var eventId = match[2];
  87. el = document.getElementsByTagName("h2")[0];
  88. makeFavable(el, eventId);
  89. }
  90.  
  91.  
  92.