Harbs,

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



2018-03-02 10:36 GMT+01:00 Harbs <harbs.li...@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 <piotrzarzyck...@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 <aha...@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" <harbs.li...@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 <
> piotrzarzyck...@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 <piotrzarzyck...@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 <aha...@adobe.com.invalid>
> >>>>> wrote:
> >>>>>
> >>>>>> On 2/28/18, 12:27 PM, "Harbs" <harbs.li...@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 <aha...@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.li...@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
> <aha...@adobe.com.INVALID
> >>>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <harbs.li...@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
> >>>>>>>>>>>> <aha...@adobe.com.INVALID>
> >>>>>>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <
> >> piotrzarzyck...@gmail.com
> >>>>>>>>>>>> <mailto:piotrzarzyck...@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
> >>>>>>>>>>>>> <aha...@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"
> >>>>>>>>>>>>>> <piotrzarzyck...@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
> >>>>>>>>>>>>>>> <aha...@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"
> >>>>>>>>>>>>>>>> <piotrzarzyck...@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
> >>>>>>>>>>>>>>>>> <aha...@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"
> >>>>>>>>>>>>>>>>>> <piotrzarzyck...@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
> >>>>>>>>>>>>>>>> <piotrzarzyck...@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.li...@gmail.com>:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
> >>>>>>>>>>>>>>>>>>>>> <piotrzarzyck...@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>*

Reply via email to