Gmail - Google Notebook Seamless Integration

By Michael A. Balazs Last update Oct 25, 2008 — Installed 1,191 times.

There are 2 previous versions of this script.

// ==UserScript==
// @name           Gmail - Google Notebook Seamless Integration
// @namespace      mail.google.com
// @include        http://mail.google.com/*
// @include        https://mail.google.com/*
// ==/UserScript==

//OBSOLETE: Please use <a href="http://userscripts.org/scripts/show/36028">Gmail - Seamless Integration (Google Calendar, Reader, Notebook, etc...) with Collapsible Inbox for Standard GMail and GMail Apps</a> instead.

var notebook_frame_height = "600px"; 
var place_before = "ATBOTTOM"; //Choice are (depending on what scripts you have): ATTOP, calendar, reader, notebook, ATBOTTOM;
 
function loadNotebook(gmail_notebook,gmail_notebookBox) 
{	
	gmail_notebook.getFooterElement().insertBefore(gmail_notebookBox.getElement(), gmail_notebook.getFooterElement().childNodes[0]);

	var notebookBox = parent.document.getElementById("canvas_frame").contentDocument.getElementById("notebookBox");
	notebookBox.id = "notebookBoxLoaded";

	notebookBox = notebookBox.parentNode.parentNode;
	notebookBox.style.textAlign = "left";
	
	for(var i = 0; i < 11; i++) notebookBox = notebookBox.parentNode;
	notebookBox.style.width = "100%";

	if(notebookURLDetector()) 
	{
		notebookBox.style.display = "none";
		return;
	}
	
	var notebookBoxIFrame = parent.document.getElementById("canvas_frame").contentDocument.getElementById("notebook_iframe");
	notebookBoxIFrame.src = 'null';
	notebookBoxIFrame.src = 'https://www.google.com/notebook';
	notebookBoxIFrame.style.height = notebook_frame_height;
	
	setTimeout(function(){moveCurrentBox(gmail_notebook,gmail_notebookBox);},500);
	
	gmail_inbox.registerViewChangeCallback(function(){moveCurrentBox(gmail_notebook,gmail_notebookBox);});		
};

function notebookURLDetector()
{
	if(document.URL.search("mail.google.com/a") != -1) return true;
	else return false; 
}

function moveCurrentBox(gmail,currentBox) 
{
	var place_before_id = "ATTOP";
	
	switch (place_before)
	{
		case 'calendar': place_before_id = "calendarBoxLoaded"; break;
		case 'reader': place_before_id = "readerBoxLoaded"; break;
		case 'notebook': place_before_id = "notebookBoxLoaded"; break;
		case 'ATBOTTOM': place_before_id = "ATBOTTOM"; break;
	}

	if(place_before_id.search("AT") == -1)
	{
		var placeBeforeBox = parent.document.getElementById("canvas_frame").contentDocument.getElementById(place_before_id); 
		if(placeBeforeBox  == null) {setTimeout(function(){moveReader(gmail,currentBox);},200); return;}
		
		for(var i = 0; i < 13; i++) placeBeforeBox = placeBeforeBox.parentNode;
		gmail.getFooterElement().insertBefore(currentBox.getElement(),placeBeforeBox);
	}
	else if(place_before_id == "ATTOP") gmail.getFooterElement().insertBefore(currentBox.getElement(),gmail.getFooterElement().childNodes[0]);		
	else if(place_before_id == "ATBOTTOM") gmail.getFooterElement().insertBefore(currentBox.getElement(),gmail.getFooterElement().childNodes[gmail.getFooterElement().childNodes.length-1]);				
}

function checkNotebookElementsLoaded(gmail_notebook,notebookBox) 
{
	var checkNotebookLoaded = parent.document.getElementById("canvas_frame").contentDocument.getElementById("notebookBoxLoaded"); 
	try {if(typeof gmail_notebook.getFooterElement() != 'undefined' && typeof notebookBox.getElement() != 'undefined' && checkNotebookLoaded == null) loadNotebook(gmail_notebook,notebookBox);}
	catch(err) {setTimeout(function(){checkNotebookElementsLoaded(gmail_notebook,notebookBox);},300);}
}

function checkGMailAPILoaded(gmail_notebook)
{
	try 
	{
		var notebookBox = gmail_notebook.addNavModule('<span id="notebookBox">Notebook</span>');
		notebookBox.setContent("<iframe id='notebook_iframe' style='border: medium none ; padding: 2px; display:block; width:100%;'></iframe>");
		
		checkNotebookElementsLoaded(gmail_notebook,notebookBox);	
	}
	catch(err) {setTimeout(function(){checkGMailAPILoaded(gmail_notebook);},200);}
}

function onNotebookPageLoaded()
{
	if(unsafeWindow.gmonkey) unsafeWindow.gmonkey.load('1.0', function(gmail_notebook) {checkGMailAPILoaded(gmail_notebook)});
}

window.addEventListener('load', onNotebookPageLoaded, true);