royale-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Rovira <carlosrov...@apache.org>
Subject Re: TypeNames vs ClassName
Date Mon, 12 Mar 2018 17:55:33 GMT
Hi Piotr.
I think is what I just pointed in the response to a Harbs emails. I think
once people set typenames and classnames, if we operate all through
element.classList, that solves all conflicts, since all classes are in a
managed list, if people wants to add or remove they can through the list.
The only thing we can't avoid is to remove typenames, but I think we should
not try to enforce that in the same way we want to use object bracketed
access to properties since is more dinamic. In resume, we'll end with a
very robust class system based on classList that has browser support and
people can override if they want (it's up to what they want to do)

2018-03-12 18:47 GMT+01:00 Piotr Zarzycki <piotrzarzycki21@gmail.com>:

> Carlos,
>
> But people are changing className all the time and that's the way how you
> are changing your component. That was the problem. How do you handle that
> one ? Change UIBase, your component to your approach.
>
> Than in your examples set <Button className="myCustomClass" /> - What are
> you get ?
>
>
>
> 2018-03-12 18:44 GMT+01:00 Carlos Rovira <carlosrovira@apache.org>:
>
> > Hi Harbs,
> >
> > if once typenames and classnames are set, if UIBase changes the way it
> > manages className to use element.classList, things will be more easy and
> a
> > matter of use add/remove/toggle methods in element.classList. right?
> > if people changes className directly will be bad, unless he/she wants to
> > override it completely (and if they want to do that since they needed,
> why
> > not?)
> >
> > 2018-03-12 17:51 GMT+01:00 Harbs <harbs.lists@gmail.com>:
> >
> > > Right, but Carlos is using: element.classList.toggle("primary",
> value);
> > > (and similar)
> > >
> > > That will be overwritten if someone sets myButton.className =
> > “foo_class”;
> > > (where myButton is some kind of UIBase)
> > >
> > > You cannot even do something like this: myButton.className =
> > > myButton.className +  “ foo_class”; because the properties such as
> > > “primary” are not being included in the typeNames or classNames.
> > >
> > > Harbs
> > >
> > > > On Mar 12, 2018, at 6:42 PM, Alex Harui <aharui@adobe.com.INVALID>
> > > wrote:
> > > >
> > > > Well, it isn't fair if someone writes to element.className, but we
> > > control
> > > > what happens when someone writes to UIBase.className.  I just want it
> > to
> > > > be as simple as possible and PAYG.
> > > >
> > > > -Alex
> > > >
> > > > On 3/12/18, 9:21 AM, "Harbs" <harbs.lists@gmail.com <mailto:
> > > harbs.lists@gmail.com>> wrote:
> > > >
> > > >> I’m pretty sure your solution will only work if the user doesn’t
> set a
> > > >> className of their own. Setting className overwrites the entire
> > > classList.
> > > >>
> > > >>> On Mar 12, 2018, at 5:45 PM, Carlos Rovira <
> carlosrovira@apache.org>
> > > >>> wrote:
> > > >>>
> > > >>> Hi
> > > >>>
> > > >>> I made some simplification that works ok in Jewel:
> > > >>>
> > > >>> 1.- remove CSSClassList and use element.classList since is native
> and
> > > >>> supported in all browsers we target, this simplifies code, and
> > removes
> > > >>> classes from core.
> > > >>> 2.- I still need to use some additional code that can be
> simplified.
> > > I'm
> > > >>> doing:
> > > >>>
> > > >>> element.classList.toggle("primary", value);
> > > >>> setClassName(computeFinalClassNames());
> > > >>> classList has its own toggle function that makes super easy to
> manage
> > > >>> adds
> > > >>> and removes, so no need to have a custom function in royale
> > > >>>
> > > >>> that uses:
> > > >>>
> > > >>> COMPILE::JS
> > > >>> override protected function computeFinalClassNames():String
> > > >>> {
> > > >>> return super.computeFinalClassNames() + " " + element.classList;
> > > >>> }
> > > >>>
> > > >>> I'd like to remove that and change the "setClassName" call to
> > nothing,
> > > >>> if
> > > >>> we change UIBase to simple use classList
> > > >>>
> > > >>> My guess is that we can have "typenames" and "classNames" but
once
> > all
> > > >>> set,
> > > >>> all can be managed with classList to add/remove since this is
> native
> > > and
> > > >>> manages all itself
> > > >>>
> > > >>> thoughts?
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>> 2018-03-12 14:01 GMT+01:00 Carlos Rovira <carlosrovira@apache.org
> >:
> > > >>>
> > > >>>> Hi,
> > > >>>>
> > > >>>> long thread and very useful read here. Since Jewel is very
similar
> > to
> > > >>>> MDL
> > > >>>> in adding/removing classes I want to comment here some things:
> > > >>>>
> > > >>>> 1.- I just changed jewel typenames to the constructor and
things
> > works
> > > >>>> ok,
> > > >>>> I could remove the createElement override
> > > >>>> 2.- I have into account the use of typenames as something
> inmutable
> > > (as
> > > >>>> part of definition of a component) and classNames as things
that
> are
> > > >>>> put by
> > > >>>> developer, or change at runtime due to some user operation
> > > >>>>
> > > >>>> Then:
> > > >>>>
> > > >>>> 3.- Why not use classList [1] instead of create our own
> > CSSClassList ?
> > > >>>> is
> > > >>>> well supported in the browsers we are targeting
> > > >>>>
> > > >>>> Something more "light" :)
> > > >>>>
> > > >>>> 4.- I know that order in html classes are not relevant, in
the
> > > >>>> execution.
> > > >>>> And most of people here doesn't mind if typenames are before
or
> > after
> > > >>>> classNames. So hope this doesn't make any problem to anyone
here:
> > > >>>> Can I change the code to put typeNames before classNames in
> > > >>>> computeFinalClassNames? I think this not affects anyone since
is a
> > > >>>> small
> > > >>>> change and helps me to get organized classnames and identify
> > things. I
> > > >>>> think is better to see in final html typeNames first then
> classNames
> > > so
> > > >>>> "inheritance" (to call it some way), could be easy detected
by the
> > eye
> > > >>>>
> > > >>>> Thanks
> > > >>>>
> > > >>>> Carlos
> > > >>>>
> > > >>>>
> > > >>>> [1]
> > > >>>> https://na01.safelinks.protection.outlook.com/?url=
> > > https%3A%2F%2Fwww.w3s <https://na01.safelinks.
> > protection.outlook.com/?url=
> > > https%3A%2F%2Fwww.w3s>
> > > >>>> chools.com <http://chools.com/>%2FJsref%
> > 2Fprop_element_classlist.asp&
> > > data=02%7C01%7Caharui%40
> > > >>>> adobe.com <http://adobe.com/>%7C8ce390a012154f8f2a8a08d588354aa0%
> > > 7Cfa7b1b5a7b34438794aed2c17
> > > >>>> 8decee1%7C0%7C0%7C636564684909764090&sdata=
> > > OOh4TK5LKB75CGn6U4%2BeaVC%2Fi
> > > >>>> V%2BHgGzDj8fqrBB%2BCcs%3D&reserved=0
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> --
> > > >>>> Carlos Rovira
> > > >>>>
> > > >>>> https://na01.safelinks.protection.outlook.com/?url=
> > > http%3A%2F%2Fabout.me <https://na01.safelinks.
> > protection.outlook.com/?url=
> > > http%3A%2F%2Fabout.me>
> > > >>>> %2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com <
> > > http://40adobe.com/>%7C8ce390a012154f8f2a8a
> > > >>>> 08d588354aa0%7Cfa7b1b5a7b34438794aed2c178de
> > > cee1%7C0%7C0%7C63656468490976
> > > >>>> 4090&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qO
> > xiIQJKkOaTZV4%3D&reserved=0
> > > >>>>
> > > >>>>
> > > >>>
> > > >>>
> > > >>> --
> > > >>> Carlos Rovira
> > > >>>
> > > >>> https://na01.safelinks.protection.outlook.com/?url=
> > > http%3A%2F%2Fabout.me% <https://na01.safelinks.
> > > protection.outlook.com/?url=http%3A%2F%2Fabout.me%>
> > > >>> 2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com <
> > http://40adobe.com/
> > > >%7C8ce390a012154f8f2a8a08
> > > >>> d588354aa0%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> > > 7C63656468490976409
> > > >>> 0&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%3D&reserved=0
> > >
> > >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
>
>
>
> --
>
> Piotr Zarzycki
>
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*
>



-- 
Carlos Rovira
http://about.me/carlosrovira

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message