12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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;
- }
- };
|