Repository: wicket Updated Branches: refs/heads/master 5ec319ff4 -> 5f2809c7c
Allow to set the rel attribute with CssHeaderItem Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/620081b0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/620081b0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/620081b0 Branch: refs/heads/master Commit: 620081b0ae4fdcb09a24e75a8c6173485ab9de94 Parents: 2354d9d Author: Tobias Soloschenko <tsolosche...@sapient.com> Authored: Tue Aug 1 07:36:15 2017 +0200 Committer: Tobias Soloschenko <tsolosche...@sapient.com> Committed: Tue Aug 1 07:37:35 2017 +0200 ---------------------------------------------------------------------- .../wicket/core/util/string/CssUtils.java | 38 ++++++++-- .../markup/head/CssContentHeaderItem.java | 14 ++-- .../wicket/markup/head/CssHeaderItem.java | 74 ++++++++++++++++++-- .../markup/head/CssReferenceHeaderItem.java | 56 ++++++++++++--- .../markup/head/CssUrlReferenceHeaderItem.java | 55 ++++++++++++--- .../wicket/markup/head/MetaDataHeaderItem.java | 8 +++ 6 files changed, 213 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/core/util/string/CssUtils.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/string/CssUtils.java b/wicket-core/src/main/java/org/apache/wicket/core/util/string/CssUtils.java index 78f29af..4013e83 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/util/string/CssUtils.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/util/string/CssUtils.java @@ -85,14 +85,36 @@ public final class CssUtils * Writes a reference to a css file in the response object * * @param response - * the response to write to + * the response to write to * @param url - * the url of the css reference + * the url of the css reference * @param media - * the CSS media + * the CSS media + * @param markupId + * the markupId */ - public static void writeLinkUrl(final Response response, final CharSequence url, final CharSequence media, - final String markupId) + public static void writeLinkUrl(final Response response, final CharSequence url, + final CharSequence media, final String markupId) + { + CssUtils.writeLinkUrl(response, url, media, markupId, null); + } + + /** + * Writes a reference to a css file in the response object + * + * @param response + * the response to write to + * @param url + * the url of the css reference + * @param media + * the CSS media + * @param markupId + * the markupId + * @param rel + * the rel attribute + */ + public static void writeLinkUrl(final Response response, final CharSequence url, + final CharSequence media, final String markupId, final String rel) { response.write("<link rel=\"stylesheet\" type=\"text/css\" href=\""); response.write(Strings.escapeMarkup(url)); @@ -109,6 +131,12 @@ public final class CssUtils response.write(Strings.escapeMarkup(markupId)); response.write("\""); } + if (Strings.isEmpty(rel) == false) + { + response.write(" rel=\""); + response.write(Strings.escapeMarkup(rel)); + response.write("\""); + } response.write(" />"); } http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java index 0367f8d..dee0a63 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java @@ -20,8 +20,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.Objects; -import org.apache.wicket.request.Response; import org.apache.wicket.core.util.string.CssUtils; +import org.apache.wicket.request.Response; import org.apache.wicket.util.string.Strings; /** @@ -31,6 +31,8 @@ import org.apache.wicket.util.string.Strings; */ public class CssContentHeaderItem extends CssHeaderItem { + private static final long serialVersionUID = 1L; + private final CharSequence css; /** @@ -41,6 +43,8 @@ public class CssContentHeaderItem extends CssHeaderItem * @param id * unique id for the <style> element. This can be <code>null</code>, however in * that case the ajax header contribution can't detect duplicate CSS fragments. + * @param condition + * the condition when the css should be applied */ public CssContentHeaderItem(CharSequence css, String id, String condition) { @@ -93,9 +97,11 @@ public class CssContentHeaderItem extends CssHeaderItem @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CssContentHeaderItem that = (CssContentHeaderItem) o; + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + CssContentHeaderItem that = (CssContentHeaderItem)o; return Objects.equals(css, that.css); } http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java index d2f05ef..c269d8f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java @@ -37,6 +37,8 @@ import org.slf4j.LoggerFactory; */ public abstract class CssHeaderItem extends HeaderItem { + private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory.getLogger(CssHeaderItem.class); /** @@ -169,6 +171,39 @@ public abstract class CssHeaderItem extends HeaderItem } /** + * Creates a {@link CssReferenceHeaderItem} for the given reference. + * + * <strong>Warning</strong>: the conditional comments don't work when injected dynamically with + * JavaScript (i.e. in Ajax response). An alternative solution is to use user agent sniffing at + * the server side: <code><pre> + * public void renderHead(IHeaderResponse response) { + * WebClientInfo clientInfo = (WebClientInfo) getSession().getClientInfo(); + * ClientProperties properties = clientInfo.getProperties(); + * if (properties.isBrowserInternetExplorer() && properties.getBrowserVersionMajor() >= 8) { + * response.renderCSSReference(new PackageResourceReference(MyPage.class, "my-conditional.css" )); + * } + * } + * </pre></code> + * + * @param reference + * a reference to a CSS resource + * @param pageParameters + * the parameters for this CSS resource reference + * @param media + * the media type for this CSS ("print", "screen", etc.) + * @param condition + * the condition to use for Internet Explorer conditional comments. E.g. "IE 7". + * @param rel + * the rel attribute content + * @return A newly created {@link CssReferenceHeaderItem} for the given reference. + */ + public static CssReferenceHeaderItem forReference(ResourceReference reference, + PageParameters pageParameters, String media, String condition, String rel) + { + return new CssReferenceHeaderItem(reference, pageParameters, media, condition, rel); + } + + /** * Creates a {@link CssContentHeaderItem} for the given content. * * @param css @@ -269,12 +304,43 @@ public abstract class CssHeaderItem extends HeaderItem return new CssUrlReferenceHeaderItem(url, media, condition); } + /** + * Creates a {@link CssUrlReferenceHeaderItem} for the given url. + * + * <strong>Warning</strong>: the conditional comments don't work when injected dynamically with + * JavaScript (i.e. in Ajax response). An alternative solution is to use user agent sniffing at + * the server side: <code><pre> + * public void renderHead(IHeaderResponse response) { + * WebClientInfo clientInfo = (WebClientInfo) getSession().getClientInfo(); + * ClientProperties properties = clientInfo.getProperties(); + * if (properties.isBrowserInternetExplorer() && properties.getBrowserVersionMajor() >= 8) { + * response.renderCSSReference(new PackageResourceReference(MyPage.class, "my-conditional.css" )); + * } + * } + * </pre></code> + * + * @param url + * context-relative url of the CSS resource + * @param media + * the media type for this CSS ("print", "screen", etc.) + * @param condition + * the condition to use for Internet Explorer conditional comments. E.g. "IE 7". + * @param rel + * the rel attribute content + * @return A newly created {@link CssUrlReferenceHeaderItem} for the given url. + */ + public static CssUrlReferenceHeaderItem forUrl(String url, String media, String condition, + String rel) + { + return new CssUrlReferenceHeaderItem(url, media, condition, rel); + } + protected final void internalRenderCSSReference(Response response, String url, String media, - String condition) + String condition, String rel) { Args.notEmpty(url, "url"); - - boolean hasCondition = Strings.isEmpty(condition) == false; + + boolean hasCondition = Strings.isEmpty(condition) == false; if (hasCondition) { if (RequestCycle.get().find(IPartialPageRequestHandler.class).isPresent()) @@ -290,7 +356,7 @@ public abstract class CssHeaderItem extends HeaderItem response.write("]>"); } - CssUtils.writeLinkUrl(response, url, media, getId()); + CssUtils.writeLinkUrl(response, url, media, getId(), rel); if (hasCondition) { http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java index 0e0c1ce..531c90f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java @@ -36,9 +36,12 @@ import org.apache.wicket.util.string.Strings; */ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceHeaderItem { + private static final long serialVersionUID = 1L; + private final ResourceReference reference; private final String media; private final PageParameters pageParameters; + private final String rel; /** * Creates a new {@code CSSReferenceHeaderItem}. @@ -59,6 +62,31 @@ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceH this.reference = reference; this.pageParameters = pageParameters; this.media = media; + this.rel = null; + } + + /** + * Creates a new {@code CSSReferenceHeaderItem}. + * + * @param reference + * resource reference pointing to the CSS resource + * @param pageParameters + * the parameters for this CSS resource reference + * @param media + * the media type for this CSS ("print", "screen", etc.) + * @param condition + * the condition to use for Internet Explorer conditional comments. E.g. "IE 7". + * @param rel + * the rel attribute content + */ + public CssReferenceHeaderItem(ResourceReference reference, PageParameters pageParameters, + String media, String condition, String rel) + { + super(condition); + this.reference = reference; + this.pageParameters = pageParameters; + this.media = media; + this.rel = rel; } /** @@ -80,6 +108,14 @@ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceH } /** + * @return the rel attribute content + */ + public String getRel() + { + return rel; + } + + /** * @return the parameters for this CSS resource reference */ public PageParameters getPageParameters() @@ -104,7 +140,7 @@ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceH @Override public void render(Response response) { - internalRenderCSSReference(response, getUrl(), media, getCondition()); + internalRenderCSSReference(response, getUrl(), media, getCondition(), getRel()); } @Override @@ -129,18 +165,20 @@ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceH @Override public int hashCode() { - return Objects.hash(super.hashCode(), reference, media, pageParameters); + return Objects.hash(super.hashCode(), reference, media, pageParameters, rel); } @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - CssReferenceHeaderItem that = (CssReferenceHeaderItem) o; - return Objects.equals(reference, that.reference) && - Objects.equals(media, that.media) && - Objects.equals(pageParameters, that.pageParameters); + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + if (!super.equals(o)) + return false; + CssReferenceHeaderItem that = (CssReferenceHeaderItem)o; + return Objects.equals(reference, that.reference) && Objects.equals(media, that.media) && + Objects.equals(rel, that.rel) && Objects.equals(pageParameters, that.pageParameters); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java index 386fa65..36dae67 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java @@ -31,8 +31,31 @@ import org.apache.wicket.request.cycle.RequestCycle; */ public class CssUrlReferenceHeaderItem extends CssHeaderItem { + private static final long serialVersionUID = 1L; + private final String url; private final String media; + private final String rel; + + /** + * Creates a new {@code CSSUrlReferenceHeaderItem}. + * + * @param url + * context-relative url of the CSS resource + * @param media + * the media type for this CSS ("print", "screen", etc.) + * @param condition + * the condition to use for Internet Explorer conditional comments. E.g. "IE 7". + * @param rel + * the rel attribute content + */ + public CssUrlReferenceHeaderItem(String url, String media, String condition, String rel) + { + super(condition); + this.url = url; + this.media = media; + this.rel = rel; + } /** * Creates a new {@code CSSUrlReferenceHeaderItem}. @@ -49,6 +72,7 @@ public class CssUrlReferenceHeaderItem extends CssHeaderItem super(condition); this.url = url; this.media = media; + this.rel = null; } /** @@ -67,19 +91,27 @@ public class CssUrlReferenceHeaderItem extends CssHeaderItem return media; } + /** + * @return the rel attribute content + */ + public String getRel() + { + return rel; + } + @Override public void render(Response response) { internalRenderCSSReference(response, UrlUtils.rewriteToContextRelative(getUrl(), RequestCycle.get()), getMedia(), - getCondition()); + getCondition(), getRel()); } @Override public Iterable<?> getRenderTokens() { - return Arrays.asList("css-" + - UrlUtils.rewriteToContextRelative(getUrl(), RequestCycle.get()) + "-" + media); + return Arrays.asList( + "css-" + UrlUtils.rewriteToContextRelative(getUrl(), RequestCycle.get()) + "-" + media); } @Override @@ -91,17 +123,20 @@ public class CssUrlReferenceHeaderItem extends CssHeaderItem @Override public int hashCode() { - return Objects.hash(super.hashCode(), url, media); + return Objects.hash(super.hashCode(), url, media, rel); } @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - CssUrlReferenceHeaderItem that = (CssUrlReferenceHeaderItem) o; - return Objects.equals(url, that.url) && - Objects.equals(media, that.media); + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + if (!super.equals(o)) + return false; + CssUrlReferenceHeaderItem that = (CssUrlReferenceHeaderItem)o; + return Objects.equals(url, that.url) && Objects.equals(media, that.media) && + Objects.equals(rel, that.rel); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/620081b0/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java index 1835a75..77fce4b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java @@ -38,7 +38,15 @@ import org.apache.wicket.util.value.ValueMap; */ public class MetaDataHeaderItem extends HeaderItem { + private static final long serialVersionUID = 1L; + + /** + * The meta tag name + */ public static final String META_TAG = "meta"; + /** + * the link tag name + */ public static final String LINK_TAG = "link"; private final Map<String, Object> tagAttributes;