|
|
|
@ -155,6 +155,50 @@ window.ExportHtml = Popup => { |
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const getWebFonts = () => { |
|
|
|
|
fontUrls = []; |
|
|
|
|
|
|
|
|
|
for (let sheet of document.styleSheets) { |
|
|
|
|
// Get the base URL of the stylesheet
|
|
|
|
|
let baseUrl = sheet.href ? new URL(sheet.href).origin : window.location.origin; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
for (let rule of sheet.cssRules) { |
|
|
|
|
if (rule.type === CSSRule.FONT_FACE_RULE) { |
|
|
|
|
let src = rule.style.getPropertyValue('src'); |
|
|
|
|
let urlMatch = src.match(/url\(["']?(.+?)["']?\)/); |
|
|
|
|
if (urlMatch) { |
|
|
|
|
let fontUrl = urlMatch[1]; |
|
|
|
|
|
|
|
|
|
// Resolve the URL relative to the stylesheet's base URL
|
|
|
|
|
let resolvedUrl = new URL(fontUrl, baseUrl); |
|
|
|
|
fontUrls.push(resolvedUrl.href); // Using .href to get the absolute URL
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (e) { |
|
|
|
|
console.log('Access to stylesheet blocked:', e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return fontUrls; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const downloadFonts = async(elements, zip) => { |
|
|
|
|
await asyncForEach(elements, async elem => { |
|
|
|
|
const response = await fetch(elem); |
|
|
|
|
const responseBody = await response.blob(); |
|
|
|
|
const filename = elem.split('/') |
|
|
|
|
.pop() |
|
|
|
|
.split('?') |
|
|
|
|
.shift() |
|
|
|
|
.split('#') |
|
|
|
|
.shift(); |
|
|
|
|
const fileFullPath = `webfonts/${filename}`; |
|
|
|
|
zip.file(fileFullPath, responseBody); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const downloadCardCovers = async (elements, zip, boardSlug) => { |
|
|
|
|
await asyncForEach(elements, async elem => { |
|
|
|
|
const response = await fetch( |
|
|
|
@ -197,6 +241,7 @@ window.ExportHtml = Popup => { |
|
|
|
|
await downloadStylesheets(getStylesheetList(), zip); |
|
|
|
|
await downloadSrcAttached(getSrcAttached(), zip, boardSlug); |
|
|
|
|
await downloadCardCovers(getCardCovers(), zip, boardSlug); |
|
|
|
|
await downloadFonts(getWebFonts(), zip); |
|
|
|
|
|
|
|
|
|
addBoardHTMLToZip(boardSlug, zip); |
|
|
|
|
|
|
|
|
|