Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #5
0
        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;
        }