jellyfish-web/dashboard-ui/bower_components/emby-webcomponents/multidownload.js
2018-10-23 01:05:09 +03:00

35 lines
No EOL
1.4 KiB
JavaScript

define(["browser"], function(browser) {
"use strict";
function fallback(urls) {
var i = 0;
! function createIframe() {
var frame = document.createElement("iframe");
frame.style.display = "none", frame.src = urls[i++], document.documentElement.appendChild(frame);
var interval = setInterval(function() {
"complete" !== frame.contentWindow.document.readyState && "interactive" !== frame.contentWindow.document.readyState || (clearInterval(interval), setTimeout(function() {
frame.parentNode.removeChild(frame)
}, 1e3), i < urls.length && createIframe())
}, 100)
}()
}
function sameDomain(url) {
var a = document.createElement("a");
return a.href = url, location.hostname === a.hostname && location.protocol === a.protocol
}
function download(url) {
var a = document.createElement("a");
a.download = "", a.href = url, a.dispatchEvent(new MouseEvent("click"))
}
return function(urls) {
if (!urls) throw new Error("`urls` required");
if (void 0 === document.createElement("a").download) return fallback(urls);
var delay = 0;
urls.forEach(function(url) {
if (browser.firefox && !sameDomain(url)) return setTimeout(download.bind(null, url), 100 * ++delay);
download(url)
})
}
});