Quick reply on the stats: while on a downward trend, IE6 + 7 + 8 is > 33%.
A cool third of all browsers. Given their generally conservative attitude
towards upgrading software, my educated guess would be that this percentage
is (much) higher in the enterprise.

I have no idea how to add 'goog.events' as a polyfil, as it is compiled
into the code on publishing, long before we know which browser we're
addressing.

EdB



On Friday, April 26, 2013, Alex Harui wrote:

>
>
>
> On 4/26/13 2:24 AM, "Erik de Bruin" <e...@ixsoftware.nl> wrote:
>
> > Ok, since you apparently don't trust my expertise on this, and I care
> > too much about this project to just let you figure this out when
> > things start breaking, an analysis of the current solution and why I
> > think 'goog.events' is superior:
> Hi Erik,
>
> Thanks for the detail analysis.  That was very helpful and the kind of
> thing
> I was looking for.  It is not an issue of trust, it is about having
> objective criteria recorded somewhere so we can look back later and know
> why
> we made a decision.
>
> I should have provided my line of thinking earlier.  It is this:
>
> The top browser market share looks like this based on [1].
>  Microsoft Internet Explorer 8.0    23.23%
>  Microsoft Internet Explorer 9.0    20.62%
>  Firefox 19    13.55%
>  Chrome 25.0    13.42%
>  (everything else is below 10%)
>
> I think we can all agree that IE8 is on a downward trend.  Of the remaining
> (IE9, FF, Chrome), it appears that they have all standardized on DOMEvents.
> Is this not true?  Because if they have, then the code minimalist in me
> would want to just use the built-in browser code and handle IE8 as a
> polyfill.  If they haven't standardized, then you can stop reading and
> check
> in your changes.
>
> >
> > The current solution is actually 3 solutions: the one in
> > 'HTMLElementWrapper', the one in 'EventDispatcher' and finally
> > 'IE8Utils'. The first wraps DOM events, the second is a custom
> > solution to manage non-DOM events, number 3 combines both approaches.
> > What if someone want to write a component that extends
> > HTMLElementWrapper but wants to use a non-DOM event? Wait, that is
> > what already happens in 'Application'. There you have to override
> > 'addEventListener' (without the JSDoc indicating you did), basically
> > creating a fourth implementation.
> >
> > 'removeEventListener' is only implemented on instances of
> > 'HTMLElementWrapper' meaning there is no way to remove event listeners
> > added through the other 3 implementations.
> >
> > 'createEvent' uses 'document.createEvent' and 'document.initEvent',
> > both which are deprecated by Mozilla [1], not exactly improving the
> > future-proofness of the current solution. All events are created with
> > both 'canBubble' and 'cancelable' set to false, without the ability to
> > change this. The IE8 implementation - using
> > 'document.createEventObject' - is not separated out like other IE8
> > specific implementations.
> >
> Good point about other objects dispatching events that don't wrap DOM
> objects and that the IE8 impl is not fully separated out, but I think you
> are misinterpreting the other code you found, especially what is going on
> in
> Application.  My bad for not putting comments on that.  Regarding
> createEvent, isn't it true that for the non-IE8 browsers listed above you
> can just call "new Event()" and use custom event "types" (like "initialize"
> or "idChanged") or is that still not standardized?  If that's not
> standardized, then again, you can stop reading and check in.
>
> > The 'IE8Utils.EventMap' is by no means complete. It also uses the 'on'
> > prefix that is never added to the event type specification anywhere in
> > the framework. This means all IE8 events fail the 'EventMap' test and
> > are handled as custom events...
> Yup, that's why I am now in favor of using goog.events for IE8.
> >
> > I could go on (trust me?), but I think the above is enough to make my
> > case and I don't feel like spending a lot of time on this anymore.
> >
> > TL;DR: there are currently 4 (!) possibly conflicting and certainly
> > confusing partial implementations of an event handling system. I
> > suggest we replace this with one thoroughly tested and real world
> > proofed solution, which I already implemented and is ready to go.
> So there isn't 4, but there is 3.  I could be wrong, but I didn't think the
> dividing line was whether you were sending a DOM event or not, but whether
> you were wrapping a built-in object that could dispatch events.  Then the
> three are:
> 1) wrapped built-ins (Label, Button, and even HTTPService)
> 2) other stuff (Timer appears to be the only example right now)
> 3) IE8
>
> The code-minimalist, pay-as-you-go philosophy says that folks who don't
> care
> about IE8 and build an app entirely out of pieces in #1 (which is totally
> possible and probable, especially for apps intended for mobile) shouldn't
> need to carry goog.events around.
>
> I think goog.events is a bit heavy for #2 since it doesn't need
> bubble/capture, but I'm now ok with using it there for now.  Maybe we'll
> find a smaller implementation someday, maybe not.
>
> And I'm now all for using goog.events for #3.
>
> But again, this all presumes the browsers other than IE8 have standardized
> on their event API which means:
> A) use of "new Event() instead of createEvent/initEvent
> B) I can pass any string I want into "new Event()"
>
> Thoughts?  And thanks again for taking the time.
>
> [1]
>
> http://marketshare.hitslink.com/browser-market-share.aspx?qprid=2&qpcustomd=
> 0
>
> --
> Alex Harui
> Flex SDK Team
> Adobe Systems, Inc.
> http://blogs.adobe.com/aharui
>
>

-- 
Ix Multimedia Software

Jan Luykenstraat 27
3521 VB Utrecht

T. 06-51952295
I. www.ixsoftware.nl

Reply via email to