Skip to content

Instantly share code, notes, and snippets.

@prehensile
Last active September 22, 2024 14:04
Show Gist options
  • Save prehensile/4213c3877a5f3022039be16fad3aa701 to your computer and use it in GitHub Desktop.
Save prehensile/4213c3877a5f3022039be16fad3aa701 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name FOOM! Ticker
// @namespace http://tampermonkey.net/
// @version 2024-09-17
// @description Insert a news ticker over a Google Slides presentation
// @author [email protected]
// @match https://docs.google.com/presentation/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @run-at document-start
// @resource IMPORTED_CSS https://fresh-half-ogre.glitch.me/ticker.css
// @grant GM_getResourceText
// @grant GM_addStyle
// ==/UserScript==
function createHtml( html ){
return window.trustedTypes.defaultPolicy.createHTML( html );
}
function createPolicy(){
if (window.trustedTypes && window.trustedTypes.createPolicy){
window.trustedTypes.createPolicy('default', {
createHTML: (string, sink) => string,
createScript: string => string,
});
}
}
function insertTicker(){
var tickerUrl = "https://fresh-half-ogre.glitch.me/";
var divTicker = document.createElement("div");
var html =
'<div id="divTicker" style="visibility:hidden">'+
'<iframe id="frameTicker" frameBorder="0" src="'+ tickerUrl +'"' +
'title="foom iframe" width="100%"></iframe>' +
'</div>';
console.log( "FOOM!", html );
divTicker.innerHTML = createHtml( html );
document.body.appendChild( divTicker );
}
function toggleTicker(){
console.log( "toggleTicker" );
const divTicker = document.getElementById("divTicker");
if( !divTicker ) return;
const v = window.getComputedStyle(divTicker).visibility;
if (v === 'hidden') {
divTicker.style.visibility = 'visible';
} else {
divTicker.style.visibility = 'hidden';
}
}
function onKeyPress( e ){
console.log( e );
if (event.key === 't' || event.key === 'T') {
toggleTicker();
}
}
function onPageLoad( e ){
insertTicker();
}
function injectListeners(){
const injectedCode = function() {
document.addEventListener('keydown', (event)=>{
if (event.key === 't' || event.key === 'T') {
const divTicker = document.getElementById("divTicker");
if( !divTicker ) return;
const v = window.getComputedStyle(divTicker).visibility;
if (v === 'hidden') {
divTicker.style.visibility = 'visible';
} else {
divTicker.style.visibility = 'hidden';
}
}
}, true);
};
const script = document.createElement('script');
script.textContent = window.trustedTypes.defaultPolicy.createHTML(
'(' + injectedCode + ')();'
);
const observer = new MutationObserver(function(mutations) {
if (document.body) {
document.body.appendChild( script );
observer.disconnect();
}
});
observer.observe(document.documentElement, {childList: true, subtree: true});
}
function init(){
console.log("FOOM! Ticker init");
createPolicy();
//window.addEventListener('keypress', (e)=>{onKeyPress(e)}, true );
injectListeners();
const my_css = GM_getResourceText("IMPORTED_CSS");
GM_addStyle(my_css);
window.addEventListener('load', (e)=>{onPageLoad(e)}, false);
}
(function() {
'use strict';
init();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment