Colorize GCal:monthly timed events

Colored background for Google Calendar timed events in month view

// ==UserScript==
// @name          Colorize GCal:monthly timed events
// @description   Colored background for Google Calendar timed events in month view
// @include       https://calendar.google.com/*
// @version       1.1
// @author        wOxxOm
// @namespace     wOxxOm.scripts
// @license       MIT License
// @run-at        document-start
// @require       https://greasyfork.org/scripts/12228/code/setMutationHandler.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/tinycolor/1.4.1/tinycolor.min.js
// ==/UserScript==

setMutationHandler(document,
	'span.goog-inline-block[style*="background-color:"],' +
	'.st-c-pos .rb-n[style*="background-color:"],' +
	'.st-c-pos .te[style*="color:"]',
function(nodes) {
	nodes.forEach(function(n) {
		var bg = n.style.backgroundColor;
		var fg = n.style.color;
		n.style.color = n.style.backgroundColor = '';

		var appointment = n.className.indexOf('goog-inline-block')>=0 ? n.parentNode : n;
		var color = appointment.style.backgroundColor = bg || fg;
		var isDark = tinycolor(color).getBrightness() < 150; // brightness range is 0-255
		appointment.style.color = isDark ? 'white' : 'black';

		if (isDark && n.classList.contains('rb-n')) {
			n.style.fontWeight = 'bold';
			var v = n.querySelector('.rem-ic'); if (v) v.style.filter = 'invert(1)';
			v = n.querySelector('.rb-ni'); if (v) v.style.color = 'white';
		}

		if (n.style.border)
			n.style.border = '';
	});
	return true;
});