From 15eb7fbb4da6258e7fbbc499d342b68463bc132a Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Sat, 10 Dec 2011 00:49:56 +0100 Subject: [PATCH] Add the Direct Download link to the page on a UrlFetched event Calling _add_link() asynchronously will make it easy to add some URL processing mechanism between _get_URL() and _add_link() in case the URL we get needs to be processed somehow before being added to the page as a Direct Download Link. Signed-off-by: Antonio Ospite --- direct_download_links.user.js | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/direct_download_links.user.js b/direct_download_links.user.js index eac46c9..418b3a5 100644 --- a/direct_download_links.user.js +++ b/direct_download_links.user.js @@ -103,10 +103,7 @@ for (i = 0; i < supported_sites.length; i++) { var result = window.location.href.match(site.locationRegexp); if (result) { - var ret = direct_download_link_add(window.location.href, site); - if (!ret) { - DDL_log('Cannot add the link'); - } + direct_download_link_add(window.location.href, site); } } @@ -124,6 +121,8 @@ function direct_download_link_add(pageURL, site) { return null; } + document.addEventListener('UrlFetched', _add_link, true); + // This is used for sites adding the URL to the DOM after DOMContentLoaded, // for example by some javascript library (like Silverlight.js on rai.tv). if (site.onEvent) { @@ -133,44 +132,46 @@ function direct_download_link_add(pageURL, site) { DDL_log('DirectDL (' + site.pageURL + '): skipping element ' + e.target.tagName); return; } - var URL = _get_URL(site, element); - return _add_link(site, URL); + _get_URL(site, element); }, false); - return true; - } - - var URL = _get_URL(site, element); - if (!URL) { - DDL_log('DirectDL (' + site.pageURL + '): cannot get the URL.'); - return null; } - return _add_link(site, URL); + _get_URL(site, element); } function _get_URL(site, element) { var content = element.innerHTML; if (!content) { DDL_log('DirectDL (' + site.pageURL + '): content is null, cannot find URL.'); - return null; + return; } var matches = content.match(site.urlRegexp); if (!matches || matches.length < 2 || !matches[1]) { DDL_log('DirectDL (' + site.pageURL + '): URL not found, check the urlRegexp'); - return null; + return; } var URL = matches[1]; + if (!URL) { + DDL_log('DirectDL (' + site.pageURL + '): cannot get the URL.'); + return; + } - return URL; + var evt = document.createEvent('Event'); + evt.initEvent('UrlFetched', true, true); + evt.site = site; + evt.URL = URL; + document.dispatchEvent(evt); } -function _add_link(site, URL) { +function _add_link(e) { + var site = e.site; + var URL = e.URL;; var links = document.getElementById(site.linkDest); if (!links) { DDL_log('DirectDl (' + site.pageURL + '): Cannot add the direct download link.'); - return null; + return; } var download_link = document.createElement('a'); @@ -183,8 +184,6 @@ function _add_link(site, URL) { download_link.setAttribute('style', style); links.insertBefore(download_link, links.firstChild); - - return true; } function DDL_log(message) { -- 2.1.4