Saturday, January 26, 2008

Firefox Greasemonkey Outlook Web Access Extension Part I

Other posts on OWAX: [ Part II | Part III ]

Stuck using Outlook Web Access to access your email via Firefox? Painful isn't it? Microsoft has seen fit to make sure many features are not available if you aren't using Internet Exploder. Take, for example, the case where your mailbox fills up and you need to clean out your trash -- hmmmm, no way to "Select All" so that you can at least delete messages a little faster. Thankfully Greasmonkey makes writing site specific extensions fairly painless. Here is my Outlook Web Access with my extension installed...look mom, Select All!



Grab the extension here. Source code shown below:

// ==UserScript==
// @name Outlook Web Access Extensions
// @namespace http://www2.hawaii.edu/~dburger
// @description Extensions to using the bastard child Outlook Web Access
// @include https://mail.camber.com/exchange/*
// ==/UserScript==
(
function() {
var tables = document.getElementsByTagName('table');
for (var i = 0; i < tables.length; i++) {
var table = tables[i];
if (table.className === 'trToolbar') {
var row = table.tBodies[0].rows[0];
var newCell = row.insertCell(row.cells.length - 1);
newCell.setAttribute('valign', 'middle');
newCell.setAttribute('nowrap', 'nowrap');
var font = document.createElement('font');
font.setAttribute('size', '2');
font.appendChild(document.createTextNode('Select All'));
var nobr = document.createElement('nobr');
nobr.appendChild(font);
var a = document.createElement('a');
a.href = 'javascript:void(0);';
a.addEventListener('click', function() {
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
var evt = document.createEvent('MouseEvents');
if (input.type == 'checkbox' &amp;&amp; !input.checked) {
// this won't fire the events to color the row
// input.checked = true;
// so dispatch as an event instead
evt.initEvent('click', true, false);
input.dispatchEvent(evt);
}
}
}, true);
a.appendChild(nobr);
newCell.appendChild(a);
}
}
}
)();
view raw gistfile1.js hosted with ❤ by GitHub