186 lines
5.9 KiB
JavaScript
186 lines
5.9 KiB
JavaScript
// ==UserScript==
|
|
// @name Kioskify Meetup.com Events
|
|
// @version 3
|
|
// @grant none
|
|
// @run-at document-start
|
|
// @match https://*.meetup.com/*events*
|
|
// @license GNU General Public License v3.0 only
|
|
// @supportURL https://gitlab.com/zyphlar/kioskify-meetup-events
|
|
// @contributionURL https://gitlab.com/zyphlar/kioskify-meetup-events
|
|
// @compatible firefox
|
|
// @compatible chrome
|
|
// @namespace https://greasyfork.org/users/236588
|
|
// @description Want to show Meetup.com events on a screen 24/7? Use this script to make it look better. NOTE: if the script doesn't load, try going directly to the events url instead of browsing to it.
|
|
// ==/UserScript==
|
|
|
|
// Copyright (C) 2019 zyphlar
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
"use strict";
|
|
|
|
function simplifyMeetup(){
|
|
console.log("Simplifying your life...");
|
|
|
|
//hideElementsByClassName("groupHomeHeader"); // large group name and image at top
|
|
hideElementsByClassName("stripe"); // all full-width "chrome" on page
|
|
hideElementsByClassName("sticky-ontheside"); // upcoming/past/drafts widget
|
|
hideElementsByClassName("relatedEvents"); // other events at far bottom
|
|
|
|
// add padding to top for scroll
|
|
try {
|
|
var padding = document.createElement("p");
|
|
padding.style = "margin:400px";
|
|
document.getElementsByClassName("eventList-list")[0].prepend(padding);
|
|
} catch (e) { console.log(e); }
|
|
|
|
// add banner to header
|
|
try {
|
|
document.getElementsByClassName("navItem")[0].innerHTML += '<h3 style="display: inline-block;margin-left: 8em;font-size: 1.5em;vertical-align: top;">Upcoming Events</h3>';
|
|
} catch (e) { console.log(e); }
|
|
|
|
// make header fixed
|
|
try {
|
|
document.getElementById("globalNav").style = "position: fixed; width: 100%;";
|
|
} catch (e) { console.log(e); }
|
|
|
|
// add fixed footer
|
|
try {
|
|
var footer = document.createElement("div");
|
|
footer.style = "position:fixed; bottom: 0; width: 100%; background: white; padding: 1em; border-top: 2px solid rgba(46,62,72,.12); text-align: center;";
|
|
footer.innerHTML = "See details at <span style='color: #00a2c7;font-weight: 600;'>ChimeraArts.org</span> or <span style='color: #00a2c7;font-weight: 600;'>Meetup.com</span>!";
|
|
document.getElementsByTagName("body")[0].append(footer);
|
|
} catch (e) { console.log(e); }
|
|
}
|
|
|
|
|
|
function hideElementById(id) {
|
|
var e = document.getElementById(id);
|
|
if (e) {
|
|
e.style = "display: none;";
|
|
}
|
|
}
|
|
|
|
function hideElementsByClassName(name) {
|
|
var e = document.getElementsByClassName(name);
|
|
for (var i=0;i<e.length;i++) {
|
|
e[i].style = "display: none;";
|
|
}
|
|
}
|
|
|
|
function hideElementsBySelector(selector) {
|
|
var f = document.querySelectorAll(selector);
|
|
for (var i=0;i<f.length;i++) {
|
|
f[i].style = "display: none;";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function scrollMeetup(){
|
|
var pixelsToScroll = document.documentElement.offsetHeight;
|
|
var pixelsPerSec = 100;
|
|
|
|
// go to bottom slowly
|
|
scrollToY(pixelsToScroll, pixelsPerSec, 'linearTween', function(){
|
|
// return to top quickly
|
|
scrollToY(0, 1000, 'linearTween', function(){
|
|
scrollMeetup(); // set up dat sweet infinite loop
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
window.requestAnimFrame = (function(){
|
|
return window.requestAnimationFrame ||
|
|
window.webkitRequestAnimationFrame ||
|
|
window.mozRequestAnimationFrame ||
|
|
function( callback ){
|
|
window.setTimeout(callback, 1000 / 60);
|
|
};
|
|
})();
|
|
|
|
function scrollToY(scrollTargetY, speed, easing, callback) {
|
|
// scrollTargetY: the target scrollY property of the window
|
|
// speed: time in pixels per second
|
|
// easing: easing equation to use
|
|
|
|
var scrollY = window.scrollY || document.documentElement.scrollTop,
|
|
scrollTargetY = scrollTargetY || 0,
|
|
speed = speed || 2000,
|
|
easing = easing || 'easeOutSine',
|
|
currentTime = 0;
|
|
|
|
// min time .1, max time 60 minutes
|
|
var time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, 60000));
|
|
|
|
// easing equations from https://github.com/danro/easing-js/blob/master/easing.js
|
|
var easingEquations = {
|
|
linearTween: function (pos) {
|
|
return pos;
|
|
},
|
|
easeOutSine: function (pos) {
|
|
return Math.sin(pos * (Math.PI / 2));
|
|
},
|
|
easeInOutSine: function (pos) {
|
|
return (-0.5 * (Math.cos(Math.PI * pos) - 1));
|
|
},
|
|
easeInOutQuint: function (pos) {
|
|
if ((pos /= 0.5) < 1) {
|
|
return 0.5 * Math.pow(pos, 5);
|
|
}
|
|
return 0.5 * (Math.pow((pos - 2), 5) + 2);
|
|
}
|
|
};
|
|
|
|
console.log('scroll begin');
|
|
|
|
// add animation loop
|
|
function tick() {
|
|
currentTime += 1 / 60;
|
|
|
|
var p = currentTime / time;
|
|
var t = easingEquations[easing](p);
|
|
|
|
if (p < 1) {
|
|
requestAnimFrame(tick);
|
|
|
|
window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t));
|
|
} else {
|
|
console.log('scroll done');
|
|
window.scrollTo(0, scrollTargetY);
|
|
callback();
|
|
}
|
|
}
|
|
|
|
// call it once to get started
|
|
tick();
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener("load", function(){
|
|
simplifyMeetup(); // clear extra stuff
|
|
document.scrollingElement.scrollTop = 0; // reset to top
|
|
scrollMeetup(); // begin scroll
|
|
});
|
|
|
|
//window.addEventListener("complete", simplifyMeetup);
|
|
|
|
setTimeout(function(){ location.reload(); }, 3600000); // reload page every hour
|
|
|
|
|
|
|