postcss-url
Advanced tools
Comparing version 7.0.0 to 7.1.0
@@ -0,4 +1,9 @@ | ||
# 7.1.0 - 2017-07-19 | ||
Added: `optimizeSvgEncode` option for inlined svg ([#103](https://github.com/postcss/postcss-url/issues/103)) | ||
Added: `rebase` as fallback in copy ([#104](https://github.com/postcss/postcss-url/issues/104)) | ||
# 7.0.0 - 2017-06-05 | ||
Added: PostCss 6 support | ||
Added: PostCss 6 support | ||
@@ -5,0 +10,0 @@ # 6.3.0 - 2017-06-04 |
{ | ||
"name": "postcss-url", | ||
"version": "7.0.0", | ||
"version": "7.1.0", | ||
"description": "PostCSS plugin to rebase or inline on url().", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -145,2 +145,3 @@ # postcss-url | ||
* `ignoreFragmentWarning` - do not warn when an SVG URL with a fragment is inlined | ||
* `optimizeSvgEncode` - reduce size of inlined svg (IE9+, Android 3+) | ||
* `copy` | ||
@@ -147,0 +148,0 @@ * `basePath` - path or array of paths to search assets (relative to `from`, or absolute) |
'use strict'; | ||
/** | ||
* Optimize encoding SVG files (IE9+, Android 3+) | ||
* @see https://codepen.io/tigt/post/optimizing-svgs-in-data-uris | ||
* | ||
* @param {String} svgContent | ||
* @returns {String} | ||
*/ | ||
const optimizedSvgEncode = (svgContent) => { | ||
const result = encodeURIComponent(svgContent) | ||
.replace(/%3D/g, '=') | ||
.replace(/%3A/g, ':') | ||
.replace(/%2F/g, '/') | ||
.replace(/%22/g, "'") | ||
.replace(/%2C/g, ',') | ||
.replace(/%3B/g, ';'); | ||
// | ||
return result.replace(/(%[0-9A-Z]{2})/g, (matched, AZ) => { | ||
return AZ.toLowerCase(); | ||
}); | ||
}; | ||
/** | ||
* Encoding file contents to string | ||
@@ -8,9 +29,11 @@ * | ||
* @param {String} [encodeType=base64|encodeURI|encodeURIComponent] | ||
* @param {Boolean} [shouldOptimizeURIEncode] | ||
* @returns {string} | ||
*/ | ||
module.exports = (file, encodeType) => { | ||
const inlineDecl = `data:${file.mimeType}`; | ||
module.exports = (file, encodeType, shouldOptimizeURIEncode) => { | ||
const dataMime = `data:${file.mimeType}`; | ||
if (encodeType === 'base64') { | ||
return `${inlineDecl};base64,${file.contents.toString('base64')}`; | ||
return `${dataMime};base64,${file.contents.toString('base64')}`; | ||
} | ||
@@ -20,5 +43,15 @@ | ||
return `${inlineDecl},${encodeFunc(file.contents.toString('utf8')) | ||
const content = file.contents.toString('utf8') | ||
// removing new lines | ||
.replace(/\n+/g, ''); | ||
let encodedStr = (shouldOptimizeURIEncode && encodeType === 'encodeURIComponent') | ||
? optimizedSvgEncode(content) | ||
: encodeFunc(content); | ||
encodedStr = encodedStr | ||
.replace(/%20/g, ' ') | ||
.replace(/#/g, '%23')}`; | ||
.replace(/#/g, '%23'); | ||
return `${dataMime},${encodedStr}`; | ||
}; |
@@ -6,2 +6,3 @@ 'use strict'; | ||
const processCopy = require('./copy'); | ||
const processRebase = require('./rebase'); | ||
@@ -25,2 +26,4 @@ const encodeFile = require('../lib/encode'); | ||
return processCopy.apply(null, arguments); | ||
case 'rebase': | ||
return processRebase.apply(null, arguments); | ||
default: | ||
@@ -67,3 +70,3 @@ return; | ||
const isSvg = file.mimeType === 'image/svg+xml'; | ||
const defaultEncodeType = isSvg ? 'encodeUriComponent' : 'base64'; | ||
const defaultEncodeType = isSvg ? 'encodeURIComponent' : 'base64'; | ||
const encodeType = options.encodeType || defaultEncodeType; | ||
@@ -79,5 +82,5 @@ | ||
const encodedStr = encodeFile(file, encodeType); | ||
const encodedStr = encodeFile(file, encodeType, options.optimizeSvgEncode && isSvg); | ||
return (options.includeUriFragment && asset.hash) ? encodedStr + asset.hash : encodedStr; | ||
}; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
35094
635
258