Browse Source

Css: Do not preprend selector for body [#815]

gnosygnu 4 years ago
parent
commit
541f5f6524

+ 26 - 12
400_xowa/src/gplx/xowa/xtns/template_styles/XoCssTransformer.java

@@ -1,8 +1,22 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012-2020 gnosygnu@gmail.com
+
+XOWA is licensed under the terms of the General Public License (GPL) Version 3,
+or alternatively under the terms of the Apache License Version 2.0.
+
+You may use XOWA according to either of these licenses as is most appropriate
+for your project on a case-by-case basis.
+
+The terms of each license can be found in the source code repository:
+
+GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
+Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
+*/
 package gplx.xowa.xtns.template_styles;
 
 import gplx.Bry_;
 import gplx.String_;
-import gplx.langs.javascripts.JsString_;
 import gplx.langs.javascripts.util.regex.JsPattern_;
 import gplx.xowa.htmls.minifys.XoCssMin;
 
@@ -65,19 +79,19 @@ public class XoCssTransformer {
                         if (i > 0)
                             sb.append(",");
 
-                        // prepend the selector
-                        sb.append(selector);
+						String item = items[i].trim();
+						if (item.length() > 0) { // ignore empty items
+                            // prepend the selector, except if it starts with 'body'
+							if (!String_.MidByLenSafe(item, 0, 4).equals("body")) {
+                                sb.append(selector);
+                                sb.append(' ');
+                            }
 
-                        // for pretty-printing, only add `\s` if item doesn't start with space
-                        String item = items[i];
-                        if (item.length() > 0 && !Character.isWhitespace(item.charAt(0))) {
-                            sb.append(' ');
+                            // put back the item
+                            sb.append(item);
                         }
-
-                        // put back the item
-                        sb.append(item);
-                    }
-                }
+    				}
+				}
                 else {
                     // EX: `@media`
                     sb.append(match);

+ 26 - 6
400_xowa/tst/gplx/xowa/xtns/template_styles/XoCssTransformerTest.java

@@ -1,3 +1,18 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012-2020 gnosygnu@gmail.com
+
+XOWA is licensed under the terms of the General Public License (GPL) Version 3,
+or alternatively under the terms of the Apache License Version 2.0.
+
+You may use XOWA according to either of these licenses as is most appropriate
+for your project on a case-by-case basis.
+
+The terms of each license can be found in the source code repository:
+
+GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
+Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
+*/
 package gplx.xowa.xtns.template_styles;
 
 import gplx.core.tests.Gftest;
@@ -13,32 +28,37 @@ public class XoCssTransformerTest {
 
     @Test
     public void PrependBasic() {
-        tstr.Test_Prepend("x {}", "a", "a x {}");
+        tstr.Test_Prepend(".x {}", ".a", ".a .x{}");
     }
 
     @Test
     public void PrependManyClasses() {
-        tstr.Test_Prepend("x,y,z {}", "a", "a x,a y,a z {}");
+        tstr.Test_Prepend("x,y,z {}", ".a", ".a x,.a y,.a z{}");
     }
 
     @Test
     public void PrependManyNodes() {
-        tstr.Test_Prepend("x {} y {} z {}", "a", "a x {}a y {}a z {}");
+        tstr.Test_Prepend("x {} y {} z {}", ".a", ".a x{}.a y{}.a z{}");
     }
 
     @Test
     public void PrependEmpty() {
-        tstr.Test_Prepend("x {}{}", "a", "a x {}{}");
+        tstr.Test_Prepend("x {}{}", ".a", ".a x{}{}");
     }
 
     @Test
     public void PrependMediaAtBos() {
-        tstr.Test_Prepend("@media {} x {}", "a", "@media {}a x {}");
+        tstr.Test_Prepend("@media {} x {}", ".a", "@media {}.a x{}");
     }
 
     @Test
     public void PrependMediaAtMid() {
-        tstr.Test_Prepend("x {} @media {} y {}", "a", "a x {} @media {}a y {}");
+        tstr.Test_Prepend("x {} @media {} y {}", ".a", ".a x{} @media {}.a y{}");
+    }
+
+    @Test
+    public void PrependIgnoreBody() {
+        tstr.Test_Prepend("body {}", ".a", "body{}");
     }
 
     @Test