jonkemp / gulp-inline-css

Inline linked css in an html file. Useful for emails.
MIT License
272 stars 29 forks source link

codeBlocks has no effect #69

Open gultyayev opened 4 years ago

gultyayev commented 4 years ago

I'm having troubles parsing templates which have expressions like this {% if balance < 5 %}. And the parsing is failing pointing to <.

I've tried to change the config to this

function inliner(css) {
  var css = fs.readFileSync(css).toString();
  var mqCss = siphon(css);

  var pipe = lazypipe()
    .pipe($.inlineCss, {
      applyStyleTags: false,
      removeStyleTags: true,
      preserveMediaQueries: true,
      removeLinkTags: false,
      codeBlocks: {
        HBS: { start: '{{', end: '}}' },
        volt: { start: '{%', end: '%}' },
        mustache: { start: '${{', end: '}}$' }
      }
    })
    .pipe($.replace, '<!-- <style> -->', `<style>${mqCss}</style>`)
    .pipe(
      $.replace,
      '<link rel="stylesheet" type="text/css" href="css/app.css">',
      ''
    )
    .pipe($.htmlmin, {
      collapseWhitespace: true,
      minifyCSS: true
    });

  return pipe();
}

But this doesn't seem to help.

AzRieilStuff commented 4 years ago

The point is here

const re = new RegExp(`${blocks[key].start}([\\S\\s]*?)${blocks[key].end}`, 'g');

You should escape spec. chars, one slash coz regex and one as it interpolated strings

volt: { start: '{\\%', end: '\\%}' },