User:Dantman/Skinning system/Customization

Users and skins like to have ways to customize various parts of the ui and extensions like to provide extra pieces of the ui that skind may want to customize. We should take into account.

Navigation

 * Besides sidebar based navigation users need to have ways to customize other types of navigation like single-level headers and infinite depth menus and trees.
 * For the sidebar at least users would like to be able to customize it in widget like ways. With things like ad blocks, blocks of WikiText, and be able to customize the location of things like the toolbox and language links. Extensions like to provide custom widgets as well.
 * Some users would like to be able to customize the navigation to appear differently to logged out users... although so far the only rationales are for hacks that should be solved in other ways. We may avoid this one.
 * Some sites have context sensitive navigation trees. eg: The Blender Wiki does this with subpage structure. Users should be able to drop navigation types like these into parts of the ui. And extensions should be able to provide types of context sensitive navigation.

Search

 * Some wikis would like to be able to expand their search.
 * The Blender Wiki allows selection of the blender version and language for their documentation.
 * Perhaps we should add support for custom extra options for search bars. ie: A key (name=) and a list of values and labels. Which a search box implementation can add somewhere and style.
 * Some wikis like to replace the search engine with an external search such as Google search.
 * Skins differ on whether they prefer an old Go / Search style search bar, a new vector simplesearch style, or just a search box and a go button with te text "Search". (Maybe we should consider dropping to these three and make most of the decision on what to output a site decision)

Breadcrumbs ( Parent > Sub > Sub )

 * Right now we do these as part of subtitles, and we setSubtitle instead of setting a breadcrumb list.
 * Skins may want to customize the location and style of these, so we need a separate key for them.
 * Extensions may want to provide alternative breadcrumbs based on knowledge of the site's hierarchy.

Alternative page links

 * "Alternative page links" are links which point to other content pages (pages on sister sites may be acceptable too) which are grouped by some relation the pages have.
 * The one built in type of these we have is language links.
 * Extensions may want to provide alternate page relations. Such as a software documentation wiki linking to the same page for a different software version. Or sister wiki links to the same page on another wiki.
 * Like tools these should be groups into a class rather than providing something like language links directly. Skins should try to implement these abstractly so they are compatible with other types. Fancy extra handling of specific types can still be done if the skin still implements things generically but pulls the ones they want to customize out of what that generic abstraction handles.