There are 1 previous version of this script.
// A quick rewrite of http://static.delicious.com/js/playtagger.js, to make it
// not leak your entire click trail to del.icio.us, and only squeal on playing
// ==UserScript==
// @name del.icio.us mp3
// @namespace http://code.google.com/p/ecmanaut/
// @description Adds the del.icio.us in-page player to all mp3 links.
// @include http://*
// @exclude http://*.icio.us/*
// @resource play http://static.delicious.com/img/play.gif
// @resource stop http://static.delicious.com/img/stop.gif
// @require http://ecmanaut.googlecode.com/svn/trunk/lib/gm/$x$X.js
// ==/UserScript==
var player, playimg;
var u = "http://static.delicious.com/swf/playtagger.swf";
var f = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"+
"#version=6,0,0,0";
init();
function init() {
if (!$X('//script[@src="http://static.delicious.com/js/playtagger.js"]') &&
!$X('//script[contains(@src,"/playtagger.js")]')) // avoid running twice
[].slice.call(document.links).filter(is_mp3).map(augment);
}
function is_mp3(a) {
var mp3 = /\.mp3$/i;
return a.href && a.href.match(mp3) || a.pathname.match(mp3);
}
function augment(a) {
var img = document.createElement("img")
img.src = GM_getResourceURL("play");
img.title = "listen";
img.height = img.width = 12;
img.style.border = "none";
img.style.marginRight = "4px";
img.style.cursor = "pointer";
img.fn = makeToggler(img, a.href);
img.addEventListener("click", img.fn, false);
a.parentNode.insertBefore(img, a);
}
function makeToggler(img, url) {
return function() {
// console.log("playing "+ url);
toggle(img, url);
};
}
function destroy() {
// console.log("Destroying player");
playimg.src = GM_getResourceURL("play");
playimg = null;
player.removeChild(player.firstChild);
player.parentNode.removeChild(player);
player = null;
}
function toggle(img, url) {
if (playimg == img) {
destroy();
} else {
if (playimg) destroy();
var a = img.nextSibling, c = getColour(a);
var flashvars = "theLink="+ url +"&fontColor="+ c;
img.src = GM_getResourceURL("stop");
playimg = img;
player = document.createElement("span");
player.innerHTML =
<object id="player" style="vertical-align: bottom; margin-right: 0.2em;"
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase={ f }
width="100" height="14" align="middle">
<param name="wmode" value="transparent"/>
<param name="allowScriptAccess" value="sameDomain"/>
<param name="flashVars" value={ flashvars }/>
<param name="movie" value={ u }/>
<param name="quality" value="high"/>
<embed src={ u } type="application/x-shockwave-flash" name="player"
allowScriptAccess="sameDomain" wmode="transparent" quality="high"
flashVars={ flashvars } width="100" height="14" align="middle"
pluginspage="http://www.macromedia.com/go/getflashplayer"
style="vertical-align: bottom; margin-right: 0.2em"/>
</object>.toXMLString();
img.parentNode.insertBefore(player, img.nextSibling);
}
}
function getColour(a) {
var junk = /^rgb|[ ()]/g;
var c = getComputedStyle(a, null).getPropertyValue("color").replace(junk, "");
var hex = c.match(/^#?([a-f0-9]{6})$/);
var hexSm = c.match(/^#?([a-f0-9]{3})$/);
var rgb = c.match(/^([0-9]+),([0-9]+),([0-9]+)$/);
if (rgb) {
var c16 = "0123456789abcdef", c="";
for (var i = 1, d; d = rgb[i]; i++) {
var j = d % 16;
c = c + c16.charAt((d - j)/16) + c16.charAt(j);
}
}
else if (hex)
c = hex[1];
else if (hexSm)
c = hexSm[1].charAt(0) +
hexSm[1].charAt(0) +
hexSm[1].charAt(1) +
hexSm[1].charAt(1) +
hexSm[1].charAt(2) +
hexSm[1].charAt(2);
else
c = "000000";
return c;
}