    001// Licensed under the Apache License, Version 2.0 (the "License");
    002// you may not use this file except in compliance with the License.
    003// You may obtain a copy of the License at
    004//
    005// http://www.apache.org/licenses/LICENSE-2.0
    006//
    007// Unless required by applicable law or agreed to in writing, software
    008// distributed under the License is distributed on an "AS IS" BASIS,
    009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    010// See the License for the specific language governing permissions and
    011// limitations under the License.
    012
    013package org.apache.tapestry5.services.javascript;
    014
    015import org.apache.tapestry5.ioc.services.SymbolSource;
    016import org.apache.tapestry5.services.AssetSource;
    017
    018/**
    019 * Defines the types of extensions to a JavaScript stack that can be contributed to an extensible JavaScript stack.
    020 *
    021 * @see StackExtension
    022 * @see ExtensibleJavaScriptStack
    023 * @since 5.3
    024 */
    025public enum StackExtensionType
    026{
    027    /**
    028     * A JavaScript library. The extension value will be converted using {@link AssetSource#getExpandedAsset(String)},
    029     * meaning that {@linkplain SymbolSource symbols} will be expanded.
    030     *
    031     * @see JavaScriptSupport#importJavaScriptLibrary(org.apache.tapestry5.Asset)
    032     * @see org.apache.tapestry5.services.javascript.JavaScriptStack#getJavaScriptLibraries()
    033     */
    034    LIBRARY,
    035
    036    /**
    037     * A dependency on another JavaScriptStack. Note that this is especially useful as, starting in 5.4, there is
    038     * no automatic dependency on the "core" stack, as there was in earlier versions.
    039     *
    040     * @see JavaScriptSupport#importStack(String)
    041     * @see org.apache.tapestry5.services.javascript.JavaScriptStack#getStylesheets()
    042     * @since 5.4
    043     */
    044    STACK,
    045
    046    /**
    047     * A stylesheet. The extension value will be converted using {@link AssetSource#getExpandedAsset(String)},
    048     * meaning that {@linkplain SymbolSource symbols} will be expanded.
    049     *
    050     * @see JavaScriptSupport#importStylesheet(org.apache.tapestry5.Asset)
    051     * @see org.apache.tapestry5.services.javascript.JavaScriptStack#getStylesheets()
    052     */
    053    STYLESHEET,
    054
    055    /**
    056     * A module to aggregate with the stack. The module's JavaScript is included after any libraries.
    057     * In development mode (with aggregation disabled), the library will be included individually.
    058     * Unlike the RequireJS {@code r.js} tool, this does not process
    059     * dependencies and is based on a simple regular expression parser.
    060     *
    061     * Note that this only loads the module's <em>code</em> and defines the module as available;
    062     * the module's function will not be invoked unless {@link JavaScriptSupport#require(String)} is invoked to establish
    063     * a dependency.
    064     *
    065     * Note that at this time, {@linkplain JavaScriptModuleConfiguration#exports(String) shimmed modules} can not
    066     * be aggregated into stacks properly; the shimmed module will be aggregated, but then will still be loaded via
    067     * a subsequent HTTP request.
    068     *
    069     * @since 5.4
    070     */
    071    MODULE,
    072
    073    /**
    074     * Overrides the {@linkplain JavaScriptStack#getJavaScriptAggregationStrategy() JavaScript aggregation strategy}
    075     * for the stack. The value is string name of an {@link org.apache.tapestry5.services.javascript.JavaScriptAggregationStrategy} value.
    076     *
    077     * @since 5.4
    078     */
    079    AGGREGATION_STRATEGY,
    080
    081    /**
    082     * Extra JavaScript initialization (rarely used). No symbol expansion takes place.
    083     *
    084     * @see JavaScriptSupport#addScript(String, Object...)
    085     * @see org.apache.tapestry5.services.javascript.JavaScriptStack#getInitialization()
    086     * @deprecated Deprecated in 5.4 with no replacement; initialization may be removed in the future.
    087     */
    088    INITIALIZATION;
    089}