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