[OpenAjaxIDE] <required>: type=library|folder

Lori Hylan-Cho lorihc at adobe.com
Fri Jul 18 14:33:40 PDT 2008


Hi Jon

Thanks for following up on this (my other message about renewing this
discussion apparently crossed yours). I think the two outstanding issues for
me are #2 and #3 from my second e-mail, namely:

2. How will the IDE know the type of the file(s) being referenced with
type="library"? 
  a. Is the assumption that "library" implies JS?
  b. What of css files that might be included in a library distribution?
  c. Is there an expectation that IDEs will attempt to determine the file
type from the file extension?

3. Is it possible for a widget developer to specify an absolute URL for
type="library" or type="folder"?
  a. Would the IDE then be responsible for either crawling that folder or
downloading it?
  b. See #2. 


On 7/18/08 11:51 AM, "Jon Ferraiolo" <jferrai at us.ibm.com> wrote:

> One of the open topics from this week's phone call was a response to Lori's
> email (http://openajax.org/pipermail/ide/2008q3/000539.html):
> ----
> ...
> So, given the above, I have a couple questions:
> 
> 1. What exactly is meant by "loading"? Does it mean that the IDE would
> not add the same file to the head twice? If so, I think we can handle
> that part. If, however, it means that the same asset should not appear
> in multiple places in the user's site, that's a problem. I'm hoping it's
> the former, but that still brings up point 2:
> 
> 2. How would we know whether the dom.js file that's included with the
> FooCalendar widget is the same dom.js file that's included with the
> FooPassword widget? Is there some assumption we should be making here,
> in the absence of any indication that FooCalendar and FooPassword are
> actually part of the same library? Would the expectation be that dom.js
> be specified with <require type="library" src="dom.js">, and that this
> is how one would indicate "shared" files? If this is the case, then it
> seems to me that the name attribute (the name of the library) and
> possibly the version attribute might still be required in addition to
> src to help determine whether the file in question really is the same as
> another file of the same name.
> ----
> 
> I studied a few major toolkits and thought things over. One observation is
> that it appears that major Ajax libraries support a workflow where you copy
> their entire Ajax library onto your Web site, which potentially wastes disk
> space on the server, but they all have modularization techniques such that
> when your web page runs, only the modules that your web page needs are
> downloaded over the wire. For YUI and ExtJS, the standard way of pulling in
> only those modules that you need is to manually insert script tags for those
> modules. For Dojo, there are multiple advanced options due to their build
> system, but the "normal" way of using Dojo is to include a script tag for
> "dojo.js" and then call "dojo.require(...)" to identify the modules that you
> need, and then Dojo will pull in those modules for you. (I believe the normal
> approach for Prototype and jQuery, which are relatively small, is to simply
> source in the single JS file that contains the whole library.)
> 
> Here is what I am thinking:
> 
> 1) We don't need a 'shared' attribute. Instead, if 'name' is supplied, then
> that indicates that an asset is subject to sharing.
> 
> 2) As Lori suggests above, if type="library", then a properly constructed
> metadata file SHOULD include a 'name' and a version attribute so that tools
> can determine shared usage of the same library and install it only once within
> the distribution directory structure. (Note: I have questions about
> 'minVersion' below in #4 below. Regarding 'folder', see #7 below.)
> 
> 3) As Lori suggested in the phone call, from a processing model perspective,
> 'library' and 'folder' amount pretty much to the same thing: a copy operation
> on a folder. In fact, the 'name' attribute might make sense for 'folder' even
> when referring to something that isn't a JS library so that a particular
> folder can be shared across multiple widgets. (But before getting too far in
> that discussion, we need to talk about 'minVersion': see #4 below.)
> 
> 4) But now onto 'minVersion'. I am wondering what we really need from a
> version attribute. Do we need to identify which *range* of library versions
> that are compatible with this widget, or do we need to specify what *exact*
> version number is for the library that is referenced by the 'src' attribute,
> or both? There are usually too many dependencies between widgets and libraries
> such that a particular widget will often only work with only one particular
> version of a library, or (for widgets defined by a 3rd party on top of a
> particular library) a particular generation of a library (e.g., Dojo 1.1.x).
> Here is what I suggest we do - two version attributes for <require
> type="library">:
> 
> * 'version' indicates the exact version number for the library that is
> referenced by the 'src' attribute. For example, if the 'src' attribute
> references Dojo 1.1.2, then the element would look like:
> ----
> <require type='library' name='dojo' version='1.1.2' src='...' />
> ----
> 
> * 'compatibility' indicates the range of library versions with which the
> widget is compatible. For example:
> ----
> <require type='library' name='dojo' version='1.1.2' src='...'
> compatibility='1.0-1.1.2'/>
> ----
> 
> 5) So that widgets will use a standardized approach to library names, the
> 'name' attribute for a library should refer to a registered name with the
> OpenAjax Registry.
> 
> 6) We need to have a well-defined processing model if attributes 'name',
> 'version' or 'compatibility' is missing. One option is to treat as an error,
> but error situations are usually messy, and usually better to figure out
> defaults for missing attributes. Here is my proposal:
> * If 'name' or 'version' is missing, then there is no sharing. (The spec would
> need to include strong recommendations about having 'name' and 'version'
> attributes and include warnings about potential file duplications and
> potential file collisions if these attributes are not supplied.)
> * If 'compatibility' is missing, we default to the range 0:infinity.
> 
> 7) As I mentioned in #1 above, 'library' and 'folder' are very similar and in
> fact could probably be merged. My proposal, however, is to have two separate
> keywords because of the semantic value of the word 'library', but otherwise
> the two options share the same attributes and have the same processing model.
> Therefore, it is possible to use 'name', 'version', and 'compatibility' on a
> 'folder' (although for type='library', the 'name' attribute does not have to
> refer to a name from the OpenAjax Registry). The spec would point out these
> similarities and tell metadata authors to use 'library' when referring to an
> Ajax library and use 'folder' when referring to a folder that isn't an Ajax
> library. 
> 
> 8) I think it makes sense for 'name', 'version' and 'compatibility' to also
> work with the other types (e.g., type='javascript') so that a tool can deal
> with sharing of individual files, not just folders.
> 
> I am not sure the above addresses all of the issues that Lori brought up on
> Tuesday. Lori, what did I miss?
> 
> Jon
> 
> 
> _______________________________________________
> IDE mailing list
> IDE at openajax.org
> http://openajax.org/mailman/listinfo/ide




More information about the IDE mailing list