public CSSAssetsFileHasher(string hashQueryStringKeyName, IResolver fileResolver, IHasher hasher, IPathTranslator pathTranslator)
 {
     HashQueryStringKeyName = hashQueryStringKeyName;
     FileSystemResolver = fileResolver;
     Hasher = hasher;
     this.pathTranslator = pathTranslator;
 }
 public CSSAssetsFileHasher(string hashQueryStringKeyName, IResolver fileResolver, IHasher hasher, IPathTranslator pathTranslator)
 {
     HashQueryStringKeyName = hashQueryStringKeyName;
     FileSystemResolver     = fileResolver;
     Hasher = hasher;
     this.pathTranslator = pathTranslator;
 }
Exemple #3
0
 public CatalogItemPath ConvertToCatalogPath(IPathTranslator pathTrans)
 {
     if (pathTrans == null)
     {
         return(new CatalogItemPath(NativeCatalogPath, base.EditSessionID));
     }
     return(new CatalogItemPath(pathTrans.ExternalToCatalog(base.Value), base.EditSessionID));
 }
        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
        StringBuilder IPathManager.ConstructUrlBuilder(IPathTranslator pathTranslator, string serverVirtualFolderUrl, string itemPath, bool alreadyEscaped, bool addItemPathAsQuery, bool forceAddItemPathAsQuery)
        {
            if (!alreadyEscaped)
            {
                serverVirtualFolderUrl = ((!string.IsNullOrEmpty(serverVirtualFolderUrl)) ? new Uri(serverVirtualFolderUrl).AbsoluteUri : "http://reportserver");
            }
            string        value         = UrlUtil.UrlEncode(itemPath);
            StringBuilder stringBuilder = new StringBuilder(serverVirtualFolderUrl);

            if (addItemPathAsQuery)
            {
                stringBuilder.Append("?");
            }
            stringBuilder.Append(value);
            return(stringBuilder);
        }
Exemple #6
0
        public static Input FromAsset(Asset asset, IPathTranslator pathTranslator, Func <bool> isDebuggingEnabled)
        {
            if (!asset.IsEmbeddedResource)
            {
                if (isDebuggingEnabled())
                {
                    return(new Input(pathTranslator.ResolveAppRelativePathToFileSystem(asset.LocalPath), asset.IsRecursive, ResolverFactory.Get <FileSystemResolver>()));
                }
                if (asset.IsRemoteDownload)
                {
                    return(new Input(asset.RemotePath, false, ResolverFactory.Get <HttpResolver>()));
                }
                //this is weird - do we absolutely need to treat as the remote downloads as local when debugging?
                return(new Input(pathTranslator.ResolveAppRelativePathToFileSystem(asset.LocalPath), asset.IsRecursive, ResolverFactory.Get <FileSystemResolver>()));
            }

            return(asset.IsEmbeddedInRootNamespace ? new Input(asset.RemotePath, false, ResolverFactory.Get <RootEmbeddedResourceResolver>())
                : new Input(asset.RemotePath, false, ResolverFactory.Get <StandardEmbeddedResourceResolver>()));
        }
Exemple #7
0
        public static Input FromAsset(Asset asset, IPathTranslator pathTranslator, Func<bool> isDebuggingEnabled)
        {
            if (!asset.IsEmbeddedResource)
            {
                if (isDebuggingEnabled())
                {
                    return new Input(pathTranslator.ResolveAppRelativePathToFileSystem(asset.LocalPath), asset.IsRecursive, ResolverFactory.Get<FileSystemResolver>());
                }
                if (asset.IsRemoteDownload)
                {
                    return new Input(asset.RemotePath, false, ResolverFactory.Get<HttpResolver>());
                }
                //this is weird - do we absolutely need to treat as the remote downloads as local when debugging?
                return new Input(pathTranslator.ResolveAppRelativePathToFileSystem(asset.LocalPath), asset.IsRecursive, ResolverFactory.Get<FileSystemResolver>());
            }

            return asset.IsEmbeddedInRootNamespace ? new Input(asset.RemotePath, false, ResolverFactory.Get<RootEmbeddedResourceResolver>())
                : new Input(asset.RemotePath, false, ResolverFactory.Get<StandardEmbeddedResourceResolver>());
        }
        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);
        }
 private static string GetWebPath(string outputPath, IPathTranslator pathTranslator)
 {
     return "/" + pathTranslator.ResolveFileSystemPathToAppRelative(Path.GetDirectoryName(outputPath)).TrimStart('/') + "/";
 }
 protected override CatalogItemContextBase <string> CreateContext(IPathTranslator pathTranslator)
 {
     return(new PreviewItemContext());
 }
Exemple #11
0
 protected abstract CatalogItemContextBase <TPathStorageType> CreateContext(IPathTranslator pathTranslator);
Exemple #12
0
 public Configuration UsePathTranslator(IPathTranslator translator)
 {
     _defaultPathTranslator = translator;
     return(this);
 }
Exemple #13
0
 /// <summary>
 /// Construct LESS preprocessor with custom engine construction.
 /// </summary>
 /// <param name="engineBuilder">Function for custom ILessEngine construction.</param>
 /// <param name="pathTranslator">Translator for moving between web and filesystem paths.</param>
 public LessPreprocessor(Func <ILessEngine> engineBuilder, IPathTranslator pathTranslator)
 {
     _engineBuilder      = engineBuilder;
     this.pathTranslator = pathTranslator;
 }
 public CatalogItemUrlBuilder(ICatalogItemContext ctx, bool isFolder)
 {
     m_pathTranslator = ctx.PathTranslator;
     m_pathManager    = ctx.PathManager;
     Construct(ctx.HostRootUri, ctx.HostSpecificItemPath, alreadyEscaped: false, addItemPathAsQuery: true, isFolder);
 }
 private static string GetWebPath(string outputPath, IPathTranslator pathTranslator)
 {
     return("/" + pathTranslator.ResolveFileSystemPathToAppRelative(Path.GetDirectoryName(outputPath)).TrimStart('/') + "/");
 }
Exemple #16
0
 public FilePathMutexProvider(IHasher hasher, IPathTranslator pathTranslator)
 {
     this.hasher         = hasher;
     this.pathTranslator = pathTranslator;
 }
 public FilePathMutexProvider(IHasher hasher, IPathTranslator pathTranslator)
 {
     this.hasher = hasher;
     this.pathTranslator = pathTranslator;
 }
Exemple #18
0
 public CatalogItemUrlBuilder(ICatalogItemContext ctx, bool isFolder)
 {
     this.m_pathTranslator = ctx.PathTranslator;
     this.m_pathManager    = ctx.PathManager;
     this.Construct(ctx.HostRootUri, ctx.HostSpecificItemPath, false, true, isFolder);
 }
Exemple #19
0
 /// <summary>
 /// Construct LESS preprocessor with custom engine construction.
 /// </summary>
 /// <param name="engineBuilder">Function for custom ILessEngine construction.</param>
 /// <param name="pathTranslator">Translator for moving between web and filesystem paths.</param>
 public LessPreprocessor(Func<ILessEngine> engineBuilder, IPathTranslator pathTranslator)
 {
     _engineBuilder = engineBuilder;
     this.pathTranslator = pathTranslator;
 }