Understand! :) Now I can agree with you that typeNames could be protected. Definitely.
Let me play farther with MDL and see where I end up. On Fri, Feb 23, 2018, 18:28 Alex Harui <aha...@adobe.com.invalid> wrote: > > > On 2/23/18, 8:50 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> wrote: > > >Just the opposite. The typeNames get rid of everything what is setup in > >the > >classList. > > > >But className is being add typeNames. This is what is happen: > > > >typeNames=mdl-card > >classList.add("someclass") > > > >In addedToParent: > >className += typeNames > >classList is being wipped out and filled by className. > > > >That is ok? > > I don't know if that is "ok", but that is expected because you are > manipulating element.classList directly but element.classList is mapped to > className + typeNames. > > Here's a rough analogy: If you have an ArrayList wrap and track an Array > and then directly manipulate the Array, you can't guarantee that the > ArrayList will still track the array. > > UIBase wraps an HTMLElement. The APIs on UIBase are supposed to be > proxied into the element. If you manipulate the element directly, you > have to sync up the wrapper's properties. > > Either work with the UIBase APIs to get the classList you want, or after > manipulating classList, update classNames as needed so the next setting of > className or the addToParent call does not disturb your manipulated > classList. > > -Alex > > > >On Fri, Feb 23, 2018, 17:26 Alex Harui <aha...@adobe.com.invalid> wrote: > > > >> TypeNames is supposed to override what is in classList. ClassList > >>should > >> contain two sets of names. Immutable ones that come from typeNames like > >> TextInput or Card that map to the component that is pointed to by > >> element.royale_wrapper. That allows us to "extend" the set of > >> TypeSelectors as folks in Flex are used to. Then the rest of the names > >>in > >> classList map to className that custom Views or the user can set. > >> > >> So if your code wants to manipulate classList directly, it might be > >>easier > >> to manipulate className, or else, re-populate classname after > >>manipulating > >> classList by updating className with everything other than what is > >> specified in typeNames. > >> > >> If you are saying that the shadow code is trying to get rid of whatever > >> was specified in typeNames, I suppose that's "ok" but that would be a > >>new > >> pattern. It is more likely that if typeNames was set to Card that there > >> should be few if any properties in the Card selector that shadow should > >> affect. There really shouldn't be a reason to kick the names in > >>typenames > >> out of the classList. > >> > >> Of course, I could be wrong... > >> -Alex > >> > >> On 2/23/18, 8:16 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> > wrote: > >> > >> >Reading what you are saying here regarding classList and className w > >>have > >> >a > >> >bug. typeNames shouldn't override what is inside classList, but this is > >> >what has happened in addedToParent. > >> > > >> >Am I understand you correctly? > >> > > >> > > >> >On Fri, Feb 23, 2018, 17:11 Alex Harui <aha...@adobe.com.invalid> > >>wrote: > >> > > >> >> > >> >> > >> >> On 2/23/18, 7:32 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> > >> wrote: > >> >> > >> >> >Alex, > >> >> > > >> >> >I have started to work on MDL and move all typeNames from > >> >>createElement to > >> >> >constructor. Unfortunately something is not right here. > >> >> > > >> >> >1) I still need to exclude BasicJS.swc:default.css - I did add > >>theme to > >> >> >MaterialDesignLite module maven build - it didn't help. > >> >> >2) If I cannot setup typeNames and classNames inside my component, > >>how > >> >>can > >> >> >I achieve switching some UI parts of the component ? In MDL it is > >>quite > >> >> >common that if I would like to change component I'm adding to it css > >> >> >class. > >> >> >[1] - This is the example. If I remove line it doesn't work. There > >>are > >> >> >several places in MDL where we are doing such things. It is common > >>in > >> >>JS > >> >> >world doing such things. > >> >> > >> >> That's because the JS world doesn't have strong typing. They can > >> >> transform a TextInput into a TextArea and not care. I suspect that > >>if > >> >>you > >> >> set shadow at runtime it won't have an effect because typeNames is > >>not > >> >> re-evaluated after adddedToParent. The className property is > >>suppose to > >> >> combine with typeNames and result in the element.classList by setting > >> >>(in > >> >> addedToParent) the element.className to the space-separated list of > >> >> everything in typeNames and className. So, if MDL code manipulates > >> >> element.classList, I think it should be echoing those changes into > >>the > >> >> className property, not typeNames. typeNames should be considered > >> >> "write-once" or "write during constructor" and not changed > >>afterwards. > >> >>It > >> >> is the set of things that go in the element.classList that should be > >> >> immutable. As immutable as declaring a true subclass. className is > >>for > >> >> the things that go in element.classList that can change at runtime. > >> >> > >> >> My 2 cents, > >> >> -Alex > >> >> > >> >> > > >> >> >typeNames = element.className; > >> >> > > >> >> >Thoughts ? > >> >> > > >> >> >[1] > >> >> > > >> >> > >> >> > >> > >> > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.ap > >> >>a > >> >> >che.org%2Fat0H&data=02%7C01%7Caharui%40adobe.com > >> >> %7C55b6f3b3cb1b40e46bf108d > >> >> > >> > >>>>>57ad2b6df%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636549967805810 > >>>>>82 > >> >>>9& > >> >> >sdata=i9EZFYDPNqo4lakPPe1lB0NDfajXmqhMnDX7bxiBecc%3D&reserved=0 > >> >> > > >> >> >Thanks, > >> >> >Piotr > >> >> > > >> >> > > >> >> >2018-02-23 15:55 GMT+01:00 Piotr Zarzycki > >><piotrzarzyck...@gmail.com>: > >> >> > > >> >> >> Peter, > >> >> >> > >> >> >> That is interesting what you are saying. What will happen then if > >>you > >> >> >>have > >> >> >> class which extends other one. The parent class is setting > >>typeNames > >> >>and > >> >> >> derived one also before super? The parent one will override it? > >> >> >> > >> >> >> I cannot check now how typeNames is implemented. > >> >> >> > >> >> >> Piotr > >> >> >> > >> >> >> > >> >> >> On Fri, Feb 23, 2018, 15:13 Peter Ent <p...@adobe.com.invalid> > >> wrote: > >> >> >> > >> >> >>> I have been guilty of this and have been using typeNames now. > >>I've > >> >> >>>found > >> >> >>> that I need to set typeNames before calling super() in the > >> >> >>>constructor. I > >> >> >>> thought it was done afterwards, but if I set typeNames after > >>calling > >> >> >>> super(), the typeName I set does not show up in the HTML > >>produced. > >> >> >>> > >> >> >>> Also, suppose I have this: A Menu with a label inside of it. > >>People > >> >> >>>will > >> >> >>> want to change the background color of the menu and the color of > >>the > >> >> >>> label's text. If I were doing this in plain HTML/JS/CSS, I would > >> >>set a > >> >> >>> selector: .Menu .Label { color: blue; } but that's not > >>supported in > >> >> >>>the > >> >> >>> Flash Player. So when I set up the typeName for the label inside > >>of > >> >>the > >> >> >>> Menu should I set it to: Menu_Label or MenuLabel or Menu-Label? > >>And > >> >>is > >> >> >>> using "." in a selector name a good idea? I would think the CSS > >> >> >>>processor > >> >> >>> in the browser would be confused between ".x.y" and ".x .y" which > >> >>can > >> >> >>>also > >> >> >>> be written as ".x.y". Basically, we should have a consist naming > >> >> >>>pattern > >> >> >>> here. > >> >> >>> > >> >> >>> ‹peter > >> >> >>> > >> >> >>> On 2/23/18, 4:09 AM, "Gabe Harbs" <harbs.li...@gmail.com> wrote: > >> >> >>> > >> >> >>> >There¹s some edge cases which seem problematic. One example: > >> >> >>> >ComboBoxBiew has the following: > >> >> >>> > input = new TextInput(); > >> >> >>> > input.className = "ComboBoxTextInput"; > >> >> >>> > > >> >> >>> > button = new TextButton(); > >> >> >>> > button.className = > >> >> >>> >"opt_org-apache.royale-html-ComboBox_Button"; > >> >> >>> > > >> >> >>> >Input and button are both external to the view class, but are > >> >>managed > >> >> >>>by > >> >> >>> >the view class. On the other hand, there is a chance that the > >>user > >> >> >>>might > >> >> >>> >wan to style them. I¹m not sure whether className or typeNames > >>is > >> >>more > >> >> >>> >appropriate hereŠ > >> >> >>> > > >> >> >>> >Harbs > >> >> >>> > > >> >> >>> >> On Feb 23, 2018, at 11:03 AM, Gabe Harbs > >><harbs.li...@gmail.com> > >> >> >>> wrote: > >> >> >>> >> > >> >> >>> >> I¹ll help. > >> >> >>> >> > >> >> >>> >>> On Feb 23, 2018, at 10:50 AM, Alex Harui > >> >><aha...@adobe.com.INVALID > >> >> > > >> >> >>> >>>wrote: > >> >> >>> >>> > >> >> >>> >>> Quick note before I shut down for the night. > >> >> >>> >>> > >> >> >>> >>> UIBase has both a typeNames and className property. > >>TypeNames > >> >>is > >> >> >>>used > >> >> >>> >>>to > >> >> >>> >>> emulate Flex-like type selectors in the CSS lookup. It > >>should > >> >>be > >> >> >>>set > >> >> >>> >>>in > >> >> >>> >>> the constructor and never set from outside the class. There > >> >>are a > >> >> >>>few > >> >> >>> >>> classes in Basic and lots of classes in MDL that should be > >> >> >>>upgraded to > >> >> >>> >>>set > >> >> >>> >>> typeNames in the constructor. Subclasses can append to the > >>base > >> >> >>> >>>class's > >> >> >>> >>> typeNames > >> >> >>> >>> > >> >> >>> >>> className is the opposite. It should never be set inside the > >> >> >>> >>>component's > >> >> >>> >>> class. It is for users of that component to set styles on > >>the > >> >> >>> >>>component. > >> >> >>> >>> > >> >> >>> >>> Can we get a volunteer to clean this up? > >> >> >>> >>> > >> >> >>> >>> Thanks, > >> >> >>> >>> -Alex > >> >> >>> >>> > >> >> >>> >> > >> >> >>> > > >> >> >>> > >> >> >>> > >> >> > > >> >> > > >> >> >-- > >> >> > > >> >> >Piotr Zarzycki > >> >> > > >> >> >Patreon: > >> >> >* > >> >> > >> >> > >> > >> > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr > >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com > >> >> %7C55b6f3b3cb1b40 > >> >> > >> > >>>>>e46bf108d57ad2b6df%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636549 > >>>>>96 > >> >>>78 > >> >> > >> > >>>>>05810829&sdata=hwiCSurseLEKUg%2BlgYMmVVgrZvWqY3Q0VBckXnCiF8Q%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 > >> >> %7C55b6f3b3cb1b40 > >> >> > >> > >>>>>e46bf108d57ad2b6df%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636549 > >>>>>96 > >> >>>78 > >> >> > >> > >>>>>05810829&sdata=hwiCSurseLEKUg%2BlgYMmVVgrZvWqY3Q0VBckXnCiF8Q%3D&reserv > >>>>>ed > >> >>>=0 > >> >> >>* > >> >> > >> >> > >> > >> > >