// direct_download_links - Add direct download links
-// version 0.2
-// 2011-11-14
+// version 0.3
+// 2011-12-23
// Copyright (C) 2011 Antonio Ospite <ospite@studenti.unina.it>
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
// @include http://trovacinema.repubblica.it/*
// @include http://www.kataweb.it/tvzap/*
// @include http://www.rai.tv/*
+// @include http://soundcloud.com/*
// ==/UserScript==
//
-// NOTE, for rai.tv to work you need to install a script like:
-// http://git.ao2.it/smooth-dl.git/blob_plain/HEAD:/scripts/SilverSpoof.user.js
/*
* TODO:
*
*
* Optional fields:
+ *
+ * initCommand: a function called before the regExp is matched, this can
+ * be useful in cases when some action needs to be done in
+ * order to make the element containing the regExp be actually
+ * rendered. It must accept a 'site' parameter.
+ *
* onEvent: used to delay the urlRegexp matching to a certain event like
* 'DOMNodeInserted' useful when the URL is added by some javascript
* library. It has two fields:
},
{
locationRegexp: /^http:\/\/www\.rai\.tv\/.*$/,
+ initCommand: function(site) {
+ unsafeWindow.Silverlight.isInstalled = function(version) {
+ return true;
+ };
+ },
urlContainer: 'Player',
urlRegexp: /mediaUri=(http:\/\/[^,]*)/,
onEvent: { evt: 'DOMNodeInserted', targetElement: 'object' },
processURL: _rai_get_actual_url,
linkDest: 'Player',
},
+ {
+ locationRegexp: /^http:\/\/soundcloud.com\/.*$/,
+ urlContainer: 'main-content-inner',
+ urlRegexp: /"streamUrl":"([^"]*)"/,
+ linkDest: 'main-content-inner',
+ },
];
/* Apply different rules to different sites */
var result = window.location.href.match(site.locationRegexp);
if (result) {
+ if (site.initCommand) {
+ site.initCommand(site);
+ }
direct_download_link_add(window.location.href, site);
}
}
}
_get_URL(site, element);
}, false);
+ return;
}
_get_URL(site, element);
return;
}
- var evt = document.createEvent('Event');
- evt.initEvent('UrlFetched', true, true);
+ var evt = document.createEvent('Event');
+ evt.initEvent('UrlFetched', true, true);
evt.site = site;
evt.URL = URL;
document.dispatchEvent(evt);
style += ' border: 2px solid red;'
style += ' float: right; font-size: large;';
style += ' padding: .5em; margin: 1em;'
+ style += ' position: relative; z-index: 1000;'
download_link.setAttribute('style', style);
destination.insertBefore(download_link, destination.firstChild);
}
function _rai_get_actual_url(site, URL) {
+
+ // SmoothStreaming manifest files get added without processing, for now:
+ if (URL.match(/.*\.csm$/)) {
+ var evt = document.createEvent('Event');
+ evt.initEvent('UrlFetched', true, true);
+ evt.site = site;
+ evt.URL = URL;
+ document.dispatchEvent(evt);
+ return;
+ }
+
// http://www.neaveru.com/wordpress/index.php/2008/05/09/greasemonkey-bug-domnodeinserted-event-doesnt-allow-gm_xmlhttprequest/
setTimeout( function() {
GM_xmlhttpRequest({
if (ref.length > 0) {
href = ref[0].getAttribute('HREF');;
- var evt = document.createEvent('Event');
- evt.initEvent('UrlFetched', true, true);
+ var evt = document.createEvent('Event');
+ evt.initEvent('UrlFetched', true, true);
evt.site = site;
evt.URL = href;
document.dispatchEvent(evt);