Facebook Odkazy (Shortcuts)

By vipper_cnx Last update Jun 5, 2009 — Installed 47 times. Daily Installs: 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

There are 1 previous version of this script.

// ==UserScript==
// @name           Facebook Odkazy (Shortcuts)
// @namespace      fbx
// @description    Plugin for Facebook, which allows to "status" bar to insert links.
// @include        http://*.facebook.com/* 
// @author         Pavel ViPPeR Pech
// ==/UserScript==
	
var links;
var currentLang = null;
var buttons = null;
var groupRE = new RegExp("^/group\.php\.*$", "gi");

var supportedLangs1 = new Array(2);
supportedLangs1[0] = "en";
supportedLangs1[1] = "cs";

var localizedStrings = new Array(2);
localizedStrings["en"] = new Array(2);
localizedStrings["en"]["Clear"] = "Clear shortcuts";
localizedStrings["en"]["ClearQuestion"] = "Are yeu sure?";
localizedStrings["en"]["AddShortcut"] = "Add shortcut";
localizedStrings["en"]["ShortcutAdded"] = "Shortcut added";
localizedStrings["en"]["ShortcutExists"] = "Shortcut exists";
localizedStrings["en"]["ShortcutNotAdded"] = "Shortcut not added. Allowed only for groups.";
localizedStrings["en"]["RemoveShortcut"] = "Remove shortcut";
localizedStrings["en"]["ShortcutRemoved"] = "Shortcut removed";
localizedStrings["en"]["ShortcutNotRemoved"] = "Shortcut not exists";
localizedStrings["cs"] = new Array(2);
localizedStrings["cs"]["Clear"] = "Vycistit odkazy";
localizedStrings["cs"]["ClearQuestion"] = "Ses si jisty?";
localizedStrings["cs"]["AddShortcut"] = "Pridat odkaz";
localizedStrings["cs"]["ShortcutAdded"] = "Odkaz pridan";
localizedStrings["cs"]["ShortcutExists"] = "Odkaz jiz existuje";
localizedStrings["cs"]["ShortcutNotAdded"] = "Odkaz nebyl pridan. Muzete pridat odkaz pouze pro skupiny.";
localizedStrings["cs"]["RemoveShortcut"] = "Odebrat odkaz";
localizedStrings["cs"]["ShortcutRemoved"] = "Odkaz odebran";
localizedStrings["cs"]["ShortcutNotRemoved"] = "Odkaz neexistuje";

var plusIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFQ1uSf5O8oK7P7O/1////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+PZ4gAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAADVJREFUGFdjYEQBDIwsSICJKC4DA1gLTDEKlwEMILLMzMwQLpAB4YIEwBQOLlgOIYuLy4QCANkyAgHYN2TKAAAAAElFTkSuQmCC";

var minusIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFQ1uSf5O8oK7P7O/1////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+PZ4gAAAAlwSFlzAAAOwwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAAChJREFUGFdjYEQBDIwsSICJYi4DGACNBBrFzMwM4QIZEC4cUMZlQgEA5SYCHTxnBUUAAAAASUVORK5CYII%3D";

function getLocalizedString(key) {
  return localizedStrings[currentLang][key];
}

function addShortcut() {
	var url = getValidUrl();
	if(url.match(groupRE))
	{
		for(var i = 0; i < links.length; i++) {
			if(links[i][0] == url) {
				alert(getLocalizedString("ShortcutExists"));
				return;
			}
		}
		
		var pi = document.getElementById("profileimage");
		
		if(pi == null)
			return;
		
		var piIMG = pi.childNodes[0];
		
		if(piIMG == null)
			return;
		
		links.push(new Array(url, piIMG.src));
		saveLinks();
		
		alert(getLocalizedString("ShortcutAdded"));
	}
	else
	{
		alert(getLocalizedString("ShortcutNotAdded"));
	}
}

function removeShortcut() {
  var removed = false;
	var x = Array();
	var url = getValidUrl();
	for(var i = 0; i < links.length; i++) {
		if(links[i][0] == url) {
			removed = true;
		}
		else {
			x.push(links[i]);
		}
	}
	links = x;
	saveLinks();
	
	if(removed)
		alert(getLocalizedString("ShortcutRemoved"));
	else
		alert(getLocalizedString("ShortcutNotRemoved"));
}

function saveLinks(){
	clearLinks();
	var s = "";
	for (var i = 0; i < links.length; i++){
		s += links[i][0] + ";" + links[i][1] + "|";
	}
	
	GM_setValue("links", s);
}

function clearLinks(){
	GM_deleteValue("links");
}
	
function loadLinks(key)
{
	links = new Array();
	var a = GM_getValue("links", "").split('|');
	for(var i = 0; i < a.length; i++)
	{
		var b = a[i].split(';', 2);
		if(b[0] != "")
			links.push(new Array(b[0], b[1]));
	}
}

function removeLinks()
{
	if(confirm(getLocalizedString("ClearQuestion"))) {
		links = new Array();
		clearLinks();
	}
}

function removeMenu()
{
	if(buttons != null)
		buttons.parentNode.removeChild(buttons);
}

loadLinks();
if(links == null)
	links = new Array();

var h = document.getElementsByTagName("html");
currentLang = window.document.childNodes[1].getAttribute("lang", "en");

var isSupported = false;
for (var i = 0; i <= supportedLangs1.length-1;  i++) {
  if (supportedLangs1[i] == currentLang) {
    isSupported = true;
    break;
  }
}

if (isSupported == false)
  currentLang = "en";

function getValidUrl(){
	return document.location.href.substring(document.location.href.lastIndexOf('/'));
}

function starter(){
	var garden = document.getElementById("presence_bar_left");
	
	if(garden == null)
		return;

	if(buttons == null) {
		buttons = document.createElement("div");
		buttons.setAttribute("id", "fbShortcuts");
		buttons.setAttribute("style", "border-left:1px solid #B5B5B5; float:left; padding-top: 1px;");
		garden.appendChild(buttons);
	}
	
	while(buttons.hasChildNodes()){
		buttons.removeChild(buttons.lastChild);
	}
	
	var url = getValidUrl();
	var canAdd = url.match(groupRE);
	var isAdded = false;
	
	for(var i = 0; i < links.length; i++){
		var linkButton = document.createElement("div");
		linkButton.setAttribute("style", "float:left;");
		var linkButtonAnchor = document.createElement("a");
		linkButtonAnchor.setAttribute("style", "display: block; width: 16px; height: 16px; padding: 4px 5px 5px;");
		linkButtonAnchor.setAttribute("href", links[i][0]);
		var linkButtonIcon = document.createElement("img");
		linkButtonIcon.setAttribute("style", "width: 16px; height: 16px;");
		linkButtonAnchor.appendChild(linkButtonIcon);
		linkButton.appendChild(linkButtonAnchor);
		linkButtonIcon.src = links[i][1];
		buttons.appendChild(linkButton);
		
		if(url == links[i][0])
			isAdded = true;
	}
	
	if(canAdd)
	{
		var modifyButton = document.createElement("div");
		modifyButton.setAttribute("style", "float:left;");
		var modifyButtonAnchor = document.createElement("a");
		modifyButtonAnchor.setAttribute("style", "display: block; width: 16px; height: 16px; padding: 4px 5px 5px;");
		var modifyButtonIcon = document.createElement("img");
		modifyButtonIcon.setAttribute("style", "width: 16px; height: 16px;");
		modifyButtonAnchor.appendChild(modifyButtonIcon);
		modifyButton.appendChild(modifyButtonAnchor);
		
		if(isAdded)
		{
			modifyButtonAnchor.addEventListener("click", removeShortcut, false);
			modifyButtonIcon.src = minusIcon;
		}
		else
		{
			modifyButtonAnchor.addEventListener("click", addShortcut, false);
			modifyButtonIcon.src = plusIcon;
		}
		
		buttons.appendChild(modifyButton);
	}
	
	setTimeout(starter, 1000);
  return false;
}

window.addEventListener("load", starter, false);