Changeset 1105
- Timestamp:
- 2008-09-23 21:45:00 (2 months ago)
- Files:
-
- trunk/chrome/content/dta/manager/metalinker.js (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/chrome/content/dta/manager/metalinker.js
r1083 r1105 35 35 * ***** END LICENSE BLOCK ***** */ 36 36 37 constMETALINK_LOGO = 'chrome://dta/skin/icons/metalink48.png';37 var METALINK_LOGO = 'chrome://dta/skin/icons/metalink48.png'; 38 38 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 = { 39 var 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 53 var Metalinker = { 47 54 _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( 50 58 query, 51 59 elem, 52 60 NSResolver, 53 XPathResult.ORDERED_NODE_ SNAPSHOT_TYPE,61 XPathResult.ORDERED_NODE_ITERATOR_TYPE, 54 62 null 55 63 ); 56 for ( var j = 0; j < nodeSet.snapshotLength; ++j) {57 rv.push(n odeSet.snapshotItem(j));64 for (let n = iterator.iterateNext(); n; n = iterator.iterateNext()) { 65 rv.push(n); 58 66 } 59 67 return rv; 60 68 }, 61 69 _getNode: function ML_getNode(elem, query) { 62 varr = this._getNodes(elem, query);70 let r = this._getNodes(elem, query); 63 71 if (r.length) { 64 72 return r.shift(); … … 67 75 }, 68 76 _getSingle: function ML__getSingle(elem, query) { 69 varrv = this._getNode(elem, 'ml:' + query);77 let rv = this._getNode(elem, 'ml:' + query); 70 78 return rv ? rv.textContent.trim() : ''; 71 79 }, 72 80 _getLinkRes: function(elem, query) { 73 varrv = this._getNode(elem, 'ml:' + query);81 let rv = this._getNode(elem, 'ml:' + query); 74 82 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')); 76 84 if (n && l) { 77 85 return [n, l]; … … 106 114 download.state = CANCELED; 107 115 Tree.remove(download, false); 108 varfile = new FileFactory(download.destinationFile);116 let file = new FileFactory(download.destinationFile); 109 117 110 118 this.handleFile(file, download.referrer); … … 123 131 } 124 132 125 varfiStream = new FileInputStream(aFile, 1, 0, false);126 vardomParser = new DOMParser();127 vardoc = domParser.parseFromStream(fiStream, null, aFile.fileSize, "application/xml");128 varroot = 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; 129 137 fiStream.close(); 130 138 131 139 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); 136 143 if (++aNum > 999) { 137 144 aNum = 1; … … 140 147 141 148 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(); 148 154 if (!fileName) { 149 155 throw new Exception("File name not provided!"); 150 156 } 151 varreferrer = null;157 let referrer = null; 152 158 if (file.hasAttributeNS(NS_DTA, 'referrer')) { 153 159 referrer = file.getAttributeNS(NS_DTA, 'referrer'); … … 156 162 referrer = aReferrer; 157 163 } 158 varnum = aNum;164 let num = aNum; 159 165 if (file.hasAttributeNS(NS_DTA, 'num')) { 160 166 try { 161 167 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(); 165 174 if (file.hasAttributeNS(NS_DTA, 'date')) { 166 175 try { 167 176 startDate = new Date(parseInt(file.getAttributeNS(NS_DTA, 'num'))); 168 } catch (ex) { /* no-op */ } 177 } 178 catch (ex) { 179 /* no-op */ 180 } 169 181 } 170 182 171 varurls = [];172 varurlNodes = this._getNodes(file, 'ml:resources/ml:url');183 let urls = []; 184 let urlNodes = this._getNodes(file, 'ml:resources/ml:url'); 173 185 for each (var url in urlNodes) { 174 vartype = url.getAttribute('type');175 varpreference = 1;176 varcharset = doc.characterSet;177 varusable = null;186 let type = url.getAttribute('type'); 187 let preference = 1; 188 let charset = doc.characterSet; 189 let usable = null; 178 190 179 191 if (url.hasAttribute('preference')) { … … 212 224 } 213 225 } 214 vardesc = this._getSingle(file, 'description');226 let desc = this._getSingle(file, 'description'); 215 227 if (!desc) { 216 228 desc = this._getSingle(root, 'description'); 217 229 } 218 varsize = this._getSingle(file, 'size');230 let size = this._getSingle(file, 'size'); 219 231 size = parseInt(size); 220 232 if (isFinite(size)) { … … 251 263 } 252 264 if (downloads.length) { 253 varinfo = {265 let info = { 254 266 'identity': this._getSingle(root, 'identity'), 255 267 'description': this._getSingle(root, 'description'), … … 267 279 ); 268 280 downloads = downloads.filter(function(d) { return d.selected; }); 269 if ( info.start &&downloads.length) {281 if (downloads.length) { 270 282 startDownloads(info.start, downloads); 271 283 } … … 273 285 } 274 286 catch (ex) { 287 Debug.log("Metalinker::handleDownload", ex); 275 288 if (!(ex instanceof Error)) { 276 289 ex = new Error(_('mlerror', [ex.error])); … … 279 292 AlertService.show(_('mlerrortitle'), ex.message, false); 280 293 } 281 Debug.log("Metalinker::handleDownload", ex);282 294 } 283 295 }, 284 296 _insertDownload: function(d) { 285 297 if (d.lang && d.lang.search(/^\w{2}(?:-\w{2})?$/) != -1) { 286 varlocale = this.locale;298 let locale = this.locale; 287 299 d.selected = locale.slice(0,2) == d.lang.slice(0,2); 288 300 } … … 294 306 load: function ML_load() { 295 307 try { 296 vardownloads = window.arguments[0];308 let downloads = window.arguments[0]; 297 309 if (downloads.length) { 298 310 downloads.forEach(this._insertDownload, this); … … 310 322 } 311 323 try { 312 varoi = window.arguments[1];324 let oi = window.arguments[1]; 313 325 for (x in info) { 314 326 if (x in oi && oi[x]) { … … 332 344 let w = logo.naturalWidth; 333 345 let h = logo.naturalHeight; 334 d = Math.max(w, h);346 let d = Math.max(w, h); 335 347 336 348 ctx.scale(canvas.width / d, canvas.height / d); … … 339 351 } 340 352 catch (ex) { 341 alert(ex);342 353 Debug.log("Cannot load logo", ex); 343 354 logo.src = METALINK_LOGO; … … 349 360 logo.src = info.logo ? info.logo : METALINK_LOGO; 350 361 if (info.publisher) { 351 vare = $('publisher');362 let e = $('publisher'); 352 363 e.value = info.publisher[0]; 353 364 e.link = info.publisher[1]; … … 357 368 } 358 369 if (info.license) { 359 vare = $('license');370 let e = $('license'); 360 371 e.value = info.license[0]; 361 372 e.link = info.license[1]; … … 366 377 }, 367 378 browseDir: function() { 368 369 379 // get a new directory 370 varnewDir = Utils.askForDir(380 let newDir = Utils.askForDir( 371 381 $('directory').value, // initialize dialog with the current directory 372 382 _("validdestination") … … 390 400 return false; 391 401 } 392 402 393 403 Array.forEach( 394 404 document.getElementsByTagName('richlistitem'), … … 419 429 }, 420 430 select: function(type) { 421 varf;431 let f; 422 432 switch (type) { 423 433 case 'all': … … 430 440 f = function(node) { return !node.checked; } 431 441 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]; 434 448 node.checked = f(node); 435 449 }
