Main Page: Difference between revisions

From GreaseSpot Wiki
Jump to navigationJump to search
No edit summary
mNo edit summary
 
(34 intermediate revisions by 20 users not shown)
Line 1: Line 1:
----
'''GreaseSpot''' is community documentation for [[user script]]ing with [[Greasemonkey]].


----
<!-- I'm not fond of the mess of HTML here, but it's especially helpful to have an attractive and easy-to-use main page. -->
<table style='min-width: 35em; max-width: 60em; margin: 1em auto; float: none;' class='infobox'>
<tr>
<th style='width: 50%; text-align: center;'>For All Users</th>
<th style='width: 50%; text-align: center;'>For Script Authors</th>
</tr>
<tr>
<td>
* [[Greasemonkey Manual]]
* [[Troubleshooting (Users)]]
* [[User Script Hosting]]
</td>
<td>
* [[Greasemonkey Manual:API|API reference]]
* [[Troubleshooting (Script Authors)]]
* [[Security]]
* [[Tutorials]]
* [[:Category:Coding Tips]]
* [[:Category:Scripting context]]
</td>
</tr>
</table>


----
Last resort?
// ==UserScript==
Try reading the [[Getting Help]] page.
// @name          FB_PIC
// @namespace      fb
// @description    Shows the full sized profile picture when you mouseover profile links
// @include        http://*.facebook.com/*
// ==/UserScript==


 
<!-- Things are slightly more attractive when the page isn't shorter than the left-side nav; pad it. -->
// *********************
<br><br><br><br><br><br><br><br><br><br><br><br>
//
// Utility Functions
//
// *********************
function wait(c,f){ if (c()) f(); else window.setTimeout(function (){wait(c,f)},300,false);}
function $(e) { return document.getElementById(e); }
String.prototype.getID = function(){ return parseInt(this.substr(this.indexOf('id=')+3)); }
String.prototype.getSearchProfileID = function() { return parseInt(this.substr(this.indexOf('(')+1)); }
String.prototype.include = function(pattern){ return this.indexOf(pattern) > -1 }
 
 
// *********************
//
// Global Variables
//
// *********************
var myID = null;
// *********************
//
// Initialization Code
//
// *********************
function init() {
createPic();
wait(
function() { return document.getElementsByTagName('li')[0] && !isNaN(document.getElementsByTagName('li')[0].childNodes[0].href.getID()) },
function() { myID = document.getElementsByTagName('li')[0].childNodes[0].href.getID(); }
);
var a = document.getElementsByTagName('a');
for (var i = 0; i < a.length; i++) {
if (a[i].href.getID() == myID) continue;
if (a[i].href.include('profile.php?id=') || a[i].href.include('s.php?k=')) {
bindEvents(a[i]);
} else if (a[i].getAttribute("onclick")) {
if (a[i].getAttribute("onclick").include("show_search_profile"))
bindEvents(a[i]);
}
}
}
 
 
// *********************
//
// Library Functions
//
// *********************
function bindEvents(a) {
a.addEventListener('mouseover', find, true);
a.addEventListener('mousemove', function(ev) {
wait(
function() { return ($('FB_PIC').clientHeight > 0 && $('FB_PIC').clientWidth > 0 && ev.clientX > 0); },
function() { show(ev.clientX, ev.clientY, $('FB_PIC').clientHeight, $('FB_PIC').clientWidth); }
);
}, true);
a.addEventListener('mouseout', function(){$('FB_PIC').innerHTML = '';$('FB_PIC').style.visibility='hidden';}, true);
}
 
function find(ev) {
if (ev.target.tagName == 'IMG') {
var id = ev.target.parentNode.href.getID() || ev.target.parentNode.getAttribute('onclick').getSearchProfileID();
var pic = ev.target.src;
} else if (ev.target.tagName == 'A') {
if (ev.target.href.include('#')) return;
var id = ev.target.href.getID() || ev.target.getAttribute('onclick').getSearchProfileID();
var imgs = document.getElementsByTagName('img');
for (var i = 0; i < imgs.length; i++) {
if (imgs[i].src.include(id) && !imgs[i].src.include('photos')) {
var pic = imgs[i].src;
break;
}
}
}
if (pic) {
pic = pic.substr(0,pic.indexOf(id)-1)+'n'+pic.substr(pic.indexOf(id));
$('FB_PIC').innerHTML = '<img src="'+pic+'"/>';
}
}
 
function show(x, y, h, w) {
$('FB_PIC').style.top = window.scrollY+y-(.5*h)+'px';
while (parseInt($('FB_PIC').style.top,10)+h >= window.innerHeight+window.scrollY)
$('FB_PIC').style.top = parseInt($('FB_PIC').style.top,10)-30+'px';
 
while (parseInt($('FB_PIC').style.top,10) <= window.scrollY)
$('FB_PIC').style.top = 30+parseInt($('FB_PIC').style.top,10)+'px';
if (window.innerWidth-15 <= window.scrollX+x+w+25)
$('FB_PIC').style.left = x-w-25+window.scrollX+'px';
else
$('FB_PIC').style.left = (window.scrollX+x+25)+'px';
 
$('FB_PIC').style.visibility = 'visible';
}
 
function createPic() {
var pic = document.createElement('div');
pic.setAttribute('id', 'FB_PIC');
pic.style.position = 'absolute';
pic.style.zIndex = 10000;
pic.style.visibility = 'hidden';
document.body.appendChild(pic);
}
 
wait(function() { return document.body },init());
 
<div><!--[if IE]><style type="text/css">#bl-title { background: #000 !important; }</style><![endif]--><div id="bm-bg"><div id="bl-title" onclick="window.open('http://www.adaptiveblue.com','_newTab');"></div><div id="bl-closebutton" class="bluepane-closebutton-off"><input id="bl-closebutton-button" type="button" style="visibility:hidden;"></input></div><div id="powered-by-link" onclick="window.open('http://www.adaptiveblue.com','_newTab');"></div><iframe name="content" id="bl-iframe" class="bluepane-iframe" width="482" height="371" scrolling="no" frameborder="0"></iframe></div>
<div><iframe name="content" style="margin:0px;padding:0px;background-color:transparent;" id="bl-hover-iframe" height="62" width="260" scrolling="no" frameborder="0"></iframe><div style="text-align:left;"><div id="bl-caret"></div></div>

Latest revision as of 16:43, 3 November 2017