public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, bool asImport = false) { //see http://stackoverflow.com/questions/3692818/uri-makerelativeuri-behavior-on-mono if (FileSystem.Unix) { outputPath += "/"; } var sourceDirectory = Path.GetDirectoryName(sourcePath) + "/"; var outputUri = new Uri(Path.GetDirectoryName(outputPath) + "/", UriKind.Absolute); var relativePaths = FindDistinctRelativePathsIn(css); foreach (string relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] { '?', '#' }); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedSourcePathString = Path.Combine(sourceDirectory, capturedRelativePath); var resolvedSourcePath = new Uri(resolvedSourcePathString); var resolvedOutput = outputUri.MakeRelativePathTo(resolvedSourcePath); var newRelativePath = asImport ? "squishit://" + resolvedOutput : (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } if (!asImport) { css = css.Replace("squishit://", ""); } if (cssAssetsFileHasher != null) { var localRelativePathsThatExist = FindDistinctLocalRelativePathsThatExist(css); foreach (string localRelativePathThatExist in localRelativePathsThatExist) { var localRelativePathThatExistWithFileHash = cssAssetsFileHasher.AppendFileHash(outputPath, localRelativePathThatExist); if (localRelativePathThatExist != localRelativePathThatExistWithFileHash) { css = css.Replace(localRelativePathThatExist, localRelativePathThatExistWithFileHash); } } } return(css); }
public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, bool asImport = false) { //see http://stackoverflow.com/questions/3692818/uri-makerelativeuri-behavior-on-mono if (FileSystem.Unix) { outputPath += "/"; } var sourceDirectory = Path.GetDirectoryName(sourcePath) + "/"; var outputUri = new Uri(Path.GetDirectoryName(outputPath) + "/", UriKind.Absolute); var relativePaths = FindDistinctRelativePathsIn(css); foreach (string relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] { '?', '#' }); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedSourcePathString = Path.Combine(sourceDirectory, capturedRelativePath); var resolvedSourcePath = new Uri(resolvedSourcePathString); var resolvedOutput = outputUri.MakeRelativePathTo(resolvedSourcePath); var newRelativePath = asImport ? "squishit://" + resolvedOutput : (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } if (!asImport) { css = css.Replace("squishit://", ""); } if (cssAssetsFileHasher != null) { var localRelativePathsThatExist = FindDistinctLocalRelativePathsThatExist(css); foreach (string localRelativePathThatExist in localRelativePathsThatExist) { var localRelativePathThatExistWithFileHash = cssAssetsFileHasher.AppendFileHash(outputPath, localRelativePathThatExist); if (localRelativePathThatExist != localRelativePathThatExistWithFileHash) { css = css.Replace(localRelativePathThatExist, localRelativePathThatExistWithFileHash); } } } return css; }
public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, IPathTranslator pathTranslator, bool asImport = false) { var relativePaths = FindDistinctRelativePathsIn(css); if (relativePaths.Any()) { var relativeOutputPath = GetWebPath(outputPath, pathTranslator); var relativeSourcePath = GetWebPath(sourcePath, pathTranslator); var relativePathAdapter = RelativePathAdapter.Between(relativeOutputPath, relativeSourcePath); foreach (var relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] { '?', '#' }); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedOutput = relativePathAdapter.Adapt(capturedRelativePath); var newRelativePath = (asImport ? "squishit://" : "") + (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } } //moved out of if block above so that root-relative paths can be hashed as well if (cssAssetsFileHasher != null) { var hashableAssetPaths = FindHashableAssetPaths(css); foreach (var hashableAssetPath in hashableAssetPaths) { var assetPathWithHash = cssAssetsFileHasher.AppendFileHash(outputPath, hashableAssetPath); if (hashableAssetPath != assetPathWithHash) { css = ReplaceRelativePathsIn(css, hashableAssetPath, assetPathWithHash); } } } if (!asImport) { css = css.Replace("squishit://", ""); } return(css); }
public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, IPathTranslator pathTranslator, bool asImport = false) { var relativePaths = FindDistinctRelativePathsIn(css); if (relativePaths.Any()) { var relativeOutputPath = GetWebPath(outputPath, pathTranslator); var relativeSourcePath = GetWebPath(sourcePath, pathTranslator); var relativePathAdapter = RelativePathAdapter.Between(relativeOutputPath, relativeSourcePath); foreach (var relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] {'?', '#'}); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedOutput = relativePathAdapter.Adapt(capturedRelativePath); var newRelativePath = (asImport ? "squishit://" : "") + (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } } //moved out of if block above so that root-relative paths can be hashed as well if(cssAssetsFileHasher != null) { var hashableAssetPaths = FindHashableAssetPaths(css); foreach(var hashableAssetPath in hashableAssetPaths) { var assetPathWithHash = cssAssetsFileHasher.AppendFileHash(outputPath, hashableAssetPath); if(hashableAssetPath != assetPathWithHash) { css = ReplaceRelativePathsIn(css, hashableAssetPath, assetPathWithHash); } } } if(!asImport) { css = css.Replace("squishit://", ""); } return css; }
public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, bool asImport = false) { var relativePaths = FindDistinctRelativePathsIn(css); if (relativePaths.Any()) { var relativePathAdapter = RelativePathAdapter.Between(outputPath, sourcePath); foreach (var relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] { '?', '#' }); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedOutput = relativePathAdapter.Adapt(capturedRelativePath); var newRelativePath = (asImport ? "squishit://" : "") + (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } if (cssAssetsFileHasher != null) { var localRelativePathsThatExist = FindDistinctLocalRelativePathsThatExist(css); foreach (var localRelativePathThatExist in localRelativePathsThatExist) { var localRelativePathThatExistWithFileHash = cssAssetsFileHasher.AppendFileHash(outputPath, localRelativePathThatExist); if (localRelativePathThatExist != localRelativePathThatExistWithFileHash) { css = css.Replace(localRelativePathThatExist, localRelativePathThatExistWithFileHash); } } } } if (!asImport) { css = css.Replace("squishit://", ""); } return(css); }
public static string RewriteCssPaths(string outputPath, string sourcePath, string css, ICSSAssetsFileHasher cssAssetsFileHasher, bool asImport = false) { var relativePaths = FindDistinctRelativePathsIn(css); if (relativePaths.Any()) { var relativePathAdapter = RelativePathAdapter.Between(outputPath, sourcePath); foreach (var relativePath in relativePaths) { var firstIndexOfHashOrQuestionMark = relativePath.IndexOfAny(new[] {'?', '#'}); var segmentAfterHashOrQuestionMark = firstIndexOfHashOrQuestionMark >= 0 ? relativePath.Substring(firstIndexOfHashOrQuestionMark) : string.Empty; var capturedRelativePath = segmentAfterHashOrQuestionMark != string.Empty ? relativePath.Substring(0, firstIndexOfHashOrQuestionMark) : relativePath; var resolvedOutput = relativePathAdapter.Adapt(capturedRelativePath); var newRelativePath = (asImport ? "squishit://" : "") + (resolvedOutput + segmentAfterHashOrQuestionMark); css = ReplaceRelativePathsIn(css, relativePath, newRelativePath); } if (cssAssetsFileHasher != null) { var localRelativePathsThatExist = FindDistinctLocalRelativePathsThatExist(css); foreach (var localRelativePathThatExist in localRelativePathsThatExist) { var localRelativePathThatExistWithFileHash = cssAssetsFileHasher.AppendFileHash(outputPath, localRelativePathThatExist); if (localRelativePathThatExist != localRelativePathThatExistWithFileHash) { css = css.Replace(localRelativePathThatExist, localRelativePathThatExistWithFileHash); } } } } if(!asImport) { css = css.Replace("squishit://", ""); } return css; }