Changeset 1105

Show
Ignore:
Timestamp:
2008-09-23 21:45:00 (2 months ago)
Author:
MaierMan
Message:
  • Fix: Add paused didn't work
  • Fix: namespace using
  • Fix: some strict warnings
  • Fix: possible havoc when loading multiple times due to constness.
  • "let is the new var"
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/chrome/content/dta/manager/metalinker.js

    r1083 r1105  
    3535 * ***** END LICENSE BLOCK ***** */ 
    3636 
    37 const METALINK_LOGO = 'chrome://dta/skin/icons/metalink48.png'; 
     37var METALINK_LOGO = 'chrome://dta/skin/icons/metalink48.png'; 
    3838  
    39 function NSResolver(prefix) { 
    40   if(prefix == 'html') { 
    41     return 'http://www.w3.org/1999/xhtml'; 
    42   } 
    43         return 'http://www.metalinker.org/'; 
    44 
    45   
    46  var Metalinker = { 
     39var NSResolver = { 
     40        lookupNamespaceURI: function NSR_lookupNamespaceURI(prefix) { 
     41                switch (prefix) { 
     42                case 'html': 
     43                        return NS_HTML; 
     44                case 'dta': 
     45                        return NS_DTA; 
     46          default: 
     47            return NS_METALINKER; 
     48                break;   
     49          } 
     50        } 
     51};  
     52 
     53var Metalinker = { 
    4754        _getNodes: function ML__getNodes(elem, query) { 
    48                 var rv = []; 
    49                 var nodeSet = elem.ownerDocument.evaluate( 
     55                let rv = []; 
     56                let doc = elem instanceof Document ? elem : elem.ownerDocument; 
     57                let iterator = doc.evaluate( 
    5058                        query, 
    5159                        elem, 
    5260                        NSResolver, 
    53                         XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
     61                        XPathResult.ORDERED_NODE_ITERATOR_TYPE, 
    5462                        null 
    5563                ); 
    56                 for (var j = 0; j < nodeSet.snapshotLength; ++j) { 
    57                         rv.push(nodeSet.snapshotItem(j)); 
     64                for (let n = iterator.iterateNext(); n; n = iterator.iterateNext()) { 
     65                        rv.push(n); 
    5866                } 
    5967                return rv; 
    6068        }, 
    6169        _getNode: function ML_getNode(elem, query) { 
    62                 var r = this._getNodes(elem, query); 
     70                let r = this._getNodes(elem, query); 
    6371                if (r.length) { 
    6472                        return r.shift(); 
     
    6775        }, 
    6876        _getSingle: function ML__getSingle(elem, query) { 
    69                 var rv = this._getNode(elem, 'ml:' + query); 
     77                let rv = this._getNode(elem, 'ml:' + query); 
    7078                return rv ? rv.textContent.trim() : ''; 
    7179        }, 
    7280        _getLinkRes: function(elem, query) { 
    73                 var rv = this._getNode(elem, 'ml:' + query); 
     81                let rv = this._getNode(elem, 'ml:' + query); 
    7482                if (rv) { 
    75                         var n = this._getSingle(rv, "name"), l = this._checkURL(this._getSingle(rv, "url")); 
     83                        let n = this._getSingle(rv, 'name'), l = this._checkURL(this._getSingle(rv, 'url')); 
    7684                        if (n && l) { 
    7785                                return [n, l]; 
     
    106114                download.state = CANCELED; 
    107115                Tree.remove(download, false); 
    108                 var file = new FileFactory(download.destinationFile); 
     116                let file = new FileFactory(download.destinationFile); 
    109117                 
    110118                this.handleFile(file, download.referrer); 
     
    123131                        }                
    124132                 
    125                         var fiStream = new FileInputStream(aFile, 1, 0, false); 
    126                         var domParser = new DOMParser(); 
    127                         var doc = domParser.parseFromStream(fiStream, null, aFile.fileSize, "application/xml"); 
    128                         var root = doc.documentElement; 
     133                        let fiStream = new FileInputStream(aFile, 1, 0, false); 
     134                        let domParser = new DOMParser(); 
     135                        let doc = domParser.parseFromStream(fiStream, null, aFile.fileSize, "application/xml"); 
     136                        let root = doc.documentElement; 
    129137                        fiStream.close(); 
    130138                         
    131139                        if (root.nodeName != 'metalink' || root.getAttribute('version') != '3.0') { 
    132                                 throw new Error(_('mlinvalid')); 
    133                         } 
    134          
    135                         var aNum = Preferences.getExt('numistance', 0); 
     140                                throw new Exception(_('mlinvalid')); 
     141                        } 
     142                        let aNum = Preferences.getExt('numistance', 0); 
    136143                        if (++aNum > 999) { 
    137144                                aNum = 1; 
     
    140147         
    141148         
    142                         var locale = this.locale.split('-').map(function(l) { return l.slice(0, 2).toLowerCase(); }).reverse(); 
    143                         var downloads = []; 
    144                         var files = root.getElementsByTagName('file'); 
    145                         for (var i = 0, e = files.length; i < e; ++i) { 
    146                                 var file = files[i]; 
    147                                 var fileName = file.getAttribute('name').getUsableFileName(); 
     149                        let locale = this.locale.split('-').map(function(l) { return l.slice(0, 2).toLowerCase(); }).reverse(); 
     150                        let downloads = []; 
     151                        let files = this._getNodes(doc, '//ml:files/ml:file'); 
     152                        for each (let file in files) { 
     153                                let fileName = file.getAttribute('name').getUsableFileName(); 
    148154                                if (!fileName) { 
    149155                                        throw new Exception("File name not provided!"); 
    150156                                } 
    151                                 var referrer = null; 
     157                                let referrer = null; 
    152158                                if (file.hasAttributeNS(NS_DTA, 'referrer')) { 
    153159                                        referrer = file.getAttributeNS(NS_DTA, 'referrer'); 
     
    156162                                        referrer = aReferrer; 
    157163                                } 
    158                                 var num = aNum; 
     164                                let num = aNum; 
    159165                                if (file.hasAttributeNS(NS_DTA, 'num')) { 
    160166                                        try { 
    161167                                                num = parseInt(file.getAttributeNS(NS_DTA, 'num')); 
    162                                         } catch (ex) { /* no-op */ } 
    163                                 } 
    164                                 var startDate = new Date(); 
     168                                        } 
     169                                        catch (ex) { 
     170                                                /* no-op */ 
     171                                        } 
     172                                } 
     173                                let startDate = new Date(); 
    165174                                if (file.hasAttributeNS(NS_DTA, 'date')) { 
    166175                                        try { 
    167176                                                startDate = new Date(parseInt(file.getAttributeNS(NS_DTA, 'num'))); 
    168                                         } catch (ex) { /* no-op */ } 
     177                                        } 
     178                                        catch (ex) { 
     179                                                /* no-op */ 
     180                                        } 
    169181                                }                                
    170182                                         
    171                                 var urls = []; 
    172                                 var urlNodes = this._getNodes(file, 'ml:resources/ml:url'); 
     183                                let urls = []; 
     184                                let urlNodes = this._getNodes(file, 'ml:resources/ml:url'); 
    173185                                for each (var url in urlNodes) { 
    174                                         var type = url.getAttribute('type'); 
    175                                         var preference = 1; 
    176                                         var charset = doc.characterSet; 
    177                                         var usable = null; 
     186                                        let type = url.getAttribute('type'); 
     187                                        let preference = 1; 
     188                                        let charset = doc.characterSet; 
     189                                        let usable = null; 
    178190                                         
    179191                                        if (url.hasAttribute('preference')) { 
     
    212224                                        } 
    213225                                } 
    214                                 var desc = this._getSingle(file, 'description'); 
     226                                let desc = this._getSingle(file, 'description'); 
    215227                                if (!desc) { 
    216228                                        desc = this._getSingle(root, 'description'); 
    217229                                } 
    218                                 var size = this._getSingle(file, 'size'); 
     230                                let size = this._getSingle(file, 'size'); 
    219231                                size = parseInt(size); 
    220232                                if (isFinite(size)) { 
     
    251263                        } 
    252264                        if (downloads.length) { 
    253                                 var info = { 
     265                                let info = { 
    254266                                        'identity': this._getSingle(root, 'identity'), 
    255267                                        'description': this._getSingle(root, 'description'), 
     
    267279                                ); 
    268280                                downloads = downloads.filter(function(d) { return d.selected; }); 
    269                                 if (info.start && downloads.length) { 
     281                                if (downloads.length) { 
    270282                                        startDownloads(info.start, downloads); 
    271283                                } 
     
    273285                } 
    274286                catch (ex) { 
     287                        Debug.log("Metalinker::handleDownload", ex);                     
    275288                        if (!(ex instanceof Error)) { 
    276289                                ex = new Error(_('mlerror', [ex.error])); 
     
    279292                                AlertService.show(_('mlerrortitle'), ex.message, false); 
    280293                        } 
    281                         Debug.log("Metalinker::handleDownload", ex); 
    282294                } 
    283295        }, 
    284296        _insertDownload: function(d) { 
    285297                if (d.lang && d.lang.search(/^\w{2}(?:-\w{2})?$/) != -1) { 
    286                         var locale = this.locale; 
     298                        let locale = this.locale; 
    287299                        d.selected = locale.slice(0,2) == d.lang.slice(0,2); 
    288300                } 
     
    294306        load: function ML_load() { 
    295307                try { 
    296                         var downloads = window.arguments[0]; 
     308                        let downloads = window.arguments[0]; 
    297309                        if (downloads.length) { 
    298310                                downloads.forEach(this._insertDownload, this); 
     
    310322                } 
    311323                try { 
    312                         var oi = window.arguments[1]; 
     324                        let oi = window.arguments[1]; 
    313325                        for (x in info) { 
    314326                                if (x in oi && oi[x]) { 
     
    332344                                let w = logo.naturalWidth; 
    333345                                let h = logo.naturalHeight; 
    334                                 d = Math.max(w, h); 
     346                                let d = Math.max(w, h); 
    335347                                 
    336348                                ctx.scale(canvas.width / d, canvas.height / d); 
     
    339351                        } 
    340352                        catch (ex) { 
    341                                 alert(ex); 
    342353                                Debug.log("Cannot load logo", ex); 
    343354                                logo.src = METALINK_LOGO; 
     
    349360                logo.src = info.logo ? info.logo : METALINK_LOGO; 
    350361                if (info.publisher) { 
    351                         var e = $('publisher'); 
     362                        let e = $('publisher'); 
    352363                        e.value = info.publisher[0]; 
    353364                        e.link = info.publisher[1];                      
     
    357368                } 
    358369                if (info.license) { 
    359                         var e = $('license'); 
     370                        let e = $('license'); 
    360371                        e.value = info.license[0]; 
    361372                        e.link = info.license[1];                        
     
    366377        }, 
    367378        browseDir: function() { 
    368  
    369379                // get a new directory 
    370                 var newDir = Utils.askForDir( 
     380                let newDir = Utils.askForDir( 
    371381                        $('directory').value, // initialize dialog with the current directory 
    372382                        _("validdestination") 
     
    390400                        return false; 
    391401                } 
    392  
     402                 
    393403                Array.forEach( 
    394404                        document.getElementsByTagName('richlistitem'), 
     
    419429        }, 
    420430        select: function(type) { 
    421                 var f; 
     431                let f; 
    422432                switch (type) { 
    423433                case 'all': 
     
    430440                        f = function(node) { return !node.checked; } 
    431441                break; 
    432                 }                
    433                 for each (var node in document.getElementsByTagName('richlistitem')) { 
     442                default: 
     443                return; 
     444                } 
     445                let nodes = document.getElementsByTagName('richlistitem'); 
     446                for (let i = 0, e = nodes.length, node; i < e; ++i) { 
     447                        node = nodes[i]; 
    434448                        node.checked = f(node); 
    435449                }