* Plugins should be able to provide * New actions * New templates * New models? * Plugins should be configurable * should be able to be told about your * actions * templates * models * Plugins should be able to add dispatcher rules * The application should be able to spec what order dispatcher rules are run in. This gets sticky. * If you don't spec explicit dispatcher rule ordering, what do you get? for each of (before, on, after) { run the plugin rules in the order plugins are defined run my app's rules } before plugin Jifty::Login => { before 'login' => { ..... } } Plugins provide templates. auto/Jifty/Plugin/Login/share (module::sharedir. wherever it puts stuff) plugins have a default path they expose templates at. so, Plugin::Login would expose templates at /=/Login/ That path is 100% overridable by the app when it loads the plugin An app's content always overrides a plugin's content. If two plugins provide PO files or (templates to the same location, either a built in location or an app-driven location), the most recently loaded plugin's content override the older plugin's content. Anatomy of a plugin - In the end, plugins are apps. and apps are plugins. Jifty::Plugin:: t/ lib/ Jifty/ Plugin/ .pm / Dispatcher.pm Action/ Model/ share/ po/ web/ static/ templates/ ~ We're defining mount points for templates