What do you think of the CSSClassList class I just committed?

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

Harbs

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

Reply via email to