NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name festify.us vote script // @namespace https://einbaum.org/ // @version 1.0.2 // @description Unlimited votes on festify.us songs! More information in the GitHub repository that is linked below. // @author https://github.com/EinBaum // @include http://festify.us/* // @include https://festify.us/* // @supportURL https://github.com/EinBaum/festify.us-vote-script/issues // @homepageURL https://github.com/EinBaum/festify.us-vote-script // ==/UserScript== function FVS_AddVoteSingle(songName, songID) { 'use strict'; document.cookie = "connect.sid="; console.log("Voting: " + songName); var listID = window.location.pathname.split("&")[0].substring(1); var http = new XMLHttpRequest(); var url = "/api/parties/" + listID + "/queue"; var params = JSON.stringify({name: songName, spotifyID: songID}); http.open("POST", url, true); http.withCredentials = false; http.setRequestHeader("Content-type", "application/json;charset=UTF-8"); http.onreadystatechange = function() { if(http.readyState == 4 && http.status == 200) { console.log("Voted!"); } }; http.send(params); } function FVS_AddVoteMultiple(songName, songID, num) { 'use strict'; for (var i = 0; i < num; i++) { FVS_AddVoteSingle(songName, songID); } } function FVS_CreateButton(parent, songName, songID) { 'use strict'; var inp = document.createElement("input"); inp.value = "1"; inp.setAttribute("style", "position: absolute; z-index: 999; width: 70px; margin-left: 410px; margin-top: -65px; padding: 0"); parent.appendChild(inp); var btn = document.createElement("div"); btn.setAttribute("style", "position: absolute; z-index: 999; margin-left: 500px; margin-top: -55px; width: 30px; font-size: 30px"); btn.onclick = function() { FVS_AddVoteMultiple(songName, songID, inp.value); }; var btnicon = document.createElement("i"); btnicon.className = "fa fa-tree"; btn.appendChild(btnicon); parent.appendChild(btn); } var FVS_regex = /^([^\(]*) \((.*?)\)$/; function FVS_CheckElement(node) { 'use strict'; if (node && node.tagName && node.tagName.toLowerCase() == "div") { var label = node.getAttribute("analytics-label"); if (label) { var result = FVS_regex.exec(label); FVS_CreateButton(node.parentElement, result[2], result[1]); } } } (function() { 'use strict'; var config = { childList: true, subtree: true }; var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { for (var i = 0; i < mutation.addedNodes.length; i++) { FVS_CheckElement(mutation.addedNodes[i]); } }); }); observer.observe(document.body, config); })();