/// <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);
            }

            ProcessingOptions options = CreateProcessingOptions();

            using (var cssAutoprefixer = new CssAutoprefixer(_createJsEngineInstance, options))
            {
                foreach (var asset in assetsToProcessing)
                {
                    InnerPostProcess(asset, cssAutoprefixer);
                }
            }

            return(assets);
        }
        /// <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))
                          );
            }

            ProcessingOptions options = CreateProcessingOptions();

            using (var cssAutoprefixer = new CssAutoprefixer(_createJsEngineInstance, options))
            {
                InnerPostProcess(asset, cssAutoprefixer);
            }

            return(asset);
        }
示例#3
0
        private void InnerPostProcess(IAsset asset, CssAutoprefixer cssAutoprefixer)
        {
            string         content = asset.Content;
            string         newContent;
            string         assetUrl = asset.Url;
            IList <string> dependencies;

            try
            {
                newContent = !string.IsNullOrWhiteSpace(content) ?
                             cssAutoprefixer.Process(content, assetUrl).ProcessedContent
                                        :
                             content ?? string.Empty
                ;
                dependencies = GetIncludedFilePaths(Stats);
            }
            catch (AutoprefixerProcessingException e)
            {
                string errorDetails = AutoprefixerErrorHelpers.GenerateErrorDetails(e, true);

                var           stringBuilderPool   = StringBuilderPool.Shared;
                StringBuilder errorMessageBuilder = stringBuilderPool.Rent();
                errorMessageBuilder.AppendLine(e.Message);
                errorMessageBuilder.AppendLine();
                errorMessageBuilder.Append(errorDetails);

                string errorMessage = errorMessageBuilder.ToString();
                stringBuilderPool.Return(errorMessageBuilder);

                throw new AssetPostProcessingException(
                          string.Format(CoreStrings.PostProcessors_PostprocessingSyntaxError,
                                        CODE_TYPE, assetUrl, POSTPROCESSOR_NAME, errorMessage));
            }
            catch (Exception e)
            {
                throw new AssetPostProcessingException(
                          string.Format(CoreStrings.PostProcessors_PostprocessingFailed,
                                        CODE_TYPE, assetUrl, POSTPROCESSOR_NAME, e.Message), e);
            }

            asset.Content = newContent;
            asset.VirtualPathDependencies = asset.VirtualPathDependencies.Union(dependencies).ToList();
        }