On Wed, 15 Jan 2020 at 04:55, Andrew Kondratev <and...@kondratev.pro>
wrote:
Hi Everyone!
Is this "none !important" actually needed? Elements with hidden attribute
are hidden by themselves, except the cases when they have some display
overrides (see
https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden
).
If developer/user does override he or she could take care of this by
himself.
If the only style in core css is this wicket--hidden the whole css is,
probably unnecessary.
ср, 15 янв. 2020 г. в 10:38, Sven Meier <s...@meiers.net>:
Hi Edmond,
then I'll ask again:
Why not render a "hidden" attribute and style it in the core css:
|[hidden] { display: none !important}|
We could get rid of the "data-wicket-placeholder" attribute as well,
and
let wicket-ajax check on the "hidden" attribute instead.
Sven
On 14.01.20 21:06, Emond Papegaaij wrote:
>Using the hidden attribute is no option either,
>because it is overridden by any css that sets display.
why is that a no-option, hidden elements can be styled too:
Dropping the styling altogether will force our users to package their
own styling for artifacts generated by Wicket. These styles are not
to
make your application look nice, but to make certain Wicket internals
work as expected. In the case of wicket--hidden, not much else can be
done than use 'display:none'. In the case of the Form parts, more
elaborate styling is need to keep the extra fields hidden without
using display:none. Why put the burden on the user of Wicket when we
can package those styling ourselves? I can put the registration of
the
IHeaderContributor in a protected method in WebApplication. That way
you can change the behavior in a subclass. You can already change the
stylesheet if you need to.
Do you mean FormComponentFeedbackBorder's "color:red;" style?
I wouldn't want that to be located in a 'kitchen-sink' CSS file in
the
future.
Yes, that's the styling I meant. There are more examples. IMHO those
are typical candidates for CSS classes, but without styling packaged
with Wicket (like with FeedbackPanel). The styling is not going to
match the users application anyway. Who would want to use red as a
color for a border? Even for me, being colorblind, that color is way
too saturated.
Best regards,
Emond
Have fun
Sven||
||
On 14.01.20 20:31, Emond Papegaaij wrote:
Hi,
Sven, we do need styling to hide components.
Component.renderPlaceholderTag renders an empty tag for whatever it
reads from your markup. That fact that it is empty, does not mean
it
is invisible. For example, in my application I had empty list-items
(li) popping up all over the place. Using the hidden attribute is
no
option either, because it is overridden by any css that sets
display.
We need something that takes precedence over most styling and hides
the component for sure.
Maxim, I didn't know about the application wide
IHeaderContributors.
I'll give that a try, it seems cleaner to me than overriding
renderHead in Page.
About the contents of the stylesheet, it will probably not contain
much styling, but it will be more than just wicket--hidden. For
example, the styling for the form submit handling markup needs to
go
there as well. I also found some other places with inline styling,
like FormComponentFeedbackBorder. We need to decide what to do with
those as well.
Best regards,
Emond
On Tue, Jan 14, 2020 at 7:19 PM Sven Meier <s...@meiers.net>
wrote:
Hi Maxim,
an empty div with hidden inputs does not take any space.
Try it with wicket-examples.
Have fun
Sven
Am 14. Januar 2020 18:07:23 MEZ schrieb Maxim Solodovnik <
solomax...@gmail.com>:
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 <s...@meiers.net>
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
<solomax...@gmail.com>
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 <
emond.papega...@gmail.com>
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
<solomax...@gmail.com
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
<mgrigo...@apache.org>
wrote:
On Tue, Jan 14, 2020 at 10:01 AM Maxim Solodovnik <
solomax...@gmail.com>
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 <
solomax...@gmail.com>
wrote:
Is this comment make sense:
https://github.com/apache/wicket/commit/6d91a6a9e5c1d955a53571f9fb0f76262ac5c5d2#r36784645
?
On Tue, 14 Jan 2020 at 14:13, Martin Grigorov <
mgrigo...@apache.org>
wrote:
On Tue, Jan 14, 2020 at 9:05 AM Maxim Solodovnik <
solomax...@gmail.com>
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 <
mgrigo...@apache.org
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 <papega...@apache.org
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 <emond.papega...@topicus.nl>
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
--
WBR
Maxim aka solomax