Looks like a component version of skinx plugin (which should be done
anyway since the plugin way is deprecated).
On Wed, Dec 2, 2009 at 10:42, Caleb James DeLisle
<calebdelisle(a)lavabit.com> wrote:
I'd like to start making a component to manage
javascript and css, I imagine the
interface as follows:
/**
* ExternalContentManager is able to take content which is external to the HTML (eg:
Javascript and CSS)
* and register it with specifications for the context, when the context meets these
specifications
* (for example the value of the key: "wiki" is "xwiki" or the value
of the key "doc" is "Main.WebHome" or both)
* the script will be imported when getImportString() is called.
*/
public interface ExternalContentManager
/**
* The first three methods compare the configuration to the ExecutionContext
* good for the future but not very useful at the moment.
*/
/**
* @param The source of the external content
* @param config The configuration for when and how to use this source.
*/
void register(ExternalContentSource source, ExternalContentConfig config)
/**
* @param The source of the external content
* @param config The configuration for when and how to use this source, header, footer
and minify are disregarded
*/
void unregister(ExternalContentSource source, ExternalContentConfig config)
/**
* Unregister everything for this configuration, null unregisters everything.
* @param config The configuration for when and how to use this source, header, footer
and minify are disregarded
*/
void unregisterAll(ExternalContentConfig config)
/**
* Because most information is still stored in the XWikiContext
* add compatibility methods which compare the whenToUse parameter in the
* configuration to the XWikiContext.
*/
/**
* @param The source of the external content
* @param config The configuration for when and how to use this source.
*/
void registerx(ExternalContentSource source, ExternalContentConfig config)
/**
* @param The source of the external content
* @param config The configuration for when and how to use this source, header, footer
and minify are disregarded
*/
void unregisterx(ExternalContentSource source, ExternalContentConfig config)
/**
* Unregister everything for this configuration, null unregisters everything.
* @param config The configuration for when and how to use this source, header, footer
and minify are disregarded
*/
void unregisterAllx(ExternalContentConfig config)
/**
* @return A string of HTML which contains import statments for all of the scripts
which should
* be imported based on the values in the ExecutionContext and XWikiContext.
*/
String getImportString()
}
/**
* ExternalContentConfig is a set of configurations to be passed to the
ExternalComponentManager when
* adding a source to be used.
*/
interface ExternalContentConfig extends Map
{
/**
* @param header This is prepended to the source after minifying but before
concatination, use for license info
*/
void setHeader(String header)
/**
* @param footer This is appended to the source after minifying but before
concatination
*/
void setFooter(String footer)
/**
* @param shouldMinify make this false to avoid minifying the source, default: true
*/
void shouldMinify(boolean shouldMinify)
/**
* @param whenToUse Each of the values must match value given by the same key from the
context after toString() is called on it.
*/
void useSourceWhen(Map<String, String> whenToUse)
}
public interface ExternalContentSource
{
public enum SourceType {
/** The source comes from a file in the servlet context. */
SERVLET_CONTEXT,
/** The source comes from a jar in the classpath. */
CLASSPATH,
/** The source comes from an unknown origin and the code is given in this string.
*/
STRING,
}
/**
* Set the origin of the source, if sourceType is a string then this is the source
itself.
*/
void SetOrigin(String origin)
/**
* Get the code of the source from where it is stored.
*/
String() getOrigin()
/**
* Set the type of source this is.
*/
void SetType(SourceType type)
/**
* Get the type of surce this is.
*/
SourceType GetType()
}
I would like to implement this interface using jawr to compress, concatenate,
and cache the sources, but the interface does not require any more than what
skinx does except not on a per-request basis.
What do you think?
Any other ideas.
Caleb James DeLisle
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs