Add the Direct Download link to the page on a UrlFetched event
authorAntonio Ospite <ospite@studenti.unina.it>
Fri, 9 Dec 2011 23:49:56 +0000 (00:49 +0100)
committerAntonio Ospite <ospite@studenti.unina.it>
Sat, 10 Dec 2011 01:18:26 +0000 (02:18 +0100)
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 <ospite@studenti.unina.it>
direct_download_links.user.js

index eac46c9..418b3a5 100644 (file)
@@ -103,10 +103,7 @@ for (i = 0; i < supported_sites.length; i++) {
 
   var result = window.location.href.match(site.locationRegexp);
   if (result) {
 
   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;
   }
 
     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) {
   // 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;
       }
         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);
     }, 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.');
 }
 
 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');
   }
 
   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];
   }
   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.');
 
   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');
   }
 
   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);
   download_link.setAttribute('style', style);
 
   links.insertBefore(download_link, links.firstChild);
-
-  return true;
 }
 
 function DDL_log(message) {
 }
 
 function DDL_log(message) {