Architecture:MediaWiki/navigation domain

The navigation domain is concerned with presenting navigational information and controls to the user.

Other domains this domain depends on: Code in the navigation domain may depend on code from several other domains to provide information relevant for navigation, such as the discovery domain or the access control domain.

Conversely, few if any other domains should depend on the navigation domain.

Questions: It's unclear whether "skin" and "navigation" should be separate domains, and if yes, how they relate to each other. It's also unclear if and in how far navigational elements that are controlled by page content ("navi boxes") should be part of this domain.

Layers: The navigation domain is primarily concerned with the user interface layer, but may also have code in other layers. For instance, navigation components may have expicit representation in the storage layer.

Location: Files belonging to this domain are currently located mostly under include/skins, though some aspects can be found in other places. They may in the future be collected under the Navigation namespace.

Status: As of May 2020, the navigation domain is is mostly implemented by the skin system, though some aspects are in practice maintained on-wiki, as wikitext templates.

Examples: The class is an example for a component from the navigation domain.

Vocabulary survey
This is a rough survey of essential nouns and verbs that belong to the domain, providing a preliminary vocabulary. The survey is guided by existing code, but also includes nouns and verbs found to be missing.

Nouns:
 * Skin: Top level layout code, turning some kind of internal "view model" into a full HTML page. This is already well established, but skin code presently often reaches into other parts of the system to retrieve data directly, instead of relying on the view model.
 * Portlet: A logical region in the user interface containing related information. Currently not modeled explicitly but mentioned in the Skin class.
 * ContentArea: The part of the overall page that shows user controlled page content, rather than navigational elements. Not explicitly modeled, but present in the skin class.

Verbs:
 * render: Sends the fully generated page to the user. Covered by.