mirror of https://github.com/gnosygnu/xowa
TemplateStyles: Apply wrapper to each class, not to top only [#712]
parent
ecbcf1e707
commit
a4b5f5de5d
@ -0,0 +1,37 @@
|
||||
package gplx.xowa.xtns.template_styles;
|
||||
|
||||
import gplx.Bry_;
|
||||
import gplx.langs.javascripts.JsString_;
|
||||
import gplx.xowa.htmls.minifys.XoCssMin;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class XoCssTransformer {
|
||||
private final static ConcurrentHashMap<String, Pattern> patterns = new ConcurrentHashMap<>();
|
||||
private String css;
|
||||
public XoCssTransformer(String css) {
|
||||
this.css = css;
|
||||
}
|
||||
|
||||
public XoCssTransformer Minify() {
|
||||
XoCssMin minifier = new XoCssMin();
|
||||
this.css = minifier.cssmin(css, -1);
|
||||
return this;
|
||||
}
|
||||
public XoCssTransformer Prepend(String prepend) {
|
||||
// prepend any classes to all declarations; primarily for '.mw-parser-output ' selector
|
||||
css = JsString_.replace(css, patterns, "\\}([^@}].{2})", "} " + prepend + " $1");
|
||||
css = JsString_.replace(css, patterns, "(@media[^\\{]*\\{)", "$1" + prepend + " ");
|
||||
if (css.charAt(0) != '@')
|
||||
css = prepend + " " + css;
|
||||
return this;
|
||||
}
|
||||
public XoCssTransformer Url(String src, String trg) {
|
||||
// change some url(...) entries
|
||||
css = css.replace("//" + src, "//" + trg);
|
||||
return this;
|
||||
}
|
||||
public byte[] ToBry() {return Bry_.new_u8(css);}
|
||||
public String ToStr() {return css;}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package gplx.xowa.xtns.template_styles;
|
||||
|
||||
import gplx.core.tests.Gftest;
|
||||
import org.junit.Test;
|
||||
|
||||
public class XoCssTransformerTest {
|
||||
private final XoCssTranformerTstr tstr = new XoCssTranformerTstr();
|
||||
|
||||
@Test
|
||||
public void Minify() {
|
||||
tstr.Test_Minify("basic" ,"rgb (128,128,128)", "#808080");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void Prepend() {
|
||||
tstr.Test_Prepend("cls.1.1" ,"x {}" , ".a" , ".a x {}");
|
||||
tstr.Test_Prepend("cls.n.1" ,"x {}y {}", ".a" , ".a x {} .a y {}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void Url() {
|
||||
tstr.Test_Url("match.y" , "url(//site/a.png)", "site", "prepend/site", "url(//prepend/site/a.png)");
|
||||
tstr.Test_Url("match.y.any", "//site/abc" , "site", "prepend/site", "//prepend/site/abc"); // NOTE: matches any "//"
|
||||
tstr.Test_Url("match.n" , "url(/-site/a.png)", "site", "prepend/site", "url(/-site/a.png)");
|
||||
}
|
||||
}
|
||||
class XoCssTranformerTstr {
|
||||
public void Test_Url(String note, String css, String src, String trg, String expd) {
|
||||
XoCssTransformer transformer = new XoCssTransformer(css);
|
||||
String actl = transformer.Url(src, trg).ToStr();
|
||||
Gftest.Eq__str(expd, actl, note);
|
||||
}
|
||||
public void Test_Prepend(String note, String css, String prepend, String expd) {
|
||||
XoCssTransformer transformer = new XoCssTransformer(css);
|
||||
String actl = transformer.Prepend(prepend).ToStr();
|
||||
Gftest.Eq__str(expd, actl, note);
|
||||
}
|
||||
public void Test_Minify(String note, String css, String expd) {
|
||||
XoCssTransformer transformer = new XoCssTransformer(css);
|
||||
String actl = transformer.Minify().ToStr();
|
||||
Gftest.Eq__str(expd, actl, note);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue