Elite Dangerous Field Manual:Page section resolution
EDFM // Operations
How EDFM resolves article header eyebrows from page context instead of page-title duplication.
EDFM article pages use a centralized context resolver so the eyebrow above the page title answers where in EDFM the reader is, while the H1 answers what page the reader is reading.
The resolver tracks two independent dimensions:
- primary topic/section — what part of Elite Dangerous the page is about;
- optional content type — what kind of EDFM content it is, currently used for meaningful structural types such as Field Procedures.
Normal output looks like:
EDFM // Engineering Felicity Farseer
For a procedure, output can include both dimensions:
EDFM // Engineering / Field Procedures Unlocking Broo Tarquin
Normal author workflow
Most pages should use:
{{Article header|deck=Optional one-line page summary.}}
Field Procedure pages should normally use:
{{Field procedure|summary=Short task summary.}}
Do not normally set an eyebrow manually. The header calls Module:PageContext, which resolves the primary topic and optional content type from structured data and central rules.
Primary section resolution order
- Explicit override —
orEDFM // Combat
topic=. - Structured procedure metadata — for example mining procedure records carry a topic such as
Mining. - Structured unlock target metadata —
Unlocking Nameresolves through the canonical Engineer data forName. - Structured page/content type — existing canonical data/index pages, including Engineers, ship modules, and mining datasets.
- Exact central hub mappings — section and hub pages such as Engineering, Mining, Powerplay, and Ships and Equipment.
- Conservative topic-family rules — Guardian, Thargoid/Xeno, and AX naming rules.
- Small exceptional override map — currently empty.
- Fallback — unknown pages resolve to
Reference.
Content type resolution order
- Explicit override —
.EDFM // Reference
- Structured/shared content-type signal — mining procedure data or Engineer-unlock procedure target data.
- Centralized content-type family rule — conservative
How to ...andUnlocking ...rules, after structured checks. - Small exceptional override map — currently empty.
- None — normal articles do not receive a second segment.
If a content type exists but the primary section falls all the way back to Reference, Template:Article header suppresses the suffix unless a primary section was explicitly provided. This avoids noisy output such as EDFM // Reference / Field Procedures for unresolved procedure pages.
Structured integrations
Current integrations include:
- Engineer pages from
Module:Data/Engineers/index→ Engineering - Engineer unlock procedure pages such as
Unlocking Broo Tarquin→ primary topic from the target Engineer record, content type Field Procedures - Ship module pages from
Module:Data/ShipModules/indexandModule:Data/Modules/index→ Ships & Equipment - Guardian module pages identified through the module index and Guardian naming → Guardian Technology
- Thargoid/Xeno/AX module pages identified through the module index and xeno naming → Thargoids
- Mining method/equipment/location/commodity datasets → Mining
- Mining procedure records in
Module:Data/Procedures/Mining→ primary topic from the record, content type Field Procedures
If EDFM adds a new canonical dataset, add a lightweight detector in Module:PageContext and map the resulting type in Module:Data/PageSections. Do not duplicate every individual page into a hand-maintained lookup table.
Manual overrides
Use overrides only when a page is intentionally cross-topic or cannot be identified cleanly from data/rules:
{{Article header
|section=Engineering
|type=Field Procedures
|deck=Optional one-line summary.
}}
If many pages require overrides, improve the structured data or page-family rules instead.
Public Lua interface
Module:PageContext exposes semantic interfaces:
getPrimarySection— returns a plain section name such asEngineering.getContentType— returns a type such asField Procedures, or blank for normal articles.getContext— returns encoded context withprimarySectionand optionalcontentType.getPageType— returns an internal page type such asengineer,ship_module, orfield_procedurewhere known.eyebrow— returns complete presentation text for compatibility/testing.
Testing
Representative parser tests:
{{#invoke:PageContext|getPrimarySection|page=Frame Shift Drive}}
{{#invoke:PageContext|getPrimarySection|page=Felicity Farseer}}
{{#invoke:PageContext|getPrimarySection|page=Unlocking Broo Tarquin}}
{{#invoke:PageContext|getContentType|page=Unlocking Broo Tarquin}}
{{#invoke:PageContext|getContext|page=Unlocking Broo Tarquin}}
{{#invoke:PageContext|eyebrow|page=Resolver Sandbox Unknown}}
{{#invoke:PageContext|eyebrow|page=Frame Shift Drive|section=Combat|type=Field Procedures}}
Then verify rendered pages include exactly one visible eyebrow, retain the semantic H1, and do not show Lua/script errors.