If it’s not public, I don’t see how a utility method could call it though.

> 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&reserved=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=m6whImrP70u7kzRxCbErlxCHWef8TKNejwm4Sr7bw7g%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=tpeUYSQIXGXtES8hyr7zSeet528ZTczSltcNccqRGDo%3D&reserved=0
>>>>>> [4]
>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>> https%3A%2F%2F1drv.ms%2
>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ&data=02%7C01%7Caharui%40adobe
>>> .com
>>>>> %7C
>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>> cee1%7C0%7C
>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%2BdQJjcpYtMkk1pw3r0iVkdRa%
>>>>> 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=rypScmQqTsmVcrUIZRNnaoZP5VMbI0oJqA6J42ZuhcA%3D&reserved=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%2Fwww.patr 
>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr>
>> eon.com <http://eon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>> <http://40adobe.com/>%7Cf25dbf20138f47
>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365543741
>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserved=0
>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr 
>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr>
>> eon.com <http://eon.com/>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com 
>> <http://40adobe.com/>%7Cf25dbf20138f47
>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365543741
>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserved=0
>>> *

Reply via email to