heartcombo / simple_form

Forms made easy for Rails! It's tied to a simple DSL, with no opinion on markup.
http://blog.plataformatec.com.br/tag/simple_form
MIT License
8.21k stars 1.31k forks source link

`config.default_form_class` should not be *overriden* but *complemented* when `html: { :class }` is specified #1819

Open jerefrer opened 1 year ago

jerefrer commented 1 year ago

I just updated a very old project and the CSS exploded for my forms.

Took me a while to realize that it all came from:

= simple_form_for user, html: { class: ('compact' if request.xhr?) }

In which the html: { class: ('compact' if request.xhr?) } actually replaced the default class from the config file:

config.default_form_class = 'ui form'

because if request.xhr? is false, then html[:class] is nil, but it still overrides the default class from the config file.

Alright I thought, maybe it comes from having html[:class] as nil, so I changed my code to only pass the html[:class] bit if request.xhr? is true. That's kind of annoying, but why not.

But then I realized that when request.xhr? is actually true, I also have my forms go unstyled.

So when request.xhr? is true, I have to specify that I want the compact css class, but also to explicitly specify that I still want to keep the default one.

This doesn't look very DRY to me, because I have to repeat the default form class everywhere I want to add an extra class to the default.

It all originate from here it seems: https://github.com/heartcombo/simple_form/commit/1e8bba7eb378da86cabb3d6a0ece9b34998c58e2

And I wonder if it was actually a good move to accept this behavior.

What do you think? Should we revert to an additive behavior instead of substitutive?

attenzione commented 11 months ago

This is a duplicate of https://github.com/heartcombo/simple_form/issues/1217. Unfortunately, it has not been fixed for years.