Beispiel #1
0
 public static ILessEngine GetEngine(DotlessConfiguration config)
 {
     if (config == null)
     {
         config = new WebConfigConfigurationLoader().GetConfiguration();
     }
     return new EngineFactory(config).GetEngine(new AspNetContainerFactory());
 }
Beispiel #2
0
        private string GenerateCss(string import, BundleContext context)
        {
            var configuration = new WebConfigConfigurationLoader().GetConfiguration();
            configuration.DisableParameters = true;

            var logger = new InMemoryLogger(configuration.LogLevel);
            var engine = new EngineFactory(configuration).GetEngine(CreateContainer(context, logger));
            var cssOutput = engine.TransformToCss(import, context.BundleVirtualPath);
            if (!engine.LastTransformationSuccessful)
            {
                return logger.GetOutput();
            }

            return cssOutput;
        }
        public IDictionary<string, string> GetParameters()
        {
            var dictionary = new Dictionary<string, string>();
            var queryString = http.Context.Request.QueryString;
            var allKeys = queryString.AllKeys;
            var config = new WebConfigConfigurationLoader().GetConfiguration();
            var sessionParam = config.SessionMode == DotlessSessionStateMode.QueryParam ? config.SessionQueryParamName : null;
            foreach (var key in allKeys)
            {
                if (key != null)
                {
                    if (key.Equals(sessionParam, StringComparison.OrdinalIgnoreCase) || !_keyWhitelist.IsMatch(key))
                        continue;

                    string s = queryString[key];

                    if (!_valueWhitelist.IsMatch(s))
                        continue;

                    dictionary.Add(key, s);
                }
            }
            return dictionary;
        }
        internal static string Process(ref IEnumerable<BundleFile> files)
        {
            DotlessConfiguration lessConfig = new WebConfigConfigurationLoader().GetConfiguration();

            if (!lessConfig.LessSource.GetInterfaces().Contains(typeof (IFileReaderWithResolver)))
            {
                lessConfig.LessSource = typeof (LessVirtualFileReader);
            }

            // system.Web.Optimization cache is used instead
            lessConfig.CacheEnabled = false;

            var content = new StringBuilder();

            var targetFiles = new List<BundleFile>();

            foreach (BundleFile bundleFile in files)
            {
                // initialize the less engine once for each file.
                // this is to prevent leaking state between files
                ILessEngine lessEngine = LessWeb.GetEngine(lessConfig);
                LessEngine underlyingLessEngine = lessEngine.ResolveLessEngine();
                Parser lessParser = underlyingLessEngine.Parser;

                targetFiles.Add(bundleFile);
                string filePath = bundleFile.IncludedVirtualPath;
                filePath = filePath.Replace('\\', '/');
                filePath = VirtualPathUtility.ToAppRelative(filePath);

                lessParser.SetCurrentFilePath(filePath);
                string source = bundleFile.ApplyTransforms();
                string extension = VirtualPathUtility.GetExtension(filePath);

                // if plain CSS file, do not transform LESS
                if (lessConfig.ImportAllFilesAsLess ||
                    ".less".Equals(extension, StringComparison.InvariantCultureIgnoreCase) ||
                    ".less.css".Equals(extension, StringComparison.InvariantCultureIgnoreCase))
                {
                    string lessOutput = lessEngine.TransformToCss(source, filePath);

                    // pass the transformation result if successful
                    if (lessEngine.LastTransformationSuccessful)
                    {
                        source = lessOutput;
                    }
                    else
                    {
                        // otherwise write out error message.
                        // the transformation error is logged in LessEngine.TransformToCss
                        if (lessConfig.Debug)
                        {
                            content.AppendLine(string.Format(
                                "/* Error occurred in LESS transformation of the file: {0}. Please see details in the dotless log */",
                                bundleFile.IncludedVirtualPath));
                        }
                        continue;
                    }
                }

                source = ConvertUrlsToAbsolute(bundleFile.IncludedVirtualPath, source);

                content.AppendLine(source);

                BundleFile[] fileDependencies = GetFileDependencies(underlyingLessEngine).ToArray();
                targetFiles.AddRange(fileDependencies);

                DependencyCache.SaveFileDependencies(filePath, fileDependencies.Select(file => file.IncludedVirtualPath).ToArray());
            }

            // include imports in bundle files to register cache dependencies
            files = BundleTable.EnableOptimizations ? targetFiles.Distinct() : targetFiles;

            return content.ToString();
        }