I’m working on refactoring this. Is there a reason for the null check in UIBase.createElement()?
Why would createElement be called if the element is already created? None of the subclasses have this null check. if (element == null) element = document.createElement('div') as WrappedHTMLElement; Do you think it’s safe to remove the check? > On Sep 26, 2017, at 6:42 PM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > I believe there are components where more than one HTMLElement is created > but only one is (and can be) assigned as "element" but all have > flexjs_wrapper assigned to the wrapping IUIBase. > > If in fact no components need a separate positioner, it is fine to remove > it. But if we keep it, even as a getter returning element, we have to > make sure our code that positions things uses positioner and not element > in case someone does try to override positioner some day. > > As Peter mentioned, the original thinking was that element would be the > HTMLElement that defines the node in the DOM that dispatches interaction > events, but positioner might be some parent of the element like a Div used > to give the element appropriate visuals, chrome, accessory widgets, etc, > like NumericStepper, ComboBox, DateField, and maybe more sophisticated > components like a RichTextEditor where the "element" is a Div that gets > focus and holds the text lines, but is a child of a positioner Div that > also contains child buttons for bold/italic/underline. Another example > may be VideoPlayback. The element might be some sort of video widget but > the positioner might be a div that also contains child buttons for > stop/pause/rewind/forward. > > Of course, I could be wrong... > -Alex > > On 9/26/17, 6:27 AM, "Peter Ent" <p...@adobe.com.INVALID> wrote: > >> @Harbs: yes on get positioner returning element. This way someone could >> override the getter and return something else if it suited their needs. >> >> —peter >> >> On 9/26/17, 9:25 AM, "Harbs" <harbs.li...@gmail.com> wrote: >> >>> I looked at MDL and I don’t see any problem there. >>> >>> I’m talking about simplifying things across the board. I don’t see how it >>> could effect anything. >>> >>> @Peter I think removing positioner might not be a bad idea, but keeping >>> it and using it as a pointer to element is basically just as cheap. >>> >>>> On Sep 26, 2017, at 4:12 PM, Piotr Zarzycki <piotrzarzyck...@gmail.com> >>>> wrote: >>>> >>>> Hi Harbs, >>>> >>>> If you will do such changes like moving to set flexjs_wrapper in the >>>> setter >>>> of element - please make it on the separate branch. Let me test with my >>>> app >>>> whether MDL will not breaking up. I hope that we could avoid this one, >>>> even >>>> if I think that it seems to be quite reasonable to do that. >>>> >>>> Can you for example do this only for your custom component not for the >>>> global IUIBase class ? >>>> >>>> Let see what Peter say. >>>> >>>> Thanks, Piotr >>>> >>>> >>>> 2017-09-26 15:02 GMT+02:00 Harbs <harbs.li...@gmail.com>: >>>> >>>>> Yishay and I were working on drag/drop today and we were modifying one >>>>> of >>>>> the classes you wrote for generating the drag image. >>>>> >>>>> The code can be simplified by using cloneNode() and stuffing the >>>>> results >>>>> into the element. The thing is, it does not work until you assign the >>>>> flexjs_wrapper to the element. IMO, calling the element setter should >>>>> do >>>>> that automatically. >>>>> >>>>> On a similar note, Every IUIBase object has a positioner set. I don’t >>>>> know >>>>> of a single class which has a different positioner than the element. >>>>> It >>>>> seems to me that positioner should be a getter (which normally returns >>>>> the >>>>> element) that’s overridden for classes which need a different one. >>>>> That >>>>> will save memory for every IUIBase created. >>>>> >>>>> Harbs >>>>> >>>>>> On Sep 26, 2017, at 3:23 PM, Peter Ent <p...@adobe.com.INVALID> >>>>>> wrote: >>>>>> >>>>>> The setter for element is in HTMLElementWrapper, the super class for >>>>>> UIBase. The setter for flexes_wrapper is in UIBase. So if the element >>>>>> setter were to also set the flexjs_wrapper, it would have to be an >>>>>> override in UIBase to do it. At least that¹s how I understand it. >>>>>> >>>>>> Could you elaborate a little more on the issue that is raising this >>>>>> concern? >>>>>> >>>>>> Your question made me scan through these classes. Looking at this >>>>>> code >>>>> now >>>>>> makes me think we can do a better and more consistent job organizing >>>>>> it >>>>>> for Royale. After all, having code that can be quickly understood and >>>>>> modified is important. >>>>>> >>>>>> ‹peter >>>>>> >>>>>> On 9/26/17, 7:13 AM, "Harbs" <harbs.li...@gmail.com> wrote: >>>>>> >>>>>>> Currently, setting the element of a IUIBase will not work correctly >>>>>>> because the flexjs_wrapper is not set. This makes it error prone >>>>>>> when >>>>>>> there¹s a need to work with the underlying DOM elements for HTML >>>>>>> output. >>>>>>> >>>>>>> I cannot think of a reason why the wrapper should not be set when >>>>> calling >>>>>>> the element setter. Instead of setting the flexjs_wrapper in >>>>>>> createElement(), it seems to me that it should be set in the element >>>>>>> setter in HTMLElementWrapper. >>>>>>> >>>>>>> Anyone have a reason not to do this? >>>>>>> >>>>>>> Harbs >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> Piotr Zarzycki >>>> >>>> mobile: +48 880 859 557 >>>> skype: zarzycki10 >>>> >>>> LinkedIn: >>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.link >>>> e >>>> din.com%2Fpiotrzarzycki&data=02%7C01%7C%7C6716901213624a0e804708d504e203 >>>> 9 >>>> f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636420291136295544&sdata= >>>> f >>>> Q1CjLGkCpNKxSQBmZn%2BnKZEplQpGl25XACOqq0gO2o%3D&reserved=0 >>>> >>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpl.lin >>>> k >>>> edin.com%2Fin%2Fpiotr-zarzycki-92a53552&data=02%7C01%7C%7C6716901213624a >>>> 0 >>>> e804708d504e2039f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636420291 >>>> 1 >>>> 36295544&sdata=LzIej2n6WVnm9AG1Hi4NqIZjOQS%2Byo4w%2BPYTX0Rq8Gc%3D&reserv >>>> e >>>> d=0> >>>> >>>> GitHub: >>>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub. >>>> c >>>> om%2Fpiotrzarzycki21&data=02%7C01%7C%7C6716901213624a0e804708d504e2039f% >>>> 7 >>>> Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636420291136295544&sdata=WeI >>>> l >>>> LzVsJzRKniD1r9F2xb%2BwljhCLHnurBnl03kBM9E%3D&reserved=0 >>> >> >