Template:Category/Workshop logistics

From Miniscope
Jump to: navigation, search

Render template for Category:Workshop logistics.

Called by the SemanticSchemas dispatcher when a page belongs to Category:Workshop logistics. Renders the whole participant-facing logistics page from structured fields, in the visual language the 2026 Paris and 2026 Research Triangle pages established by hand: tinted arrival callout, what-to-bring callout, at-a-glance card grid, then one panel per topic.

Everything the dispatcher passes as a parameter is read as a parameter, not re-queried with #show — the dispatcher already has the values. The only #show calls left are the two that chain one hop out to the linked Workshop record for its start date (to label the meal days), and the subobject queries for lodging and meals.

What lives in fields vs. in the page body

Fields cover what recurs at every venue — the door, the rooms, the transit, the beds, the food, the wifi, the dress code. That is also what makes the set queryable — "which upcoming workshop still has no wifi info" becomes an #ask rather than a reading exercise.

Anything long-form and venue-specific stays in the page body, which flows in below this template's output: a multi-section software-setup walkthrough, a room-by-room floor guide, a translated welcome note. The template deliberately does not try to absorb those — a field per one-off is how a schema rots.

Sections and anchors

Real == headings, so the TOC works and the at-a-glance cards can deep-link: #What_to_bring, #Getting_there, #Accommodation, #Food, #WiFi, #Other.

The venue heading is a plain == Venue == rather than the hand-written pages' "Venue: ESPCI" — interpolating the venue name into the heading would make the anchor venue-dependent (#Venue:_ESPCI,_Paris) and break every incoming deep link. The venue name is the first line inside the panel instead.

Each section suppresses itself entirely when it has no data, so a half-filled page reads as a shorter page rather than a page full of empty boxes. The exception is the arrival callout, which renders a visible editor-facing hint when empty: a logistics page that does not say how to get in the door is not usable, and silence there should be loud.

Properties read (all via dispatcher parameters)

  • Has workshop (required), Has workshop hub
  • Arrival — Has arrival entrance,
 Has arrival first stop, Has arrival note,
 Has preparation url
  • Bring — Has required items, Has optional items
  • Venue — Has location, Has address,
 Has venue room, Has map url,
 Has directions url, Has venue note
  • Transport — Has airport transport,
 Has public transport, Has local transport
  • Accommodation — Has accommodation note + Lodging option
 subobjects
  • Food — Has caterer, Has caterer url,
 Has dietary note, Has on site food + Meal
 service subobjects
  • WiFi — Has wifi network, Has wifi password,
 Has wifi note
  • Other — Has dress code,
 Has facility dress code, Has on site contact

Not rendered here: Has catering arrangement, Has catering payment, Has room food policy, Has host contact. Those four answer the host institution's side of the planning conversation and are organiser-facing only. They are stored here but deliberately not rendered: participants should never see our billing arrangements. Nothing currently displays them — they are captured for the record and for #ask queries.

Page-typed and multi-valued parameters

Dispatcher parameters arrive as the raw form values: a multi-valued Page property is a comma-separated list of page names, not wikilinks. Has venue room and Has on site contact therefore route through Template:Category/Workshop logistics/pagelist, which arraymaps the list into links. Multi-valued URL properties (Has directions url, Has preparation url) route through Template:Category/Workshop logistics/linklist. A URL containing a literal comma would be split by that arraymap — the same constraint |+sep=, already imposes on Has recording url wiki-wide; percent-encode the comma.

Meal day iteration

Meals are grouped into one column per calendar day by invoking Template:Category/Workshop logistics/meal-day seven times, at offsets −1 through +5 from the linked workshop's Has start date. Offset −1 exists for the arrival-evening dinner that lands before day one. Each block self-suppresses when that day has no meals (the day heading rides in the query's intro=, which SMW omits on an empty result), so the run of seven costs seven queries and renders only the days that exist.

The day label is computed here and passed down, because #ask's intro= value is scanned for | in the template source and an inline {{#time: … | … }} would have its pipe eaten. See that subtemplate's notes.

Section gating on subobject counts

#ask … format=count returns the string "0", which is truthy to #if. Every count gate here goes through #ifexpr: … > 0 and emits a sentinel character that the enclosing #if then tests. Testing the count directly would render an empty Accommodation panel on every page.

Parameters:

  • category — "Workshop logistics" (informational)
  • page — the page being rendered. Falls back to
 Template:Category/Workshop logistics.
  • plus one parameter per property above, snake-cased by the dispatcher.