// ==UserScript==
// @name Facebook-Events-To-Top
// @namespace http://www.neoegm.com/
// @description Moves the events box to the top so you can see birthdays and events easily
// @include http://*.facebook.com/*
// @version 1.2.1 (For Firefox < 3.5) [DIAGNOSTICS VERSION]
// ==/UserScript==
/*************************************************************************************************
Facebook-Events-To-Top by NeoEGM
Copyright (C) 2009 Ezequiel Gaston Miravalles
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*************************************************************************************************/
/*************************************************************************************************
Software: Facebook-Events-To-Top by NeoEGM
Author: Ezequiel Gaston Miravalles
Website: http://www.neoegm.com/tech/firefox/scripts/move-facebook-events-box-to-top/
License: GNU GPL v3 (attached, read above)
*************************************************************************************************/
//http://phpjs.org/functions/get_html_translation_table:416
function get_html_translation_table (table, quote_style) {
// Returns the internal translation table used by htmlspecialchars and htmlentities
//
// version: 909.322
// discuss at: http://phpjs.org/functions/get_html_translation_table
// + original by: Philip Peterson
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: noname
// + bugfixed by: Alex
// + bugfixed by: Marco
// + bugfixed by: madipta
// + improved by: KELAN
// + improved by: Brett Zamir (http://brett-zamir.me)
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
// + input by: Frank Forte
// + bugfixed by: T.Wild
// + input by: Ratheous
// % note: It has been decided that we're not going to add global
// % note: dependencies to php.js, meaning the constants are not
// % note: real constants, but strings instead. Integers are also supported if someone
// % note: chooses to create the constants themselves.
// * example 1: get_html_translation_table('HTML_SPECIALCHARS');
// * returns 1: {'"': '"', '&': '&', '<': '<', '>': '>'}
var entities = {}, hash_map = {}, decimal = 0, symbol = '';
var constMappingTable = {}, constMappingQuoteStyle = {};
var useTable = {}, useQuoteStyle = {};
// Translate arguments
constMappingTable[0] = 'HTML_SPECIALCHARS';
constMappingTable[1] = 'HTML_ENTITIES';
constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
constMappingQuoteStyle[2] = 'ENT_COMPAT';
constMappingQuoteStyle[3] = 'ENT_QUOTES';
useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
throw new Error("Table: "+useTable+' not supported');
// return false;
}
entities['38'] = '&';
if (useTable === 'HTML_ENTITIES') {
entities['160'] = ' ';
entities['161'] = '¡';
entities['162'] = '¢';
entities['163'] = '£';
entities['164'] = '¤';
entities['165'] = '¥';
entities['166'] = '¦';
entities['167'] = '§';
entities['168'] = '¨';
entities['169'] = '©';
entities['170'] = 'ª';
entities['171'] = '«';
entities['172'] = '¬';
entities['173'] = '';
entities['174'] = '®';
entities['175'] = '¯';
entities['176'] = '°';
entities['177'] = '±';
entities['178'] = '²';
entities['179'] = '³';
entities['180'] = '´';
entities['181'] = 'µ';
entities['182'] = '¶';
entities['183'] = '·';
entities['184'] = '¸';
entities['185'] = '¹';
entities['186'] = 'º';
entities['187'] = '»';
entities['188'] = '¼';
entities['189'] = '½';
entities['190'] = '¾';
entities['191'] = '¿';
entities['192'] = 'À';
entities['193'] = 'Á';
entities['194'] = 'Â';
entities['195'] = 'Ã';
entities['196'] = 'Ä';
entities['197'] = 'Å';
entities['198'] = 'Æ';
entities['199'] = 'Ç';
entities['200'] = 'È';
entities['201'] = 'É';
entities['202'] = 'Ê';
entities['203'] = 'Ë';
entities['204'] = 'Ì';
entities['205'] = 'Í';
entities['206'] = 'Î';
entities['207'] = 'Ï';
entities['208'] = 'Ð';
entities['209'] = 'Ñ';
entities['210'] = 'Ò';
entities['211'] = 'Ó';
entities['212'] = 'Ô';
entities['213'] = 'Õ';
entities['214'] = 'Ö';
entities['215'] = '×';
entities['216'] = 'Ø';
entities['217'] = 'Ù';
entities['218'] = 'Ú';
entities['219'] = 'Û';
entities['220'] = 'Ü';
entities['221'] = 'Ý';
entities['222'] = 'Þ';
entities['223'] = 'ß';
entities['224'] = 'à';
entities['225'] = 'á';
entities['226'] = 'â';
entities['227'] = 'ã';
entities['228'] = 'ä';
entities['229'] = 'å';
entities['230'] = 'æ';
entities['231'] = 'ç';
entities['232'] = 'è';
entities['233'] = 'é';
entities['234'] = 'ê';
entities['235'] = 'ë';
entities['236'] = 'ì';
entities['237'] = 'í';
entities['238'] = 'î';
entities['239'] = 'ï';
entities['240'] = 'ð';
entities['241'] = 'ñ';
entities['242'] = 'ò';
entities['243'] = 'ó';
entities['244'] = 'ô';
entities['245'] = 'õ';
entities['246'] = 'ö';
entities['247'] = '÷';
entities['248'] = 'ø';
entities['249'] = 'ù';
entities['250'] = 'ú';
entities['251'] = 'û';
entities['252'] = 'ü';
entities['253'] = 'ý';
entities['254'] = 'þ';
entities['255'] = 'ÿ';
}
if (useQuoteStyle !== 'ENT_NOQUOTES') {
entities['34'] = '"';
}
if (useQuoteStyle === 'ENT_QUOTES') {
entities['39'] = ''';
}
entities['60'] = '<';
entities['62'] = '>';
// ascii decimals to real symbols
for (decimal in entities) {
symbol = String.fromCharCode(decimal);
hash_map[symbol] = entities[decimal];
}
return hash_map;
}
//http://phpjs.org/functions/htmlentities:425
function htmlentities (string, quote_style) {
// Convert all applicable characters to HTML entities
//
// version: 909.322
// discuss at: http://phpjs.org/functions/htmlentities
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: nobbler
// + tweaked by: Jack
// + bugfixed by: Onno Marsman
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
// + input by: Ratheous
// - depends on: get_html_translation_table
// * example 1: htmlentities('Kevin & van Zonneveld');
// * returns 1: 'Kevin & van Zonneveld'
// * example 2: htmlentities("foo'bar","ENT_QUOTES");
// * returns 2: 'foo'bar'
var hash_map = {}, symbol = '', tmp_str = '', entity = '';
tmp_str = string.toString();
if (false === (hash_map = get_html_translation_table('HTML_ENTITIES', quote_style))) {
return false;
}
hash_map["'"] = ''';
for (symbol in hash_map) {
entity = hash_map[symbol];
tmp_str = tmp_str.split(symbol).join(entity);
}
return tmp_str;
}
window.movefacebookeventstotop_diag_str = "";
function AddTrace(str)
{
window.movefacebookeventstotop_diag_str += str + "\n";
}
function ShowDiagnostics()
{
var diagbox = document.getElementById("movefacebookeventstotop_diag");
if (diagbox)
{
diagbox.innerHTML = window.movefacebookeventstotop_diag_str;
}
else
{
var title = "MOVE FACEBOOK EVENTS TO TOP BY NEOEGM [DIAGNOSTICS]\n";
window.movefacebookeventstotop_diag_str = title + window.movefacebookeventstotop_diag_str;
window.movefacebookeventstotop_diag_str += "\n\n-------- Page dump --------\n";
window.movefacebookeventstotop_diag_str += htmlentities(document.body.innerHTML);
window.movefacebookeventstotop_diag_str += "\n-------- End of page dump --------\n\n";
document.body.innerHTML = "
" + document.body.innerHTML;
}
}
var eventadded = false;
function MoveEventsToTop()
{
AddTrace("\nLocation: " + window.location.href + "\n");
AddTrace("MoveEventsToTop event");
if (!eventadded)
{
eventadded = true;
window.addEventListener("DOMFrameContentLoaded", MoveEventsToTop, false);
}
var sidebar = document.getElementById("rightCol");
if (sidebar)
{
AddTrace("Sidebar found");
var eventbox = document.getElementById("pagelet_eventbox");
var reqbox = document.getElementById("pagelet_reqbox");
var nextreqbox = null;
if (reqbox)
{
AddTrace("ReqBox found");
nextreqbox = reqbox.nextSibling;
}
if (eventbox && nextreqbox) //New way
{
AddTrace("Running new way");
sidebar.insertBefore(eventbox, nextreqbox);
}
else //Old way
{
AddTrace("Running old way");
var events = -1;
for (var i = sidebar.childNodes.length - 1; i >= 0; i--)
{
AddTrace("Checking node " + i);
if (sidebar.childNodes[i].nodeType == 1)
{
AddTrace("\tNode " + i + " valid");
if (sidebar.childNodes[i].innerHTML.indexOf("sx_icons_event") >= 0 || sidebar.childNodes[i].innerHTML.indexOf("sx_icons_gift") >= 0)
{
events = i; //Events found at i
AddTrace("\t\tEvents found at " + i);
break;
}
}
}
if (events != -1)
{
AddTrace("Moving events");
sidebar.insertBefore(sidebar.childNodes[i], sidebar.childNodes[1]);
}
else
AddTrace("Events not found");
}
}
else
AddTrace("Sidebar not found");
ShowDiagnostics();
}
MoveEventsToTop();