Greasy Fork is available in English.

Google Calendar Sidebarizer

Hides everything but the calendar portion of the UI.

// ==UserScript==
// @name       Google Calendar Sidebarizer
// @namespace  http://www.arthaey.com
// @version    1.0
// @description  Hides everything but the calendar portion of the UI.
// @match      http://www.google.com/calendar/*
// @match      https://www.google.com/calendar/*
// @match      http://calendar.google.com/*
// @match      https://calendar.google.com/*
//
// Backed up from http://userscripts.org/scripts/review/177182
// Last updated on 2013-12-04
// ==/UserScript==

// Google-controlled element IDs and CSS classes, subject to change without notice. :(
var ELEMENTS = {
    calendarContainer: { id: "mainbody" },
    calendar: { id: "scrolltimedeventswk" },
    extra: { id: "bdata" },
    oneBar: { id: "onegoogbar" },
    sideNav: { id: "nav" },
    topNav: { id: "vr-nav" },
    viewMenuContainer: { id: "topRightNavigation" } /* IE ಠ_ಠ */
};
var VIEW_OPTION_CLASS_NAME = "goog-imageless-button-collapse-right";

/******************************************************************************
 * SIDEBARIZE FUNCTIONS
 ******************************************************************************/

function sidebarize() {
    // Hide everything but the calendar itself.
    hideElement(ELEMENTS.oneBar);
    hideElement(ELEMENTS.extra);
    hideElement(ELEMENTS.sideNav);
    hideElement(ELEMENTS.topNav);
    
    // Show sidebarize links.
    showElement(ELEMENTS.actionsContainer);
    
    // Remove unwanted styles.
    var calendarContainer = ELEMENTS.calendarContainer;
    calendarContainer.originalMarginLeft = calendarContainer.node.style.marginLeft;
    calendarContainer.node.style.marginLeft = "0";
}

function unsidebarize() {
    // Hide sidebarize links
    hideElement(ELEMENTS.actionsContainer);
    
    // Show hidden elements.
    showElement(ELEMENTS.oneBar);
    showElement(ELEMENTS.extra);
    showElement(ELEMENTS.sideNav);
    showElement(ELEMENTS.topNav);
    
    // Restore original styles.
    var calendarContainer = ELEMENTS.calendarContainer;
    calendarContainer.node.style.marginLeft = calendarContainer.originalMarginLeft;
    ELEMENTS.calendar.node.style.overflowY = "scroll";
}

function addSidebarizeOption() {
    // Find the "Agenda" option, to copy.
    var viewMenu = ELEMENTS.viewMenuContainer.node.childNodes[0];
    if (!viewMenu) return;    
    var agendaOption = viewMenu.childNodes[5];
    if (!agendaOption) return;
    
    // Create "Sidebarize" option, copied from "Agenda".
    var sidebarizeOption = agendaOption.cloneNode(true);
    var optionText = sidebarizeOption.childNodes[0].childNodes[0].childNodes[0].childNodes[1]; // So ugly...
    if (!optionText) return;
    optionText.innerHTML = "Sidebarize";
    sidebarizeOption.onclick = sidebarize;
    
    // Update styles and add options to UI.
    agendaOption.className += " " + VIEW_OPTION_CLASS_NAME;
    viewMenu.appendChild(sidebarizeOption);
    addLinkBelowCalendar("Unsidebarize", unsidebarize);
    addLinkBelowCalendar("Toggle scrollbar", toggleScrollbar);
    addLinkBelowCalendar("Remove these links", hideActions);
}

function toggleScrollbar() {
    var cal = ELEMENTS.calendar.node;
    cal.style.overflowY = (cal.style.overflowY == "hidden") ? "scroll" : "hidden";
}

function hideActions() {
    if (confirm("If you remove these links, you will have to refresh the page to see them again.")) {
        hideElement(ELEMENTS.actionsContainer);
    }
}

/******************************************************************************
 * HELPER FUNCTIONS
 ******************************************************************************/

function hideElement(elementObj) {
    elementObj.node.style.display = "none";
}

function showElement(elementObj) {
    elementObj.node.style.display = "block";
}

function addLinkBelowCalendar(text, func) {
    var link = document.createElement("a");
    link.href = "#";
    link.innerHTML = text;
    link.onclick = func;
    link.style.paddingRight = "1em";
    
    if (!ELEMENTS.actionsContainer) {
        var div = document.createElement("div");        
        ELEMENTS.actionsContainer = {
            id: "sidebarizer-actions-container",
            node: div /* IE ಠ_ಠ */
        };
      ELEMENTS.calendarContainer.node.appendChild(div);
        hideElement(ELEMENTS.actionsContainer);
    }
    ELEMENTS.actionsContainer.node.appendChild(link);
}

function findElements() {
    var foundAllElements = true;
    for (var elementKey in ELEMENTS) {
        var element = ELEMENTS[elementKey];
        element.node = document.getElementById(element.id);
        if (!element.node) {
            foundAllElements = false;
        }
    }
    return foundAllElements;
}

/******************************************************************************
 * ENTRY POINT
 ******************************************************************************/

// Wait 1 second; things in the One Bar have to load before the script will work.
setTimeout(function() {
    if (findElements()) {
      addSidebarizeOption();
    }
}, 1000);