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 <[email protected]>:

> 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" <[email protected]> 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 <[email protected]>
> >>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 <[email protected]>:
> >>
> >>> 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 <[email protected]>
> >>>wrote:
> >>>
> >>>> On 2/28/18, 12:27 PM, "Harbs" <[email protected]> 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 <[email protected]>
> >>>>>> 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" <[email protected]> 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 <[email protected]
> >
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <[email protected]> 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
> >>>>>>>>>><[email protected]>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
> [email protected]
> >>>>>>>>>> <mailto:[email protected]>> 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
> >>>>>>>>>>><[email protected]>:
> >>>>>>>>>>>
> >>>>>>>>>>>> I think that in the shadow setter, it would change _shadow and
> >>>>>>>>>>>> call
> >>>>>>>>>>>> setClassName(computeFinalClassNames());
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki"
> >>>>>>>>>>>><[email protected]
> >>>>>
> >>>>>>>>>>>> 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
> >>>>>>>>>>>>><[email protected]
> >>>>> :
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> 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"
> >>>>>>>>>>>>>> <[email protected]>
> >>>>>>>>>>>>>> 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
> >>>>>>>>>>>>>>> <[email protected]>:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 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"
> >>>>>>>>>>>>>>>> <[email protected]>
> >>>>>>>>>>>>>> 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
> >>>>>>>>>>>>>> <[email protected]>:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> 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
> >>>>>>>>>>>>>>>>>><[email protected]>:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>> <[email protected]>
> >>>>>>>>>>>>>>>>>>> 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>*

Reply via email to