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 &lt;style&gt; 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;

Reply via email to