| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | var path = require('path');var url = require('url');var reduceUrls = require('./reduce');var isWindows = process.platform == 'win32';function isAbsolute(uri) {  return uri[0] == '/';}function isSVGMarker(uri) {  return uri[0] == '#';}function isEscaped(uri) {  return uri.indexOf('__ESCAPED_URL_CLEAN_CSS__') === 0;}function isInternal(uri) {  return /^\w+:\w+/.test(uri);}function isRemote(uri) {  return /^[^:]+?:\/\//.test(uri) || uri.indexOf('//') === 0;}function isSameOrigin(uri1, uri2) {  return url.parse(uri1).protocol == url.parse(uri2).protocol &&    url.parse(uri1).host == url.parse(uri2).host;}function isImport(uri) {  return uri.lastIndexOf('.css') === uri.length - 4;}function isData(uri) {  return uri.indexOf('data:') === 0;}function absolute(uri, options) {  return path    .resolve(path.join(options.fromBase || '', uri))    .replace(options.toBase, '');}function relative(uri, options) {  return path.relative(options.toBase, path.join(options.fromBase || '', uri));}function normalize(uri) {  return isWindows ? uri.replace(/\\/g, '/') : uri;}function rebase(uri, options) {  if (isAbsolute(uri) || isSVGMarker(uri) || isEscaped(uri) || isInternal(uri))    return uri;  if (options.rebase === false && !isImport(uri))    return uri;  if (!options.imports && isImport(uri))    return uri;  if (isData(uri))    return '\'' + uri + '\'';  if (isRemote(uri) && !isRemote(options.toBase))    return uri;  if (isRemote(uri) && !isSameOrigin(uri, options.toBase))    return uri;  if (!isRemote(uri) && isRemote(options.toBase))    return url.resolve(options.toBase, uri);  return options.absolute ?    normalize(absolute(uri, options)) :    normalize(relative(uri, options));}function quoteFor(url) {  if (url.indexOf('\'') > -1)    return '"';  else if (url.indexOf('"') > -1)    return '\'';  else if (/\s/.test(url) || /[\(\)]/.test(url))    return '\'';  else    return '';}function rewriteUrls(data, options, context) {  return reduceUrls(data, context, function (originUrl, tempData) {    var url = originUrl.replace(/^(url\()?\s*['"]?|['"]?\s*\)?$/g, '');    var match = originUrl.match(/^(url\()?\s*(['"]).*?(['"])\s*\)?$/);    var quote;    if (!!options.urlQuotes && match && match[2] === match[3]) {      quote = match[2];    } else {      quote = quoteFor(url);    }    tempData.push('url(' + quote + rebase(url, options) + quote + ')');  });}module.exports = rewriteUrls;
 |