|
|
Line 1: |
Line 1: |
| // ==UserScript==
| | __NOTOC__ |
| // @name Facebook Online Logger
| | '''GreaseSpot''' is community documentation for [[user script]]ing with [[Greasemonkey]]. Please [[GreaseSpot:Editor portal|contribute]]. |
| // @namespace FBOnline
| |
| // @include http://*.facebook.com*
| |
| // @exclude http://*.facebook.com/login.php*
| |
| // @exclude http://en-gb.facebook.com/*
| |
| // @description Log out of Facebook Chat and still see who is online.
| |
| // @author http://userscripts.org/users/59449
| |
| // @version 3.3
| |
| // ==/UserScript==
| |
|
| |
|
| // Modified version of
| | == Getting Started == |
| // http://userscripts.org/scripts/show/19450
| | Before writing a script or posting to the [[mailing list]] for help, '''every''' script writer should read Mark Pilgrim's [http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Avoid_Common_Pitfalls Avoid Common Pitfalls in Greasemonkey]. |
| // http://userscripts.org/scripts/show/23499 | |
|
| |
|
| // Ad remover
| | * [[Greasemonkey Manual]] |
| window.addEventListener("load", function(e) {
| | * [[Tutorials]] |
| var elements = xpath("//div[contains(@class, 'ad_capsule')] | //div[contains(@class, 'social_ad')] | //div[@id='announce'] | //div[contains(@id, 'sponsor')] | //div[contains(@id, 'ssponsor')]");
| | * [[Mailing list]] |
| if (elements.snapshotLength > 0) {
| |
| for (var i = 0; i < elements.snapshotLength; i++) {
| |
| var thisElement = elements.snapshotItem(i);
| |
| thisElement.parentNode.removeChild(thisElement);
| |
| }
| |
| }
| |
| }, false);
| |
| function xpath (query) {
| |
| return document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
| |
| }
| |
|
| |
|
| init();
| | == Scripting References == |
| function init() {
| |
| if (!document.body) { window.setTimeout(function(){init();}, 300); }
| |
| if (window != window.top) return; // Don't run in a frame
| |
| if ($('loginform')) return; // Don't run if not logged in
| |
| MenuCommands();
| |
| if (GM_getValue('ShowPopUp', true)) { createChatMenu(); }
| |
| facebookOnline();
| |
| }
| |
|
| |
|
| function facebookOnline() {
| | * [[API reference]] |
| GM_xmlhttpRequest({
| | * [[Metadata block]] |
| method:"GET",
| | * [[:Category:Scripting context|Scripting context]] |
| url:"http://iphone.facebook.com/friends.php?v=online",
| | ** [[Sandbox]] |
| headers:{"User-Agent":"Mozilla/5.0","Accept":"text/xml"},
| | ** [[Global object]] |
| onload:function(response) {
| | ** [[XPCNativeWrapper]] |
| if((response.readyState == 4) && (response.status == 200))
| | ** [[Scriptable content]] |
| parseResults(response.responseText);
| | ** [[DOMContentLoaded]] |
| }
| | * [[Security]] |
| });
| | ** [[unsafeWindow]] |
|
| |
|
| window.setTimeout(facebookOnline, 60000); // Refresh every 60 seconds
| | == Authoring Tips == |
| }
| | * [[Useful Tools for Script Writers]] |
| | * [[Troubleshooting]] |
| | * [[0.7.20080121.0+ compatibility]]: Working around errors introduced by changes in Greasemonkey 0.7.20080121.0 |
| | * [[Controlling userscripts in sub windows]] |
| | * [[Code snippets]]: useful staple functions. |
| | * [[Coding tips]]: things you might not have thought of. |
| | * [[HTML injection tips]]: how to add your html anywhere, dodging page CSS invading yours |
| | * [[:Category:Site-specific tips|Site-specific tips]] |
| | ** [[:Category:Ajax site tips|Ajax site tips]] |
| | ** [[Gmail]] |
| | * [[Security tips]] |
| | * [[Etiquette]] |
| | * [[Cross-browser userscripting]] |
|
| |
|
| function parseResults(temp) {
| | == Extension Development == |
| var rt = process(temp);
| |
|
| |
|
| var uLINK = "";
| | * [http://greasemonkey.devjavu.com/projects/greasemonkey/wiki/ContributeToGreasemonkey Contributing to Greasemonkey ] |
| var popText = "";
| |
|
| |
| var today = new Date();
| |
| var h = today.getHours();
| |
| if (h<10) h = "0"+h;
| |
| var m = today.getMinutes();
| |
| if (m<10) m = "0"+m;
| |
| var dd = today.getDate();
| |
| var mm = today.getMonth()+1;
| |
| var yy = today.getFullYear();
| |
| var t = dd+"/"+mm+"/"+yy+" "+h+":"+m;
| |
|
| |
|
| var lastchecked = GM_getValue("lastupdated", t);
| | == Also == |
|
| |
| for (var i=0; i<rt.length;i+=1) {
| |
| var uID = getUID(rt[i]);
| |
| var uNAME = getUName(rt[i]);
| |
|
| |
| var a = GM_getValue(uID,uNAME+","+t+","+t);
| |
| var b = a.split(",");
| |
| var c;
| |
|
| |
| if (lastchecked == b[2]) {
| |
| c = b[1].split(" ");
| |
| GM_setValue(uID,uNAME+","+b[1]+","+t); //was online
| |
| }
| |
| else {
| |
| c = t.split(" ");
| |
| GM_setValue(uID,uNAME+","+t+","+t); //now online
| |
| }
| |
|
| |
| if (GM_getValue('ShowTime', true)) {
| |
| uLINK = c[1] + ' <a href="http://www.facebook.com/profile.php?id='+uID+'">'+uNAME+'</a>';
| |
| }
| |
| else {
| |
| uLINK = '<a href="http://www.facebook.com/profile.php?id='+uID+'">'+uNAME+'</a>';
| |
| }
| |
|
| |
| popText += '<div id="fbmLINK">'+uLINK+'</div>'; // For popup menu - add hh:mm here
| |
| }
| |
|
| |
|
| if (GM_getValue('ShowPopUp', true)) { updatePopUp(popText,rt.length); } // Popup menu in place of chat
| | * [[FAQ]] |
|
| | * [[Links]] |
| GM_setValue("lastupdated", t);
| |
| }
| |
| | |
| // Adds the online friends list on top of the Facebook Chat bar
| |
| function createChatMenu (){
| |
| var onshow = GM_getValue('ShowHide', false);
| |
| if (onshow != true && onshow != false) {
| |
| onshow = false;
| |
| GM_setValue('ShowHide', onshow);
| |
| }
| |
| | |
| GM_addStyle(
| |
| '#fbmDIV { bottom:-1px !important; right:75px !important; min-width:170px; border:1px solid #b5b5b5; background:#e5e5e5; position:fixed !important; z-index:99999 !important; padding:0px; }'+
| |
| '#fbmHEAD { color:black; font-size:11px; padding:5px 6px 5px 6px; height:14px; min-width: 112px; padding-left: 21px; background-image: url(http://static.ak.fbcdn.net/images/presence/buddy_list.gif); background-repeat: no-repeat; background-position: 4px 6px; white-space: nowrap;}'+
| |
| '#fbmHEAD:hover { cursor:pointer; }'+
| |
| '#fbmEXIT { color:#6D84B4; float:right; font-weight:bold; padding:5px 6px 5px 6px; vertical-align:top; }'+
| |
| '#fbmEXIT:hover { cursor:pointer; color:#3B5998; }'+
| |
| '#fbmBODY { background-color:white; border-bottom:1px solid #b5b5b5; }'+
| |
| '#fbmLINK { padding:4px 8px 4px 8px; }'+
| |
| '#fbmNUM { font-weight:bold; }'
| |
| );
| |
| if (!onshow) { GM_addStyle('#fbmBODY {display: none;}'); }
| |
| | |
| // Create new friends menu
| |
| var div = document.createElement('div');
| |
| div.id = 'fbmDIV';
| |
| div.innerHTML = '<div id="fbmBODY"><div id="fbmLINK">Loading...</div></div><div id="fbmEXIT" title="Close">x</div><div id="fbmHEAD">Online Friends (<span id="fbmNUM">0</span>)</div>';
| |
| document.body.appendChild(div);
| |
| | |
| // Listen for clicks on the x and make the list disappear and stop updating
| |
| $('fbmEXIT').addEventListener('click', function() {
| |
| $('fbmDIV').style.display='none';
| |
| }, false);
| |
| // Listen for clicks on the header and hide/show the list of friends
| |
| $('fbmHEAD').addEventListener('click', function() {
| |
| if (onshow) { $('fbmBODY').style.display='none'; onshow = false; }
| |
| else { $('fbmBODY').style.display='block'; onshow = true; }
| |
| GM_setValue('ShowHide',onshow);
| |
| }, false);
| |
| }
| |
| | |
| // Updates the online friend list on top of Facebook Chat
| |
| function updatePopUp (temp,num) {
| |
| if (temp == "") { temp = '<div id="fbmLINK">No online friends.</div>'; }
| |
| if ($('fbmNUM')) { $('fbmNUM').innerHTML = num; }
| |
| if ($('fbmBODY')) { $('fbmBODY').innerHTML = temp; }
| |
| }
| |
| | |
| function $(id) { return document.getElementById(id); }
| |
| function getUID(rawt) { return rawt.substring(0, rawt.indexOf('"')); }
| |
| function getUName(rawt) { return rawt.substring(rawt.indexOf('.jpg"></div>')+12, rawt.length); }
| |
| | |
| function process(response) {
| |
| var result = new Array();
| |
| var res = response;
| |
| var i = 0;
| |
| var indexd, indexu;
| |
|
| |
| while(res.indexOf('profile.php?id=') > 0) {
| |
| res = res.substring(res.indexOf('profile.php?id=')+15, res.length);
| |
| indexd = res.indexOf('<div class="listCaption2');
| |
| indexu = res.indexOf('</u>');
| |
| if ((indexd == -1) || (indexu < indexd)) { result[i] = res.substring(0, indexu); }
| |
| else { result[i] = res.substring(0, indexd); }
| |
| i++;
| |
| }
| |
|
| |
| return result;
| |
| }
| |
| | |
| // User Script Commands in Greasemonkey
| |
| function MenuCommands (){
| |
| GM_registerMenuCommand('FBOnline: Show/Hide PopUp Friends', function(){
| |
| if ((GM_getValue('ShowPopUp', true)) && (confirm('Hide online friends in place of Facebook Chat?'))) {
| |
| GM_setValue('ShowPopUp', false);
| |
| }
| |
| else if ((!GM_getValue('ShowPopUp', true)) && (confirm('Show online friends in place of Facebook Chat?'))) {
| |
| GM_setValue('ShowPopUp', true);
| |
| }
| |
| });
| |
| GM_registerMenuCommand('FBOnline: Show/Hide Time', function(){
| |
| if ((GM_getValue('ShowTime', true)) && (confirm('Hide Time next to friend?'))) {
| |
| GM_setValue('ShowTime', false);
| |
| }
| |
| else if ((!GM_getValue('ShowTime', true)) && (confirm('Show Time next to friend?'))) {
| |
| GM_setValue('ShowTime', true);
| |
| }
| |
| });
| |
| }
| |