From 8016e6711bc338167fa219cd7baa92e01293a500 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 26 Feb 2024 22:13:40 +0000 Subject: [PATCH] md-sandbox: fix css url rewriter; closes #74 `@import url(https://...)` would get rewritten to baseURL + https://... also reorder the generated csstext so that @imports appear first; necessary for stuff like googlefonts to take effect --- copyparty/web/browser.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 03fb2339..4435b7e3 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -7569,12 +7569,25 @@ var globalcss = (function () { var css = ds[b].cssText.split(/\burl\(/g); ret += css[0]; for (var c = 1; c < css.length; c++) { - var delim = (/^["']/.exec(css[c])) ? css[c].slice(0, 1) : ''; - ret += 'url(' + delim + ((css[c].slice(0, 8).indexOf('://') + 1 || css[c].startsWith('/')) ? '' : base) + - css[c].slice(delim ? 1 : 0); + var m = /(^ *["']?)(.*)/.exec(css[c]), + delim = m[1], + ctxt = m[2], + is_abs = /^\/|[^)/:]+:\/\//.exec(ctxt); + + ret += 'url(' + delim + (is_abs ? '' : base) + ctxt; } ret += '\n'; } + if (ret.indexOf('\n@import') + 1) { + var c0 = ret.split('\n'), + c1 = [], + c2 = []; + + for (var a = 0; a < c0.length; a++) + (c0[a].startsWith('@import') ? c1 : c2).push(c0[a]); + + ret = c1.concat(c2).join('\n'); + } } catch (ex) { console.log('could not read css', a, base);