=pod - ViewPort - component representing part of a page - Focus - current page - Tangent - inner stack of a viewport for holding multiple viewports. - Stack - Hierarchical collection of viewports defining a page - Event ? The focus stack is a linked list of viewports, from outside in. Outside being the page level, inner items being the various parts of the page, which can further be broken down into more viewports. The stack defines the layers of viewports that make up the entire page. Each viewport also knows what it's target is, the stack itself. (target_name)(?) ViewPorts can be created/added to or removed from the stack using push_viewport and pop_viewport. An empty focus stack is created by the begin action in the UI::RootController. The end action does event delivery before rendering. The push_viewport method in FocusStack returns the viewport object that was created. Per default, a viewport can only contain one inner viewport, to contain multiple viewports, you need to create a tangent. $viewport->create_tangent('name') creates a named tangent stack for the given viewport, onto which more viewports can be pushed. A viewport decides which events are are for it, and which for it's children, it applies the events to the children first, then to itself. Thus, the innermost viewports are rendered(?) first. By default, child events are just any focus tangents owned by that viewport. To render the inner viewport in the template for the current viewport, use [% window.render_viewport(self.inner) %]. If using tangents for multiple inner viewports, you can select the tangent using focus_tangent: [% window.render_viewport(self.focus_tangent('name').vp_outer %]. 14:29 <@mst> reaction assigns each viewport a param prefix 14:30 <@mst> so '1-foo-0:bar=baz' means 'find $stack->vps->[1]->tangents->{foo}- >vps->[0] and call $vp->bar('baz') - connect_event / connect_control, connect_href ? - Existing ViewPorts: ListView, Field, ActionForm =cut