コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
		/// <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";
		}
コード例 #6
0
		/// <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;
		}
コード例 #7
0
		/// <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;
		}
コード例 #8
0
		/// <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;
		}