Skip to content

Commit

Permalink
minify: rebase relative urls in imported files.
Browse files Browse the repository at this point in the history
4177b3f moved the font-face declarations from src/static/css/pad.css to two
imported files (src/static/css/pad/fonts.css, src/static/css/pad/toolbar.css)
in a different directory.

This results in the font files being invoked from CSSes residing in different
directories in the minified and un-minified case. URLs in the src attribute are
relative to the stylesheet path [0], and so we have to start requiring clean-css
to rebase them.

Before this change, the non minified casse worked by chance, because there were
a lot of "..", which ended up resolving to the root of the site anyways.

Fixes #3956

[0] https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src
  • Loading branch information
muxator committed May 14, 2020
1 parent 6dd9e9a commit 37abb21
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions src/node/utils/Minify.js
Original file line number Diff line number Diff line change
Expand Up @@ -426,17 +426,17 @@ function compressCSS(filename, content, callback)
/*
* Changes done to migrate CleanCSS 3.x -> 4.x:
*
* 1. Disabling rebase is necessary because otherwise the URLs for the web
* fonts become wrong.
* 1. Rework the rebase logic, because the API was simplified (but we have
* less control now). See:
* https://github.com/jakubpawlowicz/clean-css/blob/08f3a74925524d30bbe7ac450979de0a8a9e54b2/README.md#important-40-breaking-changes
*
* EXAMPLE 1:
* /static/css/src/static/font/fontawesome-etherpad.woff
* instead of
* /static/font/fontawesome-etherpad.woff
* EXAMPLE 2 (this is more surprising):
* /p/src/static/font/opendyslexic.otf
* instead of
* /static/font/opendyslexic.otf
* EXAMPLE:
* The URLs contained in a CSS file (including all the stylesheets
* imported by it) residing on disk at:
* /home/muxator/etherpad/src/static/css/pad.css
*
* Will be rewritten rebasing them to:
* /home/muxator/etherpad/src/static/css
*
* 2. CleanCSS.minify() can either receive a string containing the CSS, or
* an array of strings. In that case each array element is interpreted as
Expand All @@ -447,7 +447,13 @@ function compressCSS(filename, content, callback)
* "content" argument, but we have to wrap the absolute path to the CSS
* in an array and ask the library to read it by itself.
*/
new CleanCSS({rebase: false}).minify([absPath], function (errors, minified) {

const basePath = path.dirname(absPath);

new CleanCSS({
rebase: true,
rebaseTo: basePath,
}).minify([absPath], function (errors, minified) {
if (errors) {
// on error, just yield the un-minified original, but write a log message
console.error(`CleanCSS.minify() returned an error on ${filename} (${absPath}): ${errors}`);
Expand Down

0 comments on commit 37abb21

Please sign in to comment.