I thought the main idea is to keep placeholder for any element both invisible and "take no space" hidden attribute might work instead of `display: none` The latter also hides all descendants [1], so I guess it should be preferable
[1] https://developer.mozilla.org/en-US/docs/Web/CSS/display On Wed, 15 Jan 2020 at 00:01, Sven Meier <[email protected]> wrote: > Hi, > > do we really need this CSS? > > AFAIK the 'hidden' markup from Form and Component placeholders do not > need any styling actually, they look fine without it. > We should add a CSS class to the markup of course, but leave its styling > to each project. > > Cases in wicket-examples (UploadProgressBar, deprecated ModalWindow and > AjaxIndicatorAppender) could switch to a different solution (e.g. their > own CSS). > > If wicket-base.css contains ".wicket--hidden" only, the effort isn't > worth it IMHO. > > Sven > > > On 14.01.20 16:23, Maxim Solodovnik wrote: > > For example it can be added as > > `Application.get().getHeaderContributorListeners()` > > > > On Tue, 14 Jan 2020 at 16:03, Maxim Solodovnik <[email protected]> > wrote: > > > >> `!important` is not the silver bullet (as well as inline style) > >> > >> `renderHead` is not as important as `onConfigure`, so I believe it > >> shouldn't be made mandatory > >> Maybe there is some `hackish` way to inject this css only once for any > >> component hierarchy? > >> > >> On Tue, 14 Jan 2020 at 15:55, Emond Papegaaij < > [email protected]> > >> wrote: > >> > >>> Rendering components without a page will indeed require you to include > >>> the core css file yourself. I think that's better than adding the css > >>> file with every component, as that will impose a massive overhead. > >>> I've renamed the css file to wicket-core.css as suggested by Martin. > >>> The idea is to collect all styling used with wicket-core in this css > >>> file. I do not like the idea to use a behavior for adding the > >>> stylesheet, as that will increase the size of every page. Maybe a > >>> temporary behavior can be used, but that will need to be re-added on > >>> every render then. Maybe, we can add a check to super.renderHead, like > >>> we do with onConfgure and onInitialize? > >>> > >>> Using the hidden attribute is not a good idea, for the same reason as > >>> I chose to use !important in the css file: any matching css rule that > >>> is more specify will otherwise override the visibility and cause the > >>> component to be visible anyway (like display: flex). > >>> > >>> Best regards, > >>> Emond > >>> > >>> On Tue, Jan 14, 2020 at 9:10 AM Maxim Solodovnik <[email protected] > > > >>> wrote: > >>>> The problem as I see it > >>>> The component will be rendered without page (and without CSS file > >>> itself) > >>>> so element with this class will actually be visible .... > >>>> > >>>> On Tue, 14 Jan 2020 at 15:08, Martin Grigorov <[email protected]> > >>> wrote: > >>>>> On Tue, Jan 14, 2020 at 10:01 AM Maxim Solodovnik < > >>> [email protected]> > >>>>> wrote: > >>>>> > >>>>>> An related question: > >>>>>> Will this code > >>>>>> > >>>>>> > >>> > `org.apache.wicket.core.util.string.ComponentRenderer.renderComponent(Component)` > >>>>>> work as expected? > >>>>>> > >>>>> This method will render the component with class="wicket--hidden" on > >>> its > >>>>> HTML element. With TagTester you can verify > >>>>> CSP checks are done only by the browsers. > >>>>> > >>>>> > >>>>>> > >>>>>> On Tue, 14 Jan 2020 at 14:15, Maxim Solodovnik < > >>> [email protected]> > >>>>>> wrote: > >>>>>> > >>>>>>> Is this comment make sense: > >>>>>>> > >>> > https://github.com/apache/wicket/commit/6d91a6a9e5c1d955a53571f9fb0f76262ac5c5d2#r36784645 > >>>>>>> ? > >>>>>>> > >>>>>>> On Tue, 14 Jan 2020 at 14:13, Martin Grigorov < > >>> [email protected]> > >>>>>>> wrote: > >>>>>>> > >>>>>>>> On Tue, Jan 14, 2020 at 9:05 AM Maxim Solodovnik < > >>>>> [email protected]> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Wasn't aware of `hidden` attribute > >>>>>>>>> (and it seems to be widely supported > >>>>>>>>> > >>> > https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden > >>>>>>>>> ) > >>>>>>>>> > >>>>>>>> Thanks for the reference, Maxim! > >>>>>>>> > >>>>>>>> It says "elements that are descendants of a hidden element are > >>> still > >>>>>>>> active, which means that script elements can still execute and > >>> form > >>>>>>>> elements can still submit" and this is different than display: > >>> none. > >>>>>>>> So we should stick with CSS display! > >>>>>>>> > >>>>>>>> > >>>>>>>>> Thanks :) > >>>>>>>>> > >>>>>>>>> On Tue, 14 Jan 2020 at 14:01, Martin Grigorov < > >>> [email protected] > >>>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Hi, > >>>>>>>>>> > >>>>>>>>>> 1) I see that such CSS resource might be used for other > >>> needs, not > >>>>>>>> just > >>>>>>>>>> this particular case but would it be an option to use > >>> "hidden" > >>>>>>>> attribute > >>>>>>>>> in > >>>>>>>>>> this case instead of CSS "display" ? > >>>>>>>>>> > >>>>>>>>>> 2) wicket-core.css instead of wicket-base.css ? > >>>>>>>>>> > >>>>>>>>>> On Mon, Jan 13, 2020 at 9:43 PM <[email protected]> > >>> wrote: > >>>>>>>>>>> This is an automated email from the ASF dual-hosted git > >>>>>> repository. > >>>>>>>>>>> papegaaij pushed a commit to branch csp > >>>>>>>>>>> in repository > >>> https://gitbox.apache.org/repos/asf/wicket.git > >>>>>>>>>>> > >>>>>>>>>>> The following commit(s) were added to refs/heads/csp by > >>> this > >>>>> push: > >>>>>>>>>>> new 6d91a6a WICKET-6725: replace display:none by > >>>>>>>> wicket--hidden > >>>>>>>>> css > >>>>>>>>>>> class > >>>>>>>>>>> 6d91a6a is described below > >>>>>>>>>>> > >>>>>>>>>>> commit 6d91a6a9e5c1d955a53571f9fb0f76262ac5c5d2 > >>>>>>>>>>> Author: Emond Papegaaij <[email protected]> > >>>>>>>>>>> AuthorDate: Mon Jan 13 20:43:01 2020 +0100 > >>>>>>>>>>> > >>>>>>>>>>> WICKET-6725: replace display:none by wicket--hidden css > >>>>> class > >>>>>>>>>>> --- > >>>>>>>>>>> .../src/main/java/org/apache/wicket/Component.java | 2 +- > >>>>>>>>>>> .../src/main/java/org/apache/wicket/Page.java | 11 > >>> +++++++ > >>>>>>>>>>> .../wicket/css/WicketBaseCSSResourceReference.java | 36 > >>>>>>>>>>> ++++++++++++++++++++++ > >>>>>>>>>>> .../java/org/apache/wicket/css/wicket-base.css | 3 ++ > >>>>>>>>>>> .../apache/wicket/settings/ResourceSettings.java | 31 > >>>>>>>>>>> +++++++++++++++++++ > >>>>>>>>>>> .../ajax/markup/html/AjaxIndicatorAppender.java | 2 +- > >>>>>>>>>>> 6 files changed, 83 insertions(+), 2 deletions(-) > >>>>>>>>>>> > >>>>>>>>>>> diff --git > >>>>>>>> a/wicket-core/src/main/java/org/apache/wicket/Component.java > >>> b/wicket-core/src/main/java/org/apache/wicket/Component.java > >>>>>>>>>>> index 9da8ec5..d2da23b 100644 > >>>>>>>>>>> --- > >>> a/wicket-core/src/main/java/org/apache/wicket/Component.java > >>>>>>>>>>> +++ > >>> b/wicket-core/src/main/java/org/apache/wicket/Component.java > >>>>>>>>>>> @@ -2367,7 +2367,7 @@ public abstract class Component > >>>>>>>>>>> response.write(name); > >>>>>>>>>>> response.write(" id=\""); > >>>>>>>>>>> response.write(getAjaxRegionMarkupId()); > >>>>>>>>>>> - response.write("\" style=\"display:none\" > >>>>>>>>>>> data-wicket-placeholder=\"\"></"); > >>>>>>>>>>> + response.write("\" class=\"wicket--hidden\" > >>>>>>>>>>> data-wicket-placeholder=\"\"></"); > >>>>>>>>>>> response.write(name); > >>>>>>>>>>> response.write(">"); > >>>>>>>>>>> } > >>>>>>>>>>> diff --git > >>>>> a/wicket-core/src/main/java/org/apache/wicket/Page.java > >>>>>>>>>>> b/wicket-core/src/main/java/org/apache/wicket/Page.java > >>>>>>>>>>> index 3f0f5b5..3d70ad8 100644 > >>>>>>>>>>> --- a/wicket-core/src/main/java/org/apache/wicket/Page.java > >>>>>>>>>>> +++ b/wicket-core/src/main/java/org/apache/wicket/Page.java > >>>>>>>>>>> @@ -24,10 +24,13 @@ import java.util.Set; > >>>>>>>>>>> > >>>>>>>>>>> import > >>>>>> org.apache.wicket.authorization.UnauthorizedActionException; > >>>>>>>>>>> import org.apache.wicket.core.util.lang.WicketObjects; > >>>>>>>>>>> +import > >>> org.apache.wicket.css.WicketBaseCSSResourceReference; > >>>>>>>>>>> import org.apache.wicket.feedback.FeedbackDelay; > >>>>>>>>>>> import org.apache.wicket.markup.MarkupException; > >>>>>>>>>>> import org.apache.wicket.markup.MarkupStream; > >>>>>>>>>>> import org.apache.wicket.markup.MarkupType; > >>>>>>>>>>> +import org.apache.wicket.markup.head.CssHeaderItem; > >>>>>>>>>>> +import org.apache.wicket.markup.head.IHeaderResponse; > >>>>>>>>>>> import org.apache.wicket.markup.html.WebPage; > >>>>>>>>>>> import > >>> org.apache.wicket.markup.resolver.IComponentResolver; > >>>>>>>>>>> import org.apache.wicket.model.IModel; > >>>>>>>>>>> @@ -1003,6 +1006,14 @@ public abstract class Page extends > >>>>>>>>> MarkupContainer > >>>>>>>>>>> } > >>>>>>>>>>> } > >>>>>>>>>>> > >>>>>>>>>>> + @Override > >>>>>>>>>>> + public void renderHead(IHeaderResponse response) > >>>>>>>>>>> + { > >>>>>>>>>>> + super.renderHead(response); > >>>>>>>>>>> + response.render( > >>>>>>>>>>> + > >>>>>>>>>>> > >>> > CssHeaderItem.forReference(getApplication().getResourceSettings().getWicketBaseCSS())); > >>>>>>>>>>> + } > >>>>>>>>>>> + > >>>>>>>>>>> /** > >>>>>>>>>>> * THIS METHOD IS NOT PART OF THE WICKET PUBLIC > >>> API. DO > >>>>>> NOT > >>>>>>>>> CALL. > >>>>>>>>>>> * > >>>>>>>>>>> diff --git > >>>>>>>>>>> > >>> > a/wicket-core/src/main/java/org/apache/wicket/css/WicketBaseCSSResourceReference.java > >>> > b/wicket-core/src/main/java/org/apache/wicket/css/WicketBaseCSSResourceReference.java > >>>>>>>>>>> new file mode 100644 > >>>>>>>>>>> index 0000000..9247216 > >>>>>>>>>>> --- /dev/null > >>>>>>>>>>> +++ > >>>>>>>>>>> > >>> > b/wicket-core/src/main/java/org/apache/wicket/css/WicketBaseCSSResourceReference.java > >>>>>>>>>>> @@ -0,0 +1,36 @@ > >>>>>>>>>>> +/* > >>>>>>>>>>> + * Licensed to the Apache Software Foundation (ASF) under > >>> one > >>>>> or > >>>>>>>> more > >>>>>>>>>>> + * contributor license agreements. See the NOTICE file > >>>>>> distributed > >>>>>>>>> with > >>>>>>>>>>> + * this work for additional information regarding > >>> copyright > >>>>>>>> ownership. > >>>>>>>>>>> + * The ASF licenses this file to You under the Apache > >>> License, > >>>>>>>> Version > >>>>>>>>>> 2.0 > >>>>>>>>>>> + * (the "License"); you may not use this file except in > >>>>>> compliance > >>>>>>>>> with > >>>>>>>>>>> + * the License. You may obtain a copy of the License at > >>>>>>>>>>> + * > >>>>>>>>>>> + * http://www.apache.org/licenses/LICENSE-2.0 > >>>>>>>>>>> + * > >>>>>>>>>>> + * Unless required by applicable law or agreed to in > >>> writing, > >>>>>>>> software > >>>>>>>>>>> + * distributed under the License is distributed on an "AS > >>> IS" > >>>>>>>> BASIS, > >>>>>>>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either > >>> express > >>>>>> or > >>>>>>>>>>> implied. > >>>>>>>>>>> + * See the License for the specific language governing > >>>>>> permissions > >>>>>>>> and > >>>>>>>>>>> + * limitations under the License. > >>>>>>>>>>> + */ > >>>>>>>>>>> +package org.apache.wicket.css; > >>>>>>>>>>> + > >>>>>>>>>>> +import > >>> org.apache.wicket.request.resource.CssResourceReference; > >>>>>>>>>>> + > >>>>>>>>>>> +public final class WicketBaseCSSResourceReference extends > >>>>>>>>>>> CssResourceReference > >>>>>>>>>>> +{ > >>>>>>>>>>> + private static final long serialVersionUID = > >>>>>>>>>> 6795863553105608280L; > >>>>>>>>>>> + > >>>>>>>>>>> + private static final WicketBaseCSSResourceReference > >>>>>>>> INSTANCE = > >>>>>>>>>> new > >>>>>>>>>>> WicketBaseCSSResourceReference(); > >>>>>>>>>>> + > >>>>>>>>>>> + public static WicketBaseCSSResourceReference get() > >>>>>>>>>>> + { > >>>>>>>>>>> + return INSTANCE; > >>>>>>>>>>> + } > >>>>>>>>>>> + > >>>>>>>>>>> + private WicketBaseCSSResourceReference() > >>>>>>>>>>> + { > >>>>>>>>>>> + super(WicketBaseCSSResourceReference.class, > >>>>>>>>>>> "wicket-base.css"); > >>>>>>>>>>> + } > >>>>>>>>>>> +} > >>>>>>>>>>> diff --git > >>>>>>>>>>> > >>>>> a/wicket-core/src/main/java/org/apache/wicket/css/wicket-base.css > >>>>> b/wicket-core/src/main/java/org/apache/wicket/css/wicket-base.css > >>>>>>>>>>> new file mode 100644 > >>>>>>>>>>> index 0000000..9bbdd63 > >>>>>>>>>>> --- /dev/null > >>>>>>>>>>> +++ > >>>>>>>> b/wicket-core/src/main/java/org/apache/wicket/css/wicket-base.css > >>>>>>>>>>> @@ -0,0 +1,3 @@ > >>>>>>>>>>> +.wicket--hidden { > >>>>>>>>>>> + display: none!important; > >>>>>>>>>>> +} > >>>>>>>>>>> \ No newline at end of file > >>>>>>>>>>> diff --git > >>>>>>>>>>> > >>> > a/wicket-core/src/main/java/org/apache/wicket/settings/ResourceSettings.java > >>> > b/wicket-core/src/main/java/org/apache/wicket/settings/ResourceSettings.java > >>>>>>>>>>> index b76fbcd..68317f4 100644 > >>>>>>>>>>> --- > >>>>>>>>>>> > >>> > a/wicket-core/src/main/java/org/apache/wicket/settings/ResourceSettings.java > >>>>>>>>>>> +++ > >>>>>>>>>>> > >>> > b/wicket-core/src/main/java/org/apache/wicket/settings/ResourceSettings.java > >>>>>>>>>>> @@ -29,12 +29,14 @@ import > >>>>>>>>>>> > >>>>>> org.apache.wicket.core.util.resource.locator.IResourceStreamLocator; > >>>>>>>>>>> import > >>>>> org.apache.wicket.core.util.resource.locator.ResourceStreamLocator; > >>>>>>>>>>> import > >>>>>>>>>>> > >>> > org.apache.wicket.core.util.resource.locator.caching.CachingResourceStreamLocator; > >>>>>>>>>>> import org.apache.wicket.css.ICssCompressor; > >>>>>>>>>>> +import > >>> org.apache.wicket.css.WicketBaseCSSResourceReference; > >>>>>>>>>>> import org.apache.wicket.javascript.IJavaScriptCompressor; > >>>>>>>>>>> import > >>> org.apache.wicket.markup.head.PriorityFirstComparator; > >>>>>>>>>>> import > >>>>>>>>>>> > >>>>>> org.apache.wicket.markup.head.ResourceAggregator.RecordedHeaderItem; > >>>>>>>>>>> import > >>> org.apache.wicket.markup.html.IPackageResourceGuard; > >>>>>>>>>>> import > >>>>> org.apache.wicket.markup.html.SecurePackageResourceGuard; > >>>>>>>>>>> import org.apache.wicket.request.http.WebResponse; > >>>>>>>>>>> +import > >>> org.apache.wicket.request.resource.CssResourceReference; > >>>>>>>>>>> import > >>>>>>>>>>> > >>> > org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy; > >>>>>>>>>>> import > >>>>>>>>>>> > >>>>>> org.apache.wicket.request.resource.caching.IResourceCachingStrategy; > >>>>>>>>>>> import > >>>>>>>>>>> > >>> org.apache.wicket.request.resource.caching.NoOpResourceCachingStrategy; > >>>>>>>>>>> @@ -172,6 +174,8 @@ public class ResourceSettings > >>> implements > >>>>>>>>>>> IPropertiesFactoryContext > >>>>>>>>>>> false); > >>>>>>>>>>> > >>>>>>>>>>> private boolean encodeJSessionId = false; > >>>>>>>>>>> + > >>>>>>>>>>> + private CssResourceReference wicketBaseCSS = > >>>>>>>>>>> WicketBaseCSSResourceReference.get(); > >>>>>>>>>>> > >>>>>>>>>>> /** > >>>>>>>>>>> * Configures Wicket's default ResourceLoaders.<br> > >>>>>>>>>>> @@ -770,4 +774,31 @@ public class ResourceSettings > >>> implements > >>>>>>>>>>> IPropertiesFactoryContext > >>>>>>>>>>> this.encodeJSessionId = encodeJSessionId; > >>>>>>>>>>> return this; > >>>>>>>>>>> } > >>>>>>>>>>> + > >>>>>>>>>>> + /** > >>>>>>>>>>> + * Returns the resource reference of the base > >>> stylesheet > >>>>>> for > >>>>>>>>>>> Wicket. This stylesheet contains > >>>>>>>>>>> + * some lowlevel styling used by Wicket. > >>>>>>>>>>> + * > >>>>>>>>>>> + * @return The resource reference of the base > >>> stylesheet > >>>>>> for > >>>>>>>>>>> Wicket. > >>>>>>>>>>> + */ > >>>>>>>>>>> + public CssResourceReference getWicketBaseCSS() > >>>>>>>>>>> + { > >>>>>>>>>>> + return wicketBaseCSS; > >>>>>>>>>>> + } > >>>>>>>>>>> + > >>>>>>>>>>> + /** > >>>>>>>>>>> + * Replaces the base stylesheet for Wicket. > >>> Changes made > >>>>>> to > >>>>>>>> the > >>>>>>>>>>> styling can break functionality > >>>>>>>>>>> + * like {@link > >>>>>>>>> Component#setOutputMarkupPlaceholderTag(boolean)}, > >>>>>>>>>>> causing components that should > >>>>>>>>>>> + * not be visible to be displayed. Make sure the > >>>>>> replacement > >>>>>>>>>>> stylesheet has matching definitions > >>>>>>>>>>> + * for the corresponding sections in the Wicket > >>> version. > >>>>>>>>>>> + * > >>>>>>>>>>> + * @param wicketBaseCSS > >>>>>>>>>>> + * The replacement styleheet. > >>>>>>>>>>> + * @return {@code this} object for chaining > >>>>>>>>>>> + */ > >>>>>>>>>>> + public ResourceSettings > >>>>>>>> setWicketBaseCSS(CssResourceReference > >>>>>>>>>>> wicketBaseCSS) > >>>>>>>>>>> + { > >>>>>>>>>>> + this.wicketBaseCSS = wicketBaseCSS; > >>>>>>>>>>> + return this; > >>>>>>>>>>> + } > >>>>>>>>>>> } > >>>>>>>>>>> diff --git > >>>>>>>>>>> > >>> > a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java > >>> > b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java > >>>>>>>>>>> index d0fee97..ab1c0a1 100644 > >>>>>>>>>>> --- > >>>>>>>>>>> > >>> > a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java > >>>>>>>>>>> +++ > >>>>>>>>>>> > >>> > b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java > >>>>>>>>>>> @@ -95,7 +95,7 @@ public class AjaxIndicatorAppender > >>> extends > >>>>>>>> Behavior > >>>>>>>>>>> super.afterRender(component); > >>>>>>>>>>> final Response r = component.getResponse(); > >>>>>>>>>>> > >>>>>>>>>>> - r.write("<span style=\"display:none;\" > >>>>> class=\""); > >>>>>>>>>>> + r.write("<span class=\"wicket--hidden\" > >>>>>> class=\""); > >>>>>>>>>>> r.write(getSpanClass()); > >>>>>>>>>>> r.write("\" "); > >>>>>>>>>>> r.write("id=\""); > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> WBR > >>>>>>>>> Maxim aka solomax > >>>>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> WBR > >>>>>>> Maxim aka solomax > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> WBR > >>>>>> Maxim aka solomax > >>>>>> > >>>> > >>>> -- > >>>> WBR > >>>> Maxim aka solomax > >> > >> -- > >> WBR > >> Maxim aka solomax > >> > > > -- WBR Maxim aka solomax
