public static ILessEngine GetEngine(DotlessConfiguration config) { if (config == null) { config = new WebConfigConfigurationLoader().GetConfiguration(); } return new EngineFactory(config).GetEngine(new AspNetContainerFactory()); }
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(); }