You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by Piotr Zarzycki <pi...@gmail.com> on 2018/03/01 21:56:37 UTC

Re: TypeNames vs ClassName

Harbs, Alex,

I just pushed implementation of computeFinalClassNames to
branch feature/type_names_class_name_issue124. You can review
implementation in this commit [1] and example of usage in Card and Button.

I have tested with Harbs example [3] and with Card by changing orders. It's
working.

[1] http://bit.ly/2HTHaFQ
[2] http://bit.ly/2oJgKOf
[3] http://bit.ly/2F734nx

Waiting for your review.

Thanks,
Piotr


2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:

> Let me play with implementation of that function. It seems to me that will
> be much cleaner than current solution.
>
> If user actually wanted to do anythin with className - let the overriding
> speaks.
>
>
>
> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid> wrote:
>
>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>
>> >OK. I think that will work for DML components, but what if there’s a bead
>> >which needs to add class names? What would be the “right” way to do that?
>> >A bead cannot override the function on the strand.
>>
>> Do we have beads that manipulate className?
>>
>> IMO, the principle behind how to handle that is knowing whether you are
>> sharing something or not.  There may not be one right way to handle it,
>> but if I had to handle it, I would have the bead set something in the
>> model or presentation model of the component.  And the component would
>> override computeFinalClassNames to take that into account.
>>
>>
>> Although having just written that, maybe this computeFinalClassNames
>> should be in the view instead of on the base class so it is replaceable
>> instead of overridable.
>>
>> Thoughts?
>> -Alex
>> >
>> >> On Feb 28, 2018, at 10:17 PM, Alex Harui <ah...@adobe.com.INVALID>
>> >>wrote:
>> >>
>> >> I think you are missing that the element.className is set to
>> >> computeFinalClassNames.  So the user is welcome to manipulate the
>> >> UIBase.className however they see fit.  They can assign it a whole new
>> >> space-delimited list if they want.  But what gets set on
>> >>element.className
>> >> is computed from typeNames and className by default, and MDL would
>> >> override it to factor in fab, raised, colored into the computing of the
>> >> final classnames.
>> >>
>> >> I would prefer that we don't make requirements on users as to what they
>> >> can or can't do with the className property, like requiring them to use
>> >> addClassName/removeClassNames.  MXML and States might set className,
>> as
>> >> could any other AS logic.  I think folks may even be used to setting
>> >> className in JavaScript.  So letting UIBase.className be the "variable"
>> >> part and having computeFinalClassNames be the way the "fixed" part is
>> >> handled makes sense to me.
>> >>
>> >> Of course, I could be wrong...
>> >> -Alex
>> >>
>> >> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>> >>
>> >>> The problem which sparked this whole issue is like this:
>> >>>
>> >>> 1. We have some components (i.e. in MDL) which add “pieces” to the
>> >>>class
>> >>> names (such as “fab”, “raised”, “colored”, etc.
>> >>> 2. The client might subsequently set the className to something else.
>> >>> 3. When the component sets the “pieces” first and the client sets the
>> >>> className later, the client will overwrite these “pieces” which were
>> >>> added by the component.
>> >>>
>> >>> My suggestion to have addClassName() and removeClassName() was to have
>> >>>a
>> >>> “safe” way to add class names which would get computed together with
>> >>>the
>> >>> className when the className is replaced.
>> >>>
>> >>> The way you have it seems to just be modifying the existing className
>> >>> property. If that’s overwritten by a client, the logic falls apart.
>> >>>
>> >>> It feels like only having typeNames which are set inside the component
>> >>> and className which is set outside the component is not really enough.
>> >>> (Unless I’m missing something.)
>> >>>
>> >>> Harbs
>> >>>
>> >>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <ah...@adobe.com.INVALID>
>> >>>> wrote:
>> >>>>
>> >>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>> >>>>
>> >>>>> If it’s not public, I don’t see how a utility method could call it
>> >>>>> though.
>> >>>>
>> >>>> I didn't think the utility methods like addClassName/removeClassName
>> >>>> would
>> >>>> need to alter computeFinalClassNames().
>> >>>>
>> >>>> AIUI, for most UIBase subclasses, the final element.className is a
>> mix
>> >>>> of
>> >>>> the className property and the typeNames.  The typenames are thought
>> >>>>to
>> >>>> be
>> >>>> "fixed" and the space-delimited list of names in className are the
>> >>>>ones
>> >>>> the user wants to manipulate in their code.  So, I would expect them
>> >>>>to
>> >>>> write:
>> >>>>
>> >>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
>> >>>>
>> >>>>
>> >>>> addClassName should just do something like:
>> >>>>
>> >>>> myComponent.className += value;
>> >>>>
>> >>>> That will call the className setter that will run:
>> >>>>
>> >>>> element.className = computeFinalClassNames();
>> >>>>
>> >>>> If you call
>> >>>>
>> >>>> org.apache.royale.utils.removeClassName(myComponent, "pinkStyles");
>> >>>>
>> >>>> removeClassName should just do something like:
>> >>>>
>> >>>> Var s:String = myComponent.className;
>> >>>> Var c:int = s.indexOf(nameToRemove + " ");
>> >>>> If (c != -1)
>> >>>>    s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>> >>>> Else
>> >>>> {
>> >>>>    c= s.indexOf(" " + nameToRemove);
>> >>>>    if (c != -1)
>> >>>>      s = s.substr(0, c);  // remove last item
>> >>>> }
>> >>>> myComponent.className = s;
>> >>>>
>> >>>>
>> >>>>
>> >>>> It seems like it should be that simple.  What am I missing?
>> >>>>
>> >>>> -Alex
>> >>>>
>> >>>>
>> >>>>>
>> >>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui <ah...@adobe.com.INVALID>
>> >>>>>> wrote:
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>> >>>>>> <ma...@gmail.com>> wrote:
>> >>>>>>
>> >>>>>>> Ok Understand, but do you agree that  computeFinalClassNames - is
>> >>>>>>> something
>> >>>>>>> which is in the UIBase ?
>> >>>>>>
>> >>>>>> Yes, and probably protected instead of public.  The one in UIBase
>> >>>>>>just
>> >>>>>> appends typenames to className.  It gets overridden in MDL where
>> >>>>>> needed
>> >>>>>> for shadow and other attributes.
>> >>>>>>
>> >>>>>> My 2 cents,
>> >>>>>> -Alex
>> >>>>>>>
>> >>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>> >>>>>>>
>> >>>>>>>> I think that in the shadow setter, it would change _shadow and
>> >>>>>>>>call
>> >>>>>>>> setClassName(computeFinalClassNames());
>> >>>>>>>>
>> >>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>> >
>> >>>>>>>> wrote:
>> >>>>>>>>
>> >>>>>>>>> Alex,
>> >>>>>>>>>
>> >>>>>>>>> So we are getting back to the idea where you proposed to have
>> >>>>>>>>> function
>> >>>>>>>>> which computes everything.
>> >>>>>>>>>
>> >>>>>>>>> override public function computeFinalClassNames():String
>> >>>>>>>>> {
>> >>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>> >>>>>>>>> }
>> >>>>>>>>>
>> >>>>>>>>> Where does that function should be placed ? Does that function
>> >>>>>>>>> should
>> >>>>>>>> be
>> >>>>>>>>> called in addedToParent plus whenever someone change _shadow ? -
>> >>>>>>>>>
>> >>>>>>>>> Because I really don't know how to handle scenario where you
>> have
>> >>>>>>>>> some
>> >>>>>>>>> property isActive = true/false and I need to add/remove class. -
>> >>>>>>>>>In
>> >>>>>>>>> the
>> >>>>>>>>> first launch I use  computeFinalClassNames, but how to handle
>> >>>>>>>>> changing
>> >>>>>>>> ?
>> >>>>>>>>>
>> >>>>>>>>> Thanks, Piotr
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui <aharui@adobe.com.invalid
>> >:
>> >>>>>>>>>
>> >>>>>>>>>> Hi Piotr,
>> >>>>>>>>>>
>> >>>>>>>>>> I think am I not communicating the principles effectively.
>> >>>>>>>>>>
>> >>>>>>>>>> First, IMO, addClassName and removeClassName should not be in
>> >>>>>>>>>> UIBase.
>> >>>>>>>>>> Lots of apps can be written without needing these methods.  I
>> >>>>>>>>>> think
>> >>>>>>>> they
>> >>>>>>>>>> can be written as utility functions.
>> >>>>>>>>>>
>> >>>>>>>>>> Second, the computation of the final element.className should
>> >>>>>>>> represent
>> >>>>>>>>>> the state of the component, so I don't get why you need an
>> >>>>>>>>>> _internalClassName or should ever set it to "".  The
>> computation
>> >>>>>>>>>> for
>> >>>>>>>> a
>> >>>>>>>>>> component with a shadow would be to check the shadow property
>> >>>>>>>>>>and
>> >>>>>>>>>> if
>> >>>>>>>> it
>> >>>>>>>>>> is
>> >>>>>>>>>> true, add a className for the shadow to the list.  Then I think
>> >>>>>>>>>> you
>> >>>>>>>>>> wouldn't have the problem you showed in the animated GIF.  When
>> >>>>>>>>>> the
>> >>>>>>>>>> classname property is set from the outside by
>> >>>>>>>>>>MXMLDataInterpreter
>> >>>>>>>>>> or
>> >>>>>>>>>> even
>> >>>>>>>>>> user-written code, those classNames are added to the list with
>> >>>>>>>>>>the
>> >>>>>>>>>> typeNames and the shadow className if shadow is true and then
>> >>>>>>>>>>set
>> >>>>>>>>>> on
>> >>>>>>>> the
>> >>>>>>>>>> element.
>> >>>>>>>>>>
>> >>>>>>>>>> Finally, for addClassName and removeClassName, and all other
>> >>>>>>>>>> Royale
>> >>>>>>>>>> code,
>> >>>>>>>>>> we don't want to do much if any parameter checking.  That is
>> >>>>>>>>>>also
>> >>>>>>>>>> just-in-case code.  The production code should not be passing
>> in
>> >>>>>>>> null or
>> >>>>>>>>>> other bad values.  And once you fix that, then the checks that
>> >>>>>>>>>>you
>> >>>>>>>> have
>> >>>>>>>>>> written do not add value.  I have proposed that there are
>> >>>>>>>>>> debug-only
>> >>>>>>>>>> code
>> >>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag you
>> >>>>>>>>>>can
>> >>>>>>>>>> use
>> >>>>>>>>>> for
>> >>>>>>>>>> that.
>> >>>>>>>>>>
>> >>>>>>>>>> HTH,
>> >>>>>>>>>> -Alex
>> >>>>>>>>>>
>> >>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>> >>>>>>>>>><pi...@gmail.com>
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>> Hi Alex,
>> >>>>>>>>>>>
>> >>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF with
>> >>>>>>>> problem
>> >>>>>>>>>>> debugging.
>> >>>>>>>>>>>
>> >>>>>>>>>>> *Code in UIBase which I have implemented:*
>> >>>>>>>>>>> addClassName and removeClassName [1].
>> >>>>>>>>>>> addedToParent what is happen with internal field which I have
>> >>>>>>>>>>> added
>> >>>>>>>> [2]
>> >>>>>>>>>>>
>> >>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
>> >>>>>>>>>>>shadow.
>> >>>>>>>>>>>
>> >>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay attention
>> >>>>>>>>>>>to
>> >>>>>>>>>>> the
>> >>>>>>>>>>> moment
>> >>>>>>>>>>> where className is being wiped out, later I have to use my
>> >>>>>>>>>>> internal
>> >>>>>>>>>>> variable to get it back.
>> >>>>>>>>>>>
>> >>>>>>>>>>> Does that more clean now ?
>> >>>>>>>>>>>
>> >>>>>>>>>>> [1]
>> >>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>> reserve
>> >>>>>>>>>>>d=
>> >>>>>>>>>>> 0
>> >>>>>>>>>>> [2]
>> >>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>> Nejwm4Sr7bw7g%3D&reserved=0
>> >>>>>>>>>>> [3]
>> >>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>> zSltcNccqRGDo%3D&reserved=0
>> >>>>>>>>>>> [4]
>> >>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2F1drv.ms%2
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>> &data=02%7C01%7Caharui%40ad
>> >>>>>>>>>>>ob
>> >>>>>>>>>>> e
>> >>>>>>>> .com
>> >>>>>>>>>> %7C
>> >>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>> 7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>> cee1%7C0%7C
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>0%7C636554040718214998&sdata=eX%2FgZ0MA%
>> 2BdQJjcpYtMkk1pw3r0iVkdR
>> >>>>>>>>>>>a%
>> >>>>>>>>>> 2F6TWRTG
>> >>>>>>>>>>> 10OY%3D&reserved=0
>> >>>>>>>>>>>
>> >>>>>>>>>>> Thanks,
>> >>>>>>>>>>> Piotr
>> >>>>>>>>>>>
>> >>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>> >>>>>>>>>>><ah...@adobe.com.invalid>:
>> >>>>>>>>>>>
>> >>>>>>>>>>>> Hi Piotr,
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I could not understand this explanation. Might be better to
>> >>>>>>>>>>>>show
>> >>>>>>>>>> actual
>> >>>>>>>>>>>> code.  For example in #3, there is a cssClass variable that I
>> >>>>>>>> don't
>> >>>>>>>>>> know
>> >>>>>>>>>>>> about.  Also you mention at the bottom setting something as
>> >>>>>>>>>>>> empty,
>> >>>>>>>>>> but
>> >>>>>>>>>>>> I'm
>> >>>>>>>>>>>> not sure what that is.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> However, IMO, this code should be in utility functions, not
>> in
>> >>>>>>>>>> UIBase.
>> >>>>>>>>>>>> I
>> >>>>>>>>>>>> think plenty of useful applications can be built without
>> >>>>>>>>>>>> changing
>> >>>>>>>>>>>> classNames at runtime.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I'm off-line for the next several hours so we can pick this
>> up
>> >>>>>>>> again
>> >>>>>>>>>> in
>> >>>>>>>>>>>> your morning.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Thanks for working on it,
>> >>>>>>>>>>>> -Alex
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>> >>>>>>>>>>>> <pi...@gmail.com>
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would take
>> >>>>>>>> Harb's
>> >>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>> >>>>>>>> removeClassName().
>> >>>>>>>>>>>> Next
>> >>>>>>>>>>>>> I
>> >>>>>>>>>>>>> would add internal field _internalClassName:String.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> addClassName(value):
>> >>>>>>>>>>>>> 1) Will check if provided class name exits in _className and
>> >>>>>>>>>>>>>in
>> >>>>>>>>>>>>> _internalClassName.
>> >>>>>>>>>>>>> 2) Will add to _internalClassName += value
>> >>>>>>>>>>>>> 3) Assign to the element.className in the following way:
>> >>>>>>>>>>>> element.className
>> >>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> removeClassName(value)
>> >>>>>>>>>>>>> 1) Will check if provided classs name exists in  _className
>> >>>>>>>>>>>>>or
>> >>>>>>>>>>>>> in
>> >>>>>>>>>>>>> _internalClassName
>> >>>>>>>>>>>>> 2) Make a replace to empty string if css class name exists.
>> >>>>>>>>>>>>> _className.replace(value, "");
>> >>>>>>>>>>>>> 3) Assign to the element.className: element.className =
>> >>>>>>>> _className
>> >>>>>>>>>> + "
>> >>>>>>>>>>>> " +
>> >>>>>>>>>>>>> typeNames;
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> In added to parent we are computing _internalClassName with
>> >>>>>>>>>> _className
>> >>>>>>>>>>>> and
>> >>>>>>>>>>>>> typeNames. Then it's being set as empty.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> element.className =  _internalClassName  + " " + _className
>> >>>>>>>>>>>>>+ "
>> >>>>>>>> " +
>> >>>>>>>>>>>>> typeNames;
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> I have implemented it and it seems to be working. Waiting
>> for
>> >>>>>>>> your
>> >>>>>>>>>>>>> thoughts
>> >>>>>>>>>>>>> on that solution. The last step where we are adding all
>> three
>> >>>>>>>>>> fields is
>> >>>>>>>>>>>>> the
>> >>>>>>>>>>>>> most important. Points 3 in addClassName and removeClassName
>> >>>>>>>>>>>>> are
>> >>>>>>>>>>>>> necessary,
>> >>>>>>>>>>>>> because user may want to more dynamically manipulate classes
>> >>>>>>>>>>>>> once
>> >>>>>>>>>>>>> component
>> >>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on
>> >>>>>>>>>>>>> demand.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Thanks, Piotr
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>> >>>>>>>>>> <pi...@gmail.com>:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> I think I have analyzed everything and have some
>> >>>>>>>>>>>>>> implementation
>> >>>>>>>>>>>>>> proposition. I will try to provide it later today.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Thanks, Piotr
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs <ha...@gmail.com>:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> ExpandableSearch broke too.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>> >>>>>>>>>>>>>>> <pi...@gmail.com>
>> >>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Harbs,
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in your
>> >>>>>>>>>>>> application
>> >>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break for
>> >>>>>>>> you
>> >>>>>>>>>>>>>>> anything.
>> >>>>>>>>>>>>>>> :)
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.pat
>> >>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>>>>>> %7C45a065853ba1
>> >>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>> >>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>> >>>>>>>>>>>>>> rved=0
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.pat
>> >>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>>>>>> %7C45a065853ba1
>> >>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>> >>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>> >>>>>>>>>>>>>> rved=0>*
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> --
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>> 7C45a065853ba14a
>> >>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>> >>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>> >>>>>>>>>>>>> =0
>> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>> 7C45a065853ba14a
>> >>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>> >>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>> >>>>>>>>>>>>> =0>*
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> --
>> >>>>>>>>>>>
>> >>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>
>> >>>>>>>>>>> Patreon:
>> >>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>> 7Cee5c84b4e3ff4d
>> >>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>> cee1%7C0%7C0%7C6365540407
>> >>>>>>>>>>>
>> >>>>>>>>>>>18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>> >>>>>>>>>>>%
>> >>>>>>>>>> 3D&reserv
>> >>>>>>>>>>> ed=0
>> >>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>> 7Cee5c84b4e3ff4d
>> >>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>> cee1%7C0%7C0%7C6365540407
>> >>>>>>>>>>>
>> >>>>>>>>>>>18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>> >>>>>>>>>>>%
>> >>>>>>>>>> 3D&reserv
>> >>>>>>>>>>> ed=0>*
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> --
>> >>>>>>>>>
>> >>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>
>> >>>>>>>>> Patreon:
>> >>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>> 7Cda0fd75922c94d
>> >>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>> cee1%7C0%7C0%7C6365543602
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>> oJqA6J42ZuhcA%3D&rese
>> >>>>>>>>>rv
>> >>>>>>>>> ed
>> >>>>>>>>> =0
>> >>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>> 7Cda0fd75922c94d
>> >>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>> cee1%7C0%7C0%7C6365543602
>> >>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>> >>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> --
>> >>>>>>>
>> >>>>>>> Piotr Zarzycki
>> >>>>>>>
>> >>>>>>> Patreon:
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>*https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%2Fww
>> >>>>>>>w.
>> >>>>>>> pa
>> >>>>>>> tr
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%2Fww
>> >>>>>>>w.
>> >>>>>>> pa
>> >>>>>>> tr>
>> >>>>>>> eon.com
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=http%3A%2F%2Feon
>> >>>>>>>.c
>> >>>>>>> om
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>%2F&data=02%7C01%7Caharui%40adobe.com%
>> 7C75519f53f52b4fde36b108d57edb
>> >>>>>>>59
>> >>>>>>> 03
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> 7C636554402926763835&sda
>> >>>>>>>ta
>> >>>>>>> =G
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>> 2Fpiotrzar
>> >>>>>>>zy
>> >>>>>>> ck
>> >>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=http%3A%2F%2F40a
>> >>>>>>>do
>> >>>>>>> be
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>.com%2F&data=02%7C01%7Caharui%40adobe.com%
>> 7C75519f53f52b4fde36b108d5
>> >>>>>>>7e
>> >>>>>>> db
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> 7C636554402926763835
>> >>>>>>>&s
>> >>>>>>> da
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>> reserved=0>%7Cf2
>> >>>>>>>5d
>> >>>>>>> bf
>> >>>>>>> 20138f47
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365
>> >>>>>>>54
>> >>>>>>> 37
>> >>>>>>> 41
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>> etW7oghI4s%3D&rese
>> >>>>>>>rv
>> >>>>>>> ed
>> >>>>>>> =0
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%2Fww
>> >>>>>>>w.
>> >>>>>>> pa
>> >>>>>>> tr
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%2Fww
>> >>>>>>>w.
>> >>>>>>> pa
>> >>>>>>> tr>
>> >>>>>>> eon.com
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=http%3A%2F%2Feon
>> >>>>>>>.c
>> >>>>>>> om
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>%2F&data=02%7C01%7Caharui%40adobe.com%
>> 7C75519f53f52b4fde36b108d57edb
>> >>>>>>>59
>> >>>>>>> 03
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> 7C636554402926763835&sda
>> >>>>>>>ta
>> >>>>>>> =G
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>> 2Fpiotrzar
>> >>>>>>>zy
>> >>>>>>> ck
>> >>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>
>> >>>>>>>
>> >>>>>>><https://na01.safelinks.protection.outlook.
>> com/?url=http%3A%2F%2F40a
>> >>>>>>>do
>> >>>>>>> be
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>.com%2F&data=02%7C01%7Caharui%40adobe.com%
>> 7C75519f53f52b4fde36b108d5
>> >>>>>>>7e
>> >>>>>>> db
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> 7C636554402926763835
>> >>>>>>>&s
>> >>>>>>> da
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>> reserved=0>%7Cf2
>> >>>>>>>5d
>> >>>>>>> bf
>> >>>>>>> 20138f47
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365
>> >>>>>>>54
>> >>>>>>> 37
>> >>>>>>> 41
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>> etW7oghI4s%3D&rese
>> >>>>>>>rv
>> >>>>>>> ed
>> >>>>>>> =0
>> >>>>>>>> *
>> >>>>>
>> >>>>
>> >>>
>> >>
>> >
>>
>>


-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
Maybe let's do this in that way. I could stay with your solution where I'm
using that array class, but we could move it to the MDL module. Since this
problem is specific right now to that. Maybe the computation won't be so
large like it is in case of MDL, where you have 5-6 properties and you need
to compute them.

Just wanted to move forward cause it's again quite a bit of work going
through all components.

Thoughts ?

2018-03-02 6:42 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:

> Hi Harbs,
>
> As much as I like Array approach I took Alex's words more serious that
> having an Array in the game here could be more heavier than String
> concatenation. It's earlier in the discussion.
>
> Piotr
>
>
> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>
>> Very nice, but IMO, this is over-engineering.  We are talking about a
>> space-delimited list where some portion of it is considered "fixed"
>> another portion is user-settable and another portion comes from other
>> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
>> especially if they are opt-in and just used to manage the user-settable
>> portion.  Think of it this way:  Every MDL app needs to carry around
>> ClassList even if they never change the classname.  I don't care too much
>> since it is in MDL and not in the core, so keep it if you want to, but I
>> can think of lots of other tasks we should be working on than creating
>> cool classes to manage a list of strings.
>>
>> My 2 cents,
>> -Alex
>>
>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>
>> >What do you think of the CSSClassList class I just committed?
>> >
>> >I *think* that makes the pattern more recognizable and probably is less
>> >heavy if more than one class can be used.
>> >
>> >Harbs
>> >
>> >> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <piotrzarzycki21@gmail.com
>> >
>> >>wrote:
>> >>
>> >> Harbs, Alex,
>> >>
>> >> I just pushed implementation of computeFinalClassNames to
>> >> branch feature/type_names_class_name_issue124. You can review
>> >> implementation in this commit [1] and example of usage in Card and
>> >>Button.
>> >>
>> >> I have tested with Harbs example [3] and with Card by changing orders.
>> >>It's
>> >> working.
>> >>
>> >> [1]
>> >>https://na01.safelinks.protection.outlook.com/?url=http%
>> 3A%2F%2Fbit.ly%2F
>> >>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4f
>> dc774508d57fcf6
>> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451
>> 956879397&sdata
>> >>=5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>> >> [2]
>> >>https://na01.safelinks.protection.outlook.com/?url=http%
>> 3A%2F%2Fbit.ly%2F
>> >>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4f
>> dc774508d57fcf6
>> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451
>> 956879397&sdata
>> >>=8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>> >> [3]
>> >>https://na01.safelinks.protection.outlook.com/?url=http%
>> 3A%2F%2Fbit.ly%2F
>> >>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4f
>> dc774508d57fcf6
>> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451
>> 956879397&sdata
>> >>=9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>> >>
>> >> Waiting for your review.
>> >>
>> >> Thanks,
>> >> Piotr
>> >>
>> >>
>> >> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
>> >>
>> >>> Let me play with implementation of that function. It seems to me that
>> >>>will
>> >>> be much cleaner than current solution.
>> >>>
>> >>> If user actually wanted to do anythin with className - let the
>> >>>overriding
>> >>> speaks.
>> >>>
>> >>>
>> >>>
>> >>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>> >>>wrote:
>> >>>
>> >>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>> >>>>
>> >>>>> OK. I think that will work for DML components, but what if there’s a
>> >>>>>bead
>> >>>>> which needs to add class names? What would be the “right” way to do
>> >>>>>that?
>> >>>>> A bead cannot override the function on the strand.
>> >>>>
>> >>>> Do we have beads that manipulate className?
>> >>>>
>> >>>> IMO, the principle behind how to handle that is knowing whether you
>> >>>>are
>> >>>> sharing something or not.  There may not be one right way to handle
>> >>>>it,
>> >>>> but if I had to handle it, I would have the bead set something in the
>> >>>> model or presentation model of the component.  And the component
>> would
>> >>>> override computeFinalClassNames to take that into account.
>> >>>>
>> >>>>
>> >>>> Although having just written that, maybe this computeFinalClassNames
>> >>>> should be in the view instead of on the base class so it is
>> >>>>replaceable
>> >>>> instead of overridable.
>> >>>>
>> >>>> Thoughts?
>> >>>> -Alex
>> >>>>>
>> >>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <aharui@adobe.com.INVALID
>> >
>> >>>>>> wrote:
>> >>>>>>
>> >>>>>> I think you are missing that the element.className is set to
>> >>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>> >>>>>> UIBase.className however they see fit.  They can assign it a whole
>> >>>>>>new
>> >>>>>> space-delimited list if they want.  But what gets set on
>> >>>>>> element.className
>> >>>>>> is computed from typeNames and className by default, and MDL would
>> >>>>>> override it to factor in fab, raised, colored into the computing of
>> >>>>>>the
>> >>>>>> final classnames.
>> >>>>>>
>> >>>>>> I would prefer that we don't make requirements on users as to what
>> >>>>>>they
>> >>>>>> can or can't do with the className property, like requiring them to
>> >>>>>>use
>> >>>>>> addClassName/removeClassNames.  MXML and States might set
>> className,
>> >>>> as
>> >>>>>> could any other AS logic.  I think folks may even be used to
>> setting
>> >>>>>> className in JavaScript.  So letting UIBase.className be the
>> >>>>>>"variable"
>> >>>>>> part and having computeFinalClassNames be the way the "fixed" part
>> >>>>>>is
>> >>>>>> handled makes sense to me.
>> >>>>>>
>> >>>>>> Of course, I could be wrong...
>> >>>>>> -Alex
>> >>>>>>
>> >>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>> >>>>>>
>> >>>>>>> The problem which sparked this whole issue is like this:
>> >>>>>>>
>> >>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to the
>> >>>>>>> class
>> >>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>> >>>>>>> 2. The client might subsequently set the className to something
>> >>>>>>>else.
>> >>>>>>> 3. When the component sets the “pieces” first and the client sets
>> >>>>>>>the
>> >>>>>>> className later, the client will overwrite these “pieces” which
>> >>>>>>>were
>> >>>>>>> added by the component.
>> >>>>>>>
>> >>>>>>> My suggestion to have addClassName() and removeClassName() was to
>> >>>>>>>have
>> >>>>>>> a
>> >>>>>>> “safe” way to add class names which would get computed together
>> >>>>>>>with
>> >>>>>>> the
>> >>>>>>> className when the className is replaced.
>> >>>>>>>
>> >>>>>>> The way you have it seems to just be modifying the existing
>> >>>>>>>className
>> >>>>>>> property. If that’s overwritten by a client, the logic falls
>> apart.
>> >>>>>>>
>> >>>>>>> It feels like only having typeNames which are set inside the
>> >>>>>>>component
>> >>>>>>> and className which is set outside the component is not really
>> >>>>>>>enough.
>> >>>>>>> (Unless I’m missing something.)
>> >>>>>>>
>> >>>>>>> Harbs
>> >>>>>>>
>> >>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <aharui@adobe.com.INVALID
>> >
>> >>>>>>>> wrote:
>> >>>>>>>>
>> >>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>> >>>>>>>>
>> >>>>>>>>> If it’s not public, I don’t see how a utility method could call
>> >>>>>>>>>it
>> >>>>>>>>> though.
>> >>>>>>>>
>> >>>>>>>> I didn't think the utility methods like
>> >>>>>>>>addClassName/removeClassName
>> >>>>>>>> would
>> >>>>>>>> need to alter computeFinalClassNames().
>> >>>>>>>>
>> >>>>>>>> AIUI, for most UIBase subclasses, the final element.className is
>> a
>> >>>> mix
>> >>>>>>>> of
>> >>>>>>>> the className property and the typeNames.  The typenames are
>> >>>>>>>>thought
>> >>>>>>>> to
>> >>>>>>>> be
>> >>>>>>>> "fixed" and the space-delimited list of names in className are
>> the
>> >>>>>>>> ones
>> >>>>>>>> the user wants to manipulate in their code.  So, I would expect
>> >>>>>>>>them
>> >>>>>>>> to
>> >>>>>>>> write:
>> >>>>>>>>
>> >>>>>>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> addClassName should just do something like:
>> >>>>>>>>
>> >>>>>>>> myComponent.className += value;
>> >>>>>>>>
>> >>>>>>>> That will call the className setter that will run:
>> >>>>>>>>
>> >>>>>>>> element.className = computeFinalClassNames();
>> >>>>>>>>
>> >>>>>>>> If you call
>> >>>>>>>>
>> >>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>> >>>>>>>>"pinkStyles");
>> >>>>>>>>
>> >>>>>>>> removeClassName should just do something like:
>> >>>>>>>>
>> >>>>>>>> Var s:String = myComponent.className;
>> >>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>> >>>>>>>> If (c != -1)
>> >>>>>>>>   s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>> >>>>>>>> Else
>> >>>>>>>> {
>> >>>>>>>>   c= s.indexOf(" " + nameToRemove);
>> >>>>>>>>   if (c != -1)
>> >>>>>>>>     s = s.substr(0, c);  // remove last item
>> >>>>>>>> }
>> >>>>>>>> myComponent.className = s;
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> It seems like it should be that simple.  What am I missing?
>> >>>>>>>>
>> >>>>>>>> -Alex
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>> >>>>>>>>>><ah...@adobe.com.INVALID>
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>> piotrzarzycki21@gmail.com
>> >>>>>>>>>> <ma...@gmail.com>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames -
>> >>>>>>>>>>>is
>> >>>>>>>>>>> something
>> >>>>>>>>>>> which is in the UIBase ?
>> >>>>>>>>>>
>> >>>>>>>>>> Yes, and probably protected instead of public.  The one in
>> >>>>>>>>>>UIBase
>> >>>>>>>>>> just
>> >>>>>>>>>> appends typenames to className.  It gets overridden in MDL
>> where
>> >>>>>>>>>> needed
>> >>>>>>>>>> for shadow and other attributes.
>> >>>>>>>>>>
>> >>>>>>>>>> My 2 cents,
>> >>>>>>>>>> -Alex
>> >>>>>>>>>>>
>> >>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>> >>>>>>>>>>><ah...@adobe.com.invalid>:
>> >>>>>>>>>>>
>> >>>>>>>>>>>> I think that in the shadow setter, it would change _shadow
>> and
>> >>>>>>>>>>>> call
>> >>>>>>>>>>>> setClassName(computeFinalClassNames());
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>> >>>>>>>>>>>><piotrzarzycki21@gmail.com
>> >>>>>
>> >>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Alex,
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> So we are getting back to the idea where you proposed to
>> have
>> >>>>>>>>>>>>> function
>> >>>>>>>>>>>>> which computes everything.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> override public function computeFinalClassNames():String
>> >>>>>>>>>>>>> {
>> >>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>> >>>>>>>>>>>>> }
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Where does that function should be placed ? Does that
>> >>>>>>>>>>>>>function
>> >>>>>>>>>>>>> should
>> >>>>>>>>>>>> be
>> >>>>>>>>>>>>> called in addedToParent plus whenever someone change _shadow
>> >>>>>>>>>>>>>? -
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Because I really don't know how to handle scenario where you
>> >>>> have
>> >>>>>>>>>>>>> some
>> >>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>> >>>>>>>>>>>>>class. -
>> >>>>>>>>>>>>> In
>> >>>>>>>>>>>>> the
>> >>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>> handle
>> >>>>>>>>>>>>> changing
>> >>>>>>>>>>>> ?
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Thanks, Piotr
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>> >>>>>>>>>>>>><aharui@adobe.com.invalid
>> >>>>> :
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Hi Piotr,
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> I think am I not communicating the principles effectively.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be
>> >>>>>>>>>>>>>>in
>> >>>>>>>>>>>>>> UIBase.
>> >>>>>>>>>>>>>> Lots of apps can be written without needing these methods.
>> >>>>>>>>>>>>>>I
>> >>>>>>>>>>>>>> think
>> >>>>>>>>>>>> they
>> >>>>>>>>>>>>>> can be written as utility functions.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Second, the computation of the final element.className
>> >>>>>>>>>>>>>>should
>> >>>>>>>>>>>> represent
>> >>>>>>>>>>>>>> the state of the component, so I don't get why you need an
>> >>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>> >>>> computation
>> >>>>>>>>>>>>>> for
>> >>>>>>>>>>>> a
>> >>>>>>>>>>>>>> component with a shadow would be to check the shadow
>> >>>>>>>>>>>>>>property
>> >>>>>>>>>>>>>> and
>> >>>>>>>>>>>>>> if
>> >>>>>>>>>>>> it
>> >>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
>> >>>>>>>>>>>>>>think
>> >>>>>>>>>>>>>> you
>> >>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
>> >>>>>>>>>>>>>>When
>> >>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>> classname property is set from the outside by
>> >>>>>>>>>>>>>> MXMLDataInterpreter
>> >>>>>>>>>>>>>> or
>> >>>>>>>>>>>>>> even
>> >>>>>>>>>>>>>> user-written code, those classNames are added to the list
>> >>>>>>>>>>>>>>with
>> >>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
>> >>>>>>>>>>>>>>then
>> >>>>>>>>>>>>>> set
>> >>>>>>>>>>>>>> on
>> >>>>>>>>>>>> the
>> >>>>>>>>>>>>>> element.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>> other
>> >>>>>>>>>>>>>> Royale
>> >>>>>>>>>>>>>> code,
>> >>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That
>> is
>> >>>>>>>>>>>>>> also
>> >>>>>>>>>>>>>> just-in-case code.  The production code should not be
>> >>>>>>>>>>>>>>passing
>> >>>> in
>> >>>>>>>>>>>> null or
>> >>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
>> >>>>>>>>>>>>>>that
>> >>>>>>>>>>>>>> you
>> >>>>>>>>>>>> have
>> >>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>> >>>>>>>>>>>>>> debug-only
>> >>>>>>>>>>>>>> code
>> >>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
>> >>>>>>>>>>>>>>you
>> >>>>>>>>>>>>>> can
>> >>>>>>>>>>>>>> use
>> >>>>>>>>>>>>>> for
>> >>>>>>>>>>>>>> that.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> HTH,
>> >>>>>>>>>>>>>> -Alex
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>> >>>>>>>>>>>>>> <pi...@gmail.com>
>> >>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Hi Alex,
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF
>> >>>>>>>>>>>>>>>with
>> >>>>>>>>>>>> problem
>> >>>>>>>>>>>>>>> debugging.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>> >>>>>>>>>>>>>>> addClassName and removeClassName [1].
>> >>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
>> >>>>>>>>>>>>>>>have
>> >>>>>>>>>>>>>>> added
>> >>>>>>>>>>>> [2]
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
>> >>>>>>>>>>>>>>> shadow.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>> >>>>>>>>>>>>>>>attention
>> >>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>> moment
>> >>>>>>>>>>>>>>> where className is being wiped out, later I have to use my
>> >>>>>>>>>>>>>>> internal
>> >>>>>>>>>>>>>>> variable to get it back.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Does that more clean now ?
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> [1]
>> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>> >>>> reserve
>> >>>>>>>>>>>>>>> d=
>> >>>>>>>>>>>>>>> 0
>> >>>>>>>>>>>>>>> [2]
>> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>> >>>> Nejwm4Sr7bw7g%3D&reserved=0
>> >>>>>>>>>>>>>>> [3]
>> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>> >>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>>>>>>>>>>>> 7C636554040718214998&
>> >>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>> >>>> zSltcNccqRGDo%3D&reserved=0
>> >>>>>>>>>>>>>>> [4]
>> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>> >>>> &data=02%7C01%7Caharui%40ad
>> >>>>>>>>>>>>>>> ob
>> >>>>>>>>>>>>>>> e
>> >>>>>>>>>>>> .com
>> >>>>>>>>>>>>>> %7C
>> >>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>> >>>> 7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>> cee1%7C0%7C
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>> >>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>> >>>>>>>>>>>>>>> a%
>> >>>>>>>>>>>>>> 2F6TWRTG
>> >>>>>>>>>>>>>>> 10OY%3D&reserved=0
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Thanks,
>> >>>>>>>>>>>>>>> Piotr
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>> >>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Hi Piotr,
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> I could not understand this explanation. Might be better
>> >>>>>>>>>>>>>>>>to
>> >>>>>>>>>>>>>>>> show
>> >>>>>>>>>>>>>> actual
>> >>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>> >>>>>>>>>>>>>>>>that I
>> >>>>>>>>>>>> don't
>> >>>>>>>>>>>>>> know
>> >>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something
>> >>>>>>>>>>>>>>>>as
>> >>>>>>>>>>>>>>>> empty,
>> >>>>>>>>>>>>>> but
>> >>>>>>>>>>>>>>>> I'm
>> >>>>>>>>>>>>>>>> not sure what that is.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>> >>>>>>>>>>>>>>>>not
>> >>>> in
>> >>>>>>>>>>>>>> UIBase.
>> >>>>>>>>>>>>>>>> I
>> >>>>>>>>>>>>>>>> think plenty of useful applications can be built without
>> >>>>>>>>>>>>>>>> changing
>> >>>>>>>>>>>>>>>> classNames at runtime.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>> >>>>>>>>>>>>>>>>this
>> >>>> up
>> >>>>>>>>>>>> again
>> >>>>>>>>>>>>>> in
>> >>>>>>>>>>>>>>>> your morning.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Thanks for working on it,
>> >>>>>>>>>>>>>>>> -Alex
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>> >>>>>>>>>>>>>>>> <pi...@gmail.com>
>> >>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would
>> >>>>>>>>>>>>>>>>>take
>> >>>>>>>>>>>> Harb's
>> >>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>> >>>>>>>>>>>> removeClassName().
>> >>>>>>>>>>>>>>>> Next
>> >>>>>>>>>>>>>>>>> I
>> >>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> addClassName(value):
>> >>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in _className
>> >>>>>>>>>>>>>>>>>and
>> >>>>>>>>>>>>>>>>> in
>> >>>>>>>>>>>>>>>>> _internalClassName.
>> >>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>> >>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following way:
>> >>>>>>>>>>>>>>>> element.className
>> >>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> removeClassName(value)
>> >>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>> >>>>>>>>>>>>>>>>>_className
>> >>>>>>>>>>>>>>>>> or
>> >>>>>>>>>>>>>>>>> in
>> >>>>>>>>>>>>>>>>> _internalClassName
>> >>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>> >>>>>>>>>>>>>>>>>exists.
>> >>>>>>>>>>>>>>>>> _className.replace(value, "");
>> >>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
>> >>>>>>>>>>>> _className
>> >>>>>>>>>>>>>> + "
>> >>>>>>>>>>>>>>>> " +
>> >>>>>>>>>>>>>>>>> typeNames;
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>> >>>>>>>>>>>>>>>>>with
>> >>>>>>>>>>>>>> _className
>> >>>>>>>>>>>>>>>> and
>> >>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>> >>>>>>>>>>>>>>>>>_className
>> >>>>>>>>>>>>>>>>> + "
>> >>>>>>>>>>>> " +
>> >>>>>>>>>>>>>>>>> typeNames;
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>> Waiting
>> >>>> for
>> >>>>>>>>>>>> your
>> >>>>>>>>>>>>>>>>> thoughts
>> >>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
>> >>>> three
>> >>>>>>>>>>>>>> fields is
>> >>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>> >>>>>>>>>>>>>>>>>removeClassName
>> >>>>>>>>>>>>>>>>> are
>> >>>>>>>>>>>>>>>>> necessary,
>> >>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>> >>>>>>>>>>>>>>>>>classes
>> >>>>>>>>>>>>>>>>> once
>> >>>>>>>>>>>>>>>>> component
>> >>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added
>> on
>> >>>>>>>>>>>>>>>>> demand.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Thanks, Piotr
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>> >>>>>>>>>>>>>> <pi...@gmail.com>:
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>> >>>>>>>>>>>>>>>>>> implementation
>> >>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Thanks, Piotr
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>> >>>>>>>>>>>>>>>>>><ha...@gmail.com>:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>> >>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>> >>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> Harbs,
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>> >>>>>>>>>>>>>>>>>>>>your
>> >>>>>>>>>>>>>>>> application
>> >>>>>>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>> >>>>>>>>>>>>>>>>>>>>for
>> >>>>>>>>>>>> you
>> >>>>>>>>>>>>>>>>>>> anything.
>> >>>>>>>>>>>>>>>>>>> :)
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.co
>> >>>>>>>>>>>>>>>>>>m
>> >>>>>>>>>>>>>>>> %7C45a065853ba1
>> >>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>> >>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>> >>>>>>>>>>>>>>>>>> rved=0
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.co
>> >>>>>>>>>>>>>>>>>>m
>> >>>>>>>>>>>>>>>> %7C45a065853ba1
>> >>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>> >>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>> >>>>>>>>>>>>>>>>>> rved=0>*
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.com%
>> >>>>>>>>>>>>>>>> 7C45a065853ba14a
>> >>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>> >>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>> >>>>>>>>>>>>>>>>> =0
>> >>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.com%
>> >>>>>>>>>>>>>>>> 7C45a065853ba14a
>> >>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>> >>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>> >>>>>>>>>>>>>>>>> =0>*
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %
>> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>> >>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>> >>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>> >>>>>>>>>>>>>>> %
>> >>>>>>>>>>>>>> 3D&reserv
>> >>>>>>>>>>>>>>> ed=0
>> >>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %
>> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>> >>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>> >>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>> >>>>>>>>>>>>>>> %
>> >>>>>>>>>>>>>> 3D&reserv
>> >>>>>>>>>>>>>>> ed=0>*
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> --
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Patreon:
>> >>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>> 7Cda0fd75922c94d
>> >>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>> >>>> oJqA6J42ZuhcA%3D&rese
>> >>>>>>>>>>>>> rv
>> >>>>>>>>>>>>> ed
>> >>>>>>>>>>>>> =0
>> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
>> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>> >>>>>>>>>>>> 7Cda0fd75922c94d
>> >>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>> >>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>> >>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> --
>> >>>>>>>>>>>
>> >>>>>>>>>>> Piotr Zarzycki
>> >>>>>>>>>>>
>> >>>>>>>>>>> Patreon:
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=https%3A%2F%2Fww
>> >>>>>>>>>>> w.
>> >>>>>>>>>>> pa
>> >>>>>>>>>>> tr
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=https%3A%2F%2Fww
>> >>>>>>>>>>> w.
>> >>>>>>>>>>> pa
>> >>>>>>>>>>> tr>
>> >>>>>>>>>>> eon.com
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=http%3A%2F%2Feon
>> >>>>>>>>>>> .c
>> >>>>>>>>>>> om
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>> >>>> 7C75519f53f52b4fde36b108d57edb
>> >>>>>>>>>>> 59
>> >>>>>>>>>>> 03
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>> 7C636554402926763835&sda
>> >>>>>>>>>>> ta
>> >>>>>>>>>>> =G
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>> >>>> 2Fpiotrzar
>> >>>>>>>>>>> zy
>> >>>>>>>>>>> ck
>> >>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=http%3A%2F%2F40a
>> >>>>>>>>>>> do
>> >>>>>>>>>>> be
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>> >>>> 7C75519f53f52b4fde36b108d5
>> >>>>>>>>>>> 7e
>> >>>>>>>>>>> db
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>> 7C636554402926763835
>> >>>>>>>>>>> &s
>> >>>>>>>>>>> da
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>> >>>> reserved=0>%7Cf2
>> >>>>>>>>>>> 5d
>> >>>>>>>>>>> bf
>> >>>>>>>>>>> 20138f47
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>> >>>> cee1%7C0%7C0%7C6365
>> >>>>>>>>>>> 54
>> >>>>>>>>>>> 37
>> >>>>>>>>>>> 41
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>> >>>> etW7oghI4s%3D&rese
>> >>>>>>>>>>> rv
>> >>>>>>>>>>> ed
>> >>>>>>>>>>> =0
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=https%3A%2F%2Fww
>> >>>>>>>>>>> w.
>> >>>>>>>>>>> pa
>> >>>>>>>>>>> tr
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=https%3A%2F%2Fww
>> >>>>>>>>>>> w.
>> >>>>>>>>>>> pa
>> >>>>>>>>>>> tr>
>> >>>>>>>>>>> eon.com
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=http%3A%2F%2Feon
>> >>>>>>>>>>> .c
>> >>>>>>>>>>> om
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>> >>>> 7C75519f53f52b4fde36b108d57edb
>> >>>>>>>>>>> 59
>> >>>>>>>>>>> 03
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>> 7C636554402926763835&sda
>> >>>>>>>>>>> ta
>> >>>>>>>>>>> =G
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>> >>>> 2Fpiotrzar
>> >>>>>>>>>>> zy
>> >>>>>>>>>>> ck
>> >>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?
>> url=https%3A%2F%
>> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%
>> 7Caharui%40adob
>> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%
>> 7Cfa7b1b5a7b34438794aed
>> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%
>> 2BK%2FO6A3X%2FV
>> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>> >>>> com/?url=http%3A%2F%2F40a
>> >>>>>>>>>>> do
>> >>>>>>>>>>> be
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>> >>>> 7C75519f53f52b4fde36b108d5
>> >>>>>>>>>>> 7e
>> >>>>>>>>>>> db
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>>> 7C636554402926763835
>> >>>>>>>>>>> &s
>> >>>>>>>>>>> da
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>> >>>> reserved=0>%7Cf2
>> >>>>>>>>>>> 5d
>> >>>>>>>>>>> bf
>> >>>>>>>>>>> 20138f47
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>> >>>> cee1%7C0%7C0%7C6365
>> >>>>>>>>>>> 54
>> >>>>>>>>>>> 37
>> >>>>>>>>>>> 41
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>> >>>> etW7oghI4s%3D&rese
>> >>>>>>>>>>> rv
>> >>>>>>>>>>> ed
>> >>>>>>>>>>> =0
>> >>>>>>>>>>>> *
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>
>> >>
>> >> --
>> >>
>> >> Piotr Zarzycki
>> >>
>> >> Patreon:
>> >>*https://na01.safelinks.protection.outlook.com/?url=https%
>> 3A%2F%2Fwww.pat
>> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C9ba2ae2d1a6e
>> >>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178decee1%
>> 7C0%7C0%7C6365554
>> >>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQoyfshLnt8l
>> xqg%3D&reserved
>> >>=0
>> >>
>> >><https://na01.safelinks.protection.outlook.com/?url=https%
>> 3A%2F%2Fwww.pat
>> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C9ba2ae2d1a6e
>> >>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178decee1%
>> 7C0%7C0%7C6365554
>> >>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQoyfshLnt8l
>> xqg%3D&reserved
>> >>=0>*
>> >
>>
>>
>
>
> --
>
> Piotr Zarzycki
>
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*
>



-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
Harbs,

Thanks for such a good explanation. I think I will go with your class.



2018-03-02 10:36 GMT+01:00 Harbs <ha...@gmail.com>:

> I do agree that this is pretty low on the list of priorities. I did not
> have a head to work on anything “serious” and the class lists was a nice
> distraction for me. I’m certainly fine with however Piotr handles this. I
> would like to point out a few things:
>
> 1. Object instantiation is pretty cheap in JS. A CSSClassList object is no
> heavier than an empty String. 8 empty strings use more memory than a single
> CSSClassList.
> 2. Array.join() is about the same computational-wise as string
> concatenation.
> 3. The “list” is not being added anywhere the empty strings would not be
> added, so it’s no less PAYG than strings.
> 4. An instantiated class such as this would fit better in case we need to
> play with class lists in beads because the CSSClassList object could be
> passed around and modified by different classes without exposing private
> variables and/or strands and beads needing to know about each other. I
> don’t think static utility classes are any less PAYG in this case.
>
> Thanks,
> Harbs
>
> > On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com>
> wrote:
> >
> > Hi Harbs,
> >
> > As much as I like Array approach I took Alex's words more serious that
> > having an Array in the game here could be more heavier than String
> > concatenation. It's earlier in the discussion.
> >
> > Piotr
> >
> >
> > 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
> >
> >> Very nice, but IMO, this is over-engineering.  We are talking about a
> >> space-delimited list where some portion of it is considered "fixed"
> >> another portion is user-settable and another portion comes from other
> >> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
> >> especially if they are opt-in and just used to manage the user-settable
> >> portion.  Think of it this way:  Every MDL app needs to carry around
> >> ClassList even if they never change the classname.  I don't care too
> much
> >> since it is in MDL and not in the core, so keep it if you want to, but I
> >> can think of lots of other tasks we should be working on than creating
> >> cool classes to manage a list of strings.
> >>
> >> My 2 cents,
> >> -Alex
> >>
> >> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
> >>
> >>> What do you think of the CSSClassList class I just committed?
> >>>
> >>> I *think* that makes the pattern more recognizable and probably is less
> >>> heavy if more than one class can be used.
> >>>
> >>> Harbs
> >>>
> >>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <
> piotrzarzycki21@gmail.com>
> >>>> wrote:
> >>>>
> >>>> Harbs, Alex,
> >>>>
> >>>> I just pushed implementation of computeFinalClassNames to
> >>>> branch feature/type_names_class_name_issue124. You can review
> >>>> implementation in this commit [1] and example of usage in Card and
> >>>> Button.
> >>>>
> >>>> I have tested with Harbs example [3] and with Card by changing orders.
> >>>> It's
> >>>> working.
> >>>>
> >>>> [1]
> >>>> https://na01.safelinks.protection.outlook.com/?url=
> >> http%3A%2F%2Fbit.ly%2F
> >>>> 2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%
> 7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6
> >>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> >> 7C636555451956879397&sdata
> >>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
> >>>> [2]
> >>>> https://na01.safelinks.protection.outlook.com/?url=
> >> http%3A%2F%2Fbit.ly%2F
> >>>> 2oJgKOf&data=02%7C01%7Caharui%40adobe.com%
> 7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6
> >>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> >> 7C636555451956879397&sdata
> >>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
> >>>> [3]
> >>>> https://na01.safelinks.protection.outlook.com/?url=
> >> http%3A%2F%2Fbit.ly%2F
> >>>> 2F734nx&data=02%7C01%7Caharui%40adobe.com%
> 7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6
> >>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> >> 7C636555451956879397&sdata
> >>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
> >>>>
> >>>> Waiting for your review.
> >>>>
> >>>> Thanks,
> >>>> Piotr
> >>>>
> >>>>
> >>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <piotrzarzycki21@gmail.com
> >:
> >>>>
> >>>>> Let me play with implementation of that function. It seems to me that
> >>>>> will
> >>>>> be much cleaner than current solution.
> >>>>>
> >>>>> If user actually wanted to do anythin with className - let the
> >>>>> overriding
> >>>>> speaks.
> >>>>>
> >>>>>
> >>>>>
> >>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
> >>>>> wrote:
> >>>>>
> >>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
> >>>>>>
> >>>>>>> OK. I think that will work for DML components, but what if there’s
> a
> >>>>>>> bead
> >>>>>>> which needs to add class names? What would be the “right” way to do
> >>>>>>> that?
> >>>>>>> A bead cannot override the function on the strand.
> >>>>>>
> >>>>>> Do we have beads that manipulate className?
> >>>>>>
> >>>>>> IMO, the principle behind how to handle that is knowing whether you
> >>>>>> are
> >>>>>> sharing something or not.  There may not be one right way to handle
> >>>>>> it,
> >>>>>> but if I had to handle it, I would have the bead set something in
> the
> >>>>>> model or presentation model of the component.  And the component
> would
> >>>>>> override computeFinalClassNames to take that into account.
> >>>>>>
> >>>>>>
> >>>>>> Although having just written that, maybe this computeFinalClassNames
> >>>>>> should be in the view instead of on the base class so it is
> >>>>>> replaceable
> >>>>>> instead of overridable.
> >>>>>>
> >>>>>> Thoughts?
> >>>>>> -Alex
> >>>>>>>
> >>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <aharui@adobe.com.INVALID
> >
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> I think you are missing that the element.className is set to
> >>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
> >>>>>>>> UIBase.className however they see fit.  They can assign it a whole
> >>>>>>>> new
> >>>>>>>> space-delimited list if they want.  But what gets set on
> >>>>>>>> element.className
> >>>>>>>> is computed from typeNames and className by default, and MDL would
> >>>>>>>> override it to factor in fab, raised, colored into the computing
> of
> >>>>>>>> the
> >>>>>>>> final classnames.
> >>>>>>>>
> >>>>>>>> I would prefer that we don't make requirements on users as to what
> >>>>>>>> they
> >>>>>>>> can or can't do with the className property, like requiring them
> to
> >>>>>>>> use
> >>>>>>>> addClassName/removeClassNames.  MXML and States might set
> className,
> >>>>>> as
> >>>>>>>> could any other AS logic.  I think folks may even be used to
> setting
> >>>>>>>> className in JavaScript.  So letting UIBase.className be the
> >>>>>>>> "variable"
> >>>>>>>> part and having computeFinalClassNames be the way the "fixed" part
> >>>>>>>> is
> >>>>>>>> handled makes sense to me.
> >>>>>>>>
> >>>>>>>> Of course, I could be wrong...
> >>>>>>>> -Alex
> >>>>>>>>
> >>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
> >>>>>>>>
> >>>>>>>>> The problem which sparked this whole issue is like this:
> >>>>>>>>>
> >>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to
> the
> >>>>>>>>> class
> >>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
> >>>>>>>>> 2. The client might subsequently set the className to something
> >>>>>>>>> else.
> >>>>>>>>> 3. When the component sets the “pieces” first and the client sets
> >>>>>>>>> the
> >>>>>>>>> className later, the client will overwrite these “pieces” which
> >>>>>>>>> were
> >>>>>>>>> added by the component.
> >>>>>>>>>
> >>>>>>>>> My suggestion to have addClassName() and removeClassName() was to
> >>>>>>>>> have
> >>>>>>>>> a
> >>>>>>>>> “safe” way to add class names which would get computed together
> >>>>>>>>> with
> >>>>>>>>> the
> >>>>>>>>> className when the className is replaced.
> >>>>>>>>>
> >>>>>>>>> The way you have it seems to just be modifying the existing
> >>>>>>>>> className
> >>>>>>>>> property. If that’s overwritten by a client, the logic falls
> apart.
> >>>>>>>>>
> >>>>>>>>> It feels like only having typeNames which are set inside the
> >>>>>>>>> component
> >>>>>>>>> and className which is set outside the component is not really
> >>>>>>>>> enough.
> >>>>>>>>> (Unless I’m missing something.)
> >>>>>>>>>
> >>>>>>>>> Harbs
> >>>>>>>>>
> >>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
> <aharui@adobe.com.INVALID
> >>>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> If it’s not public, I don’t see how a utility method could call
> >>>>>>>>>>> it
> >>>>>>>>>>> though.
> >>>>>>>>>>
> >>>>>>>>>> I didn't think the utility methods like
> >>>>>>>>>> addClassName/removeClassName
> >>>>>>>>>> would
> >>>>>>>>>> need to alter computeFinalClassNames().
> >>>>>>>>>>
> >>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className
> is a
> >>>>>> mix
> >>>>>>>>>> of
> >>>>>>>>>> the className property and the typeNames.  The typenames are
> >>>>>>>>>> thought
> >>>>>>>>>> to
> >>>>>>>>>> be
> >>>>>>>>>> "fixed" and the space-delimited list of names in className are
> the
> >>>>>>>>>> ones
> >>>>>>>>>> the user wants to manipulate in their code.  So, I would expect
> >>>>>>>>>> them
> >>>>>>>>>> to
> >>>>>>>>>> write:
> >>>>>>>>>>
> >>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
> "pinkStyles");
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> addClassName should just do something like:
> >>>>>>>>>>
> >>>>>>>>>> myComponent.className += value;
> >>>>>>>>>>
> >>>>>>>>>> That will call the className setter that will run:
> >>>>>>>>>>
> >>>>>>>>>> element.className = computeFinalClassNames();
> >>>>>>>>>>
> >>>>>>>>>> If you call
> >>>>>>>>>>
> >>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
> >>>>>>>>>> "pinkStyles");
> >>>>>>>>>>
> >>>>>>>>>> removeClassName should just do something like:
> >>>>>>>>>>
> >>>>>>>>>> Var s:String = myComponent.className;
> >>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
> >>>>>>>>>> If (c != -1)
> >>>>>>>>>>  s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
> >>>>>>>>>> Else
> >>>>>>>>>> {
> >>>>>>>>>>  c= s.indexOf(" " + nameToRemove);
> >>>>>>>>>>  if (c != -1)
> >>>>>>>>>>    s = s.substr(0, c);  // remove last item
> >>>>>>>>>> }
> >>>>>>>>>> myComponent.className = s;
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> It seems like it should be that simple.  What am I missing?
> >>>>>>>>>>
> >>>>>>>>>> -Alex
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
> >>>>>>>>>>>> <ah...@adobe.com.INVALID>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
> >> piotrzarzycki21@gmail.com
> >>>>>>>>>>>> <ma...@gmail.com>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames
> -
> >>>>>>>>>>>>> is
> >>>>>>>>>>>>> something
> >>>>>>>>>>>>> which is in the UIBase ?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
> >>>>>>>>>>>> UIBase
> >>>>>>>>>>>> just
> >>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL
> where
> >>>>>>>>>>>> needed
> >>>>>>>>>>>> for shadow and other attributes.
> >>>>>>>>>>>>
> >>>>>>>>>>>> My 2 cents,
> >>>>>>>>>>>> -Alex
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
> >>>>>>>>>>>>> <ah...@adobe.com.invalid>:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> I think that in the shadow setter, it would change _shadow
> and
> >>>>>>>>>>>>>> call
> >>>>>>>>>>>>>> setClassName(computeFinalClassNames());
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
> >>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
> >>>>>>>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Alex,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to
> have
> >>>>>>>>>>>>>>> function
> >>>>>>>>>>>>>>> which computes everything.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> override public function computeFinalClassNames():String
> >>>>>>>>>>>>>>> {
> >>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
> >>>>>>>>>>>>>>> }
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Where does that function should be placed ? Does that
> >>>>>>>>>>>>>>> function
> >>>>>>>>>>>>>>> should
> >>>>>>>>>>>>>> be
> >>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
> _shadow
> >>>>>>>>>>>>>>> ? -
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Because I really don't know how to handle scenario where
> you
> >>>>>> have
> >>>>>>>>>>>>>>> some
> >>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
> >>>>>>>>>>>>>>> class. -
> >>>>>>>>>>>>>>> In
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
> handle
> >>>>>>>>>>>>>>> changing
> >>>>>>>>>>>>>> ?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
> >>>>>>>>>>>>>>> <aharui@adobe.com.invalid
> >>>>>>> :
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Hi Piotr,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I think am I not communicating the principles effectively.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be
> >>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>> UIBase.
> >>>>>>>>>>>>>>>> Lots of apps can be written without needing these methods.
> >>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>> think
> >>>>>>>>>>>>>> they
> >>>>>>>>>>>>>>>> can be written as utility functions.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Second, the computation of the final element.className
> >>>>>>>>>>>>>>>> should
> >>>>>>>>>>>>>> represent
> >>>>>>>>>>>>>>>> the state of the component, so I don't get why you need an
> >>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
> >>>>>> computation
> >>>>>>>>>>>>>>>> for
> >>>>>>>>>>>>>> a
> >>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
> >>>>>>>>>>>>>>>> property
> >>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>> if
> >>>>>>>>>>>>>> it
> >>>>>>>>>>>>>>>> is
> >>>>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
> >>>>>>>>>>>>>>>> think
> >>>>>>>>>>>>>>>> you
> >>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
> >>>>>>>>>>>>>>>> When
> >>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>> classname property is set from the outside by
> >>>>>>>>>>>>>>>> MXMLDataInterpreter
> >>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>> even
> >>>>>>>>>>>>>>>> user-written code, those classNames are added to the list
> >>>>>>>>>>>>>>>> with
> >>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
> >>>>>>>>>>>>>>>> then
> >>>>>>>>>>>>>>>> set
> >>>>>>>>>>>>>>>> on
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>> element.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
> other
> >>>>>>>>>>>>>>>> Royale
> >>>>>>>>>>>>>>>> code,
> >>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That
> is
> >>>>>>>>>>>>>>>> also
> >>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
> >>>>>>>>>>>>>>>> passing
> >>>>>> in
> >>>>>>>>>>>>>> null or
> >>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
> >>>>>>>>>>>>>>>> that
> >>>>>>>>>>>>>>>> you
> >>>>>>>>>>>>>> have
> >>>>>>>>>>>>>>>> written do not add value.  I have proposed that there are
> >>>>>>>>>>>>>>>> debug-only
> >>>>>>>>>>>>>>>> code
> >>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
> >>>>>>>>>>>>>>>> you
> >>>>>>>>>>>>>>>> can
> >>>>>>>>>>>>>>>> use
> >>>>>>>>>>>>>>>> for
> >>>>>>>>>>>>>>>> that.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> HTH,
> >>>>>>>>>>>>>>>> -Alex
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
> >>>>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Hi Alex,
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF
> >>>>>>>>>>>>>>>>> with
> >>>>>>>>>>>>>> problem
> >>>>>>>>>>>>>>>>> debugging.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
> >>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
> >>>>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
> >>>>>>>>>>>>>>>>> have
> >>>>>>>>>>>>>>>>> added
> >>>>>>>>>>>>>> [2]
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
> >>>>>>>>>>>>>>>>> shadow.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
> >>>>>>>>>>>>>>>>> attention
> >>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> moment
> >>>>>>>>>>>>>>>>> where className is being wiped out, later I have to use
> my
> >>>>>>>>>>>>>>>>> internal
> >>>>>>>>>>>>>>>>> variable to get it back.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Does that more clean now ?
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> [1]
> >>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%
> 2FP3DvwHupj%2BQHsofw%3D&
> >>>>>> reserve
> >>>>>>>>>>>>>>>>> d=
> >>>>>>>>>>>>>>>>> 0
> >>>>>>>>>>>>>>>>> [2]
> >>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
> >>>>>> Nejwm4Sr7bw7g%3D&reserved=0
> >>>>>>>>>>>>>>>>> [3]
> >>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
> >>>>>> zSltcNccqRGDo%3D&reserved=0
> >>>>>>>>>>>>>>>>> [4]
> >>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
> >>>>>> &data=02%7C01%7Caharui%40ad
> >>>>>>>>>>>>>>>>> ob
> >>>>>>>>>>>>>>>>> e
> >>>>>>>>>>>>>> .com
> >>>>>>>>>>>>>>>> %7C
> >>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
> >>>>>> 7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
> >>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
> >>>>>>>>>>>>>>>>> a%
> >>>>>>>>>>>>>>>> 2F6TWRTG
> >>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>> Piotr
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
> >>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Hi Piotr,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be better
> >>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>> show
> >>>>>>>>>>>>>>>> actual
> >>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
> >>>>>>>>>>>>>>>>>> that I
> >>>>>>>>>>>>>> don't
> >>>>>>>>>>>>>>>> know
> >>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something
> >>>>>>>>>>>>>>>>>> as
> >>>>>>>>>>>>>>>>>> empty,
> >>>>>>>>>>>>>>>> but
> >>>>>>>>>>>>>>>>>> I'm
> >>>>>>>>>>>>>>>>>> not sure what that is.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
> >>>>>>>>>>>>>>>>>> not
> >>>>>> in
> >>>>>>>>>>>>>>>> UIBase.
> >>>>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>>>> think plenty of useful applications can be built without
> >>>>>>>>>>>>>>>>>> changing
> >>>>>>>>>>>>>>>>>> classNames at runtime.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
> >>>>>>>>>>>>>>>>>> this
> >>>>>> up
> >>>>>>>>>>>>>> again
> >>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>> your morning.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks for working on it,
> >>>>>>>>>>>>>>>>>> -Alex
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
> >>>>>>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would
> >>>>>>>>>>>>>>>>>>> take
> >>>>>>>>>>>>>> Harb's
> >>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
> >>>>>>>>>>>>>> removeClassName().
> >>>>>>>>>>>>>>>>>> Next
> >>>>>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> addClassName(value):
> >>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
> _className
> >>>>>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>>> _internalClassName.
> >>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
> >>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
> way:
> >>>>>>>>>>>>>>>>>> element.className
> >>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> removeClassName(value)
> >>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
> >>>>>>>>>>>>>>>>>>> _className
> >>>>>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>>> _internalClassName
> >>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
> >>>>>>>>>>>>>>>>>>> exists.
> >>>>>>>>>>>>>>>>>>> _className.replace(value, "");
> >>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
> >>>>>>>>>>>>>> _className
> >>>>>>>>>>>>>>>> + "
> >>>>>>>>>>>>>>>>>> " +
> >>>>>>>>>>>>>>>>>>> typeNames;
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
> >>>>>>>>>>>>>>>>>>> with
> >>>>>>>>>>>>>>>> _className
> >>>>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
> >>>>>>>>>>>>>>>>>>> _className
> >>>>>>>>>>>>>>>>>>> + "
> >>>>>>>>>>>>>> " +
> >>>>>>>>>>>>>>>>>>> typeNames;
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
> Waiting
> >>>>>> for
> >>>>>>>>>>>>>> your
> >>>>>>>>>>>>>>>>>>> thoughts
> >>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
> >>>>>> three
> >>>>>>>>>>>>>>>> fields is
> >>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
> >>>>>>>>>>>>>>>>>>> removeClassName
> >>>>>>>>>>>>>>>>>>> are
> >>>>>>>>>>>>>>>>>>> necessary,
> >>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
> >>>>>>>>>>>>>>>>>>> classes
> >>>>>>>>>>>>>>>>>>> once
> >>>>>>>>>>>>>>>>>>> component
> >>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added
> on
> >>>>>>>>>>>>>>>>>>> demand.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
> >>>>>>>>>>>>>>>> <pi...@gmail.com>:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
> >>>>>>>>>>>>>>>>>>>> implementation
> >>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
> >>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Harbs,
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
> >>>>>>>>>>>>>>>>>>>>>> your
> >>>>>>>>>>>>>>>>>> application
> >>>>>>>>>>>>>>>>>>>>> it
> >>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't
> break
> >>>>>>>>>>>>>>>>>>>>>> for
> >>>>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>>>>> anything.
> >>>>>>>>>>>>>>>>>>>>> :)
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> >> 40adobe.co
> >>>>>>>>>>>>>>>>>>>> m
> >>>>>>>>>>>>>>>>>> %7C45a065853ba1
> >>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
> >>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%
> 2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
> >>>>>>>>>>>>>>>>>>>> rved=0
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> >> 40adobe.co
> >>>>>>>>>>>>>>>>>>>> m
> >>>>>>>>>>>>>>>>>> %7C45a065853ba1
> >>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
> >>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%
> 2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
> >>>>>>>>>>>>>>>>>>>> rved=0>*
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.com
> >> %
> >>>>>>>>>>>>>>>>>> 7C45a065853ba14a
> >>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
> >>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
> >>>>>>>>>>>>>>>>>>> =0
> >>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.com
> >> %
> >>>>>>>>>>>>>>>>>> 7C45a065853ba14a
> >>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
> >>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
> >>>>>>>>>>>>>>>>>>> =0>*
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.com%
> >>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
> >>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
> >>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
> >>>>>>>>>>>>>>>>> %
> >>>>>>>>>>>>>>>> 3D&reserv
> >>>>>>>>>>>>>>>>> ed=0
> >>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.com%
> >>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
> >>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
> >>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
> >>>>>>>>>>>>>>>>> %
> >>>>>>>>>>>>>>>> 3D&reserv
> >>>>>>>>>>>>>>>>> ed=0>*
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cda0fd75922c94d
> >>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
> >>>>>> oJqA6J42ZuhcA%3D&rese
> >>>>>>>>>>>>>>> rv
> >>>>>>>>>>>>>>> ed
> >>>>>>>>>>>>>>> =0
> >>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cda0fd75922c94d
> >>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
> >>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
> >>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>>>> w.
> >>>>>>>>>>>>> pa
> >>>>>>>>>>>>> tr
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>>>> w.
> >>>>>>>>>>>>> pa
> >>>>>>>>>>>>> tr>
> >>>>>>>>>>>>> eon.com
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=http%3A%2F%2Feon
> >>>>>>>>>>>>> .c
> >>>>>>>>>>>>> om
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
> >>>>>> 7C75519f53f52b4fde36b108d57edb
> >>>>>>>>>>>>> 59
> >>>>>>>>>>>>> 03
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>> 7C636554402926763835&sda
> >>>>>>>>>>>>> ta
> >>>>>>>>>>>>> =G
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
> >>>>>> 2Fpiotrzar
> >>>>>>>>>>>>> zy
> >>>>>>>>>>>>> ck
> >>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=http%3A%2F%2F40a
> >>>>>>>>>>>>> do
> >>>>>>>>>>>>> be
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
> >>>>>> 7C75519f53f52b4fde36b108d5
> >>>>>>>>>>>>> 7e
> >>>>>>>>>>>>> db
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>> 7C636554402926763835
> >>>>>>>>>>>>> &s
> >>>>>>>>>>>>> da
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
> >>>>>> reserved=0>%7Cf2
> >>>>>>>>>>>>> 5d
> >>>>>>>>>>>>> bf
> >>>>>>>>>>>>> 20138f47
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>> cee1%7C0%7C0%7C6365
> >>>>>>>>>>>>> 54
> >>>>>>>>>>>>> 37
> >>>>>>>>>>>>> 41
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
> >>>>>> etW7oghI4s%3D&rese
> >>>>>>>>>>>>> rv
> >>>>>>>>>>>>> ed
> >>>>>>>>>>>>> =0
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>>>> w.
> >>>>>>>>>>>>> pa
> >>>>>>>>>>>>> tr
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>>>> w.
> >>>>>>>>>>>>> pa
> >>>>>>>>>>>>> tr>
> >>>>>>>>>>>>> eon.com
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=http%3A%2F%2Feon
> >>>>>>>>>>>>> .c
> >>>>>>>>>>>>> om
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
> >>>>>> 7C75519f53f52b4fde36b108d57edb
> >>>>>>>>>>>>> 59
> >>>>>>>>>>>>> 03
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>> 7C636554402926763835&sda
> >>>>>>>>>>>>> ta
> >>>>>>>>>>>>> =G
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
> >>>>>> 2Fpiotrzar
> >>>>>>>>>>>>> zy
> >>>>>>>>>>>>> ck
> >>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
> >> com/?url=https%3A%2F%
> >>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
> >> 7C01%7Caharui%40adob
> >>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> >> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
> >> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>>>> com/?url=http%3A%2F%2F40a
> >>>>>>>>>>>>> do
> >>>>>>>>>>>>> be
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
> >>>>>> 7C75519f53f52b4fde36b108d5
> >>>>>>>>>>>>> 7e
> >>>>>>>>>>>>> db
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>> 7C636554402926763835
> >>>>>>>>>>>>> &s
> >>>>>>>>>>>>> da
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
> >>>>>> reserved=0>%7Cf2
> >>>>>>>>>>>>> 5d
> >>>>>>>>>>>>> bf
> >>>>>>>>>>>>> 20138f47
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>> cee1%7C0%7C0%7C6365
> >>>>>>>>>>>>> 54
> >>>>>>>>>>>>> 37
> >>>>>>>>>>>>> 41
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
> >>>>>> etW7oghI4s%3D&rese
> >>>>>>>>>>>>> rv
> >>>>>>>>>>>>> ed
> >>>>>>>>>>>>> =0
> >>>>>>>>>>>>>> *
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>> --
> >>>>
> >>>> Piotr Zarzycki
> >>>>
> >>>> Patreon:
> >>>> *https://na01.safelinks.protection.outlook.com/?url=
> >> https%3A%2F%2Fwww.pat
> >>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> >> %7C9ba2ae2d1a6e
> >>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
> >> cee1%7C0%7C0%7C6365554
> >>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
> >> oyfshLnt8lxqg%3D&reserved
> >>>> =0
> >>>>
> >>>> <https://na01.safelinks.protection.outlook.com/?url=
> >> https%3A%2F%2Fwww.pat
> >>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> >> %7C9ba2ae2d1a6e
> >>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
> >> cee1%7C0%7C0%7C6365554
> >>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
> >> oyfshLnt8lxqg%3D&reserved
> >>>> =0>*
> >>>
> >>
> >>
> >
> >
> > --
> >
> > Piotr Zarzycki
> >
> > Patreon: *https://www.patreon.com/piotrzarzycki
> > <https://www.patreon.com/piotrzarzycki>*
>
>
>


-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
HI Alex,

ok, I think I'll be subclassing in my branch and see where I get, in this
way the Piotr and Harbs can continue with things as they expect to.
In the other way, maybe it could seem that I'm worried to much about how
html looks, and maybe things like the layouts can wait, but I think is
important
to get some structural points set in a concrete way in order to grow from
there in a better way. As I progress in my journey to get all this pieces
ok I feel more confortable, and
I think, having a good foundation with only 1 or 2 components (like button,
textbutton,...) then will make me go fast with the rest of components

thanks

2018-03-12 19:09 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:

> Hi Carlos,
>
> I think people are more uncomfortable with the proposal to use
> element.classList than any issue about order.  It is hard for me to truly
> understand without seeing code so I think you should push it to your
> branch.
>
> I agree with Piotr that we can't make the users (app dev) use classList.
> Folks are going to use className out of habit or because they are
> borrowing a code snippet from the web.
>
> But most important, real users like Alina need components that work and
> I'm not convinced she's going to look under-the-hood.  It is frustrating
> to me that we have lots of emulation components to write but instead we
> are discussing details of typeNames and classNames.  IMO, it just isn't as
> important.  If it isn't broken, don't fix it.  Learn to live with some
> imperfections.  The big picture is that migration has to work.
>
> Your work on having a default look is important because that will be the
> default look for Alina's and others apps, but again, I don't agree that it
> is important to make the underlying implementation perfect.  Nobody will
> even look under the hood unless there are enough emulation components that
> have a chance of working, even imperfectly.
>
> My 2 cents,
> -Alex
>
> On 3/12/18, 10:58 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
> <carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:
>
> >Hi Alex,
> >
> >since Piotr and Harbs seems not to be very comfortable with the change, I
> >can subclass UIBase for Jewel and make that changes there. I don't want to
> >conflict in such central point of the framework,
> >Will it be ok for all of us?
> >
> >2018-03-12 18:56 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
> >
> >> IMO, the order isn't going to make or break Royale.  Leave it as you
> >>have
> >> it and we'll see what our users think.
> >>
> >> -Alex
> >>
> >> On 3/12/18, 10:49 AM, "carlos.rovira@gmail.com on behalf of Carlos
> >>Rovira"
> >> <carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:
> >>
> >> >Hi
> >> >
> >> >sorry guys, I changed it since I thought I would not matter anyone.
> >>For me
> >> >is just the opposite. Feels very strange to me see things right to
> >>left,
> >> >is like description of folders, bread crumbs and something like this
> >>that
> >> >use to be from parent to child, and left to right
> >> >
> >> >I do that as well since for example Harbs said doesn't mind how final
> >>code
> >> >looks, but for me is important.
> >> >
> >> >do you want I reverse the commit? Is there a way to make it
> >>configurable
> >> >and be all happy? maybe I should subclass UIBase fo Jewel...
> >> >
> >> >
> >> >2018-03-12 18:01 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
> >> >
> >> >> 2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
> >> >>
> >> >> > If HTMLElement.classList is exposed to the user (the app developer)
> >> >>then
> >> >> > they can remove any of the items that were added from the
> >>typenames.
> >> >> > There is no way to enforce immutability of the typenames.  We can
> >> >>choose
> >> >> > to give up on that and require that app developers be careful, but
> >>I'd
> >> >> > rather not.
> >> >> >
> >> >> > Given that, if you've found a way to eliminate the need for
> >> >>CSSClassList,
> >> >> > that's great.
> >> >> >
> >> >> > IMO, the immutable things from typenames should be last in the
> >>list.
> >> >>My
> >> >> > eye reads left to right and doesn't want to have to skip over stuff
> >> >>that
> >> >> > will be the same.
> >> >> >
> >> >> >
> >> >>
> >> >> *TOTALLY *agree with that. I tend to omit stuff because it looks the
> >> >>same,
> >> >> so having typedefs at the beginning makes it so like that.
> >> >>
> >> >> Piotr
> >> >>
> >> >>
> >> >>
> >> >> > My 2 cents,
> >> >> > -Alex
> >> >> >
> >> >> > On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos
> >> >> Rovira"
> >> >> > <carlos.rovira@gmail.com on behalf of 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
> >><ca...@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.w3sc
> >> >> > >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
> >> >> > 7C01%7Caharui%40ad
> >> >> > >>obe.com%7C5fee37306b5f47f8664608d588305aef%
> >> >> > 7Cfa7b1b5a7b34438794aed2c178de
> >> >> > >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
> >> >> > 2FQZnsNcB1
> >> >> > >>G6R%2BkMSMIjboX0%3D&reserved=0
> >> >> > >>
> >> >> > >>
> >> >> > >>
> >> >> > >>
> >> >> > >>
> >> >> > >>
> >> >> > >> --
> >> >> > >> Carlos Rovira
> >> >> > >>
> >> >> > >>https://na01.safelinks.protection.outlook.com/?url=
> >> >> > http%3A%2F%2Fabout.me%
> >> >> > >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> >> >> > 7C5fee37306b5f47f8664608
> >> >> > >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >> >> > 7C63656466362491312
> >> >> >
> >>>>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >> >> > >>
> >> >> > >>
> >> >> > >
> >> >> > >
> >> >> > >--
> >> >> > >Carlos Rovira
> >> >> > >https://na01.safelinks.protection.outlook.com/?url=
> >> >> > http%3A%2F%2Fabout.me%2
> >> >> > >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> >> >> > 7C5fee37306b5f47f8664608d5
> >> >> > >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >> >> > 7C636564663624913122&s
> >> >> > >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >> --
> >> >>
> >> >> Piotr Zarzycki
> >> >>
> >> >> Patreon:
> >> >>*https://na01.safelinks.protection.outlook.com/?url=
> >> https%3A%2F%2Fwww.pat
> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> >> %7C8e98630662af
> >> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
> >> cee1%7C0%7C0%7C6365647
> >> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
> >> reserv
> >> >>ed=0
> >> >>
> >> >><https://na01.safelinks.protection.outlook.com/?url=
> >> https%3A%2F%2Fwww.pat
> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> >> %7C8e98630662af
> >> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
> >> cee1%7C0%7C0%7C6365647
> >> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
> >> reserv
> >> >>ed=0>*
> >> >>
> >> >
> >> >
> >> >
> >> >--
> >> >Carlos Rovira
> >> >https://na01.safelinks.protection.outlook.com/?url=
> >> http%3A%2F%2Fabout.me%2
> >> >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> >> 7C8e98630662af4b9ed47f08d5
> >> >8841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >> 7C636564738054334432&s
> >> >data=8IcBMe9DSVOSXFUS%2BzV36EGjyXlix%2FLL8udleSOv3WY%3D&reserved=0
> >>
> >>
> >
> >
> >--
> >Carlos Rovira
> >https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fabout.me%2
> >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> 7C48f27c30c67043b293dc08d5
> >8842eaa7%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> 7C636564743347476990&s
> >data=Yb3%2BZPcjpyWFVsc4jcvK9u3QjQl%2FHe%2F%2BiWjgL5ccry4%3D&reserved=0
>
>


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

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Hi Carlos,

I think people are more uncomfortable with the proposal to use
element.classList than any issue about order.  It is hard for me to truly
understand without seeing code so I think you should push it to your
branch.

I agree with Piotr that we can't make the users (app dev) use classList.
Folks are going to use className out of habit or because they are
borrowing a code snippet from the web.

But most important, real users like Alina need components that work and
I'm not convinced she's going to look under-the-hood.  It is frustrating
to me that we have lots of emulation components to write but instead we
are discussing details of typeNames and classNames.  IMO, it just isn't as
important.  If it isn't broken, don't fix it.  Learn to live with some
imperfections.  The big picture is that migration has to work.

Your work on having a default look is important because that will be the
default look for Alina's and others apps, but again, I don't agree that it
is important to make the underlying implementation perfect.  Nobody will
even look under the hood unless there are enough emulation components that
have a chance of working, even imperfectly.

My 2 cents,
-Alex

On 3/12/18, 10:58 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
<carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:

>Hi Alex,
>
>since Piotr and Harbs seems not to be very comfortable with the change, I
>can subclass UIBase for Jewel and make that changes there. I don't want to
>conflict in such central point of the framework,
>Will it be ok for all of us?
>
>2018-03-12 18:56 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>
>> IMO, the order isn't going to make or break Royale.  Leave it as you
>>have
>> it and we'll see what our users think.
>>
>> -Alex
>>
>> On 3/12/18, 10:49 AM, "carlos.rovira@gmail.com on behalf of Carlos
>>Rovira"
>> <carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:
>>
>> >Hi
>> >
>> >sorry guys, I changed it since I thought I would not matter anyone.
>>For me
>> >is just the opposite. Feels very strange to me see things right to
>>left,
>> >is like description of folders, bread crumbs and something like this
>>that
>> >use to be from parent to child, and left to right
>> >
>> >I do that as well since for example Harbs said doesn't mind how final
>>code
>> >looks, but for me is important.
>> >
>> >do you want I reverse the commit? Is there a way to make it
>>configurable
>> >and be all happy? maybe I should subclass UIBase fo Jewel...
>> >
>> >
>> >2018-03-12 18:01 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
>> >
>> >> 2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>> >>
>> >> > If HTMLElement.classList is exposed to the user (the app developer)
>> >>then
>> >> > they can remove any of the items that were added from the
>>typenames.
>> >> > There is no way to enforce immutability of the typenames.  We can
>> >>choose
>> >> > to give up on that and require that app developers be careful, but
>>I'd
>> >> > rather not.
>> >> >
>> >> > Given that, if you've found a way to eliminate the need for
>> >>CSSClassList,
>> >> > that's great.
>> >> >
>> >> > IMO, the immutable things from typenames should be last in the
>>list.
>> >>My
>> >> > eye reads left to right and doesn't want to have to skip over stuff
>> >>that
>> >> > will be the same.
>> >> >
>> >> >
>> >>
>> >> *TOTALLY *agree with that. I tend to omit stuff because it looks the
>> >>same,
>> >> so having typedefs at the beginning makes it so like that.
>> >>
>> >> Piotr
>> >>
>> >>
>> >>
>> >> > My 2 cents,
>> >> > -Alex
>> >> >
>> >> > On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos
>> >> Rovira"
>> >> > <carlos.rovira@gmail.com on behalf of 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
>><ca...@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.w3sc
>> >> > >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
>> >> > 7C01%7Caharui%40ad
>> >> > >>obe.com%7C5fee37306b5f47f8664608d588305aef%
>> >> > 7Cfa7b1b5a7b34438794aed2c178de
>> >> > >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
>> >> > 2FQZnsNcB1
>> >> > >>G6R%2BkMSMIjboX0%3D&reserved=0
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >> --
>> >> > >> Carlos Rovira
>> >> > >>
>> >> > >>https://na01.safelinks.protection.outlook.com/?url=
>> >> > http%3A%2F%2Fabout.me%
>> >> > >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
>> >> > 7C5fee37306b5f47f8664608
>> >> > >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >> > 7C63656466362491312
>> >> > 
>>>>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>> >> > >>
>> >> > >>
>> >> > >
>> >> > >
>> >> > >--
>> >> > >Carlos Rovira
>> >> > >https://na01.safelinks.protection.outlook.com/?url=
>> >> > http%3A%2F%2Fabout.me%2
>> >> > >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
>> >> > 7C5fee37306b5f47f8664608d5
>> >> > >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >> > 7C636564663624913122&s
>> >> > >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>> >> >
>> >> >
>> >>
>> >>
>> >> --
>> >>
>> >> Piotr Zarzycki
>> >>
>> >> Patreon:
>> >>*https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C8e98630662af
>> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365647
>> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
>> reserv
>> >>ed=0
>> >>
>> >><https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C8e98630662af
>> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365647
>> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
>> reserv
>> >>ed=0>*
>> >>
>> >
>> >
>> >
>> >--
>> >Carlos Rovira
>> >https://na01.safelinks.protection.outlook.com/?url=
>> http%3A%2F%2Fabout.me%2
>> >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
>> 7C8e98630662af4b9ed47f08d5
>> >8841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> 7C636564738054334432&s
>> >data=8IcBMe9DSVOSXFUS%2BzV36EGjyXlix%2FLL8udleSOv3WY%3D&reserved=0
>>
>>
>
>
>-- 
>Carlos Rovira
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2
>Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C48f27c30c67043b293dc08d5
>8842eaa7%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564743347476990&s
>data=Yb3%2BZPcjpyWFVsc4jcvK9u3QjQl%2FHe%2F%2BiWjgL5ccry4%3D&reserved=0


Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
Hi Alex,

since Piotr and Harbs seems not to be very comfortable with the change, I
can subclass UIBase for Jewel and make that changes there. I don't want to
conflict in such central point of the framework,
Will it be ok for all of us?

2018-03-12 18:56 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:

> IMO, the order isn't going to make or break Royale.  Leave it as you have
> it and we'll see what our users think.
>
> -Alex
>
> On 3/12/18, 10:49 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
> <carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:
>
> >Hi
> >
> >sorry guys, I changed it since I thought I would not matter anyone. For me
> >is just the opposite. Feels very strange to me see things right to left,
> >is like description of folders, bread crumbs and something like this that
> >use to be from parent to child, and left to right
> >
> >I do that as well since for example Harbs said doesn't mind how final code
> >looks, but for me is important.
> >
> >do you want I reverse the commit? Is there a way to make it configurable
> >and be all happy? maybe I should subclass UIBase fo Jewel...
> >
> >
> >2018-03-12 18:01 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
> >
> >> 2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
> >>
> >> > If HTMLElement.classList is exposed to the user (the app developer)
> >>then
> >> > they can remove any of the items that were added from the typenames.
> >> > There is no way to enforce immutability of the typenames.  We can
> >>choose
> >> > to give up on that and require that app developers be careful, but I'd
> >> > rather not.
> >> >
> >> > Given that, if you've found a way to eliminate the need for
> >>CSSClassList,
> >> > that's great.
> >> >
> >> > IMO, the immutable things from typenames should be last in the list.
> >>My
> >> > eye reads left to right and doesn't want to have to skip over stuff
> >>that
> >> > will be the same.
> >> >
> >> >
> >>
> >> *TOTALLY *agree with that. I tend to omit stuff because it looks the
> >>same,
> >> so having typedefs at the beginning makes it so like that.
> >>
> >> Piotr
> >>
> >>
> >>
> >> > My 2 cents,
> >> > -Alex
> >> >
> >> > On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos
> >> Rovira"
> >> > <carlos.rovira@gmail.com on behalf of 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 <ca...@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.w3sc
> >> > >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
> >> > 7C01%7Caharui%40ad
> >> > >>obe.com%7C5fee37306b5f47f8664608d588305aef%
> >> > 7Cfa7b1b5a7b34438794aed2c178de
> >> > >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
> >> > 2FQZnsNcB1
> >> > >>G6R%2BkMSMIjboX0%3D&reserved=0
> >> > >>
> >> > >>
> >> > >>
> >> > >>
> >> > >>
> >> > >>
> >> > >> --
> >> > >> Carlos Rovira
> >> > >>
> >> > >>https://na01.safelinks.protection.outlook.com/?url=
> >> > http%3A%2F%2Fabout.me%
> >> > >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> >> > 7C5fee37306b5f47f8664608
> >> > >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >> > 7C63656466362491312
> >> > >>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >> > >>
> >> > >>
> >> > >
> >> > >
> >> > >--
> >> > >Carlos Rovira
> >> > >https://na01.safelinks.protection.outlook.com/?url=
> >> > http%3A%2F%2Fabout.me%2
> >> > >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> >> > 7C5fee37306b5f47f8664608d5
> >> > >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >> > 7C636564663624913122&s
> >> > >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >> >
> >> >
> >>
> >>
> >> --
> >>
> >> Piotr Zarzycki
> >>
> >> Patreon:
> >>*https://na01.safelinks.protection.outlook.com/?url=
> https%3A%2F%2Fwww.pat
> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %7C8e98630662af
> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
> cee1%7C0%7C0%7C6365647
> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
> reserv
> >>ed=0
> >>
> >><https://na01.safelinks.protection.outlook.com/?url=
> https%3A%2F%2Fwww.pat
> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %7C8e98630662af
> >>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178de
> cee1%7C0%7C0%7C6365647
> >>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&
> reserv
> >>ed=0>*
> >>
> >
> >
> >
> >--
> >Carlos Rovira
> >https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fabout.me%2
> >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> 7C8e98630662af4b9ed47f08d5
> >8841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> 7C636564738054334432&s
> >data=8IcBMe9DSVOSXFUS%2BzV36EGjyXlix%2FLL8udleSOv3WY%3D&reserved=0
>
>


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

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
IMO, the order isn't going to make or break Royale.  Leave it as you have
it and we'll see what our users think.

-Alex

On 3/12/18, 10:49 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
<carlos.rovira@gmail.com on behalf of carlosrovira@apache.org> wrote:

>Hi
>
>sorry guys, I changed it since I thought I would not matter anyone. For me
>is just the opposite. Feels very strange to me see things right to left,
>is like description of folders, bread crumbs and something like this that
>use to be from parent to child, and left to right
>
>I do that as well since for example Harbs said doesn't mind how final code
>looks, but for me is important.
>
>do you want I reverse the commit? Is there a way to make it configurable
>and be all happy? maybe I should subclass UIBase fo Jewel...
>
>
>2018-03-12 18:01 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
>
>> 2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>
>> > If HTMLElement.classList is exposed to the user (the app developer)
>>then
>> > they can remove any of the items that were added from the typenames.
>> > There is no way to enforce immutability of the typenames.  We can
>>choose
>> > to give up on that and require that app developers be careful, but I'd
>> > rather not.
>> >
>> > Given that, if you've found a way to eliminate the need for
>>CSSClassList,
>> > that's great.
>> >
>> > IMO, the immutable things from typenames should be last in the list.
>>My
>> > eye reads left to right and doesn't want to have to skip over stuff
>>that
>> > will be the same.
>> >
>> >
>>
>> *TOTALLY *agree with that. I tend to omit stuff because it looks the
>>same,
>> so having typedefs at the beginning makes it so like that.
>>
>> Piotr
>>
>>
>>
>> > My 2 cents,
>> > -Alex
>> >
>> > On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos
>> Rovira"
>> > <carlos.rovira@gmail.com on behalf of 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 <ca...@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.w3sc
>> > >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
>> > 7C01%7Caharui%40ad
>> > >>obe.com%7C5fee37306b5f47f8664608d588305aef%
>> > 7Cfa7b1b5a7b34438794aed2c178de
>> > >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
>> > 2FQZnsNcB1
>> > >>G6R%2BkMSMIjboX0%3D&reserved=0
>> > >>
>> > >>
>> > >>
>> > >>
>> > >>
>> > >>
>> > >> --
>> > >> Carlos Rovira
>> > >>
>> > >>https://na01.safelinks.protection.outlook.com/?url=
>> > http%3A%2F%2Fabout.me%
>> > >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
>> > 7C5fee37306b5f47f8664608
>> > >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> > 7C63656466362491312
>> > >>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>> > >>
>> > >>
>> > >
>> > >
>> > >--
>> > >Carlos Rovira
>> > >https://na01.safelinks.protection.outlook.com/?url=
>> > http%3A%2F%2Fabout.me%2
>> > >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
>> > 7C5fee37306b5f47f8664608d5
>> > >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> > 7C636564663624913122&s
>> > >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>> >
>> >
>>
>>
>> --
>>
>> Piotr Zarzycki
>>
>> Patreon: 
>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8e98630662af
>>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365647
>>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&reserv
>>ed=0
>> 
>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8e98630662af
>>4b9ed47f08d58841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365647
>>38054334432&sdata=PJK7MaYG0xHFDAxjz991NV%2B20a9mdDVBpyU3LVkbQZQ%3D&reserv
>>ed=0>*
>>
>
>
>
>-- 
>Carlos Rovira
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2
>Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8e98630662af4b9ed47f08d5
>8841af24%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564738054334432&s
>data=8IcBMe9DSVOSXFUS%2BzV36EGjyXlix%2FLL8udleSOv3WY%3D&reserved=0


Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
In this place it's worth to mention link which explain what actually
emulation components are ->
https://github.com/apache/royale-asjs/wiki/emulation-components

Thanks,
Piotr

On Sun, Feb 17, 2019, 10:57 AM Carlos Rovira <ca...@apache.org>
wrote:

> Hi Yannick,
>
> do you mean the HTML/JS/CSS generated code? as you compile the project
> you'll see in "js-debug" and "js-release" folders. You can as well use web
> inspector tools in browsers.
>
> About Flex code: there's no automatic migration tool. So you can follow
> some paths: One is to go with emulation components for MX (This is
> MXRoyale), that is developed by various contributors.
> Another one is to migrate as much as you can of your AS3 logic and create a
> new UI version using different UI Sets in Royale like: Jewel, Basic,
> Express or MDL.
>
> There's no one unique response, and all depends on the project, and
> strategy you think could be better in your case.
>
>
> El vie., 15 feb. 2019 a las 20:28, yannick delsahut (<
> y.delsahut@silverstark.fr>) escribió:
>
> > Carlos
> > Thank you i see your sample
> > Is ther a way to see code generated. I don't know if code of my sample
> > coud be transferm with Apache Royal
> > AS3 is converted? Is there a framework?
> > If you put our project Flex 3.6.0 does Royal product reuse code or
> > impossible.
> >
> > Thank you
> > yannick
> >
> > -----Message d'origine-----
> > De : Carlos Rovira [mailto:carlosrovira@apache.org]
> > Envoyé : jeudi 14 février 2019 18:28
> > À : dev@royale.apache.org
> > Objet : Re: TypeNames vs ClassName
> >
> > HI Yishay,
> >
> > A working example is in TDJ ( https://royale.apache.org/tourdejewel )
> > go to layouts. First one is a group with a className:
> >
> > Jewel BasicLayout (width200, height:200px)
> >
> > code:
> >
> > <j:Group width="200" height="200" className="wrapper">
> >                     <j:Button text="Origin" emphasis="primary"/>
> >                     <j:Button text="x:30,y:30" emphasis="secondary"
> x="30"
> > y
> > ="30"/>
> >                     <j:Button text="x:60,y:60" emphasis="emphasized"
> x="60"
> > y="60"/>
> >                     <j:Button text="bottom/right"
> > style="bottom:0;right:0"/>
> >                 </j:Group>
> >
> > If is not working for you, maybe we have a bug at some place.
> >
> > Carlos
> >
> >
> > El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
> > escribió:
> >
> > > Confused about this, now that I'm using Jewel.
> > >
> > > I want to add shadow to a Jewel group. So I do this:
> > >
> > >         <common:FormSelector className="raisedShadow"
> > id="cFormSelector"/>
> > >
> > > But then I see raisedShadow removed in in run-time in favor of classes
> > such
> > > as "itemsExpand itemsCenter itemsCentered layout vertical"
> > >
> > > Where should I be specifying my application className then?
> > >
> > >
> > >
> > >
> > > --
> > > Sent from: http://apache-royale-development.20373.n8.nabble.com/
> > >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
>
>
> --
> Carlos Rovira
> http://about.me/carlosrovira
>

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
Hi Yannick,

do you mean the HTML/JS/CSS generated code? as you compile the project
you'll see in "js-debug" and "js-release" folders. You can as well use web
inspector tools in browsers.

About Flex code: there's no automatic migration tool. So you can follow
some paths: One is to go with emulation components for MX (This is
MXRoyale), that is developed by various contributors.
Another one is to migrate as much as you can of your AS3 logic and create a
new UI version using different UI Sets in Royale like: Jewel, Basic,
Express or MDL.

There's no one unique response, and all depends on the project, and
strategy you think could be better in your case.


El vie., 15 feb. 2019 a las 20:28, yannick delsahut (<
y.delsahut@silverstark.fr>) escribió:

> Carlos
> Thank you i see your sample
> Is ther a way to see code generated. I don't know if code of my sample
> coud be transferm with Apache Royal
> AS3 is converted? Is there a framework?
> If you put our project Flex 3.6.0 does Royal product reuse code or
> impossible.
>
> Thank you
> yannick
>
> -----Message d'origine-----
> De : Carlos Rovira [mailto:carlosrovira@apache.org]
> Envoyé : jeudi 14 février 2019 18:28
> À : dev@royale.apache.org
> Objet : Re: TypeNames vs ClassName
>
> HI Yishay,
>
> A working example is in TDJ ( https://royale.apache.org/tourdejewel )
> go to layouts. First one is a group with a className:
>
> Jewel BasicLayout (width200, height:200px)
>
> code:
>
> <j:Group width="200" height="200" className="wrapper">
>                     <j:Button text="Origin" emphasis="primary"/>
>                     <j:Button text="x:30,y:30" emphasis="secondary" x="30"
> y
> ="30"/>
>                     <j:Button text="x:60,y:60" emphasis="emphasized" x="60"
> y="60"/>
>                     <j:Button text="bottom/right"
> style="bottom:0;right:0"/>
>                 </j:Group>
>
> If is not working for you, maybe we have a bug at some place.
>
> Carlos
>
>
> El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
> escribió:
>
> > Confused about this, now that I'm using Jewel.
> >
> > I want to add shadow to a Jewel group. So I do this:
> >
> >         <common:FormSelector className="raisedShadow"
> id="cFormSelector"/>
> >
> > But then I see raisedShadow removed in in run-time in favor of classes
> such
> > as "itemsExpand itemsCenter itemsCentered layout vertical"
> >
> > Where should I be specifying my application className then?
> >
> >
> >
> >
> > --
> > Sent from: http://apache-royale-development.20373.n8.nabble.com/
> >
>
>
> --
> Carlos Rovira
> http://about.me/carlosrovira
>


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

RE: TypeNames vs ClassName

Posted by yannick delsahut <y....@silverstark.fr>.
Carlos
Thank you i see your sample
Is ther a way to see code generated. I don't know if code of my sample coud be transferm with Apache Royal
AS3 is converted? Is there a framework?
If you put our project Flex 3.6.0 does Royal product reuse code or impossible.

Thank you
yannick

-----Message d'origine-----
De : Carlos Rovira [mailto:carlosrovira@apache.org] 
Envoyé : jeudi 14 février 2019 18:28
À : dev@royale.apache.org
Objet : Re: TypeNames vs ClassName

HI Yishay,

A working example is in TDJ ( https://royale.apache.org/tourdejewel )
go to layouts. First one is a group with a className:

Jewel BasicLayout (width200, height:200px)

code:

<j:Group width="200" height="200" className="wrapper">
                    <j:Button text="Origin" emphasis="primary"/>
                    <j:Button text="x:30,y:30" emphasis="secondary" x="30" y
="30"/>
                    <j:Button text="x:60,y:60" emphasis="emphasized" x="60"
y="60"/>
                    <j:Button text="bottom/right" style="bottom:0;right:0"/>
                </j:Group>

If is not working for you, maybe we have a bug at some place.

Carlos


El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
escribió:

> Confused about this, now that I'm using Jewel.
>
> I want to add shadow to a Jewel group. So I do this:
>
>         <common:FormSelector className="raisedShadow" id="cFormSelector"/>
>
> But then I see raisedShadow removed in in run-time in favor of classes such
> as "itemsExpand itemsCenter itemsCentered layout vertical"
>
> Where should I be specifying my application className then?
>
>
>
>
> --
> Sent from: http://apache-royale-development.20373.n8.nabble.com/
>


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

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
Ok Yishay, good to know it. thanks for reporting :)

El lun., 18 feb. 2019 a las 16:19, Yishay Weiss (<yi...@hotmail.com>)
escribió:

> Hi Carlos,
>
>
>
> After updating from dev it looks like it’s working now.
>
>
>
> Thanks.
>
>
>
> ________________________________
> From: Carlos Rovira <ca...@apache.org>
> Sent: Thursday, February 14, 2019 7:28:19 PM
> To: dev@royale.apache.org
> Subject: Re: TypeNames vs ClassName
>
> HI Yishay,
>
> A working example is in TDJ ( https://royale.apache.org/tourdejewel )
> go to layouts. First one is a group with a className:
>
> Jewel BasicLayout (width200, height:200px)
>
> code:
>
> <j:Group width="200" height="200" className="wrapper">
>                     <j:Button text="Origin" emphasis="primary"/>
>                     <j:Button text="x:30,y:30" emphasis="secondary" x="30"
> y
> ="30"/>
>                     <j:Button text="x:60,y:60" emphasis="emphasized" x="60"
> y="60"/>
>                     <j:Button text="bottom/right"
> style="bottom:0;right:0"/>
>                 </j:Group>
>
> If is not working for you, maybe we have a bug at some place.
>
> Carlos
>
>
> El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
> escribió:
>
> > Confused about this, now that I'm using Jewel.
> >
> > I want to add shadow to a Jewel group. So I do this:
> >
> >         <common:FormSelector className="raisedShadow"
> id="cFormSelector"/>
> >
> > But then I see raisedShadow removed in in run-time in favor of classes
> such
> > as "itemsExpand itemsCenter itemsCentered layout vertical"
> >
> > Where should I be specifying my application className then?
> >
> >
> >
> >
> > --
> > Sent from: http://apache-royale-development.20373.n8.nabble.com/
> >
>
>
> --
> Carlos Rovira
> http://about.me/carlosrovira
>


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

RE: TypeNames vs ClassName

Posted by Yishay Weiss <yi...@hotmail.com>.
Hi Carlos,



After updating from dev it looks like it’s working now.



Thanks.



________________________________
From: Carlos Rovira <ca...@apache.org>
Sent: Thursday, February 14, 2019 7:28:19 PM
To: dev@royale.apache.org
Subject: Re: TypeNames vs ClassName

HI Yishay,

A working example is in TDJ ( https://royale.apache.org/tourdejewel )
go to layouts. First one is a group with a className:

Jewel BasicLayout (width200, height:200px)

code:

<j:Group width="200" height="200" className="wrapper">
                    <j:Button text="Origin" emphasis="primary"/>
                    <j:Button text="x:30,y:30" emphasis="secondary" x="30" y
="30"/>
                    <j:Button text="x:60,y:60" emphasis="emphasized" x="60"
y="60"/>
                    <j:Button text="bottom/right" style="bottom:0;right:0"/>
                </j:Group>

If is not working for you, maybe we have a bug at some place.

Carlos


El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
escribió:

> Confused about this, now that I'm using Jewel.
>
> I want to add shadow to a Jewel group. So I do this:
>
>         <common:FormSelector className="raisedShadow" id="cFormSelector"/>
>
> But then I see raisedShadow removed in in run-time in favor of classes such
> as "itemsExpand itemsCenter itemsCentered layout vertical"
>
> Where should I be specifying my application className then?
>
>
>
>
> --
> Sent from: http://apache-royale-development.20373.n8.nabble.com/
>


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

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
HI Yishay,

A working example is in TDJ ( https://royale.apache.org/tourdejewel )
go to layouts. First one is a group with a className:

Jewel BasicLayout (width200, height:200px)

code:

<j:Group width="200" height="200" className="wrapper">
                    <j:Button text="Origin" emphasis="primary"/>
                    <j:Button text="x:30,y:30" emphasis="secondary" x="30" y
="30"/>
                    <j:Button text="x:60,y:60" emphasis="emphasized" x="60"
y="60"/>
                    <j:Button text="bottom/right" style="bottom:0;right:0"/>
                </j:Group>

If is not working for you, maybe we have a bug at some place.

Carlos


El jue., 14 feb. 2019 a las 15:45, yishayw (<yi...@hotmail.com>)
escribió:

> Confused about this, now that I'm using Jewel.
>
> I want to add shadow to a Jewel group. So I do this:
>
>         <common:FormSelector className="raisedShadow" id="cFormSelector"/>
>
> But then I see raisedShadow removed in in run-time in favor of classes such
> as "itemsExpand itemsCenter itemsCentered layout vertical"
>
> Where should I be specifying my application className then?
>
>
>
>
> --
> Sent from: http://apache-royale-development.20373.n8.nabble.com/
>


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

Re: TypeNames vs ClassName

Posted by yishayw <yi...@hotmail.com>.
Confused about this, now that I'm using Jewel.

I want to add shadow to a Jewel group. So I do this:

	<common:FormSelector className="raisedShadow" id="cFormSelector"/>

But then I see raisedShadow removed in in run-time in favor of classes such
as "itemsExpand itemsCenter itemsCentered layout vertical"

Where should I be specifying my application className then?




--
Sent from: http://apache-royale-development.20373.n8.nabble.com/

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
Hi

sorry guys, I changed it since I thought I would not matter anyone. For me
is just the opposite. Feels very strange to me see things right to left,
is like description of folders, bread crumbs and something like this that
use to be from parent to child, and left to right

I do that as well since for example Harbs said doesn't mind how final code
looks, but for me is important.

do you want I reverse the commit? Is there a way to make it configurable
and be all happy? maybe I should subclass UIBase fo Jewel...


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

> 2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>
> > If HTMLElement.classList is exposed to the user (the app developer) then
> > they can remove any of the items that were added from the typenames.
> > There is no way to enforce immutability of the typenames.  We can choose
> > to give up on that and require that app developers be careful, but I'd
> > rather not.
> >
> > Given that, if you've found a way to eliminate the need for CSSClassList,
> > that's great.
> >
> > IMO, the immutable things from typenames should be last in the list.  My
> > eye reads left to right and doesn't want to have to skip over stuff that
> > will be the same.
> >
> >
>
> *TOTALLY *agree with that. I tend to omit stuff because it looks the same,
> so having typedefs at the beginning makes it so like that.
>
> Piotr
>
>
>
> > My 2 cents,
> > -Alex
> >
> > On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos
> Rovira"
> > <carlos.rovira@gmail.com on behalf of 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 <ca...@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.w3sc
> > >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
> > 7C01%7Caharui%40ad
> > >>obe.com%7C5fee37306b5f47f8664608d588305aef%
> > 7Cfa7b1b5a7b34438794aed2c178de
> > >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
> > 2FQZnsNcB1
> > >>G6R%2BkMSMIjboX0%3D&reserved=0
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> --
> > >> Carlos Rovira
> > >>
> > >>https://na01.safelinks.protection.outlook.com/?url=
> > http%3A%2F%2Fabout.me%
> > >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> > 7C5fee37306b5f47f8664608
> > >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> > 7C63656466362491312
> > >>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> > >>
> > >>
> > >
> > >
> > >--
> > >Carlos Rovira
> > >https://na01.safelinks.protection.outlook.com/?url=
> > http%3A%2F%2Fabout.me%2
> > >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> > 7C5fee37306b5f47f8664608d5
> > >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> > 7C636564663624913122&s
> > >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >
> >
>
>
> --
>
> Piotr Zarzycki
>
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*
>



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

Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
2018-03-12 17:14 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:

> If HTMLElement.classList is exposed to the user (the app developer) then
> they can remove any of the items that were added from the typenames.
> There is no way to enforce immutability of the typenames.  We can choose
> to give up on that and require that app developers be careful, but I'd
> rather not.
>
> Given that, if you've found a way to eliminate the need for CSSClassList,
> that's great.
>
> IMO, the immutable things from typenames should be last in the list.  My
> eye reads left to right and doesn't want to have to skip over stuff that
> will be the same.
>
>

*TOTALLY *agree with that. I tend to omit stuff because it looks the same,
so having typedefs at the beginning makes it so like that.

Piotr



> My 2 cents,
> -Alex
>
> On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
> <carlos.rovira@gmail.com on behalf of 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 <ca...@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.w3sc
> >>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%
> 7C01%7Caharui%40ad
> >>obe.com%7C5fee37306b5f47f8664608d588305aef%
> 7Cfa7b1b5a7b34438794aed2c178de
> >>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%
> 2FQZnsNcB1
> >>G6R%2BkMSMIjboX0%3D&reserved=0
> >>
> >>
> >>
> >>
> >>
> >>
> >> --
> >> Carlos Rovira
> >>
> >>https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fabout.me%
> >>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> 7C5fee37306b5f47f8664608
> >>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> 7C63656466362491312
> >>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
> >>
> >>
> >
> >
> >--
> >Carlos Rovira
> >https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fabout.me%2
> >Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%
> 7C5fee37306b5f47f8664608d5
> >88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> 7C636564663624913122&s
> >data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>
>


-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
If HTMLElement.classList is exposed to the user (the app developer) then
they can remove any of the items that were added from the typenames.
There is no way to enforce immutability of the typenames.  We can choose
to give up on that and require that app developers be careful, but I'd
rather not.

Given that, if you've found a way to eliminate the need for CSSClassList,
that's great.

IMO, the immutable things from typenames should be last in the list.  My
eye reads left to right and doesn't want to have to skip over stuff that
will be the same.

My 2 cents,
-Alex

On 3/12/18, 8:45 AM, "carlos.rovira@gmail.com on behalf of Carlos Rovira"
<carlos.rovira@gmail.com on behalf of 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 <ca...@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.w3sc
>>hools.com%2FJsref%2Fprop_element_classlist.asp&data=02%7C01%7Caharui%40ad
>>obe.com%7C5fee37306b5f47f8664608d588305aef%7Cfa7b1b5a7b34438794aed2c178de
>>cee1%7C0%7C0%7C636564663624913122&sdata=EjW00lpVegbpFVp2%2FzQz%2FQZnsNcB1
>>G6R%2BkMSMIjboX0%3D&reserved=0
>>
>>
>>
>>
>>
>>
>> --
>> Carlos Rovira
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%
>>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C5fee37306b5f47f8664608
>>d588305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63656466362491312
>>2&sdata=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0
>>
>>
>
>
>-- 
>Carlos Rovira
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2
>Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C5fee37306b5f47f8664608d5
>88305aef%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564663624913122&s
>data=XjaCDhDlj5GDGyIiHc7fKzg8zsKxIrcEoVel%2Ffj7qmI%3D&reserved=0


Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
Hi Piotr,

I was reding from the begging and saw when the CSSClassList came.

I think Harbs solution is ok, the only problem I see is that in MDL, and
Jewel, we need to have functions per class that manages
add/remove of classes and override of compute function. That's what I don't
like of current solution.

As well I don't see in all the thread a mention to element.classList

for the two problems you mention, I expect very few lines in the
jewel-framework.css (css rules very close to frmaework code)
but anyway, I think debugging will not help you with something like this
when you have a line in code that sets display:block or
changes the elements classes.

For second, the code you're referring was not final in any way, I committed
since I want to fix and commit other things
I'm still trying and testing different approaches as I get to final
conclusions, so please don't take that as something final.

About searching vertical layout (if that would be final code), you only
need to search in jewel-framework.css that will only hold ClassReference
properties
in css rules and things like this (layouts) that are very close to the code
and will never go to a theme.

I think my approach is less monolithic since I'm separating concerns.

Piotr, I must say I'm very happy with today findings, but I need to
continue evolving it to avoid that you and others look to an unfinished
work
and take conclusions of things that will not be as they are currently



2018-03-12 17:58 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:

> Hi Carlos,
>
> That's why we are using Harb's solution with his own class list. If you
> went through this long thread carefully I have an issue which end up with
> that solution. The problem was exactly as Harb's mention. Try it yourself.
>
> Another great things which Harb's bring up here is why I also like Royale.
>
> 1) I had really hard time to debug things when something was in CSS file
> only not as inline in some Bead or Code. - That was really pain and I had
> quite short css file. Imagine having 1000 lines in such file ?
> 2) I saw your commit and one question which come up to my mind. If you have
> following line:
>
> child.className += " layout vertical";
>
> You hit in your IDE CTRL/CMD and try to click on " layout vertical" - does
> it jump to the proper css classes in file ?
>
> If not - That is another disadvantage of that approach - How do I find my
> "layout vertical" class among 1000 lines and many css files in the project
> ?
>
> I really really don't want that our framework will turns into an monolithic
> AngularJS. Just because the other are doing things in that way we don't
> have to follow, because we turn things in a mess.
>
> I will shot you some thoughts to the code on GitHub.
>
> Thanks, Piotr
>
>
> 2018-03-12 17:21 GMT+01:00 Harbs <ha...@gmail.com>:
>
> > 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 <ca...@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 <ca...@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://www.w3schools.com/Jsref/prop_element_classlist.asp
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> --
> > >> Carlos Rovira
> > >> http://about.me/carlosrovira
> > >>
> > >>
> > >
> > >
> > > --
> > > 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

Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
Hi Carlos,

That's why we are using Harb's solution with his own class list. If you
went through this long thread carefully I have an issue which end up with
that solution. The problem was exactly as Harb's mention. Try it yourself.

Another great things which Harb's bring up here is why I also like Royale.

1) I had really hard time to debug things when something was in CSS file
only not as inline in some Bead or Code. - That was really pain and I had
quite short css file. Imagine having 1000 lines in such file ?
2) I saw your commit and one question which come up to my mind. If you have
following line:

child.className += " layout vertical";

You hit in your IDE CTRL/CMD and try to click on " layout vertical" - does
it jump to the proper css classes in file ?

If not - That is another disadvantage of that approach - How do I find my
"layout vertical" class among 1000 lines and many css files in the project ?

I really really don't want that our framework will turns into an monolithic
AngularJS. Just because the other are doing things in that way we don't
have to follow, because we turn things in a mess.

I will shot you some thoughts to the code on GitHub.

Thanks, Piotr


2018-03-12 17:21 GMT+01:00 Harbs <ha...@gmail.com>:

> 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 <ca...@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 <ca...@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://www.w3schools.com/Jsref/prop_element_classlist.asp
> >>
> >>
> >>
> >>
> >>
> >>
> >> --
> >> Carlos Rovira
> >> http://about.me/carlosrovira
> >>
> >>
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
>
>


-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Sure, the way the code is written in UIBase today.  I think he can modify
what UIBase className does, but then I think it starts becoming "more
work" and not "simple" and PAYG.

Of course, I could be wrong...
-Alex

On 3/12/18, 9:51 AM, "Harbs" <ha...@gmail.com> wrote:

>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 <ah...@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
>><ma...@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 <ca...@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 <ca...@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.w
>>>>>3s 
>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
>>>>>w3s>
>>>>> chools.com 
>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fchool
>>>>>s.com%2F&data=02%7C01%7Caharui%40adobe.com%7C1c45a77a1df8408f8d2608d58
>>>>>83985ab%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63656470299651186
>>>>>9&sdata=%2BGbq37asVK1P2C7Agfh1MarbFRm7UkaME1ZtUlE1tUI%3D&reserved=0>%2
>>>>>FJsref%2Fprop_element_classlist.asp&data=02%7C01%7Caharui%40
>>>>> adobe.com 
>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fadobe
>>>>>.com%2F&data=02%7C01%7Caharui%40adobe.com%7C1c45a77a1df8408f8d2608d588
>>>>>3985ab%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564702996511869
>>>>>&sdata=efA1A3WvrMtvtCJc%2BHZnA%2FkavDwXoGvJAatriFioXS4%3D&reserved=0>%
>>>>>7C8ce390a012154f8f2a8a08d588354aa0%7Cfa7b1b5a7b34438794aed2c17
>>>>> 
>>>>>8decee1%7C0%7C0%7C636564684909764090&sdata=OOh4TK5LKB75CGn6U4%2BeaVC%2
>>>>>Fi
>>>>> 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
>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ado
>>>>>be.com%2F&data=02%7C01%7Caharui%40adobe.com%7C1c45a77a1df8408f8d2608d5
>>>>>883985ab%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365647029965118
>>>>>69&sdata=hWg9%2Bnv5VdGiBgjLXrxzQCNz0mOLOQRtED2l5m2Mbc8%3D&reserved=0>%
>>>>>7C8ce390a012154f8f2a8a
>>>>> 
>>>>>08d588354aa0%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564684909
>>>>>76
>>>>> 4090&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%3D&reserved=0
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Carlos Rovira
>>>> 
>>>> 
>>>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.m
>>>>e% 
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.
>>>>me%>
>>>> 2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob
>>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C1c45a77a1df8408f8d2608d588
>>>>3985ab%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564702996511869&
>>>>sdata=hWg9%2Bnv5VdGiBgjLXrxzQCNz0mOLOQRtED2l5m2Mbc8%3D&reserved=0>%7C8c
>>>>e390a012154f8f2a8a08
>>>> 
>>>>d588354aa0%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636564684909764
>>>>09
>>>> 0&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%3D&reserved=0
>


Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
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 <pi...@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 <ca...@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 <ha...@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 <ah...@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

Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@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 <ca...@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 <ha...@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 <ah...@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 <ca...@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 <ca...@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>*

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@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 <ha...@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 <ah...@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 <ca...@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 <ca...@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=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%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

Re: TypeNames vs ClassName

Posted by Harbs <ha...@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 <ah...@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 <ma...@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 <ca...@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 <ca...@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%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63656468490976
>>>> 4090&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%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


Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
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" <ha...@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 <ca...@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 <ca...@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
>>>chools.com%2FJsref%2Fprop_element_classlist.asp&data=02%7C01%7Caharui%40
>>>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
>>>%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8ce390a012154f8f2a8a
>>>08d588354aa0%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63656468490976
>>>4090&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%3D&reserved=0
>>> 
>>> 
>> 
>> 
>> -- 
>> Carlos Rovira
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%
>>2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8ce390a012154f8f2a8a08
>>d588354aa0%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63656468490976409
>>0&sdata=HDNJQ8VZuNS5lhOBU2ZsRrGQAgG5qOxiIQJKkOaTZV4%3D&reserved=0
>


Re: TypeNames vs ClassName

Posted by Harbs <ha...@gmail.com>.
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 <ca...@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 <ca...@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://www.w3schools.com/Jsref/prop_element_classlist.asp
>> 
>> 
>> 
>> 
>> 
>> 
>> --
>> Carlos Rovira
>> http://about.me/carlosrovira
>> 
>> 
> 
> 
> -- 
> Carlos Rovira
> http://about.me/carlosrovira


Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@apache.org>.
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 <ca...@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://www.w3schools.com/Jsref/prop_element_classlist.asp
>
>
>
>
>
>
> --
> Carlos Rovira
> http://about.me/carlosrovira
>
>


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

Re: TypeNames vs ClassName

Posted by Carlos Rovira <ca...@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://www.w3schools.com/Jsref/prop_element_classlist.asp






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

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Harbs please post code snippets so we can understand what you are
referring to.  I'm not too concerned about how much code is baked into
MDL, but I'm more interested in the notion that there are just-in-case
patterns that are somehow more optimal than on-demand patterns.  I'm
thinking there are ways to write the on-demand patterns so they are better
in all measurements than just-in-case.

Let's start with a scenario or two and use MDL Button since it is an
actual thing used in some examples.  Isn't scenario #1 just using a plain
MDL Button with no attributes?  And scenario #2 using a MDL Button with
some attribute?

What code runs when no attributes and with one attribute with and without
your proposed CSSClassList class?

Thanks,
-Alex

On 3/5/18, 3:11 AM, "Harbs" <ha...@gmail.com> wrote:

>
>> On Mar 5, 2018, at 2:18 AM, Alex Harui <ah...@adobe.com.INVALID> wrote:
>> 
>> Why are there so many empty strings and why do the cot so much?  Should
>> we reference a single global empty string?
>
>If you mean in XML, I eliminated initializing *everything* in XML unless
>needed and I saw a drastic reduction in use of memory. I also reuse Names
>which likewise reduced a lot of memory usage.
>
>In this case, it’s necessary to initialize the strings or add checking
>code.
>
>> I don't think I follow why just-in-case code is less than
>>not-just-in-case
>> code.  I don't think I've ever really seen that.  Can you provide more
>> detail?
>
>There *is no* "just in case" code here. We *need* to add one of three
>things to the MDL Button class and there’s trade-offs between all three.
>
>1. Empty strings with string concatenation
>2. An array to hold the strings
>3. A class which constructs the array and fills it as needed.
>
>#1 adds the most code and IMO overhead to the MDL Button class
>#2 initializes an array or has to add a getter which lazy initializes the
>array.
>#3 has an initially empty object which lazy intializes an array and
>populates it as needed.
>
>#2 and #3 are roughly equivalent in terms of object initialization.
>There’s not much difference between initializing and object or an array
>in JS.
>
>#2 puts the “add”, “remove” and “compute” code inside the Button class,
>while #3 moves it out into its own class which could be reused in other
>situations.
>
>Moving it into a class does add a bit of code inherent to classes in
>Royale, but I maintain that it’s minimal, and the value of being able to
>reuse it at no extra cost makes it justifiable.
>
>It is probably possible that we can have a package level function which
>returns an IStringList which would in fact be a javascript
>object/function which has the methods built in at no extra code cost, but
>that feels a bit hacky...
>
>Harbs
>
>* In truth there is a bit of just in case code in the CSSClassList class.
>There is range checking in the add method which could probably be
>removed. The range checking in the remove method is probably needed
>because we’re not enforcing initialization of booleans.
>
>> 
>> -Alex
>> 
>> On 3/4/18, 5:24 AM, "Harbs" <ha...@gmail.com> wrote:
>> 
>>> 
>>>> On Mar 2, 2018, at 6:46 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>wrote:
>>>> 
>>>> Again, the principles of PAYG are that there is as little Just-in-case
>>>> code as possible.  AIUI, every MDL user will be downloading and
>>>> initializing the ClassList prototype just-in-case.  This is not true
>>>>of
>>>> Strings.  It isn't just the cost of instantiation.  There are download
>>>> and
>>>> class initialization costs.
>>> 
>>> Not every MDL user. Only users of Button (and possibly Card). The final
>>> minimized (non-gzipped) size of the class is 492 bytes. I’m actually
>>>not
>>> sre why it’s not even smaller. I’m getting odd code which looks like
>>> this: 
>>> 
>>>AT.prototype.add=AT.prototype.add;AT.prototype.remove=AT.prototype.remov
>>>e;
>>> I’m not sure why goog is outputting this.
>>> 
>>> While there are download costs, about half of those costs are offset by
>>> less string initialization and concatenation code in Button. The more
>>> classes which use the class will offset the cost of the class even
>>> further.
>>> 
>>>> Array operations are not cheap in Flash, not
>>>> sure about JS.
>>> 
>>> In JS, the array operations in use are abot the same as the string
>>> operations. In fact, it’s going to be cheaper and use less RAM if not
>>>all
>>> the properties are used.
>>> 
>>> So, it’s a toss between a slightly higher download size which gets
>>> amortized the more it’s used vs memory resources. I’m not sure why
>>>you’re
>>> considering it more PAYG to avoid the use of the class.
>>> 
>>> As a data point: I found that empty strings in XML classes added many
>>>MB
>>> of RAM usage when XML was used heavily in my app. While I doubt someone
>>> will be using thousands of MDL Buttons, RAM from empty strings are
>>> sometimes worthy of consideration.
>>> 
>>> The “costs” one way or the other here is pretty minimal no matter which
>>> waywe go.
>>> 
>>>> There may be other space-delimited lists in world and having a generic
>>>> top-level function "addToSpaceDelimitedList" and
>>>> "removeFromSpaceDelimitedList" would be opt-in by the users who choose
>>>> to
>>>> manipulate their classNames with these helper functions.  It does not
>>>> make
>>>> sense to me to bake use of these functions into MDL.  The only portion
>>>> of
>>>> the final classname that needs manipulation like this is the className
>>>> property itself, not the attribute pieces or typenames.  Also, with
>>>> separate will named utility unctions, folks could use these functions
>>>> if
>>>> they run into other space delimited lists.
>>> 
>>> I’m not sure what you mean here. The class can be used in any context.
>>>If
>>> there are other contexts, it might make sense to rename the class. Are
>>> you referring to arrays or strings? I’m pretty sure we’re going to come
>>> up with other uses for passing around class lists in a way that make
>>>this
>>> class useful.
>>> 
>>> Harbs
>>> 
>>>> My 2 cents,
>>>> -Alex
>>>> 
>>>> On 3/2/18, 1:36 AM, "Harbs" <harbs.lists@gmail.com
>>>> <ma...@gmail.com>> wrote:
>>>> 
>>>>> I do agree that this is pretty low on the list of priorities. I did
>>>>>not
>>>>> have a head to work on anything “serious” and the class lists was a
>>>>> nice
>>>>> distraction for me. I’m certainly fine with however Piotr handles
>>>>> this. I
>>>>> would like to point out a few things:
>>>>> 
>>>>> 1. Object instantiation is pretty cheap in JS. A CSSClassList object
>>>>>is
>>>>> no heavier than an empty String. 8 empty strings use more memory
>>>>>than a
>>>>> single CSSClassList.
>>>>> 2. Array.join() is about the same computational-wise as string
>>>>> concatenation.
>>>>> 3. The “list” is not being added anywhere the empty strings would not
>>>>> be
>>>>> added, so it’s no less PAYG than strings.
>>>>> 4. An instantiated class such as this would fit better in case we
>>>>>need
>>>>> to
>>>> play with class lists in beads because the CSSClassList object could
>>>>>be
>>>>> passed around and modified by different classes without exposing
>>>>> private
>>>>> variables and/or strands and beads needing to know about each other.
>>>>>I
>>>>> don’t think static utility classes are any less PAYG in this case.
>>>>> 
>>>>> Thanks,
>>>>> Harbs
>>>>> 
>>>>>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki
>>>>>><pi...@gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>> Hi Harbs,
>>>>>> 
>>>>>> As much as I like Array approach I took Alex's words more serious
>>>>>>that
>>>>>> having an Array in the game here could be more heavier than String
>>>>>> concatenation. It's earlier in the discussion.
>>>>>> 
>>>>>> Piotr
>>>>>> 
>>>>>> 
>>>>>> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>>>>> 
>>>>>>> Very nice, but IMO, this is over-engineering.  We are talking
>>>>>>>about a
>>>>>>> space-delimited list where some portion of it is considered "fixed"
>>>>>>> another portion is user-settable and another portion comes from
>>>>>>>other
>>>>>>> attributes.  Some generic StringUtils or ListUtils might be more
>>>>>>> PAYG,
>>>>>>> especially if they are opt-in and just used to manage the
>>>>>>> user-settable
>>>>>>> portion.  Think of it this way:  EveryMDL app needs to carry
>>>>>>>around
>>>>>>> ClassList even if they never change the classname.  I don't care
>>>>>>>too
>>>>>>> much
>>>>>>> since it is in MDL and not in the core, so keep it if you want to,
>>>>>>> but
>>>>>>> I
>>>>>>> can think of lots of other tasks we should be working on than
>>>>>>> creating
>>>>>>> cool classes to manage a list of strings.
>>>>>>> 
>>>>>>> My 2 cents,
>>>>>>> -Alex
>>>>>>> 
>>>>>>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> What do you think of the CSSClassList class I just committed?
>>>>>>>> 
>>>>>>>> I *think* that makes the pattern more recognizable and probably is
>>>>>>>> less
>>>>>>>> heavy if more than one class can be used.
>>>>>>>> 
>>>>>>>> Harbs
>>>>>>>> 
>>>>>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki
>>>>>>>>> <pi...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> Harbs, Alex,
>>>>>>>>> 
>>>>>>>>> I just pushed implementation of computeFinalClassNames to
>>>>>>>>> branch feature/type_names_class_name_issue124. You can review
>>>>>>>>> implementation in this commit [1] and example of usage in Card
>>>>>>>>>and
>>>>>>>>> Button.
>>>>>>>>> 
>>>>>>>>> I have tested with Harbs example [3] and with Card by changing
>>>>>>>>> orders.
>>>>>>>>> It's
>>>>>>>>> working.
>>>>>>>>> 
>>>>>>>>> [1]
>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508
>>>>>>>>>d5
>>>>>>>>> 7f
>>>>>>>>> cf
>>>>>>> 6
>>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>>> 7C636555451956879397&sdata
>>>>>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>>>>>>> [2]
>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508
>>>>>>>>>d5
>>>>>>>>> 7f
>>>>>>>>> cf
>>>>>>> 6
>>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>>> 7C636555451956879397&sdata
>>>>>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>>>>>>> [3]
>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508
>>>>>>>>>d5
>>>>>>>>> 7f
>>>>>>>>> cf
>>>>>>> 6
>>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>>> 7C636555451956879397&sdata
>>>>>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>>>>>>> 
>>>>>>>>> Waiting for your review.
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Piotr
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki
>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>> 
>>>>>>>>>> Let me play with implementation of that function. It seems to me
>>>>>>>>>> that
>>>>>>>>>> will
>>>>>>>>>> be much cleaner than current solution.
>>>>>>>>>> 
>>>>>>>>>> If user actually wanted to do anythin with className - let the
>>>>>>>>>> overriding
>>>>>>>>>> speaks.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui
>>>>>>>>>><ah...@adobe.com.invalid>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> OK. I think that will work for DML components, but what if
>>>>>>>>>>>> there’s a
>>>>>>>>>>>> bead
>>>>>>>>>>>> which needs to add class names? What would be the “right” way
>>>>>>>>>>>>to
>>>>>>>>>>>> do
>>>>>>>>>>>> that?
>>>>>>>>>>>> A bead cannot override the function on the strand.
>>>>>>>>>>> 
>>>>>>>>>>> Do we have beads that manipulate className?
>>>>>>>>>>> 
>>>>>>>>>>> IMO, the principle behind how to handle that is knowing whether
>>>>>>>>>>> you
>>>>>>>>>>> are
>>>>>>>>>>> sharing something or not.  There may not be one right way to
>>>>>>>>>>> handle
>>>>>>>>>>> it,
>>>>>>>>>>> but if I had to handle it, I would have the bead set something
>>>>>>>>>>>in
>>>>>>>>>>> the
>>>>>>>>>>> model or presentation model of the component.  And the
>>>>>>>>>>>component
>>>>>>>>>>> would
>>>>>>>>>>> override computeFinalClassNames to take that into account.
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Although having just written that, maybe this
>>>>>>>>>>> computeFinalClassNames
>>>>>>>>>>> should be in the view instead of on the base class so it is
>>>>>>>>>>> replaceable
>>>>>>>>>>> instead of overridable.
>>>>>>>>>>> 
>>>>>>>>>>> Thoughts?
>>>>>>>>>>> -Alex
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui
>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate
>>>>>>>>>>>>> the
>>>>>>>>>>>>> UIBase.className however they see fit.  They can assign it a
>>>>>>>>>>>>> whole
>>>>>>>>>>>>> new
>>>>>>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>>>>>>> element.className
>>>>>>>>>>>>> is computed from typeNames and className by default, and MDL
>>>>>>>>>>>>> would
>>>>>>>>>>>>> override it to factor in fab, raised, colored into the
>>>>>>>>>>>>> computing
>>>>>>>>>>>>> of
>>>>>>>>>>>>> the
>>>>>>>>>>>>> final classnames.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I would prefer that we don't make requirements on users as to
>>>>>>>>>>>>> what
>>>>>>>>>>>>> they
>>>>>>>>>>>>> can or can't do with the className property, like requiring
>>>>>>>>>>>>> them
>>>>>>>>>>>>> to
>>>>>>>>>>>>> use
>>>>>>>>>>>>> addClassName/removeClassNames.  MXML and States might set
>>>>>>>>>>>>> className,
>>>>>>>>>>> as
>>>>>>>>>>>>> could any other AS logic.  I think folks may even be used to
>>>>>>>>>>>>> setting
>>>>>>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>>>>>>> "variable"
>>>>>>>>>>>>> part and having computeFinalClassNames be the way the "fixed"
>>>>>>>>>>>>> part
>>>>>>>>>>>>> is
>>>>>>>>>>>>> handled makes sense to me.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Of course, I could be wrong...
>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces”
>>>>>>>>>>>>>>to
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> class
>>>>>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>>>>>>> 2. The client might subsequently set the className to
>>>>>>>>>>>>>> something
>>>>>>>>>>>>>> else.
>>>>>>>>>>>>>> 3. When the component sets the “pieces” first and the client
>>>>>>>>>>>>>> sets
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> className later, the client will overwrite these “pieces”
>>>>>>>>>>>>>> which
>>>>>>>>>>>>>> were
>>>>>>>>>>>>>> added by the component.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> My suggestion to have addClassName() and removeClassName()
>>>>>>>>>>>>>>was
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> have
>>>>>>>>>>>>>> a
>>>>>>>>>>>>>> “safe” way to add class names which would get computed
>>>>>>>>>>>>>> together
>>>>>>>>>>>>>> with
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> className when the className is replaced.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>>>>>>> className
>>>>>>>>>>>>>> property. If that’s overwritten by a client, the logic falls
>>>>>>>>>>>>>> apart.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>>>>>>> component
>>>>>>>>>>>>>> and className which is set outside the component is not
>>>>>>>>>>>>>>really
>>>>>>>>>>>>>> enough.
>>>>>>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Harbs
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
>>>>>>>>>>>>>>> <aharui@adobe.com.INVALID
>>>>>>>> 
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com>
>>>>>>>>>>>>>>>wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could
>>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> though.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> AIUI, for most UIBase subclasses, the final
>>>>>>>>>>>>>>>element.className
>>>>>>>>>>>>>>> is a
>>>>>>>>>>> mix
>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>> the className property and the typeNames.  The typenames
>>>>>>>>>>>>>>>are
>>>>>>>>>>>>>>> thought
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>> "fixed" and the space-delimited list of names in className
>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> ones
>>>>>>>>>>>>>>> the user wants to manipulate in their code.  So, I would
>>>>>>>>>>>>>>> expect
>>>>>>>>>>>>>>> them
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> write:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
>>>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> myComponent.className += value;
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> If you call
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>>>>>>> If (c != -1)
>>>>>>>>>>>>>>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>>>>>>> Else
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>> c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>>>>>> if (c != -1)
>>>>>>>>>>>>>>>  s = s.substr(0, c);  // remove last item
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>> myComponent.className = s;
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>>>>>>> piotrzarzycki21@gmail.com
>>>>>>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Ok Understand, but do you agree that
>>>>>>>>>>>>>>>>>> computeFinalClassNames -
>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Yes, and probably protected instead of public.  The one
>>>>>>>>>>>>>>>>>in
>>>>>>>>>>>>>>>>> UIBase
>>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>> appends typenames to className.  It gets overridden in
>>>>>>>>>>>>>>>>>MDL
>>>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>>>> needed
>>>>>>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> I think that in the shadow setter, it would change
>>>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed
>>>>>>>>>>>>>>>>>>>>to
>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> override public function
>>>>>>>>>>>>>>>>>>>>computeFinalClassNames():String
>>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
>>>>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario
>>>>>>>>>>>>>>>>>>>>where
>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>>>>> property isActive = true/false and I need to
>>>>>>>>>>>>>>>>>>>>add/remove
>>>>>>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>>>>>>>>>>>>>>>>>>>> handle
>>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>>>>>>> :
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I think am I not communicating the principles
>>>>>>>>>>>>>>>>>>>>> effectively.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not
>>>>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these
>>>>>>>>>>>>>>>>>>>>> methods.
>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need
>>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>>>>>>> computation
>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.
>>>>>>>>>>>>>>>>>>>>> Then I
>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated
>>>>>>>>>>>>>>>>>>>>> GIF.
>>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the
>>>>>>>>>>>>>>>>>>>>> list
>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true
>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>>>>>>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.
>>>>>>>>>>>>>>>>>>>>> That is
>>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>>>>>>> passing
>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the
>>>>>>>>>>>>>>>>>>>>> checks
>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there
>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG
>>>>>>>>>>>>>>>>>>>>> flag
>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded
>>>>>>>>>>>>>>>>>>>>>> GIF
>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field
>>>>>>>>>>>>>>>>>>>>>> which I
>>>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className,
>>>>>>>>>>>>>>>>>>>>>> than
>>>>>>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to
>>>>>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3
>>>>>>>>>>>>>>>>>>>>>> D&
>>>>>>>>>>> reserve
>>>>>>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be
>>>>>>>>>>>>>>>>>>>>>>> better
>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting
>>>>>>>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built
>>>>>>>>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>> up
>>>>>>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I
>>>>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
>>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
>>>>>>>>>>>>>>>>>>>>>>>> way:
>>>>>>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className
>>>>>>>>>>>>>>>>>>>>>>>> =
>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>>>>>>>>>>>>>>>>>>>>>>>> Waiting
>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding
>>>>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>>>> three
>>>>>>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and
>>>>>>>>>>>>>>>>>>>>>>>> added on
>>>>>>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't 
break
>>>>>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>>>> om
>>>>>>> %
>>>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>>>> om
>>>>>>> %
>>>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96
>>>>>>>>>>>>>>>>>>52
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>ce
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmAL
>>>>>>>>>>>>>>>>>>ZY
>>>>>>>>>>>>>>>>>> sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96
>>>>>>>>>>>>>>>>>>52
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>ce
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmAL
>>>>>>>>>>>>>>>>>>ZY
>>>>>>>>>>>>>>>>>> sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https
>>>>>>>>>>>>>>>>>>%3
>>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caha
>>>>>>>>>>>>>>>>>>ru
>>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc6
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=S
>>>>>>>>>>>>>>>>>>JJ
>>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>>>20
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>>>e1
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDr
>>>>>>>>>>>>>>>>>>Zx
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc7
>>>>>>>>>>>>>>>>>>74
>>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%
>>>>>>>>>>>>>>>>>>3A
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C
>>>>>>>>>>>>>>>>>>0f
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c1
>>>>>>>>>>>>>>>>>>78
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT
>>>>>>>>>>>>>>>>>>2H
>>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> 
>>>>>>>>> Piotr Zarzycki
>>>>>>>>> 
>>>>>>>>> Patreon:
>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=>
>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>> reon.com 
>>>>>>>>> 
>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fr
>>>>>>>>>eo
>>>>>>>>> 
>>>>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe432020910
>>>>>>>>>8d
>>>>>>>>> 
>>>>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766718
>>>>>>>>>35
>>>>>>>>> 
>>>>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&res
>>>>>>>>>er
>>>>>>>>> ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>> 
>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F4
>>>>>>>>>0a
>>>>>>>>> 
>>>>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe432020
>>>>>>>>>91
>>>>>>>>> 
>>>>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766
>>>>>>>>>71
>>>>>>>>> 
>>>>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&re
>>>>>>>>>se
>>>>>>>>> rved=0>
>>>>>>> %7C9ba2ae2d1a6e
>>>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>> cee1%7C0%7C0%7C6365554
>>>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>>>> =0
>>>>>>>>> 
>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=>
>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>> reon.com 
>>>>>>>>> 
>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fr
>>>>>>>>>eo
>>>>>>>>> 
>>>>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe432020910
>>>>>>>>>8d
>>>>>>>>> 
>>>>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766718
>>>>>>>>>35
>>>>>>>>> 
>>>>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&res
>>>>>>>>>er
>>>>>>>>> ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>> 
>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F4
>>>>>>>>>0a
>>>>>>>>> 
>>>>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe432020
>>>>>>>>>91
>>>>>>>>> 
>>>>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766
>>>>>>>>>71
>>>>>>>>> 
>>>>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&re
>>>>>>>>>se
>>>>>>>>> rved=0>
>>>>>>> %7C9ba2ae2d1a6e
>>>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>> cee1%7C0%7C0%7C6365554
>>>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>>>> =0>*
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> 
>>>>>> Piotr Zarzycki
>>>>>> 
>>>>>> Patreon: 
>>>>>> 
>>>>>> 
>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
>>>>>>.p
>>>>>> at 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
>>>>>>.p
>>>>>> at>
>>>>>> reon.com 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon
>>>>>>.c
>>>>>> 
>>>>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d
>>>>>>35
>>>>>> 
>>>>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&s
>>>>>>da
>>>>>> 
>>>>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fp
>>>>>>io
>>>>>> trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ad
>>>>>>ob
>>>>>> 
>>>>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d5
>>>>>>81
>>>>>> 
>>>>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766718355933
>>>>>>7&
>>>>>> 
>>>>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C
>>>>>>1b
>>>>>> eda9d1dc67
>>>>>> 
>>>>>> 
>>>>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636
>>>>>>55
>>>>>> 58
>>>>>> 
>>>>>> 
>>>>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&re
>>>>>>se
>>>>>> rv
>>>>>> ed=0
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
>>>>>>.p
>>>>>> at 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
>>>>>>.p
>>>>>> at>
>>>>>> reon.com 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon
>>>>>>.c
>>>>>> 
>>>>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d
>>>>>>35
>>>>>> 
>>>>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&s
>>>>>>da
>>>>>> 
>>>>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fp
>>>>>>io
>>>>>> trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>> 
>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ad
>>>>>>ob
>>>>>> 
>>>>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d5
>>>>>>81
>>>>>> 
>>>>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655766718355933
>>>>>>7&
>>>>>> 
>>>>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C
>>>>>>1b
>>>>>> eda9d1dc67
>>>>>> 
>>>>>> 
>>>>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636
>>>>>>55
>>>>>> 58
>>>>>> 
>>>>>> 
>>>>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&re
>>>>>>se
>>>>>> rv
>>>>>> ed=0>*
>>> 
>> 
>


Re: TypeNames vs ClassName

Posted by Harbs <ha...@gmail.com>.
> On Mar 5, 2018, at 2:18 AM, Alex Harui <ah...@adobe.com.INVALID> wrote:
> 
> Why are there so many empty strings and why do the cost so much?  Should
> we reference a single global empty string?

If you mean in XML, I eliminated initializing *everything* in XML unless needed and I saw a drastic reduction in use of memory. I also reuse Names which likewise reduced a lot of memory usage.

In this case, it’s necessary to initialize the strings or add checking code.

> I don't think I follow why just-in-case code is less than not-just-in-case
> code.  I don't think I've ever really seen that.  Can you provide more
> detail?

There *is no* "just in case" code here. We *need* to add one of three things to the MDL Button class and there’s trade-offs between all three.

1. Empty strings with string concatenation
2. An array to hold the strings
3. A class which constructs the array and fills it as needed.

#1 adds the most code and IMO overhead to the MDL Button class
#2 initializes an array or has to add a getter which lazy initializes the array.
#3 has an initially empty object which lazy initializes an array and populates it as needed.

#2 and #3 are roughly equivalent in terms of object initialization. There’s not much difference between initializing and object or an array in JS.

#2 puts the “add”, “remove” and “compute” code inside the Button class, while #3 moves it out into its own class which could be reused in other situations.

Moving it into a class does add a bit of code inherent to classes in Royale, but I maintain that it’s minimal, and the value of being able to reuse it at no extra cost makes it justifiable.

It is probably possible that we can have a package level function which returns an IStringList which would in fact be a javascript object/function which has the methods built in at no extra code cost, but that feels a bit hacky...

Harbs

* In truth there is a bit of just in case code in the CSSClassList class. There is range checking in the add method which could probably be removed. The range checking in the remove method is probably needed because we’re not enforcing initialization of booleans.

> 
> -Alex
> 
> On 3/4/18, 5:24 AM, "Harbs" <ha...@gmail.com> wrote:
> 
>> 
>>> On Mar 2, 2018, at 6:46 PM, Alex Harui <ah...@adobe.com.INVALID> wrote:
>>> 
>>> Again, the principles of PAYG are that there is as little Just-in-case
>>> code as possible.  AIUI, every MDL user will be downloading and
>>> initializing the ClassList prototype just-in-case.  This is not true of
>>> Strings.  It isn't just the cost of instantiation.  There are download
>>> and
>>> class initialization costs.
>> 
>> Not every MDL user. Only users of Button (and possibly Card). The final
>> minimized (non-gzipped) size of the class is 492 bytes. I’m actually not
>> sure why it’s not even smaller. I’m getting odd code which looks like
>> this: 
>> AT.prototype.add=AT.prototype.add;AT.prototype.remove=AT.prototype.remove;
>> I’m not sure why goog is outputting this.
>> 
>> While there are download costs, about half of those costs are offset by
>> less string initialization and concatenation code in Button. The more
>> classes which use the class will offset the cost of the class even
>> further.
>> 
>>> Array operations are not cheap in Flash, not
>>> sure about JS.
>> 
>> In JS, the array operations in use are about the same as the string
>> operations. In fact, it’s going to be cheaper and use less RAM if not all
>> the properties are used.
>> 
>> So, it’s a toss between a slightly higher download size which gets
>> amortized the more it’s used vs memory resources. I’m not sure why you’re
>> considering it more PAYG to avoid the use of the class.
>> 
>> As a data point: I found that empty strings in XML classes added many MB
>> of RAM usage when XML was used heavily in my app. While I doubt someone
>> will be using thousands of MDL Buttons, RAM from empty strings are
>> sometimes worthy of consideration.
>> 
>> The “costs” one way or the other here is pretty minimal no matter which
>> way we go.
>> 
>>> There may be other space-delimited lists in world and having a generic
>>> top-level function "addToSpaceDelimitedList" and
>>> "removeFromSpaceDelimitedList" would be opt-in by the users who choose
>>> to
>>> manipulate their classNames with these helper functions.  It does not
>>> make
>>> sense to me to bake use of these functions into MDL.  The only portion
>>> of
>>> the final classname that needs manipulation like this is the className
>>> property itself, not the attribute pieces or typenames.  Also, with
>>> separate will named utility functions, folks could use these functions
>>> if
>>> they run into other space delimited lists.
>> 
>> I’m not sure what you mean here. The class can be used in any context. If
>> there are other contexts, it might make sense to rename the class. Are
>> you referring to arrays or strings? I’m pretty sure we’re going to come
>> up with other uses for passing around class lists in a way that make this
>> class useful.
>> 
>> Harbs
>> 
>>> My 2 cents,
>>> -Alex
>>> 
>>> On 3/2/18, 1:36 AM, "Harbs" <harbs.lists@gmail.com
>>> <ma...@gmail.com>> wrote:
>>> 
>>>> I do agree that this is pretty low on the list of priorities. I did not
>>>> have a head to work on anything “serious” and the class lists was a
>>>> nice
>>>> distraction for me. I’m certainly fine with however Piotr handles
>>>> this. I
>>>> would like to point out a few things:
>>>> 
>>>> 1. Object instantiation is pretty cheap in JS. A CSSClassList object is
>>>> no heavier than an empty String. 8 empty strings use more memory than a
>>>> single CSSClassList.
>>>> 2. Array.join() is about the same computational-wise as string
>>>> concatenation.
>>>> 3. The “list” is not being added anywhere the empty strings would not
>>>> be
>>>> added, so it’s no less PAYG than strings.
>>>> 4. An instantiated class such as this would fit better in case we need
>>>> to
>>>> play with class lists in beads because the CSSClassList object could be
>>>> passed around and modified by different classes without exposing
>>>> private
>>>> variables and/or strands and beads needing to know about each other. I
>>>> don’t think static utility classes are any less PAYG in this case.
>>>> 
>>>> Thanks,
>>>> Harbs
>>>> 
>>>>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com>
>>>>> wrote:
>>>>> 
>>>>> Hi Harbs,
>>>>> 
>>>>> As much as I like Array approach I took Alex's words more serious that
>>>>> having an Array in the game here could be more heavier than String
>>>>> concatenation. It's earlier in the discussion.
>>>>> 
>>>>> Piotr
>>>>> 
>>>>> 
>>>>> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>>>> 
>>>>>> Very nice, but IMO, this is over-engineering.  We are talking about a
>>>>>> space-delimited list where some portion of it is considered "fixed"
>>>>>> another portion is user-settable and another portion comes from other
>>>>>> attributes.  Some generic StringUtils or ListUtils might be more
>>>>>> PAYG,
>>>>>> especially if they are opt-in and just used to manage the
>>>>>> user-settable
>>>>>> portion.  Think of it this way:  Every MDL app needs to carry around
>>>>>> ClassList even if they never change the classname.  I don't care too
>>>>>> much
>>>>>> since it is in MDL and not in the core, so keep it if you want to,
>>>>>> but
>>>>>> I
>>>>>> can think of lots of other tasks we should be working on than
>>>>>> creating
>>>>>> cool classes to manage a list of strings.
>>>>>> 
>>>>>> My 2 cents,
>>>>>> -Alex
>>>>>> 
>>>>>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>> 
>>>>>>> What do you think of the CSSClassList class I just committed?
>>>>>>> 
>>>>>>> I *think* that makes the pattern more recognizable and probably is
>>>>>>> less
>>>>>>> heavy if more than one class can be used.
>>>>>>> 
>>>>>>> Harbs
>>>>>>> 
>>>>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki
>>>>>>>> <pi...@gmail.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Harbs, Alex,
>>>>>>>> 
>>>>>>>> I just pushed implementation of computeFinalClassNames to
>>>>>>>> branch feature/type_names_class_name_issue124. You can review
>>>>>>>> implementation in this commit [1] and example of usage in Card and
>>>>>>>> Button.
>>>>>>>> 
>>>>>>>> I have tested with Harbs example [3] and with Card by changing
>>>>>>>> orders.
>>>>>>>> It's
>>>>>>>> working.
>>>>>>>> 
>>>>>>>> [1]
>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>> 7f
>>>>>>>> cf
>>>>>> 6
>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>> 7C636555451956879397&sdata
>>>>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>>>>>> [2]
>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>> 7f
>>>>>>>> cf
>>>>>> 6
>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>> 7C636555451956879397&sdata
>>>>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>>>>>> [3]
>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>> 7f
>>>>>>>> cf
>>>>>> 6
>>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>>> 7C636555451956879397&sdata
>>>>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>>>>>> 
>>>>>>>> Waiting for your review.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Piotr
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki
>>>>>>>> <pi...@gmail.com>:
>>>>>>>> 
>>>>>>>>> Let me play with implementation of that function. It seems to me
>>>>>>>>> that
>>>>>>>>> will
>>>>>>>>> be much cleaner than current solution.
>>>>>>>>> 
>>>>>>>>> If user actually wanted to do anythin with className - let the
>>>>>>>>> overriding
>>>>>>>>> speaks.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> OK. I think that will work for DML components, but what if
>>>>>>>>>>> there’s a
>>>>>>>>>>> bead
>>>>>>>>>>> which needs to add class names? What would be the “right” way to
>>>>>>>>>>> do
>>>>>>>>>>> that?
>>>>>>>>>>> A bead cannot override the function on the strand.
>>>>>>>>>> 
>>>>>>>>>> Do we have beads that manipulate className?
>>>>>>>>>> 
>>>>>>>>>> IMO, the principle behind how to handle that is knowing whether
>>>>>>>>>> you
>>>>>>>>>> are
>>>>>>>>>> sharing something or not.  There may not be one right way to
>>>>>>>>>> handle
>>>>>>>>>> it,
>>>>>>>>>> but if I had to handle it, I would have the bead set something in
>>>>>>>>>> the
>>>>>>>>>> model or presentation model of the component.  And the component
>>>>>>>>>> would
>>>>>>>>>> override computeFinalClassNames to take that into account.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Although having just written that, maybe this
>>>>>>>>>> computeFinalClassNames
>>>>>>>>>> should be in the view instead of on the base class so it is
>>>>>>>>>> replaceable
>>>>>>>>>> instead of overridable.
>>>>>>>>>> 
>>>>>>>>>> Thoughts?
>>>>>>>>>> -Alex
>>>>>>>>>>> 
>>>>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui
>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate
>>>>>>>>>>>> the
>>>>>>>>>>>> UIBase.className however they see fit.  They can assign it a
>>>>>>>>>>>> whole
>>>>>>>>>>>> new
>>>>>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>>>>>> element.className
>>>>>>>>>>>> is computed from typeNames and className by default, and MDL
>>>>>>>>>>>> would
>>>>>>>>>>>> override it to factor in fab, raised, colored into the
>>>>>>>>>>>> computing
>>>>>>>>>>>> of
>>>>>>>>>>>> the
>>>>>>>>>>>> final classnames.
>>>>>>>>>>>> 
>>>>>>>>>>>> I would prefer that we don't make requirements on users as to
>>>>>>>>>>>> what
>>>>>>>>>>>> they
>>>>>>>>>>>> can or can't do with the className property, like requiring
>>>>>>>>>>>> them
>>>>>>>>>>>> to
>>>>>>>>>>>> use
>>>>>>>>>>>> addClassName/removeClassNames.  MXML and States might set
>>>>>>>>>>>> className,
>>>>>>>>>> as
>>>>>>>>>>>> could any other AS logic.  I think folks may even be used to
>>>>>>>>>>>> setting
>>>>>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>>>>>> "variable"
>>>>>>>>>>>> part and having computeFinalClassNames be the way the "fixed"
>>>>>>>>>>>> part
>>>>>>>>>>>> is
>>>>>>>>>>>> handled makes sense to me.
>>>>>>>>>>>> 
>>>>>>>>>>>> Of course, I could be wrong...
>>>>>>>>>>>> -Alex
>>>>>>>>>>>> 
>>>>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to
>>>>>>>>>>>>> the
>>>>>>>>>>>>> class
>>>>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>>>>>> 2. The client might subsequently set the className to
>>>>>>>>>>>>> something
>>>>>>>>>>>>> else.
>>>>>>>>>>>>> 3. When the component sets the “pieces” first and the client
>>>>>>>>>>>>> sets
>>>>>>>>>>>>> the
>>>>>>>>>>>>> className later, the client will overwrite these “pieces”
>>>>>>>>>>>>> which
>>>>>>>>>>>>> were
>>>>>>>>>>>>> added by the component.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> My suggestion to have addClassName() and removeClassName() was
>>>>>>>>>>>>> to
>>>>>>>>>>>>> have
>>>>>>>>>>>>> a
>>>>>>>>>>>>> “safe” way to add class names which would get computed
>>>>>>>>>>>>> together
>>>>>>>>>>>>> with
>>>>>>>>>>>>> the
>>>>>>>>>>>>> className when the className is replaced.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>>>>>> className
>>>>>>>>>>>>> property. If that’s overwritten by a client, the logic falls
>>>>>>>>>>>>> apart.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>>>>>> component
>>>>>>>>>>>>> and className which is set outside the component is not really
>>>>>>>>>>>>> enough.
>>>>>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Harbs
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
>>>>>>>>>>>>>> <aharui@adobe.com.INVALID
>>>>>>> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could
>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>> though.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>>>>>> would
>>>>>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className
>>>>>>>>>>>>>> is a
>>>>>>>>>> mix
>>>>>>>>>>>>>> of
>>>>>>>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>>>>>>> thought
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>> "fixed" and the space-delimited list of names in className
>>>>>>>>>>>>>> are
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> ones
>>>>>>>>>>>>>> the user wants to manipulate in their code.  So, I would
>>>>>>>>>>>>>> expect
>>>>>>>>>>>>>> them
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> write:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
>>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> myComponent.className += value;
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> If you call
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>>>>>> If (c != -1)
>>>>>>>>>>>>>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>>>>>> Else
>>>>>>>>>>>>>> {
>>>>>>>>>>>>>> c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>>>>> if (c != -1)
>>>>>>>>>>>>>>  s = s.substr(0, c);  // remove last item
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>> myComponent.className = s;
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>>>>>> piotrzarzycki21@gmail.com
>>>>>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Ok Understand, but do you agree that
>>>>>>>>>>>>>>>>> computeFinalClassNames -
>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>>>>>>> UIBase
>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL
>>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>>> needed
>>>>>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I think that in the shadow setter, it would change
>>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to
>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
>>>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where
>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>>>>>>>>>>>>>>>>>>> handle
>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>>>>>> :
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I think am I not communicating the principles
>>>>>>>>>>>>>>>>>>>> effectively.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not
>>>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these
>>>>>>>>>>>>>>>>>>>> methods.
>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need
>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>>>>>> computation
>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.
>>>>>>>>>>>>>>>>>>>> Then I
>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated
>>>>>>>>>>>>>>>>>>>> GIF.
>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the
>>>>>>>>>>>>>>>>>>>> list
>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true
>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>>>>>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.
>>>>>>>>>>>>>>>>>>>> That is
>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>>>>>> passing
>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the
>>>>>>>>>>>>>>>>>>>> checks
>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there
>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG
>>>>>>>>>>>>>>>>>>>> flag
>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded
>>>>>>>>>>>>>>>>>>>>> GIF
>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field
>>>>>>>>>>>>>>>>>>>>> which I
>>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className,
>>>>>>>>>>>>>>>>>>>>> than
>>>>>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to
>>>>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3
>>>>>>>>>>>>>>>>>>>>> D&
>>>>>>>>>> reserve
>>>>>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be
>>>>>>>>>>>>>>>>>>>>>> better
>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting
>>>>>>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built
>>>>>>>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>> up
>>>>>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I
>>>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
>>>>>>>>>>>>>>>>>>>>>>> way:
>>>>>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className
>>>>>>>>>>>>>>>>>>>>>>> =
>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>>>>>>>>>>>>>>>>>>>>>>> Waiting
>>>>>>>>>> for
>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding
>>>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>>> three
>>>>>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and
>>>>>>>>>>>>>>>>>>>>>>> added on
>>>>>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>>> om
>>>>>> %
>>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>>> om
>>>>>> %
>>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>> 2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>> e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY
>>>>>>>>>>>>>>>>> sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>> 2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>> e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY
>>>>>>>>>>>>>>>>> sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A% 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>> A%>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>> i%
>>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>> 30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>> hf
>>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>> 46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>> %7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>> 5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>> 508d57fcf
>>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>> %2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>> 96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>> decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>> 6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> 
>>>>>>>> Piotr Zarzycki
>>>>>>>> 
>>>>>>>> Patreon:
>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=>
>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>> reon.com 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo
>>>>>>>> n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d
>>>>>>>> 581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835
>>>>>>>> 59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser
>>>>>>>> ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a
>>>>>>>> dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091
>>>>>>>> 08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671
>>>>>>>> 83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese
>>>>>>>> rved=0>
>>>>>> %7C9ba2ae2d1a6e
>>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>>> cee1%7C0%7C0%7C6365554
>>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>>> =0
>>>>>>>> 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=>
>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>> reon.com 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo
>>>>>>>> n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d
>>>>>>>> 581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835
>>>>>>>> 59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser
>>>>>>>> ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a
>>>>>>>> dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091
>>>>>>>> 08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671
>>>>>>>> 83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese
>>>>>>>> rved=0>
>>>>>> %7C9ba2ae2d1a6e
>>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>>> cee1%7C0%7C0%7C6365554
>>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>>> =0>*
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> 
>>>>> Piotr Zarzycki
>>>>> 
>>>>> Patreon: 
>>>>> 
>>>>> *https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>> at 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>> at>
>>>>> reon.com 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c
>>>>> om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35
>>>>> c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda
>>>>> ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio
>>>>> trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob
>>>>> e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581
>>>>> d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&
>>>>> sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b
>>>>> eda9d1dc67
>>>>> 
>>>>> 430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655
>>>>> 58
>>>>> 
>>>>> 01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese
>>>>> rv
>>>>> ed=0
>>>>> 
>>>>> 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>> at 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>> at>
>>>>> reon.com 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c
>>>>> om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35
>>>>> c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda
>>>>> ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio
>>>>> trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob
>>>>> e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581
>>>>> d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&
>>>>> sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b
>>>>> eda9d1dc67
>>>>> 
>>>>> 430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655
>>>>> 58
>>>>> 
>>>>> 01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese
>>>>> rv
>>>>> ed=0>*
>> 
> 


Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Why are there so many empty strings and why do the cost so much?  Should
we reference a single global empty string?

I don't think I follow why just-in-case code is less than not-just-in-case
code.  I don't think I've ever really seen that.  Can you provide more
detail?

-Alex

On 3/4/18, 5:24 AM, "Harbs" <ha...@gmail.com> wrote:

>
>> On Mar 2, 2018, at 6:46 PM, Alex Harui <ah...@adobe.com.INVALID> wrote:
>> 
>> Again, the principles of PAYG are that there is as little Just-in-case
>> code as possible.  AIUI, every MDL user will be downloading and
>> initializing the ClassList prototype just-in-case.  This is not true of
>> Strings.  It isn't just the cost of instantiation.  There are download
>>and
>> class initialization costs.
>
>Not every MDL user. Only users of Button (and possibly Card). The final
>minimized (non-gzipped) size of the class is 492 bytes. I’m actually not
>sure why it’s not even smaller. I’m getting odd code which looks like
>this: 
>AT.prototype.add=AT.prototype.add;AT.prototype.remove=AT.prototype.remove;
> I’m not sure why goog is outputting this.
>
>While there are download costs, about half of those costs are offset by
>less string initialization and concatenation code in Button. The more
>classes which use the class will offset the cost of the class even
>further.
>
>>  Array operations are not cheap in Flash, not
>> sure about JS.
>
>In JS, the array operations in use are about the same as the string
>operations. In fact, it’s going to be cheaper and use less RAM if not all
>the properties are used.
>
>So, it’s a toss between a slightly higher download size which gets
>amortized the more it’s used vs memory resources. I’m not sure why you’re
>considering it more PAYG to avoid the use of the class.
>
>As a data point: I found that empty strings in XML classes added many MB
>of RAM usage when XML was used heavily in my app. While I doubt someone
>will be using thousands of MDL Buttons, RAM from empty strings are
>sometimes worthy of consideration.
>
>The “costs” one way or the other here is pretty minimal no matter which
>way we go.
>
>> There may be other space-delimited lists in world and having a generic
>> top-level function "addToSpaceDelimitedList" and
>> "removeFromSpaceDelimitedList" would be opt-in by the users who choose
>>to
>> manipulate their classNames with these helper functions.  It does not
>>make
>> sense to me to bake use of these functions into MDL.  The only portion
>>of
>> the final classname that needs manipulation like this is the className
>> property itself, not the attribute pieces or typenames.  Also, with
>> separate will named utility functions, folks could use these functions
>>if
>> they run into other space delimited lists.
>
>I’m not sure what you mean here. The class can be used in any context. If
>there are other contexts, it might make sense to rename the class. Are
>you referring to arrays or strings? I’m pretty sure we’re going to come
>up with other uses for passing around class lists in a way that make this
>class useful.
>
>Harbs
>
>> My 2 cents,
>> -Alex
>> 
>> On 3/2/18, 1:36 AM, "Harbs" <harbs.lists@gmail.com
>><ma...@gmail.com>> wrote:
>> 
>>> I do agree that this is pretty low on the list of priorities. I did not
>>> have a head to work on anything “serious” and the class lists was a
>>>nice
>>> distraction for me. I’m certainly fine with however Piotr handles
>>>this. I
>>> would like to point out a few things:
>>> 
>>> 1. Object instantiation is pretty cheap in JS. A CSSClassList object is
>>> no heavier than an empty String. 8 empty strings use more memory than a
>>> single CSSClassList.
>>> 2. Array.join() is about the same computational-wise as string
>>> concatenation.
>>> 3. The “list” is not being added anywhere the empty strings would not
>>>be
>>> added, so it’s no less PAYG than strings.
>>> 4. An instantiated class such as this would fit better in case we need
>>>to
>>> play with class lists in beads because the CSSClassList object could be
>>> passed around and modified by different classes without exposing
>>>private
>>> variables and/or strands and beads needing to know about each other. I
>>> don’t think static utility classes are any less PAYG in this case.
>>> 
>>> Thanks,
>>> Harbs
>>> 
>>>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com>
>>>> wrote:
>>>> 
>>>> Hi Harbs,
>>>> 
>>>> As much as I like Array approach I took Alex's words more serious that
>>>> having an Array in the game here could be more heavier than String
>>>> concatenation. It's earlier in the discussion.
>>>> 
>>>> Piotr
>>>> 
>>>> 
>>>> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>>> 
>>>>> Very nice, but IMO, this is over-engineering.  We are talking about a
>>>>> space-delimited list where some portion of it is considered "fixed"
>>>>> another portion is user-settable and another portion comes from other
>>>>> attributes.  Some generic StringUtils or ListUtils might be more
>>>>>PAYG,
>>>>> especially if they are opt-in and just used to manage the
>>>>>user-settable
>>>>> portion.  Think of it this way:  Every MDL app needs to carry around
>>>>> ClassList even if they never change the classname.  I don't care too
>>>>> much
>>>>> since it is in MDL and not in the core, so keep it if you want to,
>>>>>but
>>>>> I
>>>>> can think of lots of other tasks we should be working on than
>>>>>creating
>>>>> cool classes to manage a list of strings.
>>>>> 
>>>>> My 2 cents,
>>>>> -Alex
>>>>> 
>>>>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>> 
>>>>>> What do you think of the CSSClassList class I just committed?
>>>>>> 
>>>>>> I *think* that makes the pattern more recognizable and probably is
>>>>>> less
>>>>>> heavy if more than one class can be used.
>>>>>> 
>>>>>> Harbs
>>>>>> 
>>>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki
>>>>>>> <pi...@gmail.com>
>>>>>>> wrote:
>>>>>>> 
>>>>>>> Harbs, Alex,
>>>>>>> 
>>>>>>> I just pushed implementation of computeFinalClassNames to
>>>>>>> branch feature/type_names_class_name_issue124. You can review
>>>>>>> implementation in this commit [1] and example of usage in Card and
>>>>>>> Button.
>>>>>>> 
>>>>>>> I have tested with Harbs example [3] and with Card by changing
>>>>>>> orders.
>>>>>>> It's
>>>>>>> working.
>>>>>>> 
>>>>>>> [1]
>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>> 
>>>>>>> 
>>>>>>>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>7f
>>>>>>> cf
>>>>> 6
>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>> 7C636555451956879397&sdata
>>>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>>>>> [2]
>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>> 
>>>>>>> 
>>>>>>>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>7f
>>>>>>> cf
>>>>> 6
>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>> 7C636555451956879397&sdata
>>>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>>>>> [3]
>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>> http%3A%2F%2Fbit.ly%2F
>>>>>>> 
>>>>>>> 
>>>>>>>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5
>>>>>>>7f
>>>>>>> cf
>>>>> 6
>>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>>> 7C636555451956879397&sdata
>>>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>>>>> 
>>>>>>> Waiting for your review.
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Piotr
>>>>>>> 
>>>>>>> 
>>>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki
>>>>>>> <pi...@gmail.com>:
>>>>>>> 
>>>>>>>> Let me play with implementation of that function. It seems to me
>>>>>>>> that
>>>>>>>> will
>>>>>>>> be much cleaner than current solution.
>>>>>>>> 
>>>>>>>> If user actually wanted to do anythin with className - let the
>>>>>>>> overriding
>>>>>>>> speaks.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> OK. I think that will work for DML components, but what if
>>>>>>>>>> there’s a
>>>>>>>>>> bead
>>>>>>>>>> which needs to add class names? What would be the “right” way to
>>>>>>>>>> do
>>>>>>>>>> that?
>>>>>>>>>> A bead cannot override the function on the strand.
>>>>>>>>> 
>>>>>>>>> Do we have beads that manipulate className?
>>>>>>>>> 
>>>>>>>>> IMO, the principle behind how to handle that is knowing whether
>>>>>>>>>you
>>>>>>>>> are
>>>>>>>>> sharing something or not.  There may not be one right way to
>>>>>>>>>handle
>>>>>>>>> it,
>>>>>>>>> but if I had to handle it, I would have the bead set something in
>>>>>>>>> the
>>>>>>>>> model or presentation model of the component.  And the component
>>>>>>>>> would
>>>>>>>>> override computeFinalClassNames to take that into account.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Although having just written that, maybe this
>>>>>>>>> computeFinalClassNames
>>>>>>>>> should be in the view instead of on the base class so it is
>>>>>>>>> replaceable
>>>>>>>>> instead of overridable.
>>>>>>>>> 
>>>>>>>>> Thoughts?
>>>>>>>>> -Alex
>>>>>>>>>> 
>>>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui
>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate
>>>>>>>>>>>the
>>>>>>>>>>> UIBase.className however they see fit.  They can assign it a
>>>>>>>>>>> whole
>>>>>>>>>>> new
>>>>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>>>>> element.className
>>>>>>>>>>> is computed from typeNames and className by default, and MDL
>>>>>>>>>>> would
>>>>>>>>>>> override it to factor in fab, raised, colored into the
>>>>>>>>>>>computing
>>>>>>>>>>> of
>>>>>>>>>>> the
>>>>>>>>>>> final classnames.
>>>>>>>>>>> 
>>>>>>>>>>> I would prefer that we don't make requirements on users as to
>>>>>>>>>>> what
>>>>>>>>>>> they
>>>>>>>>>>> can or can't do with the className property, like requiring
>>>>>>>>>>>them
>>>>>>>>>>> to
>>>>>>>>>>> use
>>>>>>>>>>> addClassName/removeClassNames.  MXML and States might set
>>>>>>>>>>> className,
>>>>>>>>> as
>>>>>>>>>>> could any other AS logic.  I think folks may even be used to
>>>>>>>>>>> setting
>>>>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>>>>> "variable"
>>>>>>>>>>> part and having computeFinalClassNames be the way the "fixed"
>>>>>>>>>>> part
>>>>>>>>>>> is
>>>>>>>>>>> handled makes sense to me.
>>>>>>>>>>> 
>>>>>>>>>>> Of course, I could be wrong...
>>>>>>>>>>> -Alex
>>>>>>>>>>> 
>>>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>>>>> 
>>>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to
>>>>>>>>>>>> the
>>>>>>>>>>>> class
>>>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>>>>> 2. The client might subsequently set the className to
>>>>>>>>>>>>something
>>>>>>>>>>>> else.
>>>>>>>>>>>> 3. When the component sets the “pieces” first and the client
>>>>>>>>>>>> sets
>>>>>>>>>>>> the
>>>>>>>>>>>> className later, the client will overwrite these “pieces”
>>>>>>>>>>>>which
>>>>>>>>>>>> were
>>>>>>>>>>>> added by the component.
>>>>>>>>>>>> 
>>>>>>>>>>>> My suggestion to have addClassName() and removeClassName() was
>>>>>>>>>>>> to
>>>>>>>>>>>> have
>>>>>>>>>>>> a
>>>>>>>>>>>> “safe” way to add class names which would get computed
>>>>>>>>>>>>together
>>>>>>>>>>>> with
>>>>>>>>>>>> the
>>>>>>>>>>>> className when the className is replaced.
>>>>>>>>>>>> 
>>>>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>>>>> className
>>>>>>>>>>>> property. If that’s overwritten by a client, the logic falls
>>>>>>>>>>>> apart.
>>>>>>>>>>>> 
>>>>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>>>>> component
>>>>>>>>>>>> and className which is set outside the component is not really
>>>>>>>>>>>> enough.
>>>>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>>>>> 
>>>>>>>>>>>> Harbs
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
>>>>>>>>>>>>> <aharui@adobe.com.INVALID
>>>>>> 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could
>>>>>>>>>>>>>> call
>>>>>>>>>>>>>> it
>>>>>>>>>>>>>> though.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>>>>> would
>>>>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>>>>> 
>>>>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className
>>>>>>>>>>>>> is a
>>>>>>>>> mix
>>>>>>>>>>>>> of
>>>>>>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>>>>>> thought
>>>>>>>>>>>>> to
>>>>>>>>>>>>> be
>>>>>>>>>>>>> "fixed" and the space-delimited list of names in className
>>>>>>>>>>>>>are
>>>>>>>>>>>>> the
>>>>>>>>>>>>> ones
>>>>>>>>>>>>> the user wants to manipulate in their code.  So, I would
>>>>>>>>>>>>>expect
>>>>>>>>>>>>> them
>>>>>>>>>>>>> to
>>>>>>>>>>>>> write:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> myComponent.className += value;
>>>>>>>>>>>>> 
>>>>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>>>>> 
>>>>>>>>>>>>> If you call
>>>>>>>>>>>>> 
>>>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>>> 
>>>>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>>>>> If (c != -1)
>>>>>>>>>>>>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>>>>> Else
>>>>>>>>>>>>> {
>>>>>>>>>>>>> c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>>>> if (c != -1)
>>>>>>>>>>>>>   s = s.substr(0, c);  // remove last item
>>>>>>>>>>>>> }
>>>>>>>>>>>>> myComponent.className = s;
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>>>>> piotrzarzycki21@gmail.com
>>>>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Ok Understand, but do you agree that
>>>>>>>>>>>>>>>> computeFinalClassNames -
>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>>>>>> UIBase
>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL
>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>> needed
>>>>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I think that in the shadow setter, it would change
>>>>>>>>>>>>>>>>>_shadow
>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>>>>> 
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to
>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
>>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where
>>>>>>>>>>>>>>>>>> you
>>>>>>>>> have
>>>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>>>>>>>>>>>>>>>>>> handle
>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>>>>> :
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I think am I not communicating the principles
>>>>>>>>>>>>>>>>>>> effectively.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not
>>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these
>>>>>>>>>>>>>>>>>>> methods.
>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need
>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>>>>> computation
>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.
>>>>>>>>>>>>>>>>>>>Then I
>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated
>>>>>>>>>>>>>>>>>>>GIF.
>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the
>>>>>>>>>>>>>>>>>>>list
>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true
>>>>>>>>>>>>>>>>>>>and
>>>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>>>>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.
>>>>>>>>>>>>>>>>>>> That is
>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>>>>> passing
>>>>>>>>> in
>>>>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the
>>>>>>>>>>>>>>>>>>>checks
>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there
>>>>>>>>>>>>>>>>>>>are
>>>>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG
>>>>>>>>>>>>>>>>>>>flag
>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded
>>>>>>>>>>>>>>>>>>>> GIF
>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field
>>>>>>>>>>>>>>>>>>>>which I
>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className,
>>>>>>>>>>>>>>>>>>>> than
>>>>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to
>>>>>>>>>>>>>>>>>>>>use
>>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3
>>>>>>>>>>>>>>>>>>>>D&
>>>>>>>>> reserve
>>>>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be
>>>>>>>>>>>>>>>>>>>>> better
>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting
>>>>>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built
>>>>>>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>> up
>>>>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I
>>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
>>>>>>>>>>>>>>>>>>>>>> way:
>>>>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className
>>>>>>>>>>>>>>>>>>>>>> =
>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>>>>>>>>>>>>>>>>>>>>>> Waiting
>>>>>>>>> for
>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding
>>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>> three
>>>>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and
>>>>>>>>>>>>>>>>>>>>>> added on
>>>>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>> om
>>>>> %
>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>>> om
>>>>> %
>>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY
>>>>>>>>>>>>>>>>sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>>> eon.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652
>>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece
>>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY
>>>>>>>>>>>>>>>>sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A% 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3
>>>>>>>>>>>>>>>>A%>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu
>>>>>>>>>>>>>>>>i%
>>>>>>>>>>>>>>>> 40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674
>>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ
>>>>>>>>>>>>>>>>hf
>>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>>> e.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220
>>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1
>>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx
>>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774
>>>>>>>>>>>>>>>>508d57fcf
>>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com 
>>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A
>>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f
>>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178
>>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H
>>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%
>>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> 
>>>>>>> Piotr Zarzycki
>>>>>>> 
>>>>>>> Patreon:
>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=>
>>>>> https%3A%2F%2Fwww.pat
>>>>>>> reon.com 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo
>>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d
>>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835
>>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser
>>>>>>>ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a
>>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091
>>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671
>>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese
>>>>>>>rved=0>
>>>>> %7C9ba2ae2d1a6e
>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>> cee1%7C0%7C0%7C6365554
>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>> =0
>>>>>>> 
>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=>
>>>>> https%3A%2F%2Fwww.pat
>>>>>>> reon.com 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo
>>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d
>>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835
>>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser
>>>>>>>ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a
>>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091
>>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671
>>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese
>>>>>>>rved=0>
>>>>> %7C9ba2ae2d1a6e
>>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>>> cee1%7C0%7C0%7C6365554
>>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>>> oyfshLnt8lxqg%3D&reserved
>>>>>>> =0>*
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> 
>>>> Piotr Zarzycki
>>>> 
>>>> Patreon: 
>>>> 
>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>at 
>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>at>
>>>> reon.com 
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c
>>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35
>>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda
>>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio
>>>>trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob
>>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581
>>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&
>>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b
>>>>eda9d1dc67
>>>> 
>>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655
>>>>58
>>>> 
>>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese
>>>>rv
>>>> ed=0
>>>> 
>>>> 
>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>at 
>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p
>>>>at>
>>>> reon.com 
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c
>>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35
>>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda
>>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio
>>>>trzarzycki&data=02%7C01%7Caharui%40adobe.com 
>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob
>>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581
>>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&
>>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b
>>>>eda9d1dc67
>>>> 
>>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655
>>>>58
>>>> 
>>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese
>>>>rv
>>>> ed=0>*
>


Re: TypeNames vs ClassName

Posted by Harbs <ha...@gmail.com>.
> On Mar 2, 2018, at 6:46 PM, Alex Harui <ah...@adobe.com.INVALID> wrote:
> 
> Again, the principles of PAYG are that there is as little Just-in-case
> code as possible.  AIUI, every MDL user will be downloading and
> initializing the ClassList prototype just-in-case.  This is not true of
> Strings.  It isn't just the cost of instantiation.  There are download and
> class initialization costs.

Not every MDL user. Only users of Button (and possibly Card). The final minimized (non-gzipped) size of the class is 492 bytes. I’m actually not sure why it’s not even smaller. I’m getting odd code which looks like this: AT.prototype.add=AT.prototype.add;AT.prototype.remove=AT.prototype.remove; I’m not sure why goog is outputting this.

While there are download costs, about half of those costs are offset by less string initialization and concatenation code in Button. The more classes which use the class will offset the cost of the class even further.

>  Array operations are not cheap in Flash, not
> sure about JS.

In JS, the array operations in use are about the same as the string operations. In fact, it’s going to be cheaper and use less RAM if not all the properties are used.

So, it’s a toss between a slightly higher download size which gets amortized the more it’s used vs memory resources. I’m not sure why you’re considering it more PAYG to avoid the use of the class.

As a data point: I found that empty strings in XML classes added many MB of RAM usage when XML was used heavily in my app. While I doubt someone will be using thousands of MDL Buttons, RAM from empty strings are sometimes worthy of consideration.

The “costs” one way or the other here is pretty minimal no matter which way we go.

> There may be other space-delimited lists in world and having a generic
> top-level function "addToSpaceDelimitedList" and
> "removeFromSpaceDelimitedList" would be opt-in by the users who choose to
> manipulate their classNames with these helper functions.  It does not make
> sense to me to bake use of these functions into MDL.  The only portion of
> the final classname that needs manipulation like this is the className
> property itself, not the attribute pieces or typenames.  Also, with
> separate will named utility functions, folks could use these functions if
> they run into other space delimited lists.

I’m not sure what you mean here. The class can be used in any context. If there are other contexts, it might make sense to rename the class. Are you referring to arrays or strings? I’m pretty sure we’re going to come up with other uses for passing around class lists in a way that make this class useful.

Harbs

> My 2 cents,
> -Alex
> 
> On 3/2/18, 1:36 AM, "Harbs" <harbs.lists@gmail.com <ma...@gmail.com>> wrote:
> 
>> I do agree that this is pretty low on the list of priorities. I did not
>> have a head to work on anything “serious” and the class lists was a nice
>> distraction for me. I’m certainly fine with however Piotr handles this. I
>> would like to point out a few things:
>> 
>> 1. Object instantiation is pretty cheap in JS. A CSSClassList object is
>> no heavier than an empty String. 8 empty strings use more memory than a
>> single CSSClassList.
>> 2. Array.join() is about the same computational-wise as string
>> concatenation.
>> 3. The “list” is not being added anywhere the empty strings would not be
>> added, so it’s no less PAYG than strings.
>> 4. An instantiated class such as this would fit better in case we need to
>> play with class lists in beads because the CSSClassList object could be
>> passed around and modified by different classes without exposing private
>> variables and/or strands and beads needing to know about each other. I
>> don’t think static utility classes are any less PAYG in this case.
>> 
>> Thanks,
>> Harbs
>> 
>>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com>
>>> wrote:
>>> 
>>> Hi Harbs,
>>> 
>>> As much as I like Array approach I took Alex's words more serious that
>>> having an Array in the game here could be more heavier than String
>>> concatenation. It's earlier in the discussion.
>>> 
>>> Piotr
>>> 
>>> 
>>> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>> 
>>>> Very nice, but IMO, this is over-engineering.  We are talking about a
>>>> space-delimited list where some portion of it is considered "fixed"
>>>> another portion is user-settable and another portion comes from other
>>>> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
>>>> especially if they are opt-in and just used to manage the user-settable
>>>> portion.  Think of it this way:  Every MDL app needs to carry around
>>>> ClassList even if they never change the classname.  I don't care too
>>>> much
>>>> since it is in MDL and not in the core, so keep it if you want to, but
>>>> I
>>>> can think of lots of other tasks we should be working on than creating
>>>> cool classes to manage a list of strings.
>>>> 
>>>> My 2 cents,
>>>> -Alex
>>>> 
>>>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>>> 
>>>>> What do you think of the CSSClassList class I just committed?
>>>>> 
>>>>> I *think* that makes the pattern more recognizable and probably is
>>>>> less
>>>>> heavy if more than one class can be used.
>>>>> 
>>>>> Harbs
>>>>> 
>>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki
>>>>>> <pi...@gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>> Harbs, Alex,
>>>>>> 
>>>>>> I just pushed implementation of computeFinalClassNames to
>>>>>> branch feature/type_names_class_name_issue124. You can review
>>>>>> implementation in this commit [1] and example of usage in Card and
>>>>>> Button.
>>>>>> 
>>>>>> I have tested with Harbs example [3] and with Card by changing
>>>>>> orders.
>>>>>> It's
>>>>>> working.
>>>>>> 
>>>>>> [1]
>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>> http%3A%2F%2Fbit.ly%2F
>>>>>> 
>>>>>> 2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>> cf
>>>> 6
>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>> 7C636555451956879397&sdata
>>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>>>> [2]
>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>> http%3A%2F%2Fbit.ly%2F
>>>>>> 
>>>>>> 2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>> cf
>>>> 6
>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>> 7C636555451956879397&sdata
>>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>>>> [3]
>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>> http%3A%2F%2Fbit.ly%2F
>>>>>> 
>>>>>> 2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>> cf
>>>> 6
>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>>> 7C636555451956879397&sdata
>>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>>>> 
>>>>>> Waiting for your review.
>>>>>> 
>>>>>> Thanks,
>>>>>> Piotr
>>>>>> 
>>>>>> 
>>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki
>>>>>> <pi...@gmail.com>:
>>>>>> 
>>>>>>> Let me play with implementation of that function. It seems to me
>>>>>>> that
>>>>>>> will
>>>>>>> be much cleaner than current solution.
>>>>>>> 
>>>>>>> If user actually wanted to do anythin with className - let the
>>>>>>> overriding
>>>>>>> speaks.
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> OK. I think that will work for DML components, but what if
>>>>>>>>> there’s a
>>>>>>>>> bead
>>>>>>>>> which needs to add class names? What would be the “right” way to
>>>>>>>>> do
>>>>>>>>> that?
>>>>>>>>> A bead cannot override the function on the strand.
>>>>>>>> 
>>>>>>>> Do we have beads that manipulate className?
>>>>>>>> 
>>>>>>>> IMO, the principle behind how to handle that is knowing whether you
>>>>>>>> are
>>>>>>>> sharing something or not.  There may not be one right way to handle
>>>>>>>> it,
>>>>>>>> but if I had to handle it, I would have the bead set something in
>>>>>>>> the
>>>>>>>> model or presentation model of the component.  And the component
>>>>>>>> would
>>>>>>>> override computeFinalClassNames to take that into account.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Although having just written that, maybe this
>>>>>>>> computeFinalClassNames
>>>>>>>> should be in the view instead of on the base class so it is
>>>>>>>> replaceable
>>>>>>>> instead of overridable.
>>>>>>>> 
>>>>>>>> Thoughts?
>>>>>>>> -Alex
>>>>>>>>> 
>>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui
>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>>>>>>>>>> UIBase.className however they see fit.  They can assign it a
>>>>>>>>>> whole
>>>>>>>>>> new
>>>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>>>> element.className
>>>>>>>>>> is computed from typeNames and className by default, and MDL
>>>>>>>>>> would
>>>>>>>>>> override it to factor in fab, raised, colored into the computing
>>>>>>>>>> of
>>>>>>>>>> the
>>>>>>>>>> final classnames.
>>>>>>>>>> 
>>>>>>>>>> I would prefer that we don't make requirements on users as to
>>>>>>>>>> what
>>>>>>>>>> they
>>>>>>>>>> can or can't do with the className property, like requiring them
>>>>>>>>>> to
>>>>>>>>>> use
>>>>>>>>>> addClassName/removeClassNames.  MXML and States might set
>>>>>>>>>> className,
>>>>>>>> as
>>>>>>>>>> could any other AS logic.  I think folks may even be used to
>>>>>>>>>> setting
>>>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>>>> "variable"
>>>>>>>>>> part and having computeFinalClassNames be the way the "fixed"
>>>>>>>>>> part
>>>>>>>>>> is
>>>>>>>>>> handled makes sense to me.
>>>>>>>>>> 
>>>>>>>>>> Of course, I could be wrong...
>>>>>>>>>> -Alex
>>>>>>>>>> 
>>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>>>> 
>>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to
>>>>>>>>>>> the
>>>>>>>>>>> class
>>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>>>> 2. The client might subsequently set the className to something
>>>>>>>>>>> else.
>>>>>>>>>>> 3. When the component sets the “pieces” first and the client
>>>>>>>>>>> sets
>>>>>>>>>>> the
>>>>>>>>>>> className later, the client will overwrite these “pieces” which
>>>>>>>>>>> were
>>>>>>>>>>> added by the component.
>>>>>>>>>>> 
>>>>>>>>>>> My suggestion to have addClassName() and removeClassName() was
>>>>>>>>>>> to
>>>>>>>>>>> have
>>>>>>>>>>> a
>>>>>>>>>>> “safe” way to add class names which would get computed together
>>>>>>>>>>> with
>>>>>>>>>>> the
>>>>>>>>>>> className when the className is replaced.
>>>>>>>>>>> 
>>>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>>>> className
>>>>>>>>>>> property. If that’s overwritten by a client, the logic falls
>>>>>>>>>>> apart.
>>>>>>>>>>> 
>>>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>>>> component
>>>>>>>>>>> and className which is set outside the component is not really
>>>>>>>>>>> enough.
>>>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>>>> 
>>>>>>>>>>> Harbs
>>>>>>>>>>> 
>>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
>>>>>>>>>>>> <aharui@adobe.com.INVALID
>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could
>>>>>>>>>>>>> call
>>>>>>>>>>>>> it
>>>>>>>>>>>>> though.
>>>>>>>>>>>> 
>>>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>>>> would
>>>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>>>> 
>>>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className
>>>>>>>>>>>> is a
>>>>>>>> mix
>>>>>>>>>>>> of
>>>>>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>>>>> thought
>>>>>>>>>>>> to
>>>>>>>>>>>> be
>>>>>>>>>>>> "fixed" and the space-delimited list of names in className are
>>>>>>>>>>>> the
>>>>>>>>>>>> ones
>>>>>>>>>>>> the user wants to manipulate in their code.  So, I would expect
>>>>>>>>>>>> them
>>>>>>>>>>>> to
>>>>>>>>>>>> write:
>>>>>>>>>>>> 
>>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>>>> 
>>>>>>>>>>>> myComponent.className += value;
>>>>>>>>>>>> 
>>>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>>>> 
>>>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>>>> 
>>>>>>>>>>>> If you call
>>>>>>>>>>>> 
>>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>>> 
>>>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>>>> 
>>>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>>>> If (c != -1)
>>>>>>>>>>>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>>>> Else
>>>>>>>>>>>> {
>>>>>>>>>>>> c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>>> if (c != -1)
>>>>>>>>>>>>   s = s.substr(0, c);  // remove last item
>>>>>>>>>>>> }
>>>>>>>>>>>> myComponent.className = s;
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>>>> 
>>>>>>>>>>>> -Alex
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>>>> piotrzarzycki21@gmail.com
>>>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Ok Understand, but do you agree that
>>>>>>>>>>>>>>> computeFinalClassNames -
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>>>>> UIBase
>>>>>>>>>>>>>> just
>>>>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL
>>>>>>>>>>>>>> where
>>>>>>>>>>>>>> needed
>>>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I think that in the shadow setter, it would change _shadow
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to
>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
>>>>>>>>>>>>>>>>> _shadow
>>>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where
>>>>>>>>>>>>>>>>> you
>>>>>>>> have
>>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>>>>>>>>>>>>>>>>> handle
>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>>>> :
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I think am I not communicating the principles
>>>>>>>>>>>>>>>>>> effectively.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not
>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these
>>>>>>>>>>>>>>>>>> methods.
>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need
>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>>>> computation
>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the list
>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
>>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>>>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.
>>>>>>>>>>>>>>>>>> That is
>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>>>> passing
>>>>>>>> in
>>>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>>>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded
>>>>>>>>>>>>>>>>>>> GIF
>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className,
>>>>>>>>>>>>>>>>>>> than
>>>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to use
>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>>>>>>>> reserve
>>>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be
>>>>>>>>>>>>>>>>>>>> better
>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting
>>>>>>>>>>>>>>>>>>>> something
>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>>>> not
>>>>>>>> in
>>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built
>>>>>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>>>> this
>>>>>>>> up
>>>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I
>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
>>>>>>>>>>>>>>>>>>>>> way:
>>>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className
>>>>>>>>>>>>>>>>>>>>> =
>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>>>>>>>>>>>>>>>>>>>>> Waiting
>>>>>>>> for
>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding
>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>> three
>>>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and
>>>>>>>>>>>>>>>>>>>>> added on
>>>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>> om
>>>> %
>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>> om
>>>> %
>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>> eon.com <http://eon.com/>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%
>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%
>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>>> eon.com <http://eon.com/>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>>> om
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%
>>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A% <https://na01.safelinks.protection.outlook.com/?url=https%3A%>
>>>>>>>>>>>>>>> 2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>> 40adobe.com <http://40adobe.com/>%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>> 438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>>> e.com <http://e.com/>%7C9ba2ae2d1a6e4fdc774508d57fcf
>>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%
>>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>>> db
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>>> da
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>> *
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> 
>>>>>> Piotr Zarzycki
>>>>>> 
>>>>>> Patreon:
>>>>>> *https://na01.safelinks.protection.outlook.com/?url= <https://na01.safelinks.protection.outlook.com/?url=>
>>>> https%3A%2F%2Fwww.pat
>>>>>> reon.com <http://reon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>
>>>> %7C9ba2ae2d1a6e
>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>> cee1%7C0%7C0%7C6365554
>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>> oyfshLnt8lxqg%3D&reserved
>>>>>> =0
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url= <https://na01.safelinks.protection.outlook.com/?url=>
>>>> https%3A%2F%2Fwww.pat
>>>>>> reon.com <http://reon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>
>>>> %7C9ba2ae2d1a6e
>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>>> cee1%7C0%7C0%7C6365554
>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>>> oyfshLnt8lxqg%3D&reserved
>>>>>> =0>*
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> -- 
>>> 
>>> Piotr Zarzycki
>>> 
>>> Patreon: 
>>> *https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat>
>>> reon.com <http://reon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%7C1beda9d1dc67
>>> 430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365558
>>> 01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&reserv
>>> ed=0
>>> 
>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat>
>>> reon.com <http://reon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com <http://40adobe.com/>%7C1beda9d1dc67
>>> 430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365558
>>> 01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&reserv
>>> ed=0>*


Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Again, the principles of PAYG are that there is as little Just-in-case
code as possible.  AIUI, every MDL user will be downloading and
initializing the ClassList prototype just-in-case.  This is not true of
Strings.  It isn't just the cost of instantiation.  There are download and
class initialization costs.  Array operations are not cheap in Flash, not
sure about JS.

There may be other space-delimited lists in world and having a generic
top-level function "addToSpaceDelimitedList" and
"removeFromSpaceDelimitedList" would be opt-in by the users who choose to
manipulate their classNames with these helper functions.  It does not make
sense to me to bake use of these functions into MDL.  The only portion of
the final classname that needs manipulation like this is the className
property itself, not the attribute pieces or typenames.  Also, with
separate will named utility functions, folks could use these functions if
they run into other space delimited lists.

My 2 cents,
-Alex

On 3/2/18, 1:36 AM, "Harbs" <ha...@gmail.com> wrote:

>I do agree that this is pretty low on the list of priorities. I did not
>have a head to work on anything “serious” and the class lists was a nice
>distraction for me. I’m certainly fine with however Piotr handles this. I
>would like to point out a few things:
>
>1. Object instantiation is pretty cheap in JS. A CSSClassList object is
>no heavier than an empty String. 8 empty strings use more memory than a
>single CSSClassList.
>2. Array.join() is about the same computational-wise as string
>concatenation.
>3. The “list” is not being added anywhere the empty strings would not be
>added, so it’s no less PAYG than strings.
>4. An instantiated class such as this would fit better in case we need to
>play with class lists in beads because the CSSClassList object could be
>passed around and modified by different classes without exposing private
>variables and/or strands and beads needing to know about each other. I
>don’t think static utility classes are any less PAYG in this case.
>
>Thanks,
>Harbs
>
>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com>
>>wrote:
>> 
>> Hi Harbs,
>> 
>> As much as I like Array approach I took Alex's words more serious that
>> having an Array in the game here could be more heavier than String
>> concatenation. It's earlier in the discussion.
>> 
>> Piotr
>> 
>> 
>> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>> 
>>> Very nice, but IMO, this is over-engineering.  We are talking about a
>>> space-delimited list where some portion of it is considered "fixed"
>>> another portion is user-settable and another portion comes from other
>>> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
>>> especially if they are opt-in and just used to manage the user-settable
>>> portion.  Think of it this way:  Every MDL app needs to carry around
>>> ClassList even if they never change the classname.  I don't care too
>>>much
>>> since it is in MDL and not in the core, so keep it if you want to, but
>>>I
>>> can think of lots of other tasks we should be working on than creating
>>> cool classes to manage a list of strings.
>>> 
>>> My 2 cents,
>>> -Alex
>>> 
>>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>>> 
>>>> What do you think of the CSSClassList class I just committed?
>>>> 
>>>> I *think* that makes the pattern more recognizable and probably is
>>>>less
>>>> heavy if more than one class can be used.
>>>> 
>>>> Harbs
>>>> 
>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki
>>>>><pi...@gmail.com>
>>>>> wrote:
>>>>> 
>>>>> Harbs, Alex,
>>>>> 
>>>>> I just pushed implementation of computeFinalClassNames to
>>>>> branch feature/type_names_class_name_issue124. You can review
>>>>> implementation in this commit [1] and example of usage in Card and
>>>>> Button.
>>>>> 
>>>>> I have tested with Harbs example [3] and with Card by changing
>>>>>orders.
>>>>> It's
>>>>> working.
>>>>> 
>>>>> [1]
>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>> http%3A%2F%2Fbit.ly%2F
>>>>> 
>>>>>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>cf
>>> 6
>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>> 7C636555451956879397&sdata
>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>>> [2]
>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>> http%3A%2F%2Fbit.ly%2F
>>>>> 
>>>>>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>cf
>>> 6
>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>> 7C636555451956879397&sdata
>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>>> [3]
>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>> http%3A%2F%2Fbit.ly%2F
>>>>> 
>>>>>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57f
>>>>>cf
>>> 6
>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>>> 7C636555451956879397&sdata
>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>>> 
>>>>> Waiting for your review.
>>>>> 
>>>>> Thanks,
>>>>> Piotr
>>>>> 
>>>>> 
>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki
>>>>><pi...@gmail.com>:
>>>>> 
>>>>>> Let me play with implementation of that function. It seems to me
>>>>>>that
>>>>>> will
>>>>>> be much cleaner than current solution.
>>>>>> 
>>>>>> If user actually wanted to do anythin with className - let the
>>>>>> overriding
>>>>>> speaks.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>>>> wrote:
>>>>>> 
>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> OK. I think that will work for DML components, but what if
>>>>>>>>there’s a
>>>>>>>> bead
>>>>>>>> which needs to add class names? What would be the “right” way to
>>>>>>>>do
>>>>>>>> that?
>>>>>>>> A bead cannot override the function on the strand.
>>>>>>> 
>>>>>>> Do we have beads that manipulate className?
>>>>>>> 
>>>>>>> IMO, the principle behind how to handle that is knowing whether you
>>>>>>> are
>>>>>>> sharing something or not.  There may not be one right way to handle
>>>>>>> it,
>>>>>>> but if I had to handle it, I would have the bead set something in
>>>>>>>the
>>>>>>> model or presentation model of the component.  And the component
>>>>>>>would
>>>>>>> override computeFinalClassNames to take that into account.
>>>>>>> 
>>>>>>> 
>>>>>>> Although having just written that, maybe this
>>>>>>>computeFinalClassNames
>>>>>>> should be in the view instead of on the base class so it is
>>>>>>> replaceable
>>>>>>> instead of overridable.
>>>>>>> 
>>>>>>> Thoughts?
>>>>>>> -Alex
>>>>>>>> 
>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui
>>>>>>>>><ah...@adobe.com.INVALID>
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>>>>>>>>> UIBase.className however they see fit.  They can assign it a
>>>>>>>>>whole
>>>>>>>>> new
>>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>>> element.className
>>>>>>>>> is computed from typeNames and className by default, and MDL
>>>>>>>>>would
>>>>>>>>> override it to factor in fab, raised, colored into the computing
>>>>>>>>>of
>>>>>>>>> the
>>>>>>>>> final classnames.
>>>>>>>>> 
>>>>>>>>> I would prefer that we don't make requirements on users as to
>>>>>>>>>what
>>>>>>>>> they
>>>>>>>>> can or can't do with the className property, like requiring them
>>>>>>>>>to
>>>>>>>>> use
>>>>>>>>> addClassName/removeClassNames.  MXML and States might set
>>>>>>>>>className,
>>>>>>> as
>>>>>>>>> could any other AS logic.  I think folks may even be used to
>>>>>>>>>setting
>>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>>> "variable"
>>>>>>>>> part and having computeFinalClassNames be the way the "fixed"
>>>>>>>>>part
>>>>>>>>> is
>>>>>>>>> handled makes sense to me.
>>>>>>>>> 
>>>>>>>>> Of course, I could be wrong...
>>>>>>>>> -Alex
>>>>>>>>> 
>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>>> 
>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to
>>>>>>>>>>the
>>>>>>>>>> class
>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>>> 2. The client might subsequently set the className to something
>>>>>>>>>> else.
>>>>>>>>>> 3. When the component sets the “pieces” first and the client
>>>>>>>>>>sets
>>>>>>>>>> the
>>>>>>>>>> className later, the client will overwrite these “pieces” which
>>>>>>>>>> were
>>>>>>>>>> added by the component.
>>>>>>>>>> 
>>>>>>>>>> My suggestion to have addClassName() and removeClassName() was
>>>>>>>>>>to
>>>>>>>>>> have
>>>>>>>>>> a
>>>>>>>>>> “safe” way to add class names which would get computed together
>>>>>>>>>> with
>>>>>>>>>> the
>>>>>>>>>> className when the className is replaced.
>>>>>>>>>> 
>>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>>> className
>>>>>>>>>> property. If that’s overwritten by a client, the logic falls
>>>>>>>>>>apart.
>>>>>>>>>> 
>>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>>> component
>>>>>>>>>> and className which is set outside the component is not really
>>>>>>>>>> enough.
>>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>>> 
>>>>>>>>>> Harbs
>>>>>>>>>> 
>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui
>>>>>>>>>>><aharui@adobe.com.INVALID
>>>> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could
>>>>>>>>>>>>call
>>>>>>>>>>>> it
>>>>>>>>>>>> though.
>>>>>>>>>>> 
>>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>>> would
>>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>>> 
>>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className
>>>>>>>>>>>is a
>>>>>>> mix
>>>>>>>>>>> of
>>>>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>>>> thought
>>>>>>>>>>> to
>>>>>>>>>>> be
>>>>>>>>>>> "fixed" and the space-delimited list of names in className are
>>>>>>>>>>>the
>>>>>>>>>>> ones
>>>>>>>>>>> the user wants to manipulate in their code.  So, I would expect
>>>>>>>>>>> them
>>>>>>>>>>> to
>>>>>>>>>>> write:
>>>>>>>>>>> 
>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent,
>>>>>>>>>>>"pinkStyles");
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>>> 
>>>>>>>>>>> myComponent.className += value;
>>>>>>>>>>> 
>>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>>> 
>>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>>> 
>>>>>>>>>>> If you call
>>>>>>>>>>> 
>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>>> "pinkStyles");
>>>>>>>>>>> 
>>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>>> 
>>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>>> If (c != -1)
>>>>>>>>>>>  s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>>> Else
>>>>>>>>>>> {
>>>>>>>>>>>  c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>>  if (c != -1)
>>>>>>>>>>>    s = s.substr(0, c);  // remove last item
>>>>>>>>>>> }
>>>>>>>>>>> myComponent.className = s;
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>>> 
>>>>>>>>>>> -Alex
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>>> piotrzarzycki21@gmail.com
>>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Ok Understand, but do you agree that
>>>>>>>>>>>>>>computeFinalClassNames -
>>>>>>>>>>>>>> is
>>>>>>>>>>>>>> something
>>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>>>> UIBase
>>>>>>>>>>>>> just
>>>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL
>>>>>>>>>>>>>where
>>>>>>>>>>>>> needed
>>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I think that in the shadow setter, it would change _shadow
>>>>>>>>>>>>>>>and
>>>>>>>>>>>>>>> call
>>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>>> 
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to
>>>>>>>>>>>>>>>>have
>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change
>>>>>>>>>>>>>>>>_shadow
>>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where
>>>>>>>>>>>>>>>>you
>>>>>>> have
>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to
>>>>>>>>>>>>>>>>handle
>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>>> :
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I think am I not communicating the principles
>>>>>>>>>>>>>>>>>effectively.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not
>>>>>>>>>>>>>>>>>be
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these
>>>>>>>>>>>>>>>>>methods.
>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need
>>>>>>>>>>>>>>>>>an
>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>>> computation
>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the list
>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all
>>>>>>>>>>>>>>>>>other
>>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.
>>>>>>>>>>>>>>>>>That is
>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>>> passing
>>>>>>> in
>>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded
>>>>>>>>>>>>>>>>>>GIF
>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className,
>>>>>>>>>>>>>>>>>>than
>>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to use
>>>>>>>>>>>>>>>>>>my
>>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>>>>>>> reserve
>>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be
>>>>>>>>>>>>>>>>>>>better
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting
>>>>>>>>>>>>>>>>>>>something
>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>>> not
>>>>>>> in
>>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built
>>>>>>>>>>>>>>>>>>>without
>>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>>> this
>>>>>>> up
>>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I
>>>>>>>>>>>>>>>>>>>>would
>>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in
>>>>>>>>>>>>>>>>>>>>_className
>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following
>>>>>>>>>>>>>>>>>>>>way:
>>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className
>>>>>>>>>>>>>>>>>>>>=
>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working.
>>>>>>>>>>>>>>>>>>>>Waiting
>>>>>>> for
>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding
>>>>>>>>>>>>>>>>>>>>all
>>>>>>> three
>>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and
>>>>>>>>>>>>>>>>>>>>added on
>>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>>> 40adobe.co
>>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>> %
>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c
>>>>>>>>>>>>>>>>>>>>om
>>> %
>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>>>>>%
>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>> eon.com
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>> om
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>> do
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>> db
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>> da
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>> tr
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>>> w.
>>>>>>>>>>>>>> pa
>>>>>>>>>>>>>> tr>
>>>>>>>>>>>>>> eon.com
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>>> .c
>>>>>>>>>>>>>> om
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>>> 59
>>>>>>>>>>>>>> 03
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>>> ta
>>>>>>>>>>>>>> =G
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>>> 2Fpiotrzar
>>>>>>>>>>>>>> zy
>>>>>>>>>>>>>> ck
>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%
>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%
>>>>>>>>>>>>>>40adobe.com%7C1beda9d1dc67430b02e608d580210ddc%7Cfa7b1b5a7b34
>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJhf
>>>>>>>>>>>>>>o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0.
>>> com/?url=https%3A%2F%
>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>>> 7C01%7Caharui%40adob
>>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>>> do
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>>> 7e
>>>>>>>>>>>>>> db
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>> 7C636554402926763835
>>>>>>>>>>>>>> &s
>>>>>>>>>>>>>> da
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>>> 5d
>>>>>>>>>>>>>> bf
>>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>>> 54
>>>>>>>>>>>>>> 37
>>>>>>>>>>>>>> 41
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>> *
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> 
>>>>> Piotr Zarzycki
>>>>> 
>>>>> Patreon:
>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>> https%3A%2F%2Fwww.pat
>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>> %7C9ba2ae2d1a6e
>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>> cee1%7C0%7C0%7C6365554
>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>> oyfshLnt8lxqg%3D&reserved
>>>>> =0
>>>>> 
>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>> https%3A%2F%2Fwww.pat
>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>> %7C9ba2ae2d1a6e
>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>>> cee1%7C0%7C0%7C6365554
>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>>> oyfshLnt8lxqg%3D&reserved
>>>>> =0>*
>>>> 
>>> 
>>> 
>> 
>> 
>> -- 
>> 
>> Piotr Zarzycki
>> 
>> Patreon: 
>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C1beda9d1dc67
>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365558
>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&reserv
>>ed=0
>> 
>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C1beda9d1dc67
>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365558
>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&reserv
>>ed=0>*
>
>


Re: TypeNames vs ClassName

Posted by Harbs <ha...@gmail.com>.
I do agree that this is pretty low on the list of priorities. I did not have a head to work on anything “serious” and the class lists was a nice distraction for me. I’m certainly fine with however Piotr handles this. I would like to point out a few things:

1. Object instantiation is pretty cheap in JS. A CSSClassList object is no heavier than an empty String. 8 empty strings use more memory than a single CSSClassList.
2. Array.join() is about the same computational-wise as string concatenation.
3. The “list” is not being added anywhere the empty strings would not be added, so it’s no less PAYG than strings.
4. An instantiated class such as this would fit better in case we need to play with class lists in beads because the CSSClassList object could be passed around and modified by different classes without exposing private variables and/or strands and beads needing to know about each other. I don’t think static utility classes are any less PAYG in this case.

Thanks,
Harbs

> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <pi...@gmail.com> wrote:
> 
> Hi Harbs,
> 
> As much as I like Array approach I took Alex's words more serious that
> having an Array in the game here could be more heavier than String
> concatenation. It's earlier in the discussion.
> 
> Piotr
> 
> 
> 2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
> 
>> Very nice, but IMO, this is over-engineering.  We are talking about a
>> space-delimited list where some portion of it is considered "fixed"
>> another portion is user-settable and another portion comes from other
>> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
>> especially if they are opt-in and just used to manage the user-settable
>> portion.  Think of it this way:  Every MDL app needs to carry around
>> ClassList even if they never change the classname.  I don't care too much
>> since it is in MDL and not in the core, so keep it if you want to, but I
>> can think of lots of other tasks we should be working on than creating
>> cool classes to manage a list of strings.
>> 
>> My 2 cents,
>> -Alex
>> 
>> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>> 
>>> What do you think of the CSSClassList class I just committed?
>>> 
>>> I *think* that makes the pattern more recognizable and probably is less
>>> heavy if more than one class can be used.
>>> 
>>> Harbs
>>> 
>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <pi...@gmail.com>
>>>> wrote:
>>>> 
>>>> Harbs, Alex,
>>>> 
>>>> I just pushed implementation of computeFinalClassNames to
>>>> branch feature/type_names_class_name_issue124. You can review
>>>> implementation in this commit [1] and example of usage in Card and
>>>> Button.
>>>> 
>>>> I have tested with Harbs example [3] and with Card by changing orders.
>>>> It's
>>>> working.
>>>> 
>>>> [1]
>>>> https://na01.safelinks.protection.outlook.com/?url=
>> http%3A%2F%2Fbit.ly%2F
>>>> 2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6
>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>> 7C636555451956879397&sdata
>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>>>> [2]
>>>> https://na01.safelinks.protection.outlook.com/?url=
>> http%3A%2F%2Fbit.ly%2F
>>>> 2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6
>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>> 7C636555451956879397&sdata
>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>>>> [3]
>>>> https://na01.safelinks.protection.outlook.com/?url=
>> http%3A%2F%2Fbit.ly%2F
>>>> 2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6
>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
>> 7C636555451956879397&sdata
>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>>>> 
>>>> Waiting for your review.
>>>> 
>>>> Thanks,
>>>> Piotr
>>>> 
>>>> 
>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
>>>> 
>>>>> Let me play with implementation of that function. It seems to me that
>>>>> will
>>>>> be much cleaner than current solution.
>>>>> 
>>>>> If user actually wanted to do anythin with className - let the
>>>>> overriding
>>>>> speaks.
>>>>> 
>>>>> 
>>>>> 
>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>>> wrote:
>>>>> 
>>>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>> 
>>>>>>> OK. I think that will work for DML components, but what if there’s a
>>>>>>> bead
>>>>>>> which needs to add class names? What would be the “right” way to do
>>>>>>> that?
>>>>>>> A bead cannot override the function on the strand.
>>>>>> 
>>>>>> Do we have beads that manipulate className?
>>>>>> 
>>>>>> IMO, the principle behind how to handle that is knowing whether you
>>>>>> are
>>>>>> sharing something or not.  There may not be one right way to handle
>>>>>> it,
>>>>>> but if I had to handle it, I would have the bead set something in the
>>>>>> model or presentation model of the component.  And the component would
>>>>>> override computeFinalClassNames to take that into account.
>>>>>> 
>>>>>> 
>>>>>> Although having just written that, maybe this computeFinalClassNames
>>>>>> should be in the view instead of on the base class so it is
>>>>>> replaceable
>>>>>> instead of overridable.
>>>>>> 
>>>>>> Thoughts?
>>>>>> -Alex
>>>>>>> 
>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> I think you are missing that the element.className is set to
>>>>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>>>>>>>> UIBase.className however they see fit.  They can assign it a whole
>>>>>>>> new
>>>>>>>> space-delimited list if they want.  But what gets set on
>>>>>>>> element.className
>>>>>>>> is computed from typeNames and className by default, and MDL would
>>>>>>>> override it to factor in fab, raised, colored into the computing of
>>>>>>>> the
>>>>>>>> final classnames.
>>>>>>>> 
>>>>>>>> I would prefer that we don't make requirements on users as to what
>>>>>>>> they
>>>>>>>> can or can't do with the className property, like requiring them to
>>>>>>>> use
>>>>>>>> addClassName/removeClassNames.  MXML and States might set className,
>>>>>> as
>>>>>>>> could any other AS logic.  I think folks may even be used to setting
>>>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>>> "variable"
>>>>>>>> part and having computeFinalClassNames be the way the "fixed" part
>>>>>>>> is
>>>>>>>> handled makes sense to me.
>>>>>>>> 
>>>>>>>> Of course, I could be wrong...
>>>>>>>> -Alex
>>>>>>>> 
>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>>>> 
>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to the
>>>>>>>>> class
>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>>>> 2. The client might subsequently set the className to something
>>>>>>>>> else.
>>>>>>>>> 3. When the component sets the “pieces” first and the client sets
>>>>>>>>> the
>>>>>>>>> className later, the client will overwrite these “pieces” which
>>>>>>>>> were
>>>>>>>>> added by the component.
>>>>>>>>> 
>>>>>>>>> My suggestion to have addClassName() and removeClassName() was to
>>>>>>>>> have
>>>>>>>>> a
>>>>>>>>> “safe” way to add class names which would get computed together
>>>>>>>>> with
>>>>>>>>> the
>>>>>>>>> className when the className is replaced.
>>>>>>>>> 
>>>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>>> className
>>>>>>>>> property. If that’s overwritten by a client, the logic falls apart.
>>>>>>>>> 
>>>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>>> component
>>>>>>>>> and className which is set outside the component is not really
>>>>>>>>> enough.
>>>>>>>>> (Unless I’m missing something.)
>>>>>>>>> 
>>>>>>>>> Harbs
>>>>>>>>> 
>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <aharui@adobe.com.INVALID
>>> 
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> If it’s not public, I don’t see how a utility method could call
>>>>>>>>>>> it
>>>>>>>>>>> though.
>>>>>>>>>> 
>>>>>>>>>> I didn't think the utility methods like
>>>>>>>>>> addClassName/removeClassName
>>>>>>>>>> would
>>>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>>>> 
>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className is a
>>>>>> mix
>>>>>>>>>> of
>>>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>>> thought
>>>>>>>>>> to
>>>>>>>>>> be
>>>>>>>>>> "fixed" and the space-delimited list of names in className are the
>>>>>>>>>> ones
>>>>>>>>>> the user wants to manipulate in their code.  So, I would expect
>>>>>>>>>> them
>>>>>>>>>> to
>>>>>>>>>> write:
>>>>>>>>>> 
>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> addClassName should just do something like:
>>>>>>>>>> 
>>>>>>>>>> myComponent.className += value;
>>>>>>>>>> 
>>>>>>>>>> That will call the className setter that will run:
>>>>>>>>>> 
>>>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>>>> 
>>>>>>>>>> If you call
>>>>>>>>>> 
>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>>> "pinkStyles");
>>>>>>>>>> 
>>>>>>>>>> removeClassName should just do something like:
>>>>>>>>>> 
>>>>>>>>>> Var s:String = myComponent.className;
>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>>>> If (c != -1)
>>>>>>>>>>  s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>>>> Else
>>>>>>>>>> {
>>>>>>>>>>  c= s.indexOf(" " + nameToRemove);
>>>>>>>>>>  if (c != -1)
>>>>>>>>>>    s = s.substr(0, c);  // remove last item
>>>>>>>>>> }
>>>>>>>>>> myComponent.className = s;
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>>>> 
>>>>>>>>>> -Alex
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>>>> <ah...@adobe.com.INVALID>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
>> piotrzarzycki21@gmail.com
>>>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames -
>>>>>>>>>>>>> is
>>>>>>>>>>>>> something
>>>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>>>> 
>>>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>>> UIBase
>>>>>>>>>>>> just
>>>>>>>>>>>> appends typenames to className.  It gets overridden in MDL where
>>>>>>>>>>>> needed
>>>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>>>> 
>>>>>>>>>>>> My 2 cents,
>>>>>>>>>>>> -Alex
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I think that in the shadow setter, it would change _shadow and
>>>>>>>>>>>>>> call
>>>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>> <piotrzarzycki21@gmail.com
>>>>>>> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to have
>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change _shadow
>>>>>>>>>>>>>>> ? -
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where you
>>>>>> have
>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>>> class. -
>>>>>>>>>>>>>>> In
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to handle
>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>> <aharui@adobe.com.invalid
>>>>>>> :
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I think am I not communicating the principles effectively.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>> Lots of apps can be written without needing these methods.
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>> represent
>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need an
>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>>>> computation
>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>>> property
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>> even
>>>>>>>>>>>>>>>> user-written code, those classNames are added to the list
>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>> set
>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all other
>>>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That is
>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>>> passing
>>>>>> in
>>>>>>>>>>>>>> null or
>>>>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>>>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF
>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>> added
>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
>>>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>>> attention
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to use my
>>>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>>>>>> reserve
>>>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>>>> e
>>>>>>>>>>>>>> .com
>>>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be better
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something
>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>>> not
>>>>>> in
>>>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built without
>>>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>>> this
>>>>>> up
>>>>>>>>>>>>>> again
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would
>>>>>>>>>>>>>>>>>>> take
>>>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in _className
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following way:
>>>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>>> exists.
>>>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working. Waiting
>>>>>> for
>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
>>>>>> three
>>>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>>> removeClassName
>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on
>>>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>>>> <ha...@gmail.com>:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.co
>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
>> 40adobe.co
>>>>>>>>>>>>>>>>>>>> m
>>>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %
>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %
>>>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>>>> rv
>>>>>>>>>>>>>>> ed
>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> --
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>> w.
>>>>>>>>>>>>> pa
>>>>>>>>>>>>> tr
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>> w.
>>>>>>>>>>>>> pa
>>>>>>>>>>>>> tr>
>>>>>>>>>>>>> eon.com
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>> .c
>>>>>>>>>>>>> om
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>> 59
>>>>>>>>>>>>> 03
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>> ta
>>>>>>>>>>>>> =G
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>> 2Fpiotrzar
>>>>>>>>>>>>> zy
>>>>>>>>>>>>> ck
>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>> do
>>>>>>>>>>>>> be
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>> 7e
>>>>>>>>>>>>> db
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>> 7C636554402926763835
>>>>>>>>>>>>> &s
>>>>>>>>>>>>> da
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>> 5d
>>>>>>>>>>>>> bf
>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>> 54
>>>>>>>>>>>>> 37
>>>>>>>>>>>>> 41
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>> rv
>>>>>>>>>>>>> ed
>>>>>>>>>>>>> =0
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>> w.
>>>>>>>>>>>>> pa
>>>>>>>>>>>>> tr
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>>>> w.
>>>>>>>>>>>>> pa
>>>>>>>>>>>>> tr>
>>>>>>>>>>>>> eon.com
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>>>> .c
>>>>>>>>>>>>> om
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>>>> 59
>>>>>>>>>>>>> 03
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>> 7C636554402926763835&sda
>>>>>>>>>>>>> ta
>>>>>>>>>>>>> =G
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>>>> 2Fpiotrzar
>>>>>>>>>>>>> zy
>>>>>>>>>>>>> ck
>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>> com/?url=https%3A%2F%
>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02%
>> 7C01%7Caharui%40adob
>>>>>>>>>>>>> e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
>> 6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397&
>> sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>>>> do
>>>>>>>>>>>>> be
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>>>> 7e
>>>>>>>>>>>>> db
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>> 7C636554402926763835
>>>>>>>>>>>>> &s
>>>>>>>>>>>>> da
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>>>> reserved=0>%7Cf2
>>>>>>>>>>>>> 5d
>>>>>>>>>>>>> bf
>>>>>>>>>>>>> 20138f47
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>>>> 54
>>>>>>>>>>>>> 37
>>>>>>>>>>>>> 41
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>>>> etW7oghI4s%3D&rese
>>>>>>>>>>>>> rv
>>>>>>>>>>>>> ed
>>>>>>>>>>>>> =0
>>>>>>>>>>>>>> *
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>>> --
>>>> 
>>>> Piotr Zarzycki
>>>> 
>>>> Patreon:
>>>> *https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C9ba2ae2d1a6e
>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365554
>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>> oyfshLnt8lxqg%3D&reserved
>>>> =0
>>>> 
>>>> <https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C9ba2ae2d1a6e
>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C6365554
>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
>> oyfshLnt8lxqg%3D&reserved
>>>> =0>*
>>> 
>> 
>> 
> 
> 
> -- 
> 
> Piotr Zarzycki
> 
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*



Re: TypeNames vs ClassName

Posted by Piotr Zarzycki <pi...@gmail.com>.
Hi Harbs,

As much as I like Array approach I took Alex's words more serious that
having an Array in the game here could be more heavier than String
concatenation. It's earlier in the discussion.

Piotr


2018-03-02 3:26 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:

> Very nice, but IMO, this is over-engineering.  We are talking about a
> space-delimited list where some portion of it is considered "fixed"
> another portion is user-settable and another portion comes from other
> attributes.  Some generic StringUtils or ListUtils might be more PAYG,
> especially if they are opt-in and just used to manage the user-settable
> portion.  Think of it this way:  Every MDL app needs to carry around
> ClassList even if they never change the classname.  I don't care too much
> since it is in MDL and not in the core, so keep it if you want to, but I
> can think of lots of other tasks we should be working on than creating
> cool classes to manage a list of strings.
>
> My 2 cents,
> -Alex
>
> On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:
>
> >What do you think of the CSSClassList class I just committed?
> >
> >I *think* that makes the pattern more recognizable and probably is less
> >heavy if more than one class can be used.
> >
> >Harbs
> >
> >> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <pi...@gmail.com>
> >>wrote:
> >>
> >> Harbs, Alex,
> >>
> >> I just pushed implementation of computeFinalClassNames to
> >> branch feature/type_names_class_name_issue124. You can review
> >> implementation in this commit [1] and example of usage in Card and
> >>Button.
> >>
> >> I have tested with Harbs example [3] and with Card by changing orders.
> >>It's
> >> working.
> >>
> >> [1]
> >>https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fbit.ly%2F
> >>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6
> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> 7C636555451956879397&sdata
> >>=5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
> >> [2]
> >>https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fbit.ly%2F
> >>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6
> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> 7C636555451956879397&sdata
> >>=8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
> >> [3]
> >>https://na01.safelinks.protection.outlook.com/?url=
> http%3A%2F%2Fbit.ly%2F
> >>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6
> >>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%
> 7C636555451956879397&sdata
> >>=9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
> >>
> >> Waiting for your review.
> >>
> >> Thanks,
> >> Piotr
> >>
> >>
> >> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
> >>
> >>> Let me play with implementation of that function. It seems to me that
> >>>will
> >>> be much cleaner than current solution.
> >>>
> >>> If user actually wanted to do anythin with className - let the
> >>>overriding
> >>> speaks.
> >>>
> >>>
> >>>
> >>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
> >>>wrote:
> >>>
> >>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
> >>>>
> >>>>> OK. I think that will work for DML components, but what if there’s a
> >>>>>bead
> >>>>> which needs to add class names? What would be the “right” way to do
> >>>>>that?
> >>>>> A bead cannot override the function on the strand.
> >>>>
> >>>> Do we have beads that manipulate className?
> >>>>
> >>>> IMO, the principle behind how to handle that is knowing whether you
> >>>>are
> >>>> sharing something or not.  There may not be one right way to handle
> >>>>it,
> >>>> but if I had to handle it, I would have the bead set something in the
> >>>> model or presentation model of the component.  And the component would
> >>>> override computeFinalClassNames to take that into account.
> >>>>
> >>>>
> >>>> Although having just written that, maybe this computeFinalClassNames
> >>>> should be in the view instead of on the base class so it is
> >>>>replaceable
> >>>> instead of overridable.
> >>>>
> >>>> Thoughts?
> >>>> -Alex
> >>>>>
> >>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <ah...@adobe.com.INVALID>
> >>>>>> wrote:
> >>>>>>
> >>>>>> I think you are missing that the element.className is set to
> >>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
> >>>>>> UIBase.className however they see fit.  They can assign it a whole
> >>>>>>new
> >>>>>> space-delimited list if they want.  But what gets set on
> >>>>>> element.className
> >>>>>> is computed from typeNames and className by default, and MDL would
> >>>>>> override it to factor in fab, raised, colored into the computing of
> >>>>>>the
> >>>>>> final classnames.
> >>>>>>
> >>>>>> I would prefer that we don't make requirements on users as to what
> >>>>>>they
> >>>>>> can or can't do with the className property, like requiring them to
> >>>>>>use
> >>>>>> addClassName/removeClassNames.  MXML and States might set className,
> >>>> as
> >>>>>> could any other AS logic.  I think folks may even be used to setting
> >>>>>> className in JavaScript.  So letting UIBase.className be the
> >>>>>>"variable"
> >>>>>> part and having computeFinalClassNames be the way the "fixed" part
> >>>>>>is
> >>>>>> handled makes sense to me.
> >>>>>>
> >>>>>> Of course, I could be wrong...
> >>>>>> -Alex
> >>>>>>
> >>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
> >>>>>>
> >>>>>>> The problem which sparked this whole issue is like this:
> >>>>>>>
> >>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to the
> >>>>>>> class
> >>>>>>> names (such as “fab”, “raised”, “colored”, etc.
> >>>>>>> 2. The client might subsequently set the className to something
> >>>>>>>else.
> >>>>>>> 3. When the component sets the “pieces” first and the client sets
> >>>>>>>the
> >>>>>>> className later, the client will overwrite these “pieces” which
> >>>>>>>were
> >>>>>>> added by the component.
> >>>>>>>
> >>>>>>> My suggestion to have addClassName() and removeClassName() was to
> >>>>>>>have
> >>>>>>> a
> >>>>>>> “safe” way to add class names which would get computed together
> >>>>>>>with
> >>>>>>> the
> >>>>>>> className when the className is replaced.
> >>>>>>>
> >>>>>>> The way you have it seems to just be modifying the existing
> >>>>>>>className
> >>>>>>> property. If that’s overwritten by a client, the logic falls apart.
> >>>>>>>
> >>>>>>> It feels like only having typeNames which are set inside the
> >>>>>>>component
> >>>>>>> and className which is set outside the component is not really
> >>>>>>>enough.
> >>>>>>> (Unless I’m missing something.)
> >>>>>>>
> >>>>>>> Harbs
> >>>>>>>
> >>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <aharui@adobe.com.INVALID
> >
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
> >>>>>>>>
> >>>>>>>>> If it’s not public, I don’t see how a utility method could call
> >>>>>>>>>it
> >>>>>>>>> though.
> >>>>>>>>
> >>>>>>>> I didn't think the utility methods like
> >>>>>>>>addClassName/removeClassName
> >>>>>>>> would
> >>>>>>>> need to alter computeFinalClassNames().
> >>>>>>>>
> >>>>>>>> AIUI, for most UIBase subclasses, the final element.className is a
> >>>> mix
> >>>>>>>> of
> >>>>>>>> the className property and the typeNames.  The typenames are
> >>>>>>>>thought
> >>>>>>>> to
> >>>>>>>> be
> >>>>>>>> "fixed" and the space-delimited list of names in className are the
> >>>>>>>> ones
> >>>>>>>> the user wants to manipulate in their code.  So, I would expect
> >>>>>>>>them
> >>>>>>>> to
> >>>>>>>> write:
> >>>>>>>>
> >>>>>>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> addClassName should just do something like:
> >>>>>>>>
> >>>>>>>> myComponent.className += value;
> >>>>>>>>
> >>>>>>>> That will call the className setter that will run:
> >>>>>>>>
> >>>>>>>> element.className = computeFinalClassNames();
> >>>>>>>>
> >>>>>>>> If you call
> >>>>>>>>
> >>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
> >>>>>>>>"pinkStyles");
> >>>>>>>>
> >>>>>>>> removeClassName should just do something like:
> >>>>>>>>
> >>>>>>>> Var s:String = myComponent.className;
> >>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
> >>>>>>>> If (c != -1)
> >>>>>>>>   s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
> >>>>>>>> Else
> >>>>>>>> {
> >>>>>>>>   c= s.indexOf(" " + nameToRemove);
> >>>>>>>>   if (c != -1)
> >>>>>>>>     s = s.substr(0, c);  // remove last item
> >>>>>>>> }
> >>>>>>>> myComponent.className = s;
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> It seems like it should be that simple.  What am I missing?
> >>>>>>>>
> >>>>>>>> -Alex
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
> >>>>>>>>>><ah...@adobe.com.INVALID>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
> piotrzarzycki21@gmail.com
> >>>>>>>>>> <ma...@gmail.com>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames -
> >>>>>>>>>>>is
> >>>>>>>>>>> something
> >>>>>>>>>>> which is in the UIBase ?
> >>>>>>>>>>
> >>>>>>>>>> Yes, and probably protected instead of public.  The one in
> >>>>>>>>>>UIBase
> >>>>>>>>>> just
> >>>>>>>>>> appends typenames to className.  It gets overridden in MDL where
> >>>>>>>>>> needed
> >>>>>>>>>> for shadow and other attributes.
> >>>>>>>>>>
> >>>>>>>>>> My 2 cents,
> >>>>>>>>>> -Alex
> >>>>>>>>>>>
> >>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
> >>>>>>>>>>><ah...@adobe.com.invalid>:
> >>>>>>>>>>>
> >>>>>>>>>>>> I think that in the shadow setter, it would change _shadow and
> >>>>>>>>>>>> call
> >>>>>>>>>>>> setClassName(computeFinalClassNames());
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
> >>>>>>>>>>>><piotrzarzycki21@gmail.com
> >>>>>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Alex,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> So we are getting back to the idea where you proposed to have
> >>>>>>>>>>>>> function
> >>>>>>>>>>>>> which computes everything.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> override public function computeFinalClassNames():String
> >>>>>>>>>>>>> {
> >>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
> >>>>>>>>>>>>> }
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Where does that function should be placed ? Does that
> >>>>>>>>>>>>>function
> >>>>>>>>>>>>> should
> >>>>>>>>>>>> be
> >>>>>>>>>>>>> called in addedToParent plus whenever someone change _shadow
> >>>>>>>>>>>>>? -
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Because I really don't know how to handle scenario where you
> >>>> have
> >>>>>>>>>>>>> some
> >>>>>>>>>>>>> property isActive = true/false and I need to add/remove
> >>>>>>>>>>>>>class. -
> >>>>>>>>>>>>> In
> >>>>>>>>>>>>> the
> >>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to handle
> >>>>>>>>>>>>> changing
> >>>>>>>>>>>> ?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
> >>>>>>>>>>>>><aharui@adobe.com.invalid
> >>>>> :
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Piotr,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I think am I not communicating the principles effectively.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be
> >>>>>>>>>>>>>>in
> >>>>>>>>>>>>>> UIBase.
> >>>>>>>>>>>>>> Lots of apps can be written without needing these methods.
> >>>>>>>>>>>>>>I
> >>>>>>>>>>>>>> think
> >>>>>>>>>>>> they
> >>>>>>>>>>>>>> can be written as utility functions.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Second, the computation of the final element.className
> >>>>>>>>>>>>>>should
> >>>>>>>>>>>> represent
> >>>>>>>>>>>>>> the state of the component, so I don't get why you need an
> >>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
> >>>> computation
> >>>>>>>>>>>>>> for
> >>>>>>>>>>>> a
> >>>>>>>>>>>>>> component with a shadow would be to check the shadow
> >>>>>>>>>>>>>>property
> >>>>>>>>>>>>>> and
> >>>>>>>>>>>>>> if
> >>>>>>>>>>>> it
> >>>>>>>>>>>>>> is
> >>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
> >>>>>>>>>>>>>>think
> >>>>>>>>>>>>>> you
> >>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
> >>>>>>>>>>>>>>When
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>> classname property is set from the outside by
> >>>>>>>>>>>>>> MXMLDataInterpreter
> >>>>>>>>>>>>>> or
> >>>>>>>>>>>>>> even
> >>>>>>>>>>>>>> user-written code, those classNames are added to the list
> >>>>>>>>>>>>>>with
> >>>>>>>>>>>>>> the
> >>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
> >>>>>>>>>>>>>>then
> >>>>>>>>>>>>>> set
> >>>>>>>>>>>>>> on
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>> element.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all other
> >>>>>>>>>>>>>> Royale
> >>>>>>>>>>>>>> code,
> >>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That is
> >>>>>>>>>>>>>> also
> >>>>>>>>>>>>>> just-in-case code.  The production code should not be
> >>>>>>>>>>>>>>passing
> >>>> in
> >>>>>>>>>>>> null or
> >>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
> >>>>>>>>>>>>>>that
> >>>>>>>>>>>>>> you
> >>>>>>>>>>>> have
> >>>>>>>>>>>>>> written do not add value.  I have proposed that there are
> >>>>>>>>>>>>>> debug-only
> >>>>>>>>>>>>>> code
> >>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
> >>>>>>>>>>>>>>you
> >>>>>>>>>>>>>> can
> >>>>>>>>>>>>>> use
> >>>>>>>>>>>>>> for
> >>>>>>>>>>>>>> that.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> HTH,
> >>>>>>>>>>>>>> -Alex
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
> >>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Hi Alex,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF
> >>>>>>>>>>>>>>>with
> >>>>>>>>>>>> problem
> >>>>>>>>>>>>>>> debugging.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
> >>>>>>>>>>>>>>> addClassName and removeClassName [1].
> >>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
> >>>>>>>>>>>>>>>have
> >>>>>>>>>>>>>>> added
> >>>>>>>>>>>> [2]
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
> >>>>>>>>>>>>>>> shadow.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
> >>>>>>>>>>>>>>>attention
> >>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>> moment
> >>>>>>>>>>>>>>> where className is being wiped out, later I have to use my
> >>>>>>>>>>>>>>> internal
> >>>>>>>>>>>>>>> variable to get it back.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Does that more clean now ?
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> [1]
> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
> >>>> reserve
> >>>>>>>>>>>>>>> d=
> >>>>>>>>>>>>>>> 0
> >>>>>>>>>>>>>>> [2]
> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
> >>>> Nejwm4Sr7bw7g%3D&reserved=0
> >>>>>>>>>>>>>>> [3]
> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
> >>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
> >>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>>>>>>>>>>>> 7C636554040718214998&
> >>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
> >>>> zSltcNccqRGDo%3D&reserved=0
> >>>>>>>>>>>>>>> [4]
> >>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
> >>>> &data=02%7C01%7Caharui%40ad
> >>>>>>>>>>>>>>> ob
> >>>>>>>>>>>>>>> e
> >>>>>>>>>>>> .com
> >>>>>>>>>>>>>> %7C
> >>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
> >>>> 7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>> cee1%7C0%7C
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
> >>>> 2BdQJjcpYtMkk1pw3r0iVkdR
> >>>>>>>>>>>>>>> a%
> >>>>>>>>>>>>>> 2F6TWRTG
> >>>>>>>>>>>>>>> 10OY%3D&reserved=0
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>> Piotr
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
> >>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Hi Piotr,
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I could not understand this explanation. Might be better
> >>>>>>>>>>>>>>>>to
> >>>>>>>>>>>>>>>> show
> >>>>>>>>>>>>>> actual
> >>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
> >>>>>>>>>>>>>>>>that I
> >>>>>>>>>>>> don't
> >>>>>>>>>>>>>> know
> >>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something
> >>>>>>>>>>>>>>>>as
> >>>>>>>>>>>>>>>> empty,
> >>>>>>>>>>>>>> but
> >>>>>>>>>>>>>>>> I'm
> >>>>>>>>>>>>>>>> not sure what that is.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
> >>>>>>>>>>>>>>>>not
> >>>> in
> >>>>>>>>>>>>>> UIBase.
> >>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>> think plenty of useful applications can be built without
> >>>>>>>>>>>>>>>> changing
> >>>>>>>>>>>>>>>> classNames at runtime.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
> >>>>>>>>>>>>>>>>this
> >>>> up
> >>>>>>>>>>>> again
> >>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>> your morning.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Thanks for working on it,
> >>>>>>>>>>>>>>>> -Alex
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
> >>>>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would
> >>>>>>>>>>>>>>>>>take
> >>>>>>>>>>>> Harb's
> >>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
> >>>>>>>>>>>> removeClassName().
> >>>>>>>>>>>>>>>> Next
> >>>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> addClassName(value):
> >>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in _className
> >>>>>>>>>>>>>>>>>and
> >>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>> _internalClassName.
> >>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
> >>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following way:
> >>>>>>>>>>>>>>>> element.className
> >>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> removeClassName(value)
> >>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
> >>>>>>>>>>>>>>>>>_className
> >>>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>> _internalClassName
> >>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
> >>>>>>>>>>>>>>>>>exists.
> >>>>>>>>>>>>>>>>> _className.replace(value, "");
> >>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
> >>>>>>>>>>>> _className
> >>>>>>>>>>>>>> + "
> >>>>>>>>>>>>>>>> " +
> >>>>>>>>>>>>>>>>> typeNames;
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
> >>>>>>>>>>>>>>>>>with
> >>>>>>>>>>>>>> _className
> >>>>>>>>>>>>>>>> and
> >>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
> >>>>>>>>>>>>>>>>>_className
> >>>>>>>>>>>>>>>>> + "
> >>>>>>>>>>>> " +
> >>>>>>>>>>>>>>>>> typeNames;
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I have implemented it and it seems to be working. Waiting
> >>>> for
> >>>>>>>>>>>> your
> >>>>>>>>>>>>>>>>> thoughts
> >>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
> >>>> three
> >>>>>>>>>>>>>> fields is
> >>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
> >>>>>>>>>>>>>>>>>removeClassName
> >>>>>>>>>>>>>>>>> are
> >>>>>>>>>>>>>>>>> necessary,
> >>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
> >>>>>>>>>>>>>>>>>classes
> >>>>>>>>>>>>>>>>> once
> >>>>>>>>>>>>>>>>> component
> >>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on
> >>>>>>>>>>>>>>>>> demand.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
> >>>>>>>>>>>>>> <pi...@gmail.com>:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
> >>>>>>>>>>>>>>>>>> implementation
> >>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks, Piotr
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
> >>>>>>>>>>>>>>>>>><ha...@gmail.com>:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
> >>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Harbs,
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
> >>>>>>>>>>>>>>>>>>>>your
> >>>>>>>>>>>>>>>> application
> >>>>>>>>>>>>>>>>>>> it
> >>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
> >>>>>>>>>>>>>>>>>>>>for
> >>>>>>>>>>>> you
> >>>>>>>>>>>>>>>>>>> anything.
> >>>>>>>>>>>>>>>>>>> :)
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.co
> >>>>>>>>>>>>>>>>>>m
> >>>>>>>>>>>>>>>> %7C45a065853ba1
> >>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
> >>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
> >>>>>>>>>>>>>>>>>> rved=0
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%
> 40adobe.co
> >>>>>>>>>>>>>>>>>>m
> >>>>>>>>>>>>>>>> %7C45a065853ba1
> >>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
> >>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
> >>>>>>>>>>>>>>>>>> rved=0>*
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %
> >>>>>>>>>>>>>>>> 7C45a065853ba14a
> >>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
> >>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
> >>>>>>>>>>>>>>>>> =0
> >>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %
> >>>>>>>>>>>>>>>> 7C45a065853ba14a
> >>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
> >>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
> >>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
> >>>>>>>>>>>>>>>>> =0>*
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
> >>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
> >>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
> >>>>>>>>>>>>>>> %
> >>>>>>>>>>>>>> 3D&reserv
> >>>>>>>>>>>>>>> ed=0
> >>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
> >>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
> >>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
> >>>>>>>>>>>>>>> %
> >>>>>>>>>>>>>> 3D&reserv
> >>>>>>>>>>>>>>> ed=0>*
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Patreon:
> >>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>> 7Cda0fd75922c94d
> >>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
> >>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
> >>>> oJqA6J42ZuhcA%3D&rese
> >>>>>>>>>>>>> rv
> >>>>>>>>>>>>> ed
> >>>>>>>>>>>>> =0
> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
> >>>>>>>>>>>> https%3A%2F%2Fwww.patr
> >>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
> >>>>>>>>>>>> 7Cda0fd75922c94d
> >>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
> >>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
> >>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
> >>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>>
> >>>>>>>>>>> Piotr Zarzycki
> >>>>>>>>>>>
> >>>>>>>>>>> Patreon:
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>*https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>> w.
> >>>>>>>>>>> pa
> >>>>>>>>>>> tr
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>> w.
> >>>>>>>>>>> pa
> >>>>>>>>>>> tr>
> >>>>>>>>>>> eon.com
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=http%3A%2F%2Feon
> >>>>>>>>>>> .c
> >>>>>>>>>>> om
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
> >>>> 7C75519f53f52b4fde36b108d57edb
> >>>>>>>>>>> 59
> >>>>>>>>>>> 03
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>> 7C636554402926763835&sda
> >>>>>>>>>>> ta
> >>>>>>>>>>> =G
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
> >>>> 2Fpiotrzar
> >>>>>>>>>>> zy
> >>>>>>>>>>> ck
> >>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=http%3A%2F%2F40a
> >>>>>>>>>>> do
> >>>>>>>>>>> be
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
> >>>> 7C75519f53f52b4fde36b108d5
> >>>>>>>>>>> 7e
> >>>>>>>>>>> db
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>> 7C636554402926763835
> >>>>>>>>>>> &s
> >>>>>>>>>>> da
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
> >>>> reserved=0>%7Cf2
> >>>>>>>>>>> 5d
> >>>>>>>>>>> bf
> >>>>>>>>>>> 20138f47
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
> >>>> cee1%7C0%7C0%7C6365
> >>>>>>>>>>> 54
> >>>>>>>>>>> 37
> >>>>>>>>>>> 41
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
> >>>> etW7oghI4s%3D&rese
> >>>>>>>>>>> rv
> >>>>>>>>>>> ed
> >>>>>>>>>>> =0
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>> w.
> >>>>>>>>>>> pa
> >>>>>>>>>>> tr
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=https%3A%2F%2Fww
> >>>>>>>>>>> w.
> >>>>>>>>>>> pa
> >>>>>>>>>>> tr>
> >>>>>>>>>>> eon.com
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=http%3A%2F%2Feon
> >>>>>>>>>>> .c
> >>>>>>>>>>> om
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
> >>>> 7C75519f53f52b4fde36b108d57edb
> >>>>>>>>>>> 59
> >>>>>>>>>>> 03
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>> 7C636554402926763835&sda
> >>>>>>>>>>> ta
> >>>>>>>>>>> =G
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
> >>>> 2Fpiotrzar
> >>>>>>>>>>> zy
> >>>>>>>>>>> ck
> >>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>><https://na01.safelinks.protection.outlook.
> com/?url=https%3A%2F%
> >>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%
> 7C01%7Caharui%40adob
> >>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf
> 6c56%7Cfa7b1b5a7b34438794aed
> >>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&
> sdata=9%2BK%2FO6A3X%2FV
> >>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
> >>>> com/?url=http%3A%2F%2F40a
> >>>>>>>>>>> do
> >>>>>>>>>>> be
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
> >>>> 7C75519f53f52b4fde36b108d5
> >>>>>>>>>>> 7e
> >>>>>>>>>>> db
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
> >>>> 7C636554402926763835
> >>>>>>>>>>> &s
> >>>>>>>>>>> da
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
> >>>> reserved=0>%7Cf2
> >>>>>>>>>>> 5d
> >>>>>>>>>>> bf
> >>>>>>>>>>> 20138f47
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
> >>>> cee1%7C0%7C0%7C6365
> >>>>>>>>>>> 54
> >>>>>>>>>>> 37
> >>>>>>>>>>> 41
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
> >>>> etW7oghI4s%3D&rese
> >>>>>>>>>>> rv
> >>>>>>>>>>> ed
> >>>>>>>>>>> =0
> >>>>>>>>>>>> *
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>>
> >>
> >>
> >> --
> >>
> >> Piotr Zarzycki
> >>
> >> Patreon:
> >>*https://na01.safelinks.protection.outlook.com/?url=
> https%3A%2F%2Fwww.pat
> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %7C9ba2ae2d1a6e
> >>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
> cee1%7C0%7C0%7C6365554
> >>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
> oyfshLnt8lxqg%3D&reserved
> >>=0
> >>
> >><https://na01.safelinks.protection.outlook.com/?url=
> https%3A%2F%2Fwww.pat
> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
> %7C9ba2ae2d1a6e
> >>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de
> cee1%7C0%7C0%7C6365554
> >>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ
> oyfshLnt8lxqg%3D&reserved
> >>=0>*
> >
>
>


-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Re: TypeNames vs ClassName

Posted by Alex Harui <ah...@adobe.com.INVALID>.
Very nice, but IMO, this is over-engineering.  We are talking about a
space-delimited list where some portion of it is considered "fixed"
another portion is user-settable and another portion comes from other
attributes.  Some generic StringUtils or ListUtils might be more PAYG,
especially if they are opt-in and just used to manage the user-settable
portion.  Think of it this way:  Every MDL app needs to carry around
ClassList even if they never change the classname.  I don't care too much
since it is in MDL and not in the core, so keep it if you want to, but I
can think of lots of other tasks we should be working on than creating
cool classes to manage a list of strings.

My 2 cents,
-Alex

On 3/1/18, 3:51 PM, "Harbs" <ha...@gmail.com> wrote:

>What do you think of the CSSClassList class I just committed?
>
>I *think* that makes the pattern more recognizable and probably is less
>heavy if more than one class can be used.
>
>Harbs
>
>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <pi...@gmail.com>
>>wrote:
>> 
>> Harbs, Alex,
>> 
>> I just pushed implementation of computeFinalClassNames to
>> branch feature/type_names_class_name_issue124. You can review
>> implementation in this commit [1] and example of usage in Card and
>>Button.
>> 
>> I have tested with Harbs example [3] and with Card by changing orders.
>>It's
>> working.
>> 
>> [1] 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fbit.ly%2F
>>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf6
>>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451956879397&sdata
>>=5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0
>> [2] 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fbit.ly%2F
>>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf6
>>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451956879397&sdata
>>=8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0
>> [3] 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fbit.ly%2F
>>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d57fcf6
>>c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1%7C636555451956879397&sdata
>>=9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0
>> 
>> Waiting for your review.
>> 
>> Thanks,
>> Piotr
>> 
>> 
>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
>> 
>>> Let me play with implementation of that function. It seems to me that
>>>will
>>> be much cleaner than current solution.
>>> 
>>> If user actually wanted to do anythin with className - let the
>>>overriding
>>> speaks.
>>> 
>>> 
>>> 
>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid>
>>>wrote:
>>> 
>>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>>> 
>>>>> OK. I think that will work for DML components, but what if there’s a
>>>>>bead
>>>>> which needs to add class names? What would be the “right” way to do
>>>>>that?
>>>>> A bead cannot override the function on the strand.
>>>> 
>>>> Do we have beads that manipulate className?
>>>> 
>>>> IMO, the principle behind how to handle that is knowing whether you
>>>>are
>>>> sharing something or not.  There may not be one right way to handle
>>>>it,
>>>> but if I had to handle it, I would have the bead set something in the
>>>> model or presentation model of the component.  And the component would
>>>> override computeFinalClassNames to take that into account.
>>>> 
>>>> 
>>>> Although having just written that, maybe this computeFinalClassNames
>>>> should be in the view instead of on the base class so it is
>>>>replaceable
>>>> instead of overridable.
>>>> 
>>>> Thoughts?
>>>> -Alex
>>>>> 
>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>>> wrote:
>>>>>> 
>>>>>> I think you are missing that the element.className is set to
>>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>>>>>> UIBase.className however they see fit.  They can assign it a whole
>>>>>>new
>>>>>> space-delimited list if they want.  But what gets set on
>>>>>> element.className
>>>>>> is computed from typeNames and className by default, and MDL would
>>>>>> override it to factor in fab, raised, colored into the computing of
>>>>>>the
>>>>>> final classnames.
>>>>>> 
>>>>>> I would prefer that we don't make requirements on users as to what
>>>>>>they
>>>>>> can or can't do with the className property, like requiring them to
>>>>>>use
>>>>>> addClassName/removeClassNames.  MXML and States might set className,
>>>> as
>>>>>> could any other AS logic.  I think folks may even be used to setting
>>>>>> className in JavaScript.  So letting UIBase.className be the
>>>>>>"variable"
>>>>>> part and having computeFinalClassNames be the way the "fixed" part
>>>>>>is
>>>>>> handled makes sense to me.
>>>>>> 
>>>>>> Of course, I could be wrong...
>>>>>> -Alex
>>>>>> 
>>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>>> 
>>>>>>> The problem which sparked this whole issue is like this:
>>>>>>> 
>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to the
>>>>>>> class
>>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>>> 2. The client might subsequently set the className to something
>>>>>>>else.
>>>>>>> 3. When the component sets the “pieces” first and the client sets
>>>>>>>the
>>>>>>> className later, the client will overwrite these “pieces” which
>>>>>>>were
>>>>>>> added by the component.
>>>>>>> 
>>>>>>> My suggestion to have addClassName() and removeClassName() was to
>>>>>>>have
>>>>>>> a
>>>>>>> “safe” way to add class names which would get computed together
>>>>>>>with
>>>>>>> the
>>>>>>> className when the className is replaced.
>>>>>>> 
>>>>>>> The way you have it seems to just be modifying the existing
>>>>>>>className
>>>>>>> property. If that’s overwritten by a client, the logic falls apart.
>>>>>>> 
>>>>>>> It feels like only having typeNames which are set inside the
>>>>>>>component
>>>>>>> and className which is set outside the component is not really
>>>>>>>enough.
>>>>>>> (Unless I’m missing something.)
>>>>>>> 
>>>>>>> Harbs
>>>>>>> 
>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> If it’s not public, I don’t see how a utility method could call
>>>>>>>>>it
>>>>>>>>> though.
>>>>>>>> 
>>>>>>>> I didn't think the utility methods like
>>>>>>>>addClassName/removeClassName
>>>>>>>> would
>>>>>>>> need to alter computeFinalClassNames().
>>>>>>>> 
>>>>>>>> AIUI, for most UIBase subclasses, the final element.className is a
>>>> mix
>>>>>>>> of
>>>>>>>> the className property and the typeNames.  The typenames are
>>>>>>>>thought
>>>>>>>> to
>>>>>>>> be
>>>>>>>> "fixed" and the space-delimited list of names in className are the
>>>>>>>> ones
>>>>>>>> the user wants to manipulate in their code.  So, I would expect
>>>>>>>>them
>>>>>>>> to
>>>>>>>> write:
>>>>>>>> 
>>>>>>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
>>>>>>>> 
>>>>>>>> 
>>>>>>>> addClassName should just do something like:
>>>>>>>> 
>>>>>>>> myComponent.className += value;
>>>>>>>> 
>>>>>>>> That will call the className setter that will run:
>>>>>>>> 
>>>>>>>> element.className = computeFinalClassNames();
>>>>>>>> 
>>>>>>>> If you call
>>>>>>>> 
>>>>>>>> org.apache.royale.utils.removeClassName(myComponent,
>>>>>>>>"pinkStyles");
>>>>>>>> 
>>>>>>>> removeClassName should just do something like:
>>>>>>>> 
>>>>>>>> Var s:String = myComponent.className;
>>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>>> If (c != -1)
>>>>>>>>   s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>>> Else
>>>>>>>> {
>>>>>>>>   c= s.indexOf(" " + nameToRemove);
>>>>>>>>   if (c != -1)
>>>>>>>>     s = s.substr(0, c);  // remove last item
>>>>>>>> }
>>>>>>>> myComponent.className = s;
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>>> 
>>>>>>>> -Alex
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui
>>>>>>>>>><ah...@adobe.com.INVALID>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames -
>>>>>>>>>>>is
>>>>>>>>>>> something
>>>>>>>>>>> which is in the UIBase ?
>>>>>>>>>> 
>>>>>>>>>> Yes, and probably protected instead of public.  The one in
>>>>>>>>>>UIBase
>>>>>>>>>> just
>>>>>>>>>> appends typenames to className.  It gets overridden in MDL where
>>>>>>>>>> needed
>>>>>>>>>> for shadow and other attributes.
>>>>>>>>>> 
>>>>>>>>>> My 2 cents,
>>>>>>>>>> -Alex
>>>>>>>>>>> 
>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui
>>>>>>>>>>><ah...@adobe.com.invalid>:
>>>>>>>>>>> 
>>>>>>>>>>>> I think that in the shadow setter, it would change _shadow and
>>>>>>>>>>>> call
>>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>>> 
>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
>>>>>>>>>>>><piotrzarzycki21@gmail.com
>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> Alex,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> So we are getting back to the idea where you proposed to have
>>>>>>>>>>>>> function
>>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>>> {
>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>>> }
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Where does that function should be placed ? Does that
>>>>>>>>>>>>>function
>>>>>>>>>>>>> should
>>>>>>>>>>>> be
>>>>>>>>>>>>> called in addedToParent plus whenever someone change _shadow
>>>>>>>>>>>>>? -
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Because I really don't know how to handle scenario where you
>>>> have
>>>>>>>>>>>>> some
>>>>>>>>>>>>> property isActive = true/false and I need to add/remove
>>>>>>>>>>>>>class. -
>>>>>>>>>>>>> In
>>>>>>>>>>>>> the
>>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to handle
>>>>>>>>>>>>> changing
>>>>>>>>>>>> ?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui
>>>>>>>>>>>>><aharui@adobe.com.invalid
>>>>> :
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I think am I not communicating the principles effectively.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be
>>>>>>>>>>>>>>in
>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>> Lots of apps can be written without needing these methods.
>>>>>>>>>>>>>>I
>>>>>>>>>>>>>> think
>>>>>>>>>>>> they
>>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Second, the computation of the final element.className
>>>>>>>>>>>>>>should
>>>>>>>>>>>> represent
>>>>>>>>>>>>>> the state of the component, so I don't get why you need an
>>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>>> computation
>>>>>>>>>>>>>> for
>>>>>>>>>>>> a
>>>>>>>>>>>>>> component with a shadow would be to check the shadow
>>>>>>>>>>>>>>property
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>> if
>>>>>>>>>>>> it
>>>>>>>>>>>>>> is
>>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I
>>>>>>>>>>>>>>think
>>>>>>>>>>>>>> you
>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.
>>>>>>>>>>>>>>When
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>>> or
>>>>>>>>>>>>>> even
>>>>>>>>>>>>>> user-written code, those classNames are added to the list
>>>>>>>>>>>>>>with
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and
>>>>>>>>>>>>>>then
>>>>>>>>>>>>>> set
>>>>>>>>>>>>>> on
>>>>>>>>>>>> the
>>>>>>>>>>>>>> element.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all other
>>>>>>>>>>>>>> Royale
>>>>>>>>>>>>>> code,
>>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That is
>>>>>>>>>>>>>> also
>>>>>>>>>>>>>> just-in-case code.  The production code should not be
>>>>>>>>>>>>>>passing
>>>> in
>>>>>>>>>>>> null or
>>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks
>>>>>>>>>>>>>>that
>>>>>>>>>>>>>> you
>>>>>>>>>>>> have
>>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>>> code
>>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag
>>>>>>>>>>>>>>you
>>>>>>>>>>>>>> can
>>>>>>>>>>>>>> use
>>>>>>>>>>>>>> for
>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF
>>>>>>>>>>>>>>>with
>>>>>>>>>>>> problem
>>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>>> addedToParent what is happen with internal field which I
>>>>>>>>>>>>>>>have
>>>>>>>>>>>>>>> added
>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
>>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay
>>>>>>>>>>>>>>>attention
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>>> where className is being wiped out, later I have to use my
>>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>>>> reserve
>>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>>> e
>>>>>>>>>>>> .com
>>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>>> a%
>>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I could not understand this explanation. Might be better
>>>>>>>>>>>>>>>>to
>>>>>>>>>>>>>>>> show
>>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable
>>>>>>>>>>>>>>>>that I
>>>>>>>>>>>> don't
>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something
>>>>>>>>>>>>>>>>as
>>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions,
>>>>>>>>>>>>>>>>not
>>>> in
>>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>> think plenty of useful applications can be built without
>>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick
>>>>>>>>>>>>>>>>this
>>>> up
>>>>>>>>>>>> again
>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would
>>>>>>>>>>>>>>>>>take
>>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in _className
>>>>>>>>>>>>>>>>>and
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following way:
>>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in
>>>>>>>>>>>>>>>>>_className
>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name
>>>>>>>>>>>>>>>>>exists.
>>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
>>>>>>>>>>>> _className
>>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName
>>>>>>>>>>>>>>>>>with
>>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " +
>>>>>>>>>>>>>>>>>_className
>>>>>>>>>>>>>>>>> + "
>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working. Waiting
>>>> for
>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
>>>> three
>>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and
>>>>>>>>>>>>>>>>>removeClassName
>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate
>>>>>>>>>>>>>>>>>classes
>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on
>>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs
>>>>>>>>>>>>>>>>>><ha...@gmail.com>:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in
>>>>>>>>>>>>>>>>>>>>your
>>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break
>>>>>>>>>>>>>>>>>>>>for
>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.co
>>>>>>>>>>>>>>>>>>m
>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.co
>>>>>>>>>>>>>>>>>>m
>>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>>> %
>>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> --
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>>> rv
>>>>>>>>>>>>> ed
>>>>>>>>>>>>> =0
>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> 
>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>> 
>>>>>>>>>>> Patreon:
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>> w.
>>>>>>>>>>> pa
>>>>>>>>>>> tr
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>> w.
>>>>>>>>>>> pa
>>>>>>>>>>> tr>
>>>>>>>>>>> eon.com
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>> .c
>>>>>>>>>>> om
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>> 59
>>>>>>>>>>> 03
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>> 7C636554402926763835&sda
>>>>>>>>>>> ta
>>>>>>>>>>> =G
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>> 2Fpiotrzar
>>>>>>>>>>> zy
>>>>>>>>>>> ck
>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>> do
>>>>>>>>>>> be
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>> 7e
>>>>>>>>>>> db
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>> 7C636554402926763835
>>>>>>>>>>> &s
>>>>>>>>>>> da
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>> reserved=0>%7Cf2
>>>>>>>>>>> 5d
>>>>>>>>>>> bf
>>>>>>>>>>> 20138f47
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>> 54
>>>>>>>>>>> 37
>>>>>>>>>>> 41
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>> etW7oghI4s%3D&rese
>>>>>>>>>>> rv
>>>>>>>>>>> ed
>>>>>>>>>>> =0
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>> w.
>>>>>>>>>>> pa
>>>>>>>>>>> tr
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>>> w.
>>>>>>>>>>> pa
>>>>>>>>>>> tr>
>>>>>>>>>>> eon.com
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>>> .c
>>>>>>>>>>> om
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>>> 59
>>>>>>>>>>> 03
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>> 7C636554402926763835&sda
>>>>>>>>>>> ta
>>>>>>>>>>> =G
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>>> 2Fpiotrzar
>>>>>>>>>>> zy
>>>>>>>>>>> ck
>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%
>>>>>>>>>>>2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharui%40adob
>>>>>>>>>>>e.com%7C9ba2ae2d1a6e4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed
>>>>>>>>>>>2c178decee1%7C0%7C0%7C636555451956879397&sdata=9%2BK%2FO6A3X%2FV
>>>>>>>>>>>r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0.
>>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>>> do
>>>>>>>>>>> be
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>>> 7e
>>>>>>>>>>> db
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>> 7C636554402926763835
>>>>>>>>>>> &s
>>>>>>>>>>> da
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>>> reserved=0>%7Cf2
>>>>>>>>>>> 5d
>>>>>>>>>>> bf
>>>>>>>>>>> 20138f47
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>>> cee1%7C0%7C0%7C6365
>>>>>>>>>>> 54
>>>>>>>>>>> 37
>>>>>>>>>>> 41
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>>> etW7oghI4s%3D&rese
>>>>>>>>>>> rv
>>>>>>>>>>> ed
>>>>>>>>>>> =0
>>>>>>>>>>>> *
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>>> 
>> 
>> 
>> -- 
>> 
>> Piotr Zarzycki
>> 
>> Patreon: 
>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e
>>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365554
>>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQoyfshLnt8lxqg%3D&reserved
>>=0
>> 
>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pat
>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e
>>4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365554
>>51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQoyfshLnt8lxqg%3D&reserved
>>=0>*
>


Re: TypeNames vs ClassName

Posted by Harbs <ha...@gmail.com>.
What do you think of the CSSClassList class I just committed?

I *think* that makes the pattern more recognizable and probably is less heavy if more than one class can be used.

Harbs

> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki <pi...@gmail.com> wrote:
> 
> Harbs, Alex,
> 
> I just pushed implementation of computeFinalClassNames to
> branch feature/type_names_class_name_issue124. You can review
> implementation in this commit [1] and example of usage in Card and Button.
> 
> I have tested with Harbs example [3] and with Card by changing orders. It's
> working.
> 
> [1] http://bit.ly/2HTHaFQ
> [2] http://bit.ly/2oJgKOf
> [3] http://bit.ly/2F734nx
> 
> Waiting for your review.
> 
> Thanks,
> Piotr
> 
> 
> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki <pi...@gmail.com>:
> 
>> Let me play with implementation of that function. It seems to me that will
>> be much cleaner than current solution.
>> 
>> If user actually wanted to do anythin with className - let the overriding
>> speaks.
>> 
>> 
>> 
>> On Wed, Feb 28, 2018, 21:51 Alex Harui <ah...@adobe.com.invalid> wrote:
>> 
>>> On 2/28/18, 12:27 PM, "Harbs" <ha...@gmail.com> wrote:
>>> 
>>>> OK. I think that will work for DML components, but what if there’s a bead
>>>> which needs to add class names? What would be the “right” way to do that?
>>>> A bead cannot override the function on the strand.
>>> 
>>> Do we have beads that manipulate className?
>>> 
>>> IMO, the principle behind how to handle that is knowing whether you are
>>> sharing something or not.  There may not be one right way to handle it,
>>> but if I had to handle it, I would have the bead set something in the
>>> model or presentation model of the component.  And the component would
>>> override computeFinalClassNames to take that into account.
>>> 
>>> 
>>> Although having just written that, maybe this computeFinalClassNames
>>> should be in the view instead of on the base class so it is replaceable
>>> instead of overridable.
>>> 
>>> Thoughts?
>>> -Alex
>>>> 
>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>> wrote:
>>>>> 
>>>>> I think you are missing that the element.className is set to
>>>>> computeFinalClassNames.  So the user is welcome to manipulate the
>>>>> UIBase.className however they see fit.  They can assign it a whole new
>>>>> space-delimited list if they want.  But what gets set on
>>>>> element.className
>>>>> is computed from typeNames and className by default, and MDL would
>>>>> override it to factor in fab, raised, colored into the computing of the
>>>>> final classnames.
>>>>> 
>>>>> I would prefer that we don't make requirements on users as to what they
>>>>> can or can't do with the className property, like requiring them to use
>>>>> addClassName/removeClassNames.  MXML and States might set className,
>>> as
>>>>> could any other AS logic.  I think folks may even be used to setting
>>>>> className in JavaScript.  So letting UIBase.className be the "variable"
>>>>> part and having computeFinalClassNames be the way the "fixed" part is
>>>>> handled makes sense to me.
>>>>> 
>>>>> Of course, I could be wrong...
>>>>> -Alex
>>>>> 
>>>>> On 2/28/18, 12:03 PM, "Harbs" <ha...@gmail.com> wrote:
>>>>> 
>>>>>> The problem which sparked this whole issue is like this:
>>>>>> 
>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to the
>>>>>> class
>>>>>> names (such as “fab”, “raised”, “colored”, etc.
>>>>>> 2. The client might subsequently set the className to something else.
>>>>>> 3. When the component sets the “pieces” first and the client sets the
>>>>>> className later, the client will overwrite these “pieces” which were
>>>>>> added by the component.
>>>>>> 
>>>>>> My suggestion to have addClassName() and removeClassName() was to have
>>>>>> a
>>>>>> “safe” way to add class names which would get computed together with
>>>>>> the
>>>>>> className when the className is replaced.
>>>>>> 
>>>>>> The way you have it seems to just be modifying the existing className
>>>>>> property. If that’s overwritten by a client, the logic falls apart.
>>>>>> 
>>>>>> It feels like only having typeNames which are set inside the component
>>>>>> and className which is set outside the component is not really enough.
>>>>>> (Unless I’m missing something.)
>>>>>> 
>>>>>> Harbs
>>>>>> 
>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>>>> wrote:
>>>>>>> 
>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <ha...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> If it’s not public, I don’t see how a utility method could call it
>>>>>>>> though.
>>>>>>> 
>>>>>>> I didn't think the utility methods like addClassName/removeClassName
>>>>>>> would
>>>>>>> need to alter computeFinalClassNames().
>>>>>>> 
>>>>>>> AIUI, for most UIBase subclasses, the final element.className is a
>>> mix
>>>>>>> of
>>>>>>> the className property and the typeNames.  The typenames are thought
>>>>>>> to
>>>>>>> be
>>>>>>> "fixed" and the space-delimited list of names in className are the
>>>>>>> ones
>>>>>>> the user wants to manipulate in their code.  So, I would expect them
>>>>>>> to
>>>>>>> write:
>>>>>>> 
>>>>>>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles");
>>>>>>> 
>>>>>>> 
>>>>>>> addClassName should just do something like:
>>>>>>> 
>>>>>>> myComponent.className += value;
>>>>>>> 
>>>>>>> That will call the className setter that will run:
>>>>>>> 
>>>>>>> element.className = computeFinalClassNames();
>>>>>>> 
>>>>>>> If you call
>>>>>>> 
>>>>>>> org.apache.royale.utils.removeClassName(myComponent, "pinkStyles");
>>>>>>> 
>>>>>>> removeClassName should just do something like:
>>>>>>> 
>>>>>>> Var s:String = myComponent.className;
>>>>>>> Var c:int = s.indexOf(nameToRemove + " ");
>>>>>>> If (c != -1)
>>>>>>>   s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1);
>>>>>>> Else
>>>>>>> {
>>>>>>>   c= s.indexOf(" " + nameToRemove);
>>>>>>>   if (c != -1)
>>>>>>>     s = s.substr(0, c);  // remove last item
>>>>>>> }
>>>>>>> myComponent.className = s;
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> It seems like it should be that simple.  What am I missing?
>>>>>>> 
>>>>>>> -Alex
>>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui <ah...@adobe.com.INVALID>
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>>>>>>>>> <ma...@gmail.com>> wrote:
>>>>>>>>> 
>>>>>>>>>> Ok Understand, but do you agree that  computeFinalClassNames - is
>>>>>>>>>> something
>>>>>>>>>> which is in the UIBase ?
>>>>>>>>> 
>>>>>>>>> Yes, and probably protected instead of public.  The one in UIBase
>>>>>>>>> just
>>>>>>>>> appends typenames to className.  It gets overridden in MDL where
>>>>>>>>> needed
>>>>>>>>> for shadow and other attributes.
>>>>>>>>> 
>>>>>>>>> My 2 cents,
>>>>>>>>> -Alex
>>>>>>>>>> 
>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui <ah...@adobe.com.invalid>:
>>>>>>>>>> 
>>>>>>>>>>> I think that in the shadow setter, it would change _shadow and
>>>>>>>>>>> call
>>>>>>>>>>> setClassName(computeFinalClassNames());
>>>>>>>>>>> 
>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>>>> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Alex,
>>>>>>>>>>>> 
>>>>>>>>>>>> So we are getting back to the idea where you proposed to have
>>>>>>>>>>>> function
>>>>>>>>>>>> which computes everything.
>>>>>>>>>>>> 
>>>>>>>>>>>> override public function computeFinalClassNames():String
>>>>>>>>>>>> {
>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow;
>>>>>>>>>>>> }
>>>>>>>>>>>> 
>>>>>>>>>>>> Where does that function should be placed ? Does that function
>>>>>>>>>>>> should
>>>>>>>>>>> be
>>>>>>>>>>>> called in addedToParent plus whenever someone change _shadow ? -
>>>>>>>>>>>> 
>>>>>>>>>>>> Because I really don't know how to handle scenario where you
>>> have
>>>>>>>>>>>> some
>>>>>>>>>>>> property isActive = true/false and I need to add/remove class. -
>>>>>>>>>>>> In
>>>>>>>>>>>> the
>>>>>>>>>>>> first launch I use  computeFinalClassNames, but how to handle
>>>>>>>>>>>> changing
>>>>>>>>>>> ?
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui <aharui@adobe.com.invalid
>>>> :
>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I think am I not communicating the principles effectively.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not be in
>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>> Lots of apps can be written without needing these methods.  I
>>>>>>>>>>>>> think
>>>>>>>>>>> they
>>>>>>>>>>>>> can be written as utility functions.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Second, the computation of the final element.className should
>>>>>>>>>>> represent
>>>>>>>>>>>>> the state of the component, so I don't get why you need an
>>>>>>>>>>>>> _internalClassName or should ever set it to "".  The
>>> computation
>>>>>>>>>>>>> for
>>>>>>>>>>> a
>>>>>>>>>>>>> component with a shadow would be to check the shadow property
>>>>>>>>>>>>> and
>>>>>>>>>>>>> if
>>>>>>>>>>> it
>>>>>>>>>>>>> is
>>>>>>>>>>>>> true, add a className for the shadow to the list.  Then I think
>>>>>>>>>>>>> you
>>>>>>>>>>>>> wouldn't have the problem you showed in the animated GIF.  When
>>>>>>>>>>>>> the
>>>>>>>>>>>>> classname property is set from the outside by
>>>>>>>>>>>>> MXMLDataInterpreter
>>>>>>>>>>>>> or
>>>>>>>>>>>>> even
>>>>>>>>>>>>> user-written code, those classNames are added to the list with
>>>>>>>>>>>>> the
>>>>>>>>>>>>> typeNames and the shadow className if shadow is true and then
>>>>>>>>>>>>> set
>>>>>>>>>>>>> on
>>>>>>>>>>> the
>>>>>>>>>>>>> element.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all other
>>>>>>>>>>>>> Royale
>>>>>>>>>>>>> code,
>>>>>>>>>>>>> we don't want to do much if any parameter checking.  That is
>>>>>>>>>>>>> also
>>>>>>>>>>>>> just-in-case code.  The production code should not be passing
>>> in
>>>>>>>>>>> null or
>>>>>>>>>>>>> other bad values.  And once you fix that, then the checks that
>>>>>>>>>>>>> you
>>>>>>>>>>> have
>>>>>>>>>>>>> written do not add value.  I have proposed that there are
>>>>>>>>>>>>> debug-only
>>>>>>>>>>>>> code
>>>>>>>>>>>>> that does parameter checking.  There is a goog.DEBUG flag you
>>>>>>>>>>>>> can
>>>>>>>>>>>>> use
>>>>>>>>>>>>> for
>>>>>>>>>>>>> that.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> HTH,
>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki"
>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi Alex,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF with
>>>>>>>>>>> problem
>>>>>>>>>>>>>> debugging.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> *Code in UIBase which I have implemented:*
>>>>>>>>>>>>>> addClassName and removeClassName [1].
>>>>>>>>>>>>>> addedToParent what is happen with internal field which I have
>>>>>>>>>>>>>> added
>>>>>>>>>>> [2]
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than
>>>>>>>>>>>>>> shadow.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay attention
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> moment
>>>>>>>>>>>>>> where className is being wiped out, later I have to use my
>>>>>>>>>>>>>> internal
>>>>>>>>>>>>>> variable to get it back.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Does that more clean now ?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&
>>> reserve
>>>>>>>>>>>>>> d=
>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>> [2]
>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK
>>> Nejwm4Sr7bw7g%3D&reserved=0
>>>>>>>>>>>>>> [3]
>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa
>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d
>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>>>>>>>>>>>> 7C636554040718214998&
>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc
>>> zSltcNccqRGDo%3D&reserved=0
>>>>>>>>>>>>>> [4]
>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ
>>> &data=02%7C01%7Caharui%40ad
>>>>>>>>>>>>>> ob
>>>>>>>>>>>>>> e
>>>>>>>>>>> .com
>>>>>>>>>>>>> %7C
>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%
>>> 7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>> cee1%7C0%7C
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%
>>> 2BdQJjcpYtMkk1pw3r0iVkdR
>>>>>>>>>>>>>> a%
>>>>>>>>>>>>> 2F6TWRTG
>>>>>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Piotr
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui
>>>>>>>>>>>>>> <ah...@adobe.com.invalid>:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Hi Piotr,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I could not understand this explanation. Might be better to
>>>>>>>>>>>>>>> show
>>>>>>>>>>>>> actual
>>>>>>>>>>>>>>> code.  For example in #3, there is a cssClass variable that I
>>>>>>>>>>> don't
>>>>>>>>>>>>> know
>>>>>>>>>>>>>>> about.  Also you mention at the bottom setting something as
>>>>>>>>>>>>>>> empty,
>>>>>>>>>>>>> but
>>>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>> not sure what that is.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions, not
>>> in
>>>>>>>>>>>>> UIBase.
>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> think plenty of useful applications can be built without
>>>>>>>>>>>>>>> changing
>>>>>>>>>>>>>>> classNames at runtime.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick this
>>> up
>>>>>>>>>>> again
>>>>>>>>>>>>> in
>>>>>>>>>>>>>>> your morning.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks for working on it,
>>>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki"
>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would take
>>>>>>>>>>> Harb's
>>>>>>>>>>>>>>>> proposition and add to UIBase  addClassName() and
>>>>>>>>>>> removeClassName().
>>>>>>>>>>>>>>> Next
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>> would add internal field _internalClassName:String.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> addClassName(value):
>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in _className and
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> _internalClassName.
>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value
>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following way:
>>>>>>>>>>>>>>> element.className
>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames;
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> removeClassName(value)
>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in  _className
>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> _internalClassName
>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name exists.
>>>>>>>>>>>>>>>> _className.replace(value, "");
>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className =
>>>>>>>>>>> _className
>>>>>>>>>>>>> + "
>>>>>>>>>>>>>>> " +
>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName with
>>>>>>>>>>>>> _className
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> element.className =  _internalClassName  + " " + _className
>>>>>>>>>>>>>>>> + "
>>>>>>>>>>> " +
>>>>>>>>>>>>>>>> typeNames;
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I have implemented it and it seems to be working. Waiting
>>> for
>>>>>>>>>>> your
>>>>>>>>>>>>>>>> thoughts
>>>>>>>>>>>>>>>> on that solution. The last step where we are adding all
>>> three
>>>>>>>>>>>>> fields is
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and removeClassName
>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>> necessary,
>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate classes
>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>> component
>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on
>>>>>>>>>>>>>>>> demand.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki
>>>>>>>>>>>>> <pi...@gmail.com>:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some
>>>>>>>>>>>>>>>>> implementation
>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks, Piotr
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs <ha...@gmail.com>:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>> <pi...@gmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Harbs,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in your
>>>>>>>>>>>>>>> application
>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break for
>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> anything.
>>>>>>>>>>>>>>>>>> :)
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>> rved=0
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat
>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>>>>>>> %7C45a065853ba1
>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536
>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese
>>>>>>>>>>>>>>>>> rved=0>*
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>> =0
>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>>>> 7C45a065853ba14a
>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694
>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK
>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved
>>>>>>>>>>>>>>>> =0>*
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Patreon:
>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>> %
>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>> ed=0
>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>>>> 7Cee5c84b4e3ff4d
>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%
>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc
>>>>>>>>>>>>>> %
>>>>>>>>>>>>> 3D&reserv
>>>>>>>>>>>>>> ed=0>*
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> --
>>>>>>>>>>>> 
>>>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>>>> 
>>>>>>>>>>>> Patreon:
>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>> oJqA6J42ZuhcA%3D&rese
>>>>>>>>>>>> rv
>>>>>>>>>>>> ed
>>>>>>>>>>>> =0
>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>>>> https%3A%2F%2Fwww.patr
>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%
>>>>>>>>>>> 7Cda0fd75922c94d
>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>>>> cee1%7C0%7C0%7C6365543602
>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0
>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>*
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> --
>>>>>>>>>> 
>>>>>>>>>> Piotr Zarzycki
>>>>>>>>>> 
>>>>>>>>>> Patreon:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> *https://na01.safelinks.protection.outlook.
>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>> w.
>>>>>>>>>> pa
>>>>>>>>>> tr
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>> w.
>>>>>>>>>> pa
>>>>>>>>>> tr>
>>>>>>>>>> eon.com
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>> .c
>>>>>>>>>> om
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>> 59
>>>>>>>>>> 03
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>> 7C636554402926763835&sda
>>>>>>>>>> ta
>>>>>>>>>> =G
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>> 2Fpiotrzar
>>>>>>>>>> zy
>>>>>>>>>> ck
>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>> do
>>>>>>>>>> be
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>> 7e
>>>>>>>>>> db
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>> 7C636554402926763835
>>>>>>>>>> &s
>>>>>>>>>> da
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>> reserved=0>%7Cf2
>>>>>>>>>> 5d
>>>>>>>>>> bf
>>>>>>>>>> 20138f47
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>> cee1%7C0%7C0%7C6365
>>>>>>>>>> 54
>>>>>>>>>> 37
>>>>>>>>>> 41
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>> etW7oghI4s%3D&rese
>>>>>>>>>> rv
>>>>>>>>>> ed
>>>>>>>>>> =0
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>> w.
>>>>>>>>>> pa
>>>>>>>>>> tr
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=https%3A%2F%2Fww
>>>>>>>>>> w.
>>>>>>>>>> pa
>>>>>>>>>> tr>
>>>>>>>>>> eon.com
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=http%3A%2F%2Feon
>>>>>>>>>> .c
>>>>>>>>>> om
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%
>>> 7C75519f53f52b4fde36b108d57edb
>>>>>>>>>> 59
>>>>>>>>>> 03
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>> 7C636554402926763835&sda
>>>>>>>>>> ta
>>>>>>>>>> =G
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%
>>> 2Fpiotrzar
>>>>>>>>>> zy
>>>>>>>>>> ck
>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> <https://na01.safelinks.protection.outlook.
>>> com/?url=http%3A%2F%2F40a
>>>>>>>>>> do
>>>>>>>>>> be
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%
>>> 7C75519f53f52b4fde36b108d5
>>>>>>>>>> 7e
>>>>>>>>>> db
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>>> 7C636554402926763835
>>>>>>>>>> &s
>>>>>>>>>> da
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&
>>> reserved=0>%7Cf2
>>>>>>>>>> 5d
>>>>>>>>>> bf
>>>>>>>>>> 20138f47
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de
>>> cee1%7C0%7C0%7C6365
>>>>>>>>>> 54
>>>>>>>>>> 37
>>>>>>>>>> 41
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS
>>> etW7oghI4s%3D&rese
>>>>>>>>>> rv
>>>>>>>>>> ed
>>>>>>>>>> =0
>>>>>>>>>>> *
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
> 
> 
> -- 
> 
> Piotr Zarzycki
> 
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*