royale-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com.INVALID>
Subject Re: TypeNames vs ClassName
Date Fri, 02 Mar 2018 02:26:59 GMT
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" <harbs.lists@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%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 <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 <aharui@adobe.com.invalid>
>>>wrote:
>>> 
>>>> On 2/28/18, 12:27 PM, "Harbs" <harbs.lists@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" <harbs.lists@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" <harbs.lists@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
>>>>>>>>>><aharui@adobe.com.INVALID>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzycki21@gmail.com
>>>>>>>>>> <mailto:piotrzarzycki21@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
>>>>>>>>>>><aharui@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"
>>>>>>>>>>>>>> <piotrzarzycki21@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
>>>>>>>>>>>>>>> <aharui@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"
>>>>>>>>>>>>>>>> <piotrzarzycki21@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
>>>>>>>>>>>>>> <piotrzarzycki21@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
>>>>>>>>>>>>>>>>>><harbs.lists@gmail.com>:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>>>>>>> <piotrzarzycki21@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>*
>

Mime
View raw message