I've just committed a couple large API additions in a "layout" branch in our Git repository:
http://github.com/sstephenson/prototype/tree/layout http://github.com/sstephenson/prototype/blob/9d28f04d98307f652a2d85ff35e869f2e0ac7f38/src/dom/layout.js It's still very preliminary, but Element.Layout is meant to like a lazy-loading, memoized subclass of Hash. It gives measurements and offsets of practically any aspect an element's layout box. It's lazy- loading because some of these computations are costly and shouldn't be done unless strictly necessary. In other words, I can do something like this... var foo = $('foo'); var layout = foo.getLayout(); var width = layout.get('width'); // 144 (or some other number) var marginBoxWidth = layout.get('margin-box-width'); // 164 (content + padding + border + margin) Behind the scenes, it determined the "width" (i.e., the content box width) by taking the offsetWidth property from the element (which is the width of the element's "border box") and subtracting the computed padding and border widths on both sides. When it did this, it cached the values for many other measurements, like "border-box-width," "padding-left," "padding-right," and so on. If any of these values are requested directly, no further computation is necessary. Furthermore, when we ask for the "margin-box-width" (i.e., the space the element truly commands), it knows it needs to fetch "margin-left" and "margin-right," but the values of all other properties are already cached. (A caveat: because of the caching, an Element.Layout object should be treated like a "snapshot" of an element's dimensions. When the dimensions of an object change, you ought to grab a new instance of Element.Layout.) Take a look at the code and tell me what you think. The API is far from complete, naturally, but it'd be great to know if people think this is the right idea. Cheers, Andrew --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype: Core" group. To post to this group, send email to prototype-core@googlegroups.com To unsubscribe from this group, send email to prototype-core-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-core?hl=en -~----------~----~----~----~------~----~------~--~---