backoffice/node_modules/clean-css/lib/images/url-rewriter.js

62 lines
1.6 KiB
JavaScript

var path = require('path');
var url = require('url');
module.exports = {
process: function(data, options) {
var tempData = [];
var nextStart = 0;
var nextEnd = 0;
var cursor = 0;
for (; nextEnd < data.length;) {
nextStart = data.indexOf('url(', nextEnd);
if (nextStart == -1)
break;
nextEnd = data.indexOf(')', nextStart + 4);
if (nextEnd == -1)
break;
tempData.push(data.substring(cursor, nextStart));
var url = data.substring(nextStart + 4, nextEnd);
if (!/\/\*|\*\//.test(url))
url = url.replace(/['"]/g, '');
tempData.push('url(' + this._rebased(url, options) + ')');
cursor = nextEnd + 1;
}
return tempData.length > 0 ?
tempData.join('') + data.substring(cursor, data.length) :
data;
},
_rebased: function(resource, options) {
var specialUrl = resource[0] == '/' ||
resource[0] == '#' ||
resource.substring(resource.length - 4) == '.css' ||
resource.indexOf('data:') === 0 ||
/^https?:\/\//.exec(resource) !== null ||
/__\w+__/.exec(resource) !== null;
var rebased;
if (specialUrl)
return 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;
}
};