/// <summary> /// Actualizes a vendor prefixes in CSS assets by using Andrey Sitnik's Autoprefixer /// </summary> /// <param name="assets">Set of CSS assets</param> /// <returns>Set of processed CSS assets</returns> public override IList <IAsset> PostProcess(IList <IAsset> assets) { if (assets == null) { throw new ArgumentNullException( nameof(assets), string.Format(CoreStrings.Common_ArgumentIsNull, nameof(assets)) ); } if (assets.Count == 0) { return(assets); } var assetsToProcessing = assets.Where(a => a.IsStylesheet).ToList(); if (assetsToProcessing.Count == 0) { return(assets); } AutoprefixingOptions options = CreateAutoprefixingOptions(); using (var cssAutoprefixer = new CssAutoprefixer(_createJsEngineInstance, _virtualFileSystemWrapper, options)) { foreach (var asset in assetsToProcessing) { InnerPostProcess(asset, cssAutoprefixer); } } return(assets); }
/// <summary> /// Creates a autoprefixing options /// </summary> /// <returns>Autoprefixing options</returns> private AutoprefixingOptions CreateAutoprefixingOptions() { var options = new AutoprefixingOptions { Browsers = Browsers, Cascade = Cascade, Add = Add, Remove = Remove, Supports = Supports, Flexbox = Flexbox, Grid = Grid, Stats = Stats }; return(options); }
/// <summary> /// Actualizes a vendor prefixes in CSS asset by using Andrey Sitnik's Autoprefixer /// </summary> /// <param name="asset">CSS asset</param> /// <returns>Processed CSS asset</returns> public override IAsset PostProcess(IAsset asset) { if (asset == null) { throw new ArgumentException(CoreStrings.Common_ValueIsEmpty, "asset"); } AutoprefixingOptions options = CreateAutoprefixingOptions(); using (var cssAutoprefixer = new CssAutoprefixer(_createJsEngineInstance, _virtualFileSystemWrapper, options)) { InnerPostProcess(asset, cssAutoprefixer); } return(asset); }
/// <summary> /// Actualizes a vendor prefixes in CSS asset by using Andrey Sitnik's Autoprefixer /// </summary> /// <param name="asset">CSS asset</param> /// <returns>Processed CSS asset</returns> public override IAsset PostProcess(IAsset asset) { if (asset == null) { throw new ArgumentNullException( nameof(asset), string.Format(CoreStrings.Common_ArgumentIsNull, nameof(asset)) ); } AutoprefixingOptions options = CreateAutoprefixingOptions(); using (var cssAutoprefixer = new CssAutoprefixer(_createJsEngineInstance, _virtualFileSystemWrapper, options)) { InnerPostProcess(asset, cssAutoprefixer); } return(asset); }
/// <summary> /// Constructs a instance of CSS-autoprefixer /// </summary> /// <param name="createJsEngineInstance">Delegate that creates an instance of JavaScript engine</param> /// <param name="defaultOptions">Default autoprefixing options</param> public CssAutoprefixer(Func<IJsEngine> createJsEngineInstance, AutoprefixingOptions defaultOptions) { _jsEngine = createJsEngineInstance(); _defaultOptionsString = (defaultOptions != null) ? ConvertAutoprefixingOptionsToJson(defaultOptions).ToString() : "null"; }
/// <summary> /// Converts a autoprefixing options to JSON /// </summary> /// <param name="options">Autoprefixing options</param> /// <returns>Autoprefixing options in JSON format</returns> private static JObject ConvertAutoprefixingOptionsToJson(AutoprefixingOptions options) { var optionsJson = new JObject( new JProperty("browsers", new JArray(options.Browsers)), new JProperty("cascade", options.Cascade), new JProperty("remove", options.Remove), new JProperty("add", options.Add) ); return optionsJson; }
/// <summary> /// Actualizes a vendor prefixes in CSS-code by using Andrey Sitnik's Autoprefixer /// </summary> /// <param name="content">Text content of CSS-asset</param> /// <param name="path">Path to CSS-asset</param> /// <param name="options">Autoprefixing options</param> /// <returns>Processed text content of CSS-asset</returns> public string Process(string content, string path, AutoprefixingOptions options = null) { string newContent; string currentOptionsString; if (options != null) { currentOptionsString = ConvertAutoprefixingOptionsToJson(options).ToString(); } else { currentOptionsString = _defaultOptionsString; } lock (_autoprefixingSynchronizer) { Initialize(); try { var result = _jsEngine.Evaluate<string>( string.Format(AUTOPREFIXER_FUNCTION_CALL_TEMPLATE, JsonConvert.SerializeObject(content), currentOptionsString)); var json = JObject.Parse(result); var errors = json["errors"] != null ? json["errors"] as JArray : null; if (errors != null && errors.Count > 0) { throw new CssAutoprefixingException(FormatErrorDetails(errors[0], content, path)); } newContent = json.Value<string>("processedCode"); } catch (JsRuntimeException e) { throw new CssAutoprefixingException(JsRuntimeErrorHelpers.Format(e)); } } return newContent; }
/// <summary> /// Creates a autoprefixing options /// </summary> /// <returns>Autoprefixing options</returns> private AutoprefixingOptions CreateAutoprefixingOptions() { var options = new AutoprefixingOptions { Browsers = Browsers, Cascade = Cascade, Remove = Remove, Add = Add }; return options; }