您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Script that visually merges the same event on multiple Google Calendars into one event.
当前为
// ==UserScript== // @name Event Merge for Google Calendar™ (by @imightbeAmy) // @namespace gcal-multical-event-merge // @include https://www.google.com/calendar/* // @include http://www.google.com/calendar/* // @include https://calendar.google.com/* // @include http://calendar.google.com/* // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @version 1 // @grant none // @description Script that visually merges the same event on multiple Google Calendars into one event. // ==/UserScript== 'use strict'; const merge = () => { const stripesGradient = (colors) => { let gradient = "repeating-linear-gradient( 45deg,"; let pos = 0; colors.forEach(color => { gradient += color + " " + pos + "px,"; pos += 10; gradient += color + " " + pos + "px,"; }); gradient = gradient.slice(0, -1); gradient += ")"; return gradient; }; const grids = document.querySelectorAll("[role=\"main\"] [role=\"grid\"] > [role=\"presentation\"]"); const mainCalender = Array.from(grids).find(grid => typeof grid.dataset.isColumnViewContext === "undefined"); const eventSets = {}; const days = mainCalender.querySelectorAll("[role=\"gridcell\"]"); days.forEach((day, index) => { const events = Array.from(day.querySelectorAll("[role=\"button\"]")); events.forEach(event => { let eventKey = event.querySelector("div:nth-child(2)").textContent.replace(/\\s+/g,""); eventKey = index + eventKey; eventSets[eventKey] = eventSets[eventKey] || []; eventSets[eventKey].push(event); }); }); Object.values(eventSets) .filter(events => events.length > 1) .forEach(events => { const colors = events.map(event => event.style.backgroundColor || event.style.borderColor); const gradient = stripesGradient(colors); const eventToKeep = events.shift(); eventToKeep.style.backgroundImage = gradient; let width = Number(events[0].style.width.replace(/%/g, "")); if (!isNaN(width)) { width = width * (events.length + 1); width = Math.min(width, 100); eventToKeep.style.width = width + "%"; } events.forEach(event => { event.style.visibility = "hidden"; }); }); } chrome.runtime.sendMessage({}, function(response) { if (response.enabled) { $(document).ready(merge); } });