Thanks a lot for your detailed answer. Presentation Types certainly are a powerful feature. Do you have any idea when the public API may be available?
On Thu, Mar 24, 2011 at 4:43 PM, P T Withington <[email protected]> wrote: > [Sorry for the late reply, I've been on vacation] > > At present, presentation types are an internal mechanism used to support CSS > styling of LZX. > > Inspecting an object in the debugger in the current trunk will display > attribute types when they are known, and will display presentation types in > an inspectable way for complex types (the "CSS" or external representation of > the type will be displayed, and if you inspect it, you can see the underlying > internal representation). > > For instance, if I inspect: > >> <view id="sd" x="200" clip="true" xscale="3" yscale="3" y="400" width="100" >> height="100" with="boxmodel" padding="${[7,7,7,7]}" bordercolor="red" >> borderwidth="${[5, 5, 5, 5]}" shadowblurradius="10" shadowangle="45" >> shadowdistance="20" shadowcolor="#000000"> > > I see: > >> lzx> Debug.inspect(#sd) >> «<anonymous extends='view' with='boxmodel'>#1#0| #sd» { >> [...] >> borderbottomwidth:number 5 >> bordercolor:color red >> borderleftwidth:number 5 >> borderrightwidth:number 5 >> bordertopwidth:number 5 >> borderwidth:boxsidedimensions 5 >> [...] > > which shows the types and values for the various border attributes. Simple > types, like `number` are not inspectable (their internal and external > representations are identical). But if I inspect the value of `bordercolor`, > which has a complex type `color`, I see: > >> lzx> Debug.inspect(red) >> «color value#7| red» { >> value: 16711680 >> } >> «color value#7| red» > > Showing that the internal representation of the `color` `red` is an integer > `16711680`. Similarly, I can inspect the value of `borderwidth`, which is of > type `boxsidedimensions` (defined in lps/components/mixins/boxmodel.lzx, > where you can see the pattern for defining presentation types of your own): > >> lzx> Debug.inspect(5) >> «boxsidedimensions value#8| 5» { >> value: [5, 5, 5, 5] >> } >> «boxsidedimensions value#8| 5» >> lzx> > > which shows that the underlying representation is an array [top, left, right, > bottom] of widths. > > Presentation Types are an evolving feature, so I apologize for the lack of > documentation, but welcome your feedback. > > --- > > We will eventually expose a public API for accepting and presenting attribute > values according to their declared presentation type, but that API design is > not yet settled. It is currently used internally to support CSS styling of > attributes. Most likely the API will be like the CSS API of HTML, although > we may also expose the acceptAttribute and presentAttribute primitives. > > --- > > My current thinking on > http://thread.gmane.org/gmane.comp.java.openlaszlo.devel/26537/focus=6569 is > also to use a more CSS-like mechanism. E.g., > >> <view ... with="boxmodel" padding="${[7,7,7,7]}" bordercolor="red" >> borderwidth="${[5, 5, 5, 5]}" ... > > might more concisely (and legibly) be expressed: > >> <view ... with="boxmodel" style="padding: 7; border-color: red; >> border-width: 5" ... > > (with no commitment as to whether you can constrain pieces of the style > expression, at this point). > > On 2011-03-22, at 14:38, Laszlo Developer wrote: > >> I'd still appreciate an answer if it's possible to introspect a class >> attribute type at runtime. Is that possible? >> >> LaszloNode.lzs has an attributes property, but there doesn't seem to >> be any type information attaches to the attribute. >> >> On Mon, Mar 21, 2011 at 12:15 PM, Laszlo Developer >> <[email protected]> wrote: >>> Ok, there's lz.TypeService object at runtime. >>> >>> And I found this file in the LFC: >>> http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc/core/PresentationTypes.lzs >>> There are a number of types defined in here: >>> - string >>> - cdata >>> - boolean >>> - number >>> - color >>> - expression >>> - size >>> - css >>> >>> At the end of the file there two comments: >>> // TODO?: add token: TokenPresentationType, >>> // script: ScriptPresentationType >>> >>> Will those types be implemented as well? And are these all the types >>> which are supported out of the box by the LFC? >>> >>> >>> On Mon, Mar 21, 2011 at 11:59 AM, Laszlo Developer >>> <[email protected]> wrote: >>>> I've a few questions around the Presentation Types introduced into >>>> OpenLaszlo: >>>> >>>> 1) It doesn't seem that the wiki page is up-to-date, can you confirm that? >>>> http://wiki.openlaszlo.org/Attribute_Type_Coercion >>>> >>>> 2) Is there any information in the documentation on the changes? >>>> >>>> 3) Has the outcome of this discussion been summarized and published >>>> somewhere? >>>> http://thread.gmane.org/gmane.comp.java.openlaszlo.devel/26537/focus=6569 >>>> >>>> >>>> 4) When inspecting attributes at runtime, what is the best way to >>>> detect the type of an attribute? >>>> >>>> Thanks, >>>> L. >>>> >>> >> > >
