There are 2 previous versions of this script.
// ==UserScript==
// @name Gmail HTML Signatures
// @description Automatically inserts HTML signatures into your Gmail messages based on which address you are sending from. (Replaced by Blank Canvas Gmail Signatures: http://blankcanvasweb.com/pages/id_9/n_gmail_signatures/)
// @namespace http://blankcanvasweb.com
// @include http://mail.google.com/*
// @include https://mail.google.com/*
// ==/UserScript==
//
// version 1.07 - Last updated January 30, 2008
// Author: Jerome Dane - Blank Canvas
// License: http://blankcanvasweb.com/pages/detail/id_43/n_license_&_eula/
// Latest Information: http://blankcanvasweb.com/pages/detail/id_9/n_gmail_signatures/
//
// --------------------------------------------------------------------------------------
// ---------- Do not edit below this line unless you really know what you are doing -----
// --------------------------------------------------------------------------------------
var version = '1.07';
var gmail = null;
var signatures = Array();
var emails = Array();
var select_from = null;
var msg_box = null;
var navbox = null;
var target_email = null;
var edit_sig_link = false;
var edit_sig_form = false;
var edit_sig_header = false;
var edit_sig_textarea = false;
var edit_sig_button = false;
var email_addresses = unescape(GM_getValue('email_addresses', ''));
var compose_retries = 2;
var module = null;
var module_node = null;
var module_header = null;
var module_footer = null;
var default_address_link = false;
var module_preview = null;
var default_address = unescape(GM_getValue('default_address', ''));
var installed_version = GM_getValue('version', '');
// make sure that the default gmail address is set
function set_default_address() {
var str = prompt("Gmail 2.0 Multiple HTML Signatures Setup\n\n\
If you have multiple email addresses set up in your gmail account, all you have to do is look for the 'Create Signature' link that appears on the 'Compose Mail' page. It is located to the right of the select box that allows you to choose which address you're sending from. \n\n\
If you only send mail from your gmail address and do not have any other addresses set up, fill in your gmail address below and then look for the 'Create Signature' link on the 'Compose Mail' page. It is located just under the 'To' field.");
if(str != null) {
if(!str.match(/@gmail.com$/)) {
alert('Your gmail address must end in "@gmail.com".');
set_default_address();
return false;
} else {
GM_setValue('default_address', str);
default_address = str;
try {
default_address_link.innerHTML = str
} catch(e) {}
load_signatures();
}
}
}
function load_signatures() {
emails = new Array();
signatures = new Array();
var list = unescape(GM_getValue('email_addresses', '')).split(/,/);
for(x in list) { // loop through signatures and set up arrays
if(list[x]) {
emails.push(list[x]);
signatures.push(unescape(GM_getValue(list[x], '')));
}
}
}
function edit_signature() {
create_edit_form();
edit_sig_button.value = 'Save Signature';
edit_sig_header.innerHTML = 'Edit Signature for ' + target_email;
edit_sig_link.innerHTML = 'Cancel';
edit_sig_link.onclick = close_edit_signature;
var sig = '';
for(x in emails) {
if(emails[x] == target_email) {
sig = signatures[x];
}
}
edit_sig_textarea.innerHTML = sig;
edit_sig_form.style.display = 'block';
edit_sig_button.onclick = save_signature;
edit_sig_textarea.focus();
}
function create_signature() {
create_edit_form();
edit_sig_header.innerHTML = 'Create Signature for ' + target_email;
edit_sig_button.value = 'Create Signature';
edit_sig_link.innerHTML = 'Cancel';
edit_sig_link.onclick = close_edit_signature;
edit_sig_form.style.display = 'block';
edit_sig_button.onclick = save_signature;
edit_sig_textarea.focus();
}
function create_edit_form() {
try {
edit_sig_form.parentNode.removeChild(edit_sig_form);
} catch(e) {}
// edit signature form
edit_sig_form = unsafeWindow.document.createElement('span');
edit_sig_form.style.display = 'block';
edit_sig_form.style.padding = '10px'
edit_sig_form.style.display = 'none';
select_from.parentNode.appendChild(edit_sig_form);
// edit_sig_header
edit_sig_header = unsafeWindow.document.createElement('div');
edit_sig_header.style.fontWeight = 'bold';
edit_sig_header.style.fontSize = '12px';
edit_sig_form.appendChild(edit_sig_header);
// textarea
edit_sig_textarea = unsafeWindow.document.createElement('textarea');
edit_sig_textarea.style.width = '600px';
edit_sig_textarea.style.height = '200px';
edit_sig_textarea.style.fontSize = '12px';
edit_sig_form.appendChild(edit_sig_textarea);
// button
edit_sig_button = unsafeWindow.document.createElement('input');
edit_sig_button.type = 'button';
edit_sig_button.style.fontSize = '12px';
edit_sig_button.style.marginLeft = '10px';
edit_sig_form.appendChild(edit_sig_button);
}
function save_signature() {
var ptrn = new RegExp(target_email);
if(!email_addresses.match(ptrn)) {
GM_setValue('email_addresses', email_addresses + ',' + target_email);
}
var sig = edit_sig_textarea.value;
sig = sig.replace(/^(\s|\n)*/, '');
sig = sig.replace(/(\s|\n)*$/, '');
GM_setValue(target_email, escape(sig));
load_signatures();
close_edit_signature();
draw_edit_sig_link();
sig_insert();
draw_module();
}
function close_edit_signature() {
edit_sig_form.parentNode.removeChild(edit_sig_form);
draw_edit_sig_link();
}
function draw_edit_sig_link() {
try {
edit_sig_link.parentNode.removeChild(edit_sig_link);
} catch(e) { }
edit_sig_link = unsafeWindow.document.createElement('span');
edit_sig_link.style.cursor = 'pointer';
edit_sig_link.style.margin = '0 0 0 1em;';
edit_sig_link.style.fontWeight = 'bold';
edit_sig_link.style.fontSize = '11px';
select_from.parentNode.appendChild(edit_sig_link);
var sig = '';
for(x in emails) {
if(emails[x] == target_email) {
sig = signatures[x];
}
}
if(sig) {
edit_sig_link.style.color = '#0000FF';
edit_sig_link.innerHTML = 'Edit Signature';
edit_sig_link.onclick = edit_signature;
} else {
edit_sig_link.innerHTML = 'Create Signature';
edit_sig_link.style.color = '#FF0000';
edit_sig_link.onclick = create_signature;
}
}
function sig_insert() {
var sig = '';
for(x in emails) {
if(emails[x] == target_email) {
sig = signatures[x];
}
}
if(msg_box) {
var signature = '<!--START_SIG-->' + sig + '<!--END_SIG-->';
var pattern = new RegExp('<\!--START_SIG-->(.|\n)*<\!--END_SIG-->');
// strip any existing sigs
if(msg_box.contentDocument.body.innerHTML.match(pattern)) {
//msg_box.contentDocument.body.innerHTML = signature + msg_box.contentDocument.body.innerHTML; // new signature
msg_box.contentDocument.body.innerHTML = msg_box.contentDocument.body.innerHTML.replace(pattern, signature);
} else {
msg_box.contentDocument.body.innerHTML = '<br><br>' + signature + msg_box.contentDocument.body.innerHTML; // new signature
}
}
draw_edit_sig_link();
}
function check_version() {
if(version != installed_version) {
clear_saved_sigs(); ///////////////////////////// comment out for future versions //////////////////////
GM_setValue('version', version);
installed_version = version;
}
}
function clear_saved_sigs() {
for(x in emails) {
if(emails[x] && emails[x] != 'undefined') {
GM_setValue(emails[x], '');
}
}
GM_setValue('email_addresses', '');
load_signatures();
}
function draw_module() {
module_node.innerHTML = '';
try {
module_header.parentNode.removeChild(module_header);
default_address_link.parentNode.removeChild(default_address_link);
} catch(e) {}
// list saved signatures
if(email_addresses) {
module_header = unsafeWindow.document.createElement('div');
module_header.style.fontSize = '11px';
module_header.innerHTML = '<div style="margin:.5em 0; font-weight:bold;">Saved Signatures:</div>';
module_header.style.marginBottom = '.5em';
var found = 0;
for(x in emails) {
if(signatures[x] && emails[x]) {
if(emails[x] == 'undefined') {
document.location = ''; // reload page in case of signature failure
}
module_header.innerHTML += '<div><a title="' + emails[x] + '">' + emails[x] + '</a></div>';
found++;
}
}
if(found) {
module_node.appendChild(module_header);
}
}
// default address link
default_address_link = unsafeWindow.document.createElement('a');
default_address_link.style.cursor = 'pointer';
default_address_link.style.color = '#0000FF';
default_address_link.style.display = 'block';
default_address_link.style.marginTop = '1em';
default_address_link.style.textAlign = 'center';
default_address_link.style.textDecoration = 'underline';
default_address_link.innerHTML = default_address ? default_address : 'Setup Instructions';
default_address_link.onclick = set_default_address;
module_node.appendChild(default_address_link);
// module footer
module_footer = unsafeWindow.document.createElement('div');
module_footer.innerHTML = ' \
<div align="right" style="color:#888; margin-top:1em;"> \
<!--<a href="http://blankcanvasweb.com/gmail2_html_sigs/" target="_blank">Check for Updates</a><br> -->\
<a href="http://blankcanvasweb.com/gmail2_html_sigs/" target="_blank" style="color:#666;">Gmail HTML Signatures</a><br> \
By <a href="http://blankcanvasweb.com/contact_us/" target="_blank" style="color:#666;">Jerome Dane</a> \
</div>';
module_node.appendChild(module_footer);
}
function from_select_change() {
target_email = select_from.value;
sig_insert();
close_edit_signature();
draw_edit_sig_link();
}
window.addEventListener('load', function() {
load_signatures();
check_version();
if (unsafeWindow.gmonkey) {
unsafeWindow.gmonkey.load('1.0', function(gmail) {
function setViewType() {
var str = '';
switch (gmail.getActiveViewType()) {
case 'tl': str = 'Threadlist'; break;
case 'cv': str = 'Conversation'; break;
case 'co': str = 'Compose'; break;
case 'ct': str = 'Contacts'; break;
case 's': str = 'Settings'; break;
default: str = 'Unknown';
}
// set up from onchange function
if(str == 'Compose') {
compose_context();
} else if(str == 'Conversation') {
reply_context();
reply_context_two();
}
}
function click_compose() {
var elems = gmail.getNavPaneElement().getElementsByTagName('span');
for(x in elems) {
if(elems[x].innerHTML.match(/Compose Mail/)) {
simulateClick(elems[x], 'click');
}
}
}
function select_from_listener() {
try {
var elems = gmail.getActiveViewElement().getElementsByTagName('select');
} catch(e) {
var elems = Array();
}
// look for select from
if(elems.length > 0) {
for(x in elems) {
if(elems[x].name == 'from') {
select_from = elems[x];
target_email = elems[x].value;
select_from.style.width = '400px';
select_from.onchange = from_select_change;
draw_edit_sig_link();
return true;
}
}
} else {
return false;
}
}
function message_box_listener() {
var elems = gmail.getActiveViewElement().getElementsByTagName('iframe');
if(elems.length > 0) {
msg_box = elems[0];
return true;
} else {
return false;
}
}
function compose_context() {
if(select_from_listener()) {
if(message_box_listener()) {
sig_insert();
} else {
setTimeout(compose_context, 500);
}
} else if(compose_retries) {
compose_retries--; // reduce the number of compose_retries left
setTimeout(click_compose, 200);
} else { // gmail account only has one account
single_address_context();
}
}
function reply_context() {
if(message_box_listener()) {
target_email = false;
var elems = gmail.getActiveViewElement().getElementsByTagName('input');
if(elems.length > 0) {
target_email = elems[0].value;
}
if(!target_email) {
target_email = default_address;
single_address_context();
}
sig_insert();
} else {
setTimeout(reply_context, 500);
}
}
function reply_context_two() {
if(!select_from_listener()) {
setTimeout(reply_context_two, 500);
}
}
function single_address_context() {
// get message box
message_box_listener();
// get to element
try {
var elems = gmail.getActiveViewElement().getElementsByTagName('textarea');
} catch(e) {
var elems = Array();
}
for(x in elems) {
if(elems[x].name == 'to') {
select_from = elems[x];
select_from.style.marginBottom = '.5em';
target_email = default_address;
sig_insert();
draw_edit_sig_link();
create_edit_form();
if(target_email == '') {
edit_sig_link.innerHTML = 'Set default gmail address';
edit_sig_link.onclick = function() {
set_default_address();
compose_context();
}
}
}
}
}
function simulateClick(node, eventType) {
var event = node.ownerDocument.createEvent("MouseEvents");
event.initMouseEvent(eventType,
true, // can bubble
true, // cancellable
node.ownerDocument.defaultView,
1, // clicks
50, 50, // screen coordinates
50, 50, // client coordinates
false, false, false, false, // control/alt/shift/meta
0, // button,
node);
node.dispatchEvent(event);
}
gmail.registerViewChangeCallback(setViewType);
setViewType();
// add module
var module = gmail.addNavModule('HTML Sigs v' + version);
module.getContentElement().style.fontSize = '11px';
module.getContentElement().style.overflow = 'hidden';
module.getContentElement().style.marginTop = '.2em';
module.getContentElement().style.padding = '5px';
module_node = module.getContentElement();
draw_module();
});
}
}, true);
// used for development purposes only
function dump(obj) {
var dump_text = '';
try {
for (x in obj) {
try {
var str = obj[x];
if(x == 'innerHTML') {
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/\t/g, ' ');
str = str.replace(/\n/g, '<br>\n');
}
dump_text += "<br><strong>" + x + "</strong> => " + str;
} catch(e) {
}
}
} catch(e) {
alert("Error dumping object");
}
var WindowDump = window.open('','','left=0,top=0,width=610,height=600,toolbar=0,scrollbars=1,status=0');
WindowDump.document.write(dump_text);
}
