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.
>>>>
>>>
>>
>
>

Reply via email to