Template:PersonCall: Difference between revisions

From Bodhicitta
(VSCode edit)
(VSCode edit)
Line 23: Line 23:
<!--
<!--
Full width, no sidebar.
Full width, no sidebar.
NOTE — avoid colons inside these comment blocks. SMW's RemoteRequest.php
runs a colon-split over every HTML comment it finds in a remote query
response, so a colon here produces PHP warnings during rebuildData runs.


The page used to run a 3/9 split with relations and categories in a sticky
The page used to run a 3/9 split with relations and categories in a sticky
rail. Measured across all 1,695 person pages, that rail held a median of TWO
rail. Measured across all 1,695 person pages, that rail held a median of TWO
items: 82% of pages carried 1-3, and only 1.2% carried 15 or more. Four out of
items. 82% of pages carried 1-3, and only 1.2% carried 15 or more. Four out
five pages were paying for a sticky-sidebar instance, a mobile drawer, and a
of five pages were paying for a sticky-sidebar instance, a mobile drawer, and
narrowed article column in order to show about two links.
a narrowed article column in order to show about two links.


A sidebar also earns its keep elsewhere on this wiki by holding things a
A sidebar also earns its keep elsewhere on this wiki by holding things a
reader returns to while moving through long content — a TOC, chapter
reader returns to while moving through long content, such as a TOC or chapter
navigation. Person pages have no such content: a short biography, then tiles.
navigation. Person pages have no such content, only a short biography and
Names and relationships are attributes OF the subject, so they now read in
then tiles. Names and relationships are attributes OF the subject, so they
sequence with it rather than in a parallel column.
now read in sequence with it rather than in a parallel column.


Reading order is deliberate: who they are, what they looked like and their
Reading order is deliberate. Who they are, what they looked like and their
life, who they were connected to, then what they made. The works queries come
life, who they were connected to, then what they made. The works queries come
last because they run deep on well-covered figures — and they are the point of
last because they run deep on well-covered figures, and they are the point of
the page.
the page.
-->{{#ask:[[{{SUBPAGENAME}}]]
-->{{#ask:[[{{SUBPAGENAME}}]]
<!--
|?BdrcLink |?Bio |?BiographicalInfo |?BioTib |?BnwShortPersonBio |?Description |?FirstImage |?HarLinkRaw |?HasDnzPage |?HasRtzPage |?ImagesRaw |?MainNameChi |?MainNameDev |?MainNameJap |?MainNameKor |?MainNamePhon |?MainNameTib |?TolExcerpt |?TolLinkRaw |?Yearbirth |?Yeardeath |?Subclass |?GyatsaBioTib |?AltNamesTib |?AltNamesWylie
A remote (source=) #ask with format=template silently drops printouts past
the 25th: they never reach the template, with no warning and no error.
Measured on this exact query — 25 printouts render, 26 do not.
 
This list sits AT that limit. To add a property here, remove one first, or
the addition will appear to do nothing. |?AltNamesOther was the casualty when
the alternate-name display was added; it is nearly always empty anyway.
--> |?BdrcLink |?Bio |?BiographicalInfo |?BioTib |?BnwShortPersonBio |?Description |?FirstImage |?HarLinkRaw |?HasDnzPage |?HasRtzPage |?ImagesRaw |?MainNameChi |?MainNameDev |?MainNameJap |?MainNameKor |?MainNamePhon |?MainNameTib |?TolExcerpt |?TolLinkRaw |?Yearbirth |?Yeardeath |?Subclass |?GyatsaBioTib |?AltNamesTib |?AltNamesWylie
|named args=true
|named args=true
|link=none
|link=none
Line 60: Line 56:


Categories, translation languages, and lineage relationships, in one quiet
Categories, translation languages, and lineage relationships, in one quiet
band between the biography and the works. Deliberately understated: small
band between the biography and the works. Deliberately understated, with small
sans type, muted labels, no border and no carnelian — this is reference
sans type, muted labels, no border and no carnelian — this is reference
material a reader consults, not something competing with the biography above
material a reader consults, not something competing with the biography above
Line 109: Line 105:
One filter box for the whole page, sitting above every section.
One filter box for the whole page, sitting above every section.


It is deliberately NOT per-section: the handler in tws.js binds to every
It is deliberately NOT per-section, because the handler in tws.js binds to every
.filter-input on the page, and an input with no contentId targets
.filter-input on the page, and an input with no contentId targets
.filterableContent globally — so one box per section would have each box
.filterableContent globally — so one box per section would have each box
Line 137: Line 133:


The buckets have to be mutually exclusive, because the underlying data
The buckets have to be mutually exclusive, because the underlying data
overlaps: an item with |Performer= is ALSO auto-categorised under the
overlaps, because an item with |Performer= is ALSO auto-categorised under the
performer's name. Splitting naively double-renders those tiles — measured on
performer's name. Splitting naively double-renders those tiles — measured on
People/Ringu Tulku, 303 "authored" + 294 "performer" for a true union of 303.
People/Ringu Tulku, 303 "authored" + 294 "performer" for a true union of 303.


They are separated on |Class= rather than by negating |Performer=, for two
They are separated on |Class= rather than by negating |Performer=, for two
reasons. First, SMW's negation operators do not do set subtraction here:
reasons. First, SMW's negation operators do not do set subtraction here.
[[Performer::!X]] excludes pages that LACK the property entirely, which
A negated Performer condition excludes pages that LACK the property entirely, which
silently drops every text work (it zeroed out Śāntideva's 181 works in
silently drops every text work (it zeroed out Śāntideva's 181 works in
testing), and [[Category:!X]] was ignored outright. Second, Class is a
testing), and a negated Category condition was ignored outright. Second, Class is a
reliable positive discriminator — every one of the 1,732 library items
reliable positive discriminator — every one of the 1,732 library items
carrying a Performer value is Class=Multimedia, with no exceptions.
carrying a Performer value is Class=Multimedia, with no exceptions.


So: Multimedia is the performance bucket, everything else is authorship.
So Multimedia is the performance bucket, and everything else is authorship.
Positive conditions only, no negation.
Positive conditions only, no negation.


Line 172: Line 168:
}}
}}
<!--
<!--
Fallback: nothing matched any bucket. Preserves the original empty-state message.
Fallback for when nothing matched any bucket. Preserves the original empty state.
--> {{#ifexpr:{{#ask:[[Category:Library Items||Editorial Content]][[Category:{{#titleparts:{{SUBPAGENAME}}}}]]
--> {{#ifexpr:{{#ask:[[Category:Library Items||Editorial Content]][[Category:{{#titleparts:{{SUBPAGENAME}}}}]]
OR[[Category:Library Items||Editorial Content]][[PeopleTopics::{{#titleparts:{{SUBPAGENAME}}}}]]
OR[[Category:Library Items||Editorial Content]][[PeopleTopics::{{#titleparts:{{SUBPAGENAME}}}}]]
Line 200: Line 196:
separated from single-valued ones.
separated from single-valued ones.


Module:GetData now takes |multi=, an allowlist of the properties that should
The GetData module now takes |multi=, an allowlist of the properties that should
receive SMW's '+sep=' directive. Everything else in |props= is stored as a
receive SMW's '+sep=' directive. Everything else in |props= is stored as a
single value, so both groups can travel in one query.
single value, so both groups can travel in one query.

Revision as of 21:38, 13 August 2026