2023-10-31 11:47:27 -04:00

217 lines
7.3 KiB
C#
Executable File

namespace dotless.Core.configuration
{
using System;
using Input;
using Loggers;
using Plugins;
using System.Collections.Generic;
public enum DotlessSessionStateMode
{
/// <summary>
/// Session is not used.
/// </summary>
Disabled,
/// <summary>
/// Session is loaded for each request to Dotless HTTP handler.
/// </summary>
Enabled,
/// <summary>
/// Session is loaded when URL QueryString parameter specified by <seealso cref="DotlessConfiguration.SessionQueryParamName"/> is truthy.
/// </summary>
QueryParam
}
public class DotlessConfiguration
{
public const string DEFAULT_SESSION_QUERY_PARAM_NAME = "sstate";
public const int DefaultHttpExpiryInMinutes = 10080; //7 days
public static DotlessConfiguration GetDefault()
{
return new DotlessConfiguration();
}
public static DotlessConfiguration GetDefaultWeb()
{
return new DotlessConfiguration
{
Web = true
};
}
public DotlessConfiguration()
{
LessSource = typeof (FileReader);
MinifyOutput = false;
Debug = false;
CacheEnabled = true;
HttpExpiryInMinutes = DefaultHttpExpiryInMinutes;
Web = false;
SessionMode = DotlessSessionStateMode.Disabled;
SessionQueryParamName = DEFAULT_SESSION_QUERY_PARAM_NAME;
Logger = null;
LogLevel = LogLevel.Error;
Optimization = 1;
Plugins = new List<IPluginConfigurator>();
MapPathsToWeb = true;
HandleWebCompression = true;
KeepFirstSpecialComment = false;
RootPath = "";
StrictMath = false;
}
public DotlessConfiguration(DotlessConfiguration config)
{
LessSource = config.LessSource;
MinifyOutput = config.MinifyOutput;
Debug = config.Debug;
CacheEnabled = config.CacheEnabled;
Web = config.Web;
SessionMode = config.SessionMode;
SessionQueryParamName = config.SessionQueryParamName;
Logger = null;
LogLevel = config.LogLevel;
Optimization = config.Optimization;
Plugins = new List<IPluginConfigurator>();
Plugins.AddRange(config.Plugins);
MapPathsToWeb = config.MapPathsToWeb;
DisableUrlRewriting = config.DisableUrlRewriting;
InlineCssFiles = config.InlineCssFiles;
ImportAllFilesAsLess = config.ImportAllFilesAsLess;
HandleWebCompression = config.HandleWebCompression;
DisableParameters = config.DisableParameters;
KeepFirstSpecialComment = config.KeepFirstSpecialComment;
RootPath = config.RootPath;
StrictMath = config.StrictMath;
}
/// <summary>
/// Keep first comment begining /**
/// </summary>
public bool KeepFirstSpecialComment { get; set; }
/// <summary>
/// Disable using parameters
/// </summary>
public bool DisableParameters { get; set; }
/// <summary>
/// Stops URL's being adjusted depending on the imported file location
/// </summary>
public bool DisableUrlRewriting { get; set; }
/// <summary>
/// Allows you to add a path to every generated import and url in your output css.
/// This corresponds to 'rootpath' option of lessc.
/// </summary>
public string RootPath { get; set; }
/// <summary>
/// Disables variables being redefined, so less will search from the bottom of the input up.
/// Makes dotless behave like less.js with regard variables
/// </summary>
[Obsolete("The Variable Redefines feature has been removed to align with less.js")]
public bool DisableVariableRedefines { get; set; }
/// <summary>
/// Disables hex color shortening
/// </summary>
[Obsolete("The Color Compression feature has been removed to align with less.js")]
public bool DisableColorCompression { get; set; }
/// <summary>
/// Inlines css files into the less output
/// </summary>
public bool InlineCssFiles { get; set; }
/// <summary>
/// import all files (even if ending in .css) as less files
/// </summary>
public bool ImportAllFilesAsLess { get; set; }
/// <summary>
/// When this is a web configuration, whether to map the paths to the website or just
/// be relative to the current directory
/// </summary>
public bool MapPathsToWeb { get; set; }
/// <summary>
/// Whether to minify the ouput
/// </summary>
public bool MinifyOutput { get; set; }
/// <summary>
/// Prints helpful comments in the output while debugging.
/// </summary>
public bool Debug { get; set; }
/// <summary>
/// For web handlers output in a cached mode. Reccommended on.
/// </summary>
public bool CacheEnabled { get; set; }
/// <summary>
/// When <seealso cref="CacheEnabled"/> is set to true, use this parameter to set how far in the future the expires header will be set.
/// For example, to have the browser cache the CSS for five minutes, set this property to 5.
/// </summary>
public int HttpExpiryInMinutes { get; set; }
/// <summary>
/// IFileReader type to use to get imported files
/// </summary>
public Type LessSource { get; set; }
/// <summary>
/// Whether this is used in a web context or not
/// </summary>
public bool Web { get; set; }
/// <summary>
/// Specifies the mode the HttpContext.Session is loaded.
/// </summary>
public DotlessSessionStateMode SessionMode { get; set; }
/// <summary>
/// Gets or sets the URL QueryString parameter name used in conjunction with <seealso cref="SessionMode"/> set to <seealso cref="DotlessSessionStateMode.QueryParam"/>.
/// </summary>
public string SessionQueryParamName { get; set; }
/// <summary>
/// The ILogger type
/// </summary>
public Type Logger { get; set; }
/// <summary>
/// The Log level
/// </summary>
public LogLevel LogLevel { get; set; }
/// <summary>
/// Optimisation int
/// 0 - do not chunk up the input
/// > 0 - chunk up output
///
/// Recommended value - 1
/// </summary>
public int Optimization { get; set; }
/// <summary>
/// Whether to handle the compression (e.g. look at Accept-Encoding) - true or leave it to IIS - false
/// </summary>
public bool HandleWebCompression { get; set; }
/// <summary>
/// Plugins to use
/// </summary>
public List<IPluginConfigurator> Plugins { get; private set; }
/// <summary>
/// Whether to only evaluate mathematical expressions when they are wrapped in an extra set of parentheses.
/// </summary>
public bool StrictMath { get; set; }
}
}