<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">

<h1>Tapestry 5 Integration Application 1</h1>

<t:remove>
    Old style ad-hoc alerts, predating Tapestry 5.3:
</t:remove>

<t:if test="alert">
    <p>
        Alert:
        <em id="alert">${alert}</em>
    </p>
</t:if>

<div>
    <ul class="pagination">
        <t:loop source="alphaKeyItems.keySet()" value="key">
            <li>
                <a href="#ix_${key}">${key}</a>
            </li>
        </t:loop>
    </ul>
</div>

<p><a href="#special">Special Pages</a></p>

<t:loop source="alphaKeyItems.keySet()" value="key">
    <a name="ix_${key}"/>

    <h3>${key}</h3>

    <ul>
        <li t:type="loop" source="itemsForKey()" value="item">
            <t:pagelink page="prop:item.pageName" context="item.context">${item.label}</t:pagelink>
            -- ${item.description}
        </li>
    </ul>

</t:loop>

<h2 id="special">Special Pages</h2>

<p>These are often pages which can't load due to errors.</p>

<ul>
    <li>
        <a href="${injectDemoLink}">PageLink via Class Demo</a>
        -- use ComponentResources to generate a link to a page using target
        page class, not logical
        page name
    </li>

    <li>
        <a href="BadTemplate">BadTemplate Page</a>
        -- More exception reporting
    </li>
    <li>
        <t:pagelink page="eventhandlerdemo" context="'clear'">
            EventHandler Demo
        </t:pagelink>
        -- Tests for event handling method order and matching
    </li>

    <li>
        <a href="InjectContainerMismatch">
            InjectContainerMismatch
        </a>
        -- check error reporting when @InjectContainer doesn't match
        the actual field type
    </li>

    <li>
        <a href="injectcomponentmismatch">InjectComponentMismatch</a>
        -- check error reporting when @InjectComponent
        doesn't match actual field type
    </li>

    <li>
        <a href="recursivedemo">Recursive Demo</a>
        -- check for handling of recursive components
    </li>

    <li>
        <t:actionlink t:id="securepage">Secure Page Demo</t:actionlink>
        -- transition to HTTPS
    </li>

    <li>
        <t:pagelink page="listeventcontextdemo" context="demoContext">List Event Context Demo
        </t:pagelink>
        -- using a List for catch-all event context parameters
    </li>

    <li>
        <a href="datumeditor">Class Transformation Exception Demo</a>
        -- demo proper reporting of exceptions during class transformation
    </li>

    <li>
        <t:actionlink t:id="instantiatePage">Instantiate Page</t:actionlink>
        --
        attempt to instantiate (and return) a page instance
    </li>
    <li>
        <a href="fieldannotationconflict">Field Annotation Conflict</a>
        -- demo failure behavior when a field contains conflicting annotations
    </li>
    <li>
        <a href="failedinjectdemo">Failed Field Injection Demo</a>
        -- demo failure when attempting to inject into a field
    </li>
    <li>
        <a href="pageAttachFailure">Page Attach Failure</a>
        -- demo failure when attaching a page
    </li>

    <li>
        <a href="componentsNotInTemplateDemo">Components Not In Template Demo</a>
        -- demo exception when a component is defined in the class but not present in the template
    </li>
    <li>
        <a href="GetterMethodAlreadyExists">Getter Method Already Exists</a>
        -- demo @Property attempting to overwrite an existing getter method
    </li>
    <li>
        <a href="DuplicateIds">Duplicate IDs</a>
        -- demo two components declared with the same ID
    </li>
    <li>
        <a href="PublishDuplicateNameDemo">Duplicate Published Parameter Name</a>
        -- demo error checking for the same parameter name published from two different
        embedded
        components
    </li>
    <li>
        <a href="EmbeddedComponentTypeConflict">Embedded Component Type Conflict
        </a>
        -- error checking for conflict between @Component.type and t:type.
    </li>
    <li>
        <a href="PublishUnknownParameterDemo">Publish Unknown Parameter Demo</a>
        -- publishing a parameter which does not exist
    </li>
    <li>
        <a href="BadMixinIdDemo">Bad Mixin Id Demo</a>
        -- error reporting when a parameter specifies a mixin id that does not exist
    </li>
    <li>
        <a href="DupeMixinDemo">Duplicate Mixin Demo</a>
        -- error reporting for adding a duplicate mixin to a component
    </li>
    <li>
        <a href="ZoneRefreshWithHandlerReturningVoid">Zone Refresh With Event Handler Returning Void</a>
        -- refreshes zone with an event handler returning void
    </li>
    <li>
        <a href="ZoneRefreshWithHandlerReturningZone">Zone Refresh With Event Handler Returning Zone</a>
        -- refreshes zone with an event handler returning zone
    </li>
    <li>
        <a href="ZoneRefreshWithContext">Zone Refresh With Context</a>
        -- refreshes zone with a context
    </li>
    <li>
        <a href="UnsupportedParameterBlockDemo">Unsupported Parameter Block Demo</a>
        -- informal block parameter to a component that does not support informal parameters
    </li>
    <li>
        <a href="InvalidTemplateExtend">Invalid Template Extend Demo</a>
        -- template uses extend, but component doesn't have a super-class
    </li>

    <li>
        <a href="PageResetFailure">PageReset Annotation Failure</a>
        -- error when @PageReset is on a method with parameters
    </li>

    <li>
        <a href="VoidMethodWithCached">@Cached on void method</a>
        -- error when @Cached is used on a method that returns void
    </li>

    <li>
        <a href="ParamsMethodWithCached">@Cached on method with parameters</a>
        -- error when @cached is used on a method that has parameters
    </li>
    <li>
        <a href="InvalidComponentTypeDemo">Invalid Component Type</a>
        -- unknown type of component in template
    </li>
    <li>
        <a href="NoTypeProvidedDemo">No Component Type Provided</a>
        --
        component type not defined.
    </li>
    <li>
        <a href="music/details2">Missing page activation context</a>
    </li>
    <li>
        <a href="lib/alpha/root">Alpha Library Root</a> -- demonstrates libraries contributed with a slash in the name
    </li>
    <li>
        <a href="parameterconflictdemo">Parameter Conflict Demo</a> -- checks for subclass parameters conflicting with
        base class parameters
    </li>
    <li>
        <a href="missingembeddedcomponent">Missing Embedded Component</a> -- @InjectComponent for component not in
        template
    </li>
    <li>
        <t:actionlink t:id="immediateResponse">Immediate Response</t:actionlink>
        -- Stream page content bypassing page activation
    </li>

</ul>

</html>

