62 lines
1.6 KiB
JavaScript
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;
|
|
}
|
|
};
|