[Laszlo-user] [Laszlo-dev] Need to be able to override resource declarations in OpenLaszlo without warnings.
P T Withington
ptw at openlaszlo.org
Wed Aug 29 17:00:53 PDT 2007
Remind me why we have resources? They just seem to serve to give you
a short name for a longer name. Why can't we skip resources
altogether and specify the long name directly in CSS? Is this due to
some underlying limitation in the SWF runtime?
On 2007-08-29, at 12:56 EDT, Elliot Winard wrote:
> I like this proposal.
>
> That means that there are now two ways to "skin" an app -
> * using CSS
> * overwriting named resources
>
> Using overwritten resources will make compile-time skinning more
> palatable than the 2-step CSS option we currently have. It'd still
> be nice to be able to support assigning of resource file-names in
> CSS. (LPP-3477 <http://www.openlaszlo.org/jira/browse/LPP-3477>)
> -e
>
> Bret Simister wrote:
>> I prefer putting the responsibility on the developer creating the
>> library, rather than on the developer using it.
>>
>> Hence,
>>
>> <!-- mylibrary.lzx -->
>> <library>
>> <resource name="logo" src="logo.png" replaceable="true" />
>> </library>
>>
>> would allow a developer using the library to write the following
>>
>> <canvas>
>> <inlcude href="mylibrary.lzx" />
>> <resource name="logo" src="logo2.png" />
>> </canvas>
>>
>> and see no warnings upon compile. This seems the cleanest approach
>> to me.
>> It lets the library developer be explicit about which resources
>> were designed
>> to be replaced.
>>
>> I am also OK with Henry's suggestion about using a compiler flag
>> to show warnings
>> when you need to check for resource conflicts. The nice thing
>> about that approach is that
>> it has minimal impact upon the language.
>>
>> -Bret
>>
>>
>>
>> On Wed, Aug 29, 2007 at 8:03 AM, Elliot Winard wrote:
>>
>>> I can see something like that working -
>>> <resource name="logo" src="blah.png" force="true" />
>>>
>>> If the force attribute is present, it overwrites other
>>> declarations of logo and does *not* emit a warning.
>>> The force attribute could mean both "replaceable" and "suppress
>>> warning".
>>> The warning could suggest that the force attribute be used if the
>>> user intends to overwrite in case of conflict.
>>>
>>>
>>> Resources in libraries could define the force
>>> <library>
>>> <resource name="logo" src="logo.png" force="true" />
>>> </library>
>>>
>>> <library>
>>> <resource name="logo" src="logo2.png" force="true" />
>>> </library>
>>>
>>> Hrm. Come to think of it, that feels wrong. Would it be too much
>>> of a change if there are two new attributes for resource - force
>>> and replaceable?
>>> @force would be tell the compiler not to emit a warning if this
>>> resource overwrites another.
>>> @replaceable would tell the compiler not to emit a warning if
>>> this resource is overwritten
>>>
>>> If these two attributes aren't present the current behavior remains.
>>> So resources in Webtop libraries would look like this -
>>> <library>
>>> <resource name="logo" src="logo.png" replaceable="true" />
>>> </library>
>>>
>>> -e
>>>
>>> Sarah Allen wrote:
>>>> That is exactly the dilemma. The tension is between a the
>>>> frustration of an accidental override and the frustration if you
>>>> want to set up your library to allow customizing a resource,
>>>> where you have to provide a resource file and library separately
>>>> and then the user of the library needs to create a new resource
>>>> file and include all your resources except the logo and include
>>>> the logo.
>>>>
>>>> I suppose there could be some kind of flag that says that I
>>>> meant to override this resource, like:
>>>> <resource name="logo" src="logo.png" replace="true"/>
>>>>
>>>> I don't know if that would complicate the implementation or the
>>>> language folk would consider it weird, but as a user of the
>>>> language it would work for me.
>>>>
>>>> Sarah
>>>>
>>>>
>>>> On Wed, Aug 29, 2007 at 5:01 AM, Elliot Winard wrote:
>>>>
>>>>
>>>> I don't know about removing the platform warnings.
>>>>
>>>> If I include two libraries that have resources with conflicting
>>>> names, I want to know about it. For example - I might include
>>>> multiple libraries , each defining a 'logo' resource and
>>>> expecting the logo to be sized a certain way -
>>>> <include "mailwindow" />
>>>> <include "stockwindow" />
>>>>
>>>> I want the compiler to tell me that the stockwindow's logo is
>>>> overwriting the mailwindow's logo. Warnings are informative,
>>>> non-fatal and should be used to provide this kind of information.
>>>> This proposal skirts CSS altogether. If this gets implemented
>>>> as proposed then the display of warnings should be configurable
>>>> at compile-time. I think it would be confusing to users if
>>>> resources (or classes or instances) get clobbered without any
>>>> warning.
>>>> -e
>>>>
>>>> Sarah Allen wrote:
>>>>> I think this is an excellent proposal. cc'ing laszlo-user to
>>>>> see if
>>>>> other folks developing in LZX have strong feelings about this ...
>>>>>
>>>>>
>>>>> On Tue, Aug 28, 2007 at 3:12 PM, Bret Simister wrote:
>>>>>
>>>>>
>>>>> Currently, in the OpenLaszlo platform, it was decided that
>>>>> declaring a
>>>>> resource twice within an LZX app
>>>>> causes a server warning. This was intended to help developers
>>>>> just in
>>>>> case they accidentally overrode a
>>>>> resource that had already been declared in another library.
>>>>>
>>>>>
>>>>> <!-- the following code produces a warning, but still compiles -->
>>>>> <canvas>
>>>>> <resource name="logo" src="logo.gif" />
>>>>> <resource name="logo" src="logo2.gif" />
>>>>>
>>>>> <!-- view appears with logo2.gif -->
>>>>> <view resource="logo" />
>>>>> </canvas>
>>>>>
>>>>>
>>>>>
>>>>> At this time, I would suggest that the platform remove these
>>>>> warnings and have
>>>>> the last resource declaration override all other previous
>>>>> declarations.
>>>>>
>>>>>
>>>>> Here is why...
>>>>>
>>>>>
>>>>> OpenLaszlo now has a CSS implementation. It gives developers an
>>>>> elegant method
>>>>> of skinning their applications. This works, currently, by first
>>>>> declaring a resource
>>>>>
>>>>>
>>>>> <resource name="someimage_rsc" src="somepath/someimage.jpg" />
>>>>>
>>>>>
>>>>> and then referring to that resource in a CSS selector
>>>>>
>>>>>
>>>>> view[name="someview"] {
>>>>> resource: someimage_rsc;
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> If a developer builds a library ....
>>>>>
>>>>>
>>>>> myCustomLibrary ( folder )
>>>>> library.lzx
>>>>> myresources.lzx ( contains many resource definitions
>>>>> including
>>>>> 'lowerRightCorner_rsc' )
>>>>> mystyles.css ( contains many selectors including one that
>>>>> references 'lowerRightCorner_rsc' )
>>>>> ... ( other class and source image files )
>>>>>
>>>>>
>>>>> where library.lzx includes both myresources.lzx and
>>>>> mystyles.css
>>>>> Then library can be used with a simple inclusion in the
>>>>> main app.
>>>>>
>>>>>
>>>>> <canvas>
>>>>>
>>>>>
>>>>> <include name="myCustomLibrary" />
>>>>>
>>>>>
>>>>> <!-- instance of a class from myCustomLibrary -->
>>>>> <mycustomclass />
>>>>>
>>>>>
>>>>> </canvas>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Let's assume that " mycustomclass " contains a number of
>>>>> resources,
>>>>> and that you ( as a developer )
>>>>> only want to change one of those resources . The simplest
>>>>> method to
>>>>> accomplish this would be ...
>>>>>
>>>>>
>>>>> <canvas>
>>>>>
>>>>>
>>>>> <include name="myCustomLibrary" />
>>>>>
>>>>>
>>>>> <!-- override resource definition "lowerRightCorner_rsc" defined
>>>>> earlier in myresouces.lzx -->
>>>>> <resource name="lowerRightCorner"
>>>>> src="my_new_path/my_lower_right_corner.jpg" />
>>>>>
>>>>>
>>>>>
>>>>> <!-- instance of mycustomclass that will now display
>>>>> the new resource based on the unchanged css selector -->
>>>>> <mycustomclass />
>>>>>
>>>>>
>>>>> </canvas>
>>>>>
>>>>>
>>>>> Currently, this code would cause a compiler warning. To avoid
>>>>> these
>>>>> warnings ( without changing OpenLaszlo ) the resouces.lzx file
>>>>> (s) and
>>>>> possibly the library .lzx would have to be edited.
>>>>>
>>>>>
>>>>> If instead, we allow for resource overriding, then ...
>>>>>
>>>>>
>>>>> 1) the original CSS and resource files will remain unchanged
>>>>> 2) The old resource for " lowerRightCorner" would NOT be
>>>>> included in
>>>>> the app
>>>>> 3) There would be clean separation between external libraries
>>>>> and the
>>>>> skinning of theses libraries included in an application.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
More information about the Laszlo-user
mailing list