use of com.helger.css.decl.CSSMediaQuery in project ph-css by phax.
the class MediaQueryTools method getWrappedInMediaQuery.
/**
* Get the CSS wrapped in the specified media query. Note: all existing rule
* objects are reused, so modifying them also modifies the original CSS!
*
* @param aCSS
* The CSS to be wrapped. May not be <code>null</code>.
* @param aMediaQueries
* The media queries to use. May neither be <code>null</code> nor empty
* nor may it contain <code>null</code> elements.
* @param bAllowNestedMediaQueries
* if <code>true</code> nested media queries are allowed,
* <code>false</code> if they are prohibited.
* @return <code>null</code> if out CSS cannot be wrapped, the newly created
* {@link CascadingStyleSheet} object otherwise.
*/
@Nullable
public static CascadingStyleSheet getWrappedInMediaQuery(@Nonnull final CascadingStyleSheet aCSS, @Nonnull @Nonempty final Iterable<? extends CSSMediaQuery> aMediaQueries, final boolean bAllowNestedMediaQueries) {
ValueEnforcer.notNull(aCSS, "CSS");
ValueEnforcer.notEmpty(aMediaQueries, "MediaQueries");
if (!canWrapInMediaQuery(aCSS, bAllowNestedMediaQueries))
return null;
final CascadingStyleSheet ret = new CascadingStyleSheet();
// Copy all import rules
for (final CSSImportRule aImportRule : aCSS.getAllImportRules()) {
if (aImportRule.hasMediaQueries()) {
// import rule already has a media query - do not alter
ret.addImportRule(aImportRule);
} else {
// Create a new rule and add the passed media queries
final CSSImportRule aNewImportRule = new CSSImportRule(aImportRule.getLocation());
for (final CSSMediaQuery aMediaQuery : aMediaQueries) aNewImportRule.addMediaQuery(aMediaQuery);
ret.addImportRule(aNewImportRule);
}
}
// Copy all namespace rules
for (final CSSNamespaceRule aNamespaceRule : aCSS.getAllNamespaceRules()) ret.addNamespaceRule(aNamespaceRule);
// Create a single top-level media rule ...
// into this media rule
final CSSMediaRule aNewMediaRule = new CSSMediaRule();
for (final CSSMediaQuery aMediaQuery : aMediaQueries) aNewMediaRule.addMediaQuery(aMediaQuery);
// ... and add the existing top-level rules into this media rule
for (final ICSSTopLevelRule aRule : aCSS.getAllRules()) aNewMediaRule.addRule(aRule);
// Finally add the resulting media rule into the new CSS
ret.addRule(aNewMediaRule);
return ret;
}
use of com.helger.css.decl.CSSMediaQuery in project ph-css by phax.
the class MediaQueryToolsTest method testGetWrapped.
@Test
public void testGetWrapped() {
// Read and arbitrary CSS
final CascadingStyleSheet aBaseCSS = CSSReader.readFromString("p { color:red;}", s_eVersion);
assertNotNull(aBaseCSS);
// Create structured media queries
final List<CSSMediaQuery> aMQs = MediaQueryTools.parseToMediaQuery("screen", s_eVersion);
assertNotNull(aMQs);
// Wrap the source CSS with the specified media queries
final CascadingStyleSheet aWrappedCSS = MediaQueryTools.getWrappedInMediaQuery(aBaseCSS, aMQs, false);
assertNotNull(aWrappedCSS);
assertEquals("@media screen{p{color:red}}", new CSSWriter(s_eVersion, true).getCSSAsString(aWrappedCSS));
}
Aggregations