示例#1
0
        private static string XHtmlMinifierBytes(byte[] bytes)
        {
            var old = Encoding.UTF8.GetString(bytes);
            var tar = old;
            List <IJsMinifier> jsMinifiers = new List <IJsMinifier>()
            {
                new MsAjaxJsMinifier(), new NUglifyJsMinifier(), new YuiJsMinifier()
            };
            List <ICssMinifier> cssMinifiers = new List <ICssMinifier>()
            {
                new MsAjaxCssMinifier(), new NUglifyCssMinifier(), new YuiCssMinifier()
            };

            for (int i = 0; i < jsMinifiers.Count; i++)
            {
                for (int j = 0; j < cssMinifiers.Count; j++)
                {
                    var           js           = jsMinifiers[i];
                    var           css          = cssMinifiers[i];
                    XhtmlMinifier htmlMinifier = new XhtmlMinifier(null, css, js, null);
                    var           html         = htmlMinifier.Minify(old);
                    if (html.Errors.Count == 0)
                    {
                        if (html.MinifiedContent.Length < tar.Length)
                        {
                            tar = html.MinifiedContent;
                        }
                    }
                }
            }
            return(tar);
        }
示例#2
0
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<html ng-app>\n" +
                                  "	<body ng-controller=\"MyController\">\n" +
                                  "		<input ng-model=\"foo\" value=\"bar\" />\n"+
                                  "				<button ng-click=\"changeFoo()\">{{buttonText}}</button>\n"+
                                  "		<script src=\"angular.js\"></script>\n"+
                                  "	</body>\n" +
                                  "</html>"
            ;
            const string targetOutput1 = "<html ng-app=\"\">\n" +
                                         "	<body ng-controller=\"MyController\">\n"+
                                         "		<input ng-model=\"foo\" value=\"bar\" />\n"+
                                         "				<button ng-click=\"changeFoo()\">{{buttonText}}</button>\n"+
                                         "		<script src=\"angular.js\"></script>\n"+
                                         "	</body>\n"+
                                         "</html>"
            ;

            const string input2        = "<div ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput2 = "<div ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input3        = "<div ng:include src=\"views/sidepanel.html\"></div>";
            const string targetOutput3 = "<div ng:include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input4        = "<div ng_include src=\"views/sidepanel.html\"></div>";
            const string targetOutput4 = "<div ng_include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input5        = "<div x-ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput5 = "<div x-ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input6        = "<div data-ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput6 = "<div data-ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input7        = "<div ng-include=\"\" src=\"views/sidepanel.html\"></div>";
            const string targetOutput7 = input7;

            // Act
            string output1 = minifier.Minify(input1).MinifiedContent;
            string output2 = minifier.Minify(input2).MinifiedContent;
            string output3 = minifier.Minify(input3).MinifiedContent;
            string output4 = minifier.Minify(input4).MinifiedContent;
            string output5 = minifier.Minify(input5).MinifiedContent;
            string output6 = minifier.Minify(input6).MinifiedContent;
            string output7 = minifier.Minify(input7).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(targetOutput2, output2);
            Assert.Equal(targetOutput3, output3);
            Assert.Equal(targetOutput4, output4);
            Assert.Equal(targetOutput5, output5);
            Assert.Equal(targetOutput6, output6);
            Assert.Equal(targetOutput7, output7);
        }
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<html ng-app>\n" +
                "	<body ng-controller=\"MyController\">\n" +
                "		<input ng-model=\"foo\" value=\"bar\" />\n" +
                "				<button ng-click=\"changeFoo()\">{{buttonText}}</button>\n" +
                "		<script src=\"angular.js\"></script>\n" +
                "	</body>\n" +
                "</html>"
                ;
            const string targetOutput1 = "<html ng-app=\"\">\n" +
                "	<body ng-controller=\"MyController\">\n" +
                "		<input ng-model=\"foo\" value=\"bar\" />\n" +
                "				<button ng-click=\"changeFoo()\">{{buttonText}}</button>\n" +
                "		<script src=\"angular.js\"></script>\n" +
                "	</body>\n" +
                "</html>"
                ;

            const string input2 = "<div ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput2 = "<div ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input3 = "<div ng:include src=\"views/sidepanel.html\"></div>";
            const string targetOutput3 = "<div ng:include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input4 = "<div ng_include src=\"views/sidepanel.html\"></div>";
            const string targetOutput4 = "<div ng_include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input5 = "<div x-ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput5 = "<div x-ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input6 = "<div data-ng-include src=\"views/sidepanel.html\"></div>";
            const string targetOutput6 = "<div data-ng-include=\"\" src=\"views/sidepanel.html\"></div>";

            const string input7 = "<div ng-include=\"\" src=\"views/sidepanel.html\"></div>";
            const string targetOutput7 = input7;

            // Act
            string output1 = minifier.Minify(input1).MinifiedContent;
            string output2 = minifier.Minify(input2).MinifiedContent;
            string output3 = minifier.Minify(input3).MinifiedContent;
            string output4 = minifier.Minify(input4).MinifiedContent;
            string output5 = minifier.Minify(input5).MinifiedContent;
            string output6 = minifier.Minify(input6).MinifiedContent;
            string output7 = minifier.Minify(input7).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(targetOutput2, output2);
            Assert.Equal(targetOutput3, output3);
            Assert.Equal(targetOutput4, output4);
            Assert.Equal(targetOutput5, output5);
            Assert.Equal(targetOutput6, output6);
            Assert.Equal(targetOutput7, output7);
        }
        /// <summary>
        /// Creates a instance of XHTML minifier
        /// </summary>
        /// <returns>Instance of XHTML minifier</returns>
        public override IMarkupMinifier CreateMinifier()
        {
            XhtmlMinificationSettings settings = MinificationSettings;
            ICssMinifier cssMinifier           = CssMinifierFactory.CreateMinifier();
            IJsMinifier  jsMinifier            = JsMinifierFactory.CreateMinifier();

            var minifier = new XhtmlMinifier(settings, cssMinifier, jsMinifier, _logger);

            return(minifier);
        }
示例#5
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();


            // ×¢Òâ ÇëÏÈÇåÒ»ÏÂä¯ÀÀÆ÷»º´æ
            //¿ª·¢Ä£Ê½
            //HtmlStaticFileAttribute.IsDevelopmentMode = true;

            //ÉèÖûº´æÎļþ¼Ð
            HtmlStaticFileAttribute.OutputFolder = @"D:\html";

            //ʹÓÃѹËõ
            HtmlStaticFileAttribute.UseBrCompress   = true;
            HtmlStaticFileAttribute.UseGzipCompress = true;

            //ÉèÖÃÒ³Ã滺´æʱ¼ä 3·ÖÖÓ
            HtmlStaticFileAttribute.ExpireMinutes = 3;

            // ¿ªÆôhtmlѹËõ
            HtmlStaticFileAttribute.MiniFunc += (string html) => {
                var js  = new NUglifyJsMinifier();
                var css = new NUglifyCssMinifier();

                XhtmlMinifier htmlMinifier = new XhtmlMinifier(null, css, js, null);
                var           result       = htmlMinifier.Minify(html);
                if (result.Errors.Count == 0)
                {
                    return(result.MinifiedContent);
                }
                return(html);
            };

            app.UseEndpoints(endpoints => {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
        public XhtmlMinificationViewModel Minify(XhtmlMinificationViewModel model)
        {
            string cssMinifierName = model.Settings.CssMinifierName;
            string jsMinifierName  = model.Settings.JsMinifierName;

            var          settings    = Mapper.Map <XhtmlMinificationSettings>(model.Settings);
            ICssMinifier cssMinifier = _cssMinifierFactory.CreateMinifier(cssMinifierName);
            IJsMinifier  jsMinifier  = _jsMinifierFactory.CreateMinifier(jsMinifierName);

            var xhtmlMinifier = new XhtmlMinifier(settings, cssMinifier, jsMinifier);
            var result        = xhtmlMinifier.Minify(model.SourceCode, true);

            model.Result = Mapper.Map <MarkupMinificationResultViewModel>(result);

            return(model);
        }
示例#7
0
        public static string MinifyString(string extension, string content)
        {
            if (extension == ".css")
            {
                Minifier    minifier = new Minifier();
                CssSettings settings = new CssSettings();
                settings.CommentMode = CssComment.None;

                if (WESettings.GetBoolean(WESettings.Keys.KeepImportantComments))
                {
                    settings.CommentMode = CssComment.Important;
                }

                return(minifier.MinifyStyleSheet(content, settings));
            }
            else if (extension == ".js")
            {
                Minifier     minifier = new Minifier();
                CodeSettings settings = new CodeSettings()
                {
                    EvalTreatment             = EvalTreatment.MakeImmediateSafe,
                    PreserveImportantComments = WESettings.GetBoolean(WESettings.Keys.KeepImportantComments)
                };

                return(minifier.MinifyJavaScript(content, settings));
            }
            else if (_htmlExt.Contains(extension.ToLowerInvariant()))
            {
                var minifyer = new XhtmlMinifier();
                MarkupMinificationResult result = minifyer.Minify(content, generateStatistics: true);

                if (result.Errors.Count == 0)
                {
                    EditorExtensionsPackage.DTE.StatusBar.Text = "Web Essentials: HTML minified by " + result.Statistics.SavedInPercent + "%";
                    return(result.MinifiedContent);
                }
                else
                {
                    EditorExtensionsPackage.DTE.StatusBar.Text = "Web Essentials: Cannot minify the current selection";
                    return(content);
                }
            }

            return(null);
        }
        public void ShorteningDoctypeIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true)
            {
                UseShortDoctype = true
            });

            const string input = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\r\n" +
                                 "   \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
            const string targetOutput = "<!DOCTYPE html>";

            // Act
            string output = minifier.Minify(input).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput, output);
        }
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input = "<!doctype html>\n" +
                "<html>\n" +
                "	<head>\n" +
                "		<title>Aurelia</title>\n" +
                "		<link rel=\"stylesheet\" href=\"styles/styles.css\" />\n" +
                "		<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n" +
                "	</head>\n" +
                "	<body aurelia-app>\n" +
                "		<script src=\"jspm_packages/system.js\"></script>\n" +
                "		<script src=\"config.js\"></script>\n" +
                "		<script>\n" +
                "			SystemJS.import('aurelia-bootstrapper');\n" +
                "		</script>\n" +
                "	</body>\n" +
                "</html>"
                ;
            const string targetOutput = "<!doctype html>\n" +
                "<html>\n" +
                "	<head>\n" +
                "		<title>Aurelia</title>\n" +
                "		<link rel=\"stylesheet\" href=\"styles/styles.css\" />\n" +
                "		<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n" +
                "	</head>\n" +
                "	<body aurelia-app=\"\">\n" +
                "		<script src=\"jspm_packages/system.js\"></script>\n" +
                "		<script src=\"config.js\"></script>\n" +
                "		<script>\n" +
                "			SystemJS.import('aurelia-bootstrapper');\n" +
                "		</script>\n" +
                "	</body>\n" +
                "</html>"
                ;

            // Act
            string output = minifier.Minify(input).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput, output);
        }
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input = "<!doctype html>\n" +
                                 "<html>\n" +
                                 "	<head>\n"+
                                 "		<title>Aurelia</title>\n"+
                                 "		<link rel=\"stylesheet\" href=\"styles/styles.css\" />\n"+
                                 "		<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n"+
                                 "	</head>\n"+
                                 "	<body aurelia-app>\n"+
                                 "		<script src=\"jspm_packages/system.js\"></script>\n"+
                                 "		<script src=\"config.js\"></script>\n"+
                                 "		<script>\n"+
                                 "			SystemJS.import('aurelia-bootstrapper');\n"+
                                 "		</script>\n"+
                                 "	</body>\n"+
                                 "</html>"
            ;
            const string targetOutput = "<!doctype html>\n" +
                                        "<html>\n" +
                                        "	<head>\n"+
                                        "		<title>Aurelia</title>\n"+
                                        "		<link rel=\"stylesheet\" href=\"styles/styles.css\" />\n"+
                                        "		<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n"+
                                        "	</head>\n"+
                                        "	<body aurelia-app=\"\">\n"+
                                        "		<script src=\"jspm_packages/system.js\"></script>\n"+
                                        "		<script src=\"config.js\"></script>\n"+
                                        "		<script>\n"+
                                        "			SystemJS.import('aurelia-bootstrapper');\n"+
                                        "		</script>\n"+
                                        "	</body>\n"+
                                        "</html>"
            ;

            // Act
            string output = minifier.Minify(input).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput, output);
        }
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1        = "<div custom-attribute></div>";
            const string targetOutput1 = "<div custom-attribute=\"\"></div>";

            const string input2        = "<div class></div>";
            const string targetOutput2 = "<div class=\"\"></div>";

            // Act
            string output1 = minifier.Minify(input1).MinifiedContent;
            string output2 = minifier.Minify(input2).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(targetOutput2, output2);
        }
示例#12
0
        public void ProcessingCustomBooleanAttributesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<div custom-attribute></div>";
            const string targetOutput1 = "<div custom-attribute=\"\"></div>";

            const string input2 = "<div class></div>";
            const string targetOutput2 = "<div class=\"\"></div>";

            // Act
            string output1 = minifier.Minify(input1).MinifiedContent;
            string output2 = minifier.Minify(input2).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(targetOutput2, output2);
        }
        public void ProcessingInvalidCharactersInXmlDeclarationIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "\n\n\t<?xml version=\"1.0\" encoding=\"windows-1251 standalone=\"no\"?>\n";
            const string input2 = "\r\n  <?xml version=\"1.1\" ;$%? encoding=\"windows-1251\" ?>\r\n";

            // Act
            IList <MinificationErrorInfo> errors1 = minifier.Minify(input1).Errors;
            IList <MinificationErrorInfo> errors2 = minifier.Minify(input2).Errors;

            // Assert
            Assert.Equal(1, errors1.Count);
            Assert.Equal(3, errors1[0].LineNumber);
            Assert.Equal(57, errors1[0].ColumnNumber);

            Assert.Equal(1, errors2.Count);
            Assert.Equal(2, errors2[0].LineNumber);
            Assert.Equal(23, errors2[0].ColumnNumber);
        }
        public static string MinifyString(string extension, string content)
        {
            if (extension == ".css")
            {
                Minifier minifier = new Minifier();
                CssSettings settings = new CssSettings();
                settings.CommentMode = CssComment.None;

                if (WESettings.GetBoolean(WESettings.Keys.KeepImportantComments))
                {
                    settings.CommentMode = CssComment.Important;
                }

                return minifier.MinifyStyleSheet(content, settings);
            }
            else if (extension == ".js")
            {
                Minifier minifier = new Minifier();
                CodeSettings settings = new CodeSettings()
                {
                    EvalTreatment = EvalTreatment.MakeImmediateSafe,
                    PreserveImportantComments = WESettings.GetBoolean(WESettings.Keys.KeepImportantComments)
                };

                return minifier.MinifyJavaScript(content, settings);
            }
            else if (_htmlExt.Contains(extension.ToLowerInvariant())){
                var minifyer = new XhtmlMinifier();
                MarkupMinificationResult result = minifyer.Minify(content, generateStatistics: true);

                if (result.Errors.Count == 0)
                {
                    EditorExtensionsPackage.DTE.StatusBar.Text = "Web Essentials: HTML minified by " + result.Statistics.SavedInPercent + "%";
                    return result.MinifiedContent;
                }
                else
                {
                    EditorExtensionsPackage.DTE.StatusBar.Text = "Web Essentials: Cannot minify the current selection";
                    return content;
                }
            }

            return null;
        }
        public void ProcessingXmlNodesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                                  "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n" +
                                  "  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" +
                                  "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" " +
                                  "xmlns:bi=\"urn:schemas-microsoft-com:mscom:bi\">\n" +
                                  "	<head>\n" +
                                  "		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"+
                                  "		<title>Some title...</title>\n"+
                                  "	</head>\n" +
                                  "	<body>\n" +
                                  "		<div id=\"content\">\n"+
                                  "			<p>Some text...</p>\n"+
                                  "		</div>\n"+
                                  "	</body>\n" +
                                  "</html>"
            ;
            const string targetOutput1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                         "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
                                         "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" +
                                         "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" " +
                                         "xmlns:bi=\"urn:schemas-microsoft-com:mscom:bi\">\n" +
                                         "	<head>\n"+
                                         "		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"+
                                         "		<title>Some title...</title>\n"+
                                         "	</head>\n"+
                                         "	<body>\n"+
                                         "		<div id=\"content\">\n"+
                                         "			<p>Some text...</p>\n"+
                                         "		</div>\n"+
                                         "	</body>\n"+
                                         "</html>"
            ;

            const string input2 = "<svg version=\"1.1\" baseProfile=\"full\" " +
                                  "xmlns=\"http://www.w3.org/2000/svg\" " +
                                  "xmlns:xlink=\"http://www.w3.org/1999/xlink\" " +
                                  "xmlns:ev=\"http://www.w3.org/2001/xml-events\" " +
                                  "width=\"100%\" height=\"100%\">\n" +
                                  "	<rect fill=\"white\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" />\n" +
                                  "	<rect fill=\"silver\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" rx=\"1em\" />\n" +
                                  "</svg>"
            ;

            const string input3 = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" +
                                  "	<infinity />\n" +
                                  "</math>"
            ;

            // Act
            MarkupMinificationResult result1 = minifier.Minify(input1);
            string output1 = result1.MinifiedContent;
            IList <MinificationErrorInfo> warnings1 = result1.Warnings;

            MarkupMinificationResult result2 = minifier.Minify(input2);
            string output2 = result2.MinifiedContent;
            IList <MinificationErrorInfo> warnings2 = result2.Warnings;

            MarkupMinificationResult result3 = minifier.Minify(input3);
            string output3 = result3.MinifiedContent;
            IList <MinificationErrorInfo> warnings3 = result3.Warnings;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(0, warnings1.Count);

            Assert.Equal(input2, output2);
            Assert.Equal(0, warnings2.Count);

            Assert.Equal(input3, output3);
            Assert.Equal(0, warnings3.Count);
        }
示例#16
0
        public void ProcessingXmlNodesIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n" +
                "  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" +
                "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" " +
                "xmlns:bi=\"urn:schemas-microsoft-com:mscom:bi\">\n" +
                "	<head>\n" +
                "		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n" +
                "		<title>Some title...</title>\n" +
                "	</head>\n" +
                "	<body>\n" +
                "		<div id=\"content\">\n" +
                "			<p>Some text...</p>\n" +
                "		</div>\n" +
                "	</body>\n" +
                "</html>"
                ;
            const string targetOutput1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
                "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" +
                "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" " +
                "xmlns:bi=\"urn:schemas-microsoft-com:mscom:bi\">\n" +
                "	<head>\n" +
                "		<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n" +
                "		<title>Some title...</title>\n" +
                "	</head>\n" +
                "	<body>\n" +
                "		<div id=\"content\">\n" +
                "			<p>Some text...</p>\n" +
                "		</div>\n" +
                "	</body>\n" +
                "</html>"
                ;

            const string input2 = "<svg version=\"1.1\" baseProfile=\"full\" " +
                "xmlns=\"http://www.w3.org/2000/svg\" " +
                "xmlns:xlink=\"http://www.w3.org/1999/xlink\" " +
                "xmlns:ev=\"http://www.w3.org/2001/xml-events\" " +
                "width=\"100%\" height=\"100%\">\n" +
                "	<rect fill=\"white\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" />\n" +
                "	<rect fill=\"silver\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" rx=\"1em\" />\n" +
                "</svg>"
                ;

            const string input3 = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n" +
                "	<infinity />\n" +
                "</math>"
                ;

            // Act
            MarkupMinificationResult result1 = minifier.Minify(input1);
            string output1 = result1.MinifiedContent;
            IList<MinificationErrorInfo> warnings1 = result1.Warnings;

            MarkupMinificationResult result2 = minifier.Minify(input2);
            string output2 = result2.MinifiedContent;
            IList<MinificationErrorInfo> warnings2 = result2.Warnings;

            MarkupMinificationResult result3 = minifier.Minify(input3);
            string output3 = result3.MinifiedContent;
            IList<MinificationErrorInfo> warnings3 = result3.Warnings;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(0, warnings1.Count);

            Assert.Equal(input2, output2);
            Assert.Equal(0, warnings2.Count);

            Assert.Equal(input3, output3);
            Assert.Equal(0, warnings3.Count);
        }
示例#17
0
        /// <inheritdoc />
        public IEnumerable <IDocument> Execute(IReadOnlyList <IDocument> inputs, IExecutionContext context)
        {
            XhtmlMinifier minifier = new XhtmlMinifier(_minificationSettings);

            return(Minify(inputs, context, minifier.Minify, "XHTML"));
        }
示例#18
0
        /// <inheritdoc />
        public async Task <IEnumerable <IDocument> > ExecuteAsync(IExecutionContext context)
        {
            XhtmlMinifier minifier = new XhtmlMinifier(_minificationSettings);

            return(await MinifyAsync(context, minifier.Minify, "XHTML"));
        }
        public void ProcessingDoctypeIsCorrect()
        {
            // Arrange
            var minifier = new XhtmlMinifier(new XhtmlMinificationSettings(true));

            const string input1 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n" +
                                  "   \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
            const string targetOutput1 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"" +
                                         " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";

            const string input2 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"" +
                                  " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
            const string targetOutput2 = input2;

            const string input3 = "<!DOCTYPE\n" +
                                  "    html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\n" +
                                  "    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">"
            ;
            const string targetOutput3 = "<!DOCTYPE" +
                                         " html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"" +
                                         " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">"
            ;

            const string input4 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\"\r\n" +
                                  "    \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\">";
            const string targetOutput4 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\"" +
                                         " \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\">";

            const string input5 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \n" +
                                  "	\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">";
            const string targetOutput5 = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"" +
                                         " \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">";

            const string input6        = "<!DOCTYPE html>";
            const string targetOutput6 = input6;

            const string input7        = "<!DOCTYPE\r\nhtml>";
            const string targetOutput7 = "<!DOCTYPE html>";

            const string input8        = "<!DOCTYPE\thtml>";
            const string targetOutput8 = "<!DOCTYPE html>";

            // Act
            string output1 = minifier.Minify(input1).MinifiedContent;
            string output2 = minifier.Minify(input2).MinifiedContent;
            string output3 = minifier.Minify(input3).MinifiedContent;
            string output4 = minifier.Minify(input4).MinifiedContent;
            string output5 = minifier.Minify(input5).MinifiedContent;
            string output6 = minifier.Minify(input6).MinifiedContent;
            string output7 = minifier.Minify(input7).MinifiedContent;
            string output8 = minifier.Minify(input8).MinifiedContent;

            // Assert
            Assert.Equal(targetOutput1, output1);
            Assert.Equal(targetOutput2, output2);
            Assert.Equal(targetOutput3, output3);
            Assert.Equal(targetOutput4, output4);
            Assert.Equal(targetOutput5, output5);
            Assert.Equal(targetOutput6, output6);
            Assert.Equal(targetOutput7, output7);
            Assert.Equal(targetOutput8, output8);
        }