diff --git a/client/lib/exportHTML.js b/client/lib/exportHTML.js
index 1d00ccea5..04b2c7892 100644
--- a/client/lib/exportHTML.js
+++ b/client/lib/exportHTML.js
@@ -57,6 +57,9 @@ window.ExportHtml = Popup => {
Array.from(
document.querySelectorAll('#header-main-bar .board-header-btns'),
).forEach(elem => elem.remove());
+ Array.from(
+ document.querySelectorAll('.js-pop-over, .pop-over'),
+ ).forEach(elem => elem.remove());
Array.from(document.querySelectorAll('.list-composer')).forEach(elem =>
elem.remove(),
);
@@ -152,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(
@@ -194,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);