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>*