UNPKG

clean-css

Version:
59 lines (47 loc) 1.58 kB
var path = require('path'); var url = require('url'); var UrlScanner = require('../utils/url-scanner'); function UrlRewriter(options, context) { this.options = options; this.context = context; } UrlRewriter.prototype.process = function (data) { var self = this; return new UrlScanner(data, this.context).reduce(function (url, tempData) { url = url.replace(/^url\(\s*['"]?|['"]?\s*\)$/g, ''); tempData.push('url(' + rebase(url, self.options) + ')'); }); }; function rebase(resource, options) { // TODO: this is getting insane now - pending refactor in #436 var importUrl = resource.substring(resource.length - 4) == '.css'; var dataUri = resource.indexOf('data:') === 0; var specialUrl = resource[0] == '/' || resource[0] == '#' || (!options.imports && importUrl) || dataUri || /^https?:\/\//.exec(resource) !== null || /__\w+__/.exec(resource) !== null; var rebased; if (false === options.urls) { if (options.imports && importUrl) specialUrl = false; else specialUrl = true; } if (specialUrl) return dataUri ? '\'' + resource + '\'' : resource; if (/https?:\/\//.test(options.toBase)) return url.resolve(options.toBase, resource); if (options.absolute) { rebased = path .resolve(path.join(options.fromBase, resource)) .replace(options.toBase, ''); } else { rebased = path.relative(options.toBase, path.join(options.fromBase, resource)); } return process.platform == 'win32' ? rebased.replace(/\\/g, '/') : rebased; } module.exports = UrlRewriter;