<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bodhicitta.tsadra.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeremi</id>
	<title>Bodhicitta - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bodhicitta.tsadra.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeremi"/>
	<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php/Special:Contributions/Jeremi"/>
	<updated>2026-10-10T22:00:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Timeline_of_BCA_Translations&amp;diff=144316</id>
		<title>Timeline of BCA Translations</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Timeline_of_BCA_Translations&amp;diff=144316"/>
		<updated>2026-10-09T21:16:04Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RemoveFirstHeading}}__NOTOC____NOEDITSECTION____NOGLOSSARY__{{#set:&lt;br /&gt;
	|Description=A chronological history of Bodhicaryāvatāra translations into Western languages, beginning with Louis de La Vallée Poussin in 1907 to the most recent scholarly editions in 2025.&lt;br /&gt;
	|Title=BCA Translation Timeline: Śāntideva in Western Languages&lt;br /&gt;
	|AllTopics=Bodhicaryāvatāra Translations; Shantideva; Louis de La Vallée Poussin; Lionel D. Barnett; Marion Matics; Stephen Batchelor; Padmakara Translation Group; Vesna Wallace; Alan Wallace; Pema Chödrön; Kate Crosby; Andrew Skilton; Thomas Doctor; David Karma Choephel; Buddhist Translation History; Sanskrit to English; Tibetan to English; French Buddhist Studies; German Buddhist Studies; Spanish Buddhist Translations&lt;br /&gt;
	|FrontCoverImg=File:The Bodhicaryāvatāra-front.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Timeline of Translations&lt;br /&gt;
	|subtitle=The Bodhicaryāvatāra in Western Languages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row mt-5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-8 offset-md-2&amp;quot;&amp;gt;{{#Widget:filterInput|placeholder=Filter timeline entries...|autofocus=autofocus}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mt-4 filterableContent&amp;quot;&amp;gt;&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=0}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=30}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=60}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=90}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=120}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=150}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=180}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=210}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=240}}&lt;br /&gt;
{{BcaTranslationQuery|limit=30|offset=270}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=144265</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=144265"/>
		<updated>2026-10-08T21:41:06Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: finger-sized chapter/verse number chips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a,.bcas__hint a{cursor:pointer;color:#0645AD;text-decoration:none;border-bottom:1px dotted rgba(6,69,173,.4)}&lt;br /&gt;
.bcas__tips a:hover,.bcas__hint a:hover{color:#001028}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.5rem}&lt;br /&gt;
.bcas-start__sub{margin-bottom:.8rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
/* Phones: finger-sized number chips (they were ~29x26px). */&lt;br /&gt;
@media (max-width:767.98px){.bcas-start__chips--small{gap:.5rem}.bcas-start__chips--small a{min-width:2.5rem;min-height:2.5rem;justify-content:center;font-size:.95rem}}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;incategory:&amp;lt;/b&amp;gt; searches by tag. Topics, decades, people and publishers are all tags: &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Topic: Tonglen&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Topic: Tonglen&amp;quot;&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Decade: 1990s&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Decade: 1990s&amp;quot;&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Padmakara Translation Group&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Padmakara Translation Group&amp;quot;&amp;lt;/a&amp;gt;. Combine with words: &amp;lt;a data-q=&amp;quot;patience incategory:&amp;amp;quot;Topic: Six Perfections&amp;amp;quot;&amp;quot;&amp;gt;patience incategory:&amp;quot;Topic: Six Perfections&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		return (cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		// The results come first; the counts follow once they are on screen, so the&lt;br /&gt;
		// first page is not queued behind eleven count searches (and a class button&lt;br /&gt;
		// clicked early does not wait behind them either).&lt;br /&gt;
		var listDone = loadList(false) || $.Deferred().resolve().promise();&lt;br /&gt;
		listDone.always(function () { $.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		}); });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		// Clearing the box (its x, or deleting the text) returns to the browse panels.&lt;br /&gt;
		$(&#039;#bcas-q&#039;).on(&#039;input search&#039;, function () { if (!this.value.trim() &amp;amp;&amp;amp; state.q) { state.cls = &#039;&#039;; state.tab = &#039;library&#039;; run(); } });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:GetRootVerses/Display&amp;diff=144264</id>
		<title>Module:GetRootVerses/Display</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:GetRootVerses/Display&amp;diff=144264"/>
		<updated>2026-10-08T21:39:45Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: hint says only &amp;quot;swipe&amp;quot; on phones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:GetRootVerses/Display&lt;br /&gt;
-- Handles all HTML rendering and display logic&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Create a visibility toggle widget&lt;br /&gt;
function p.createToggle(frame, id, label, options)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    &lt;br /&gt;
    return frame:callParserFunction{&lt;br /&gt;
        name = &#039;#widget&#039;,&lt;br /&gt;
        args = {&lt;br /&gt;
            &#039;SingleVisibilityToggle&#039;,&lt;br /&gt;
            classes = options.classes or &#039;text-90&#039;,&lt;br /&gt;
            toggleClasses = options.toggleClasses or &#039;d-inline-block text-50 mt-0 line10 py-1&#039;,&lt;br /&gt;
            id = id,&lt;br /&gt;
            checked = options.checked or &#039;checked&#039;,&lt;br /&gt;
            active = options.active or &#039;active&#039;,&lt;br /&gt;
            label = label&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render source text and transliteration&lt;br /&gt;
function p.renderVerseContent(data)&lt;br /&gt;
    local parts = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Source text&lt;br /&gt;
    if data.SegmentSource then&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;div class=&amp;quot;ToggleThese cursor-pointer p-bl-fix&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&#039;&lt;br /&gt;
        parts[#parts + 1] = data.SegmentSource&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Transliteration&lt;br /&gt;
    if data.SourceTranslit then&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;div class=&amp;quot;ToggleThese cursor-pointer text-80&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&#039;&lt;br /&gt;
        parts[#parts + 1] = data.SourceTranslit&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render verse metadata info (TM button, alt verse number)&lt;br /&gt;
function p.renderVerseInfo(data, options)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local parts = {&#039;&amp;lt;div style=&amp;quot;font-size: 1.2rem; margin-bottom: .25rem !important;&amp;quot;&amp;gt;&#039;}&lt;br /&gt;
    &lt;br /&gt;
    -- Alternative verse number (for Dunhuang)&lt;br /&gt;
    if options.showAltVerse and data.RootTextChapVerseNum then&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;span class=&amp;quot;text-70 text-muted pr-3&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-list-tree&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; alt verse &#039;&lt;br /&gt;
        parts[#parts + 1] = data.RootTextChapVerseNum&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- TM data button&lt;br /&gt;
    if data.Page then&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;span class=&amp;quot;text-80&amp;quot;&amp;gt;[[&#039;&lt;br /&gt;
        parts[#parts + 1] = data.Page&lt;br /&gt;
        parts[#parts + 1] = &#039;|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-gear-complex-code text-60 link-no-border&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; tm data]]&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    parts[#parts + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render source header with toggles&lt;br /&gt;
function p.renderSourceHeader(frame, label, transMemNum, showToggles)&lt;br /&gt;
    local parts = {&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;h4 mt-3 mb-2 mb-sm-3 line10 pb-2 pb-sm-1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;mr-3&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        label,&lt;br /&gt;
        &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if showToggles and transMemNum ~= &#039;017&#039; then&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;div class=&amp;quot;d-inline-block visibility-controls mb-0&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        parts[#parts + 1] = p.createToggle(frame, &#039;sourceLang-&#039; .. transMemNum, &#039;source&#039;)&lt;br /&gt;
        parts[#parts + 1] = p.createToggle(frame, &#039;transLang-&#039; .. transMemNum, &#039;translation&#039;)&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    parts[#parts + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render audio verse player&lt;br /&gt;
function p.renderAudioVerse(frame, file, transMemNum, verse, segmentOrder)&lt;br /&gt;
    if not file then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return frame:expandTemplate{&lt;br /&gt;
        title = &#039;AudioVerse&#039;,&lt;br /&gt;
        args = {&lt;br /&gt;
            file = file,&lt;br /&gt;
            tm = transMemNum,&lt;br /&gt;
            verse = verse,&lt;br /&gt;
            id = transMemNum .. &#039;seg&#039; .. segmentOrder&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render translation paragraphs&lt;br /&gt;
function p.renderTranslation(content)&lt;br /&gt;
    if not content or #content == 0 then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local parts = {}&lt;br /&gt;
    for _, text in ipairs(content) do&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;p&amp;gt;&#039;&lt;br /&gt;
        parts[#parts + 1] = text&lt;br /&gt;
        parts[#parts + 1] = &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render version content column (source or translation)&lt;br /&gt;
function p.renderVersionColumn(frame, args)&lt;br /&gt;
    return frame:expandTemplate{&lt;br /&gt;
        title = &#039;VersionContent&#039;,&lt;br /&gt;
        args = args&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render other translations toggle control&lt;br /&gt;
function p.renderTranslationsToggle(frame, transMemNum, isChecked)&lt;br /&gt;
    local options = {}&lt;br /&gt;
    &lt;br /&gt;
    if not isChecked then&lt;br /&gt;
        options.checked = &#039;nope&#039;&lt;br /&gt;
        options.active = &#039;inactive&#039;&lt;br /&gt;
        options.toggle = &#039;off&#039;&lt;br /&gt;
        options.color = &#039;carnelian&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    options.toggleClasses = &#039;d-block text-110 mr-0&#039;&lt;br /&gt;
    &lt;br /&gt;
    return table.concat({&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;col-12 visibility-controls text-center d-block mb-2&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        p.createToggle(frame, &#039;translations-&#039; .. transMemNum, &#039;Browse other translations&#039;, options),&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render translations box with all other translations&lt;br /&gt;
function p.renderTranslationsBox(frame, translations, sourceLabel, transMemNum)&lt;br /&gt;
    if not translations or #translations == 0 then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local parts = {&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;col-12&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;row mx-n4&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;translations-&#039;, transMemNum, &#039;&amp;quot; class=&amp;quot;translations-box toggleable px-0 px-md-3 col-md mb-3&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;offwhite-bg h-100 shadow rounded p-3 pb-5 mb-4 position-relative&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;h5 red-header pb-0 mb-3&amp;quot;&amp;gt;&#039;, sourceLabel, &#039; - Other translations&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;d-flex flex-row overflow-auto pb-0 pr-5&amp;quot; style=&amp;quot;scrollbar-width: none;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    -- Add translation cards&lt;br /&gt;
    for _, trans in ipairs(translations) do&lt;br /&gt;
        -- Build TM buttons&lt;br /&gt;
        local tmButtons = {}&lt;br /&gt;
        if trans.page then&lt;br /&gt;
                tmButtons[#tmButtons + 1] = frame:expandTemplate{&lt;br /&gt;
                    title = &#039;InternalLink&#039;,&lt;br /&gt;
                    args = {&lt;br /&gt;
                        wikipage = trans.page,&lt;br /&gt;
                        label = &#039;TM &amp;lt;i class=&amp;quot;fa-duotone fa-angle-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local tmButton = &#039;&#039;&lt;br /&gt;
        if #tmButtons &amp;gt; 0 then&lt;br /&gt;
            tmButton = &#039;&amp;lt;span class=&amp;quot;tsdwiki-top-actions text-70 pl-4 font-style-normal&amp;quot;&amp;gt;&#039; .. &lt;br /&gt;
                      table.concat(tmButtons) .. &lt;br /&gt;
                      &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        parts[#parts + 1] = frame:expandTemplate{&lt;br /&gt;
            title = &#039;VersionContent&#039;,&lt;br /&gt;
            args = {&lt;br /&gt;
                class = &#039;mr-5&#039;,&lt;br /&gt;
                styles = &#039;min-width: 400px; max-width: 400px;&#039;,&lt;br /&gt;
                content = p.renderTranslation(trans.content),&lt;br /&gt;
                source = trans.source,&lt;br /&gt;
                tmButton = tmButton,&lt;br /&gt;
                shorttitle = trans.shortTitle&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Scroll indicator and gradient&lt;br /&gt;
    parts[#parts + 1] = table.concat({&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;position-absolute&amp;quot; style=&amp;quot;right: 0; top: 0; width: 15%; height: 100%; background: linear-gradient(to right, transparent, rgb(255 252 245)); max-width: 100px; margin-right: 1em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;position-absolute w-100 text-center opac-80&amp;quot; style=&amp;quot;bottom: 10px; left: 0;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;opac-50&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;d-none d-md-inline&amp;quot;&amp;gt; shift + scroll /&amp;lt;/span&amp;gt; swipe &amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render simple translations box (for SimpleVerse function)&lt;br /&gt;
function p.renderSimpleTranslationsBox(frame, translations, sourceLabel)&lt;br /&gt;
    if not translations or #translations == 0 then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local parts = {&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;row mx-n4&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;translations-box px-0 px-md-3 col-md mb-3&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;h-100 border rounded p-3 pb-5 mb-4 position-relative&amp;quot; style=&amp;quot;background: #fdf5e4;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;h5 red-header pb-0 mb-3&amp;quot;&amp;gt;&#039;, sourceLabel, &#039; - Other translations&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;d-flex flex-row overflow-auto pb-0 pr-5&amp;quot; style=&amp;quot;scrollbar-width: none;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    -- Add translation cards&lt;br /&gt;
    for _, trans in ipairs(translations) do&lt;br /&gt;
        parts[#parts + 1] = frame:expandTemplate{&lt;br /&gt;
            title = &#039;VersionContent&#039;,&lt;br /&gt;
            args = {&lt;br /&gt;
                class = &#039;mr-5&#039;,&lt;br /&gt;
                styles = &#039;min-width: 400px; max-width: 400px;&#039;,&lt;br /&gt;
                content = p.renderTranslation(trans.content),&lt;br /&gt;
                source = trans.source,&lt;br /&gt;
                shorttitle = trans.shortTitle&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Scroll indicator with different background for simple version&lt;br /&gt;
    parts[#parts + 1] = table.concat({&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;position-absolute&amp;quot; style=&amp;quot;right: 0; top: 0; width: 15%; height: 100%; background: linear-gradient(to right, transparent, #fdf5e4); max-width: 100px; margin-right: .7em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;position-absolute w-100 text-center opac-80&amp;quot; style=&amp;quot;bottom: 10px; left: 0;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;opac-50&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;d-none d-md-inline&amp;quot;&amp;gt; shift + scroll /&amp;lt;/span&amp;gt; swipe &amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:GetVerseTranslations&amp;diff=144263</id>
		<title>Module:GetVerseTranslations</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:GetVerseTranslations&amp;diff=144263"/>
		<updated>2026-10-08T21:39:44Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: hint says only &amp;quot;swipe&amp;quot; on phones (shift + scroll is a desktop gesture)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
&lt;br /&gt;
	local outputVerseTrans = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
&lt;br /&gt;
	local verse = &#039;&#039;&lt;br /&gt;
	if pargs.verse then&lt;br /&gt;
		verse = pargs.verse&lt;br /&gt;
	else&lt;br /&gt;
		verse = mw.title.getCurrentTitle().subpageText&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local SourcesData = mw.smw.ask( &#039;[[Category:Translation Memories]][[TransMemID::+]][[RootTextVerseNumPadmaK::&#039; .. verse .. &#039;]][[SourceVersionLabel::+]][[SegmentFormat::Root]][[TransMemType::Root verses]]|?TransMemID|?SourceVersionLabel|?TranslationPublishedYear|sort=TranslationPublishedYear|order=asc&#039; )&lt;br /&gt;
	local RootSourceTransMems = {}&lt;br /&gt;
	local SourceLabels = {}&lt;br /&gt;
	if SourcesData and #SourcesData then&lt;br /&gt;
		for _, data in ipairs( SourcesData ) do&lt;br /&gt;
			table.insert( RootSourceTransMems, data.TransMemID )&lt;br /&gt;
			SourceLabels[data.TransMemID] = data.SourceVersionLabel&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, sourceTm in ipairs( RootSourceTransMems ) do&lt;br /&gt;
&lt;br /&gt;
		local TransVersesData = mw.smw.ask( &#039;[[Category:Translation Memories]][[RootSourceTransMem::&#039; .. sourceTm .. &#039;]][[SegmentFormat::Root]][[RootTextVerseNumPadmaK::&#039; .. verse .. &#039;]][[TransMemID::!&#039; .. sourceTm .. &#039;]]|?#-=page|?TransMemID|?RootTextChapVerseNum|?TranslationWikiPage#|?ShortTitle|?TranslationCitation|?English|?SegmentOrder|?DuplicateRootTranslation|?TranslationPublishedYear|sort=TranslationPublishedYear|order=asc|limit=10000&#039; )&lt;br /&gt;
&lt;br /&gt;
		if TransVersesData and #TransVersesData then&lt;br /&gt;
&lt;br /&gt;
			local transTbl = {}&lt;br /&gt;
			local pages = &#039;&#039;&lt;br /&gt;
			local englishContent = &#039;&#039;&lt;br /&gt;
			local tmid = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
			for num, trVerseData in ipairs( TransVersesData ) do&lt;br /&gt;
&lt;br /&gt;
				tmid = trVerseData.TransMemID&lt;br /&gt;
				if type(transTbl[tmid]) == &#039;table&#039; then else&lt;br /&gt;
					transTbl[tmid] = {}&lt;br /&gt;
				end&lt;br /&gt;
				if transTbl[tmid][&#039;page&#039;] then&lt;br /&gt;
					pages = transTbl[tmid][&#039;page&#039;] .. &#039;;&#039; .. trVerseData.page&lt;br /&gt;
				else&lt;br /&gt;
					pages = trVerseData.page&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if transTbl[tmid][&#039;english&#039;] then&lt;br /&gt;
					englishContent = transTbl[tmid][&#039;english&#039;] .. &#039;\n&#039; .. trVerseData.English&lt;br /&gt;
				else&lt;br /&gt;
					englishContent = trVerseData.English&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				transTbl[tmid] = {&lt;br /&gt;
					page = pages ,&lt;br /&gt;
					shorttitle = trVerseData.ShortTitle ,&lt;br /&gt;
					english = englishContent ,&lt;br /&gt;
					source = trVerseData.TranslationWikiPage ,&lt;br /&gt;
					duplicate = trVerseData.DuplicateRootTranslation&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			outputVerseTrans = outputVerseTrans .. &#039;&amp;lt;div id=&amp;quot;&#039; .. sourceTm .. &#039;-translations&#039; .. &#039;&amp;quot; class=&amp;quot;translations-box toggleable px-0 px-md-3 col-md mb-3&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;offwhite-bg h-100 shadow rounded p-3 pb-5 mb-4 position-relative&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;h5 red-header pb-0 mb-3&amp;quot;&amp;gt;&#039; .. SourceLabels[sourceTm] .. &#039; - Other translations&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;d-flex flex-row overflow-auto pb-0 pr-5&amp;quot; style=&amp;quot;scrollbar-width: none;&amp;quot;&amp;gt;&#039;	&lt;br /&gt;
			&lt;br /&gt;
			for id, transData in pairs(transTbl) do&lt;br /&gt;
&lt;br /&gt;
				local tmButton = frame:expandTemplate{ &lt;br /&gt;
					title = &#039;InternalLink&#039;, &lt;br /&gt;
					args = { &lt;br /&gt;
						wikipage = transData.page , &lt;br /&gt;
						label = &#039;TM &amp;lt;i class=&amp;quot;fa-duotone fa-angle-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				tmButton = &#039;&amp;lt;span class=&amp;quot;tsdwiki-top-actions text-70 pl-4 font-style-normal&amp;quot;&amp;gt;&#039; .. tmButton .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
				local order = &#039;&#039;&lt;br /&gt;
				if id == &#039;001-Tsadra-BCA-Root-Padmakara&#039; or id == &#039;005-Tsadra-BCA-Root-Dunhuang&#039; then&lt;br /&gt;
					order = &#039;order-first&#039;&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if tostring(transData.duplicate) ~= &#039;true&#039; then&lt;br /&gt;
					outputVerseTrans = outputVerseTrans .. frame:expandTemplate{ &lt;br /&gt;
						title = &#039;VersionContent&#039;, &lt;br /&gt;
						args = { &lt;br /&gt;
							class = &#039;mr-5&#039; ,&lt;br /&gt;
							styles = &#039;min-width: 400px; max-width: 400px;&#039; ,&lt;br /&gt;
							content = transData.english , &lt;br /&gt;
							source = transData.source,&lt;br /&gt;
							tmButton =  tmButton,&lt;br /&gt;
							id = id .. &#039;-translation&#039;,&lt;br /&gt;
							shorttitle = transData.shorttitle,&lt;br /&gt;
							order = order&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			outputVerseTrans = outputVerseTrans .. &#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;position-absolute&amp;quot; style=&amp;quot;right: 0; top: 0; width: 15%; height: 100%; background: linear-gradient(to right, transparent, rgb(255 252 245)); max-width: 100px; margin-right: 1em;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;position-absolute w-100 text-center opac-80&amp;quot; style=&amp;quot;bottom: 10px; left: 0;&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span class=&amp;quot;opac-50&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;d-none d-md-inline&amp;quot;&amp;gt; shift + scroll /&amp;lt;/span&amp;gt; swipe &amp;lt;/span&amp;gt;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angle-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return outputVerseTrans&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:PanelTransparentDual&amp;diff=144262</id>
		<title>Template:PanelTransparentDual</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:PanelTransparentDual&amp;diff=144262"/>
		<updated>2026-10-08T21:39:13Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: side padding on the text columns below md, as PanelTransparent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;dual-panel-container {{{ classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!-- First Section --&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row mx-3 position-relative {{{ section1-classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;col-md-{{{ image1-width |4}}} {{#ifeq:{{{ image1-side | }}}|right|order-md-last|order-md-first}}&amp;quot; style=&amp;quot;min-height: 200px;&amp;quot;&amp;gt;{{#widget:BgImageSimple&lt;br /&gt;
			|smallImage={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image1 | }}}}}}}|600}}&lt;br /&gt;
			|image={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image1 | }}}}}}}|1000}}&lt;br /&gt;
			|size={{{ bg-size1 | cover }}}&lt;br /&gt;
			|position={{{ bg-position1 | }}}&lt;br /&gt;
			|styles={{{ styles1 | }}}&lt;br /&gt;
			|classes={{{ imgClasses1 | }}}&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;col-md-{{{ text1-width |8}}} {{#ifeq:{{{ image1-side | }}}|right|px-3 pl-md-0 pr-md-4 pr-lg-5|px-3 pr-md-0 pl-md-4 pl-lg-5}} &amp;quot;&amp;gt;{{#if: {{{ header1 | }}} |&lt;br /&gt;
			&amp;lt;h3 class=&amp;quot;red-header pt-0 mt-5 mt-md-4&amp;quot;&amp;gt;{{{ header1 | }}}&amp;lt;/h3&amp;gt; | }}&lt;br /&gt;
			&amp;lt;div class=&amp;quot;text-article {{{ text1-classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
{{{ text1 | }}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- Second Section --&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row mx-3 position-relative {{{ section2-classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;col-md-{{{ image2-width |4}}} {{#ifeq:{{{ image2-side | }}}|right|order-md-last|order-md-first}}&amp;quot; style=&amp;quot;min-height: 200px;&amp;quot;&amp;gt;{{#widget:BgImageSimple&lt;br /&gt;
			|smallImage={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image2 | }}}}}}}|600}}&lt;br /&gt;
			|image={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image2 | }}}}}}}|1000}}&lt;br /&gt;
			|size={{{ bg-size2 | cover }}}&lt;br /&gt;
			|position={{{ bg-position2 | }}}&lt;br /&gt;
			|styles={{{ styles2 | }}}&lt;br /&gt;
			|classes={{{ imgClasses2 | }}}&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;col-md-{{{ text2-width |8}}} {{#ifeq:{{{ image2-side | }}}|right|px-3 pl-md-0 pr-md-4 pr-lg-5|px-3 pr-md-0 pl-md-4 pl-lg-5}} &amp;quot;&amp;gt;{{#if: {{{ header2 | }}} |&lt;br /&gt;
			&amp;lt;h3 class=&amp;quot;red-header pt-0 mt-5 mt-md-4&amp;quot;&amp;gt;{{{ header2 | }}}&amp;lt;/h3&amp;gt; | }}&lt;br /&gt;
			&amp;lt;div class=&amp;quot;text-article {{{ text2-classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
{{{ text2 | }}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:PanelTransparent&amp;diff=144261</id>
		<title>Template:PanelTransparent</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:PanelTransparent&amp;diff=144261"/>
		<updated>2026-10-08T21:39:12Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: give the text column side padding below md (text sat against the screen edge; nested rows overflowed 15px)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;row mx-0 position-relative {{{ classes | }}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-{{{ image-width |4}}} {{#ifeq:{{{ image-side | }}}|right|order-md-last|order-md-first}} position-relative&amp;quot; style=&amp;quot;min-height: 200px;&amp;quot;&amp;gt;{{#widget:BgImageSimple&lt;br /&gt;
		|smallImage={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image | }}}}}}}|500}}&lt;br /&gt;
		|image={{filepath:{{#titleparts:{{PAGENAME:{{{ bg-image | }}}}}}}|800}}&lt;br /&gt;
		|size={{{ bg-size | cover }}}&lt;br /&gt;
		|position={{{ bg-position | 50% 50% }}}&lt;br /&gt;
		|styles={{{ styles | }}}&lt;br /&gt;
		|classes={{{ imgClasses | }}}&lt;br /&gt;
	}}{{#if: {{{ imageSource | }}} |&lt;br /&gt;
		&amp;lt;div class=&amp;quot;position-absolute text-center&amp;quot; style=&amp;quot;bottom: 0; left: 0; right: 0; background: rgba(255,255,255,0.7); color: #333; padding: 4px 8px; font-size: 0.8rem;&amp;quot;&amp;gt;&lt;br /&gt;
			{{{ imageSource | }}}&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-{{{ text-width |8}}} {{#ifeq:{{{ image-side | }}}|right|px-3 pl-md-0 pr-md-4 pr-lg-5|px-3 pr-md-0 pl-md-4 pl-lg-5}} &amp;quot;&amp;gt;{{#if: {{{ header | }}} |&lt;br /&gt;
		&amp;lt;h3 class=&amp;quot;red-header pt-0 {{#ifeq:{{{ top-panel | }}}|yes|mt-0|mt-5 mt-md-4}}&amp;quot;&amp;gt;{{{ header | }}}&amp;lt;/h3&amp;gt; | }}&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-article {{{ text-classes | }}} time-to-read&amp;quot;&amp;gt;&lt;br /&gt;
{{{ text | }}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:LibraryItem&amp;diff=144260</id>
		<title>Template:LibraryItem</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:LibraryItem&amp;diff=144260"/>
		<updated>2026-10-08T21:38:52Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: let the related-link / breadcrumb row wrap (it widened some item pages to 1181px on phones)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC____NOEDITSECTION__{{#widget:ReadingRoomCovers}}{{DefaultTitle|{{{ AltTitle | }}}}}{{AdminZone&lt;br /&gt;
	|AltTitle={{GetItemData|prop=DisplayName|default={{{ AltTitle | }}}}}&lt;br /&gt;
	|Approach={{{ Approach | }}}&lt;br /&gt;
	|Audience={{{ Audience | }}}&lt;br /&gt;
	|DisableRedirects={{{ DisableRedirects | }}}&lt;br /&gt;
	|SubTheme={{{ SubTheme | }}}&lt;br /&gt;
	|TermTopics={{{ TermTopics | }}}&lt;br /&gt;
	|Theme={{{ Theme | }}}&lt;br /&gt;
	|ParentTemplate=LibraryItem&lt;br /&gt;
	|DrlPageName={{#if:{{#show:{{PAGENAME}}|?DrlPageName#}}&lt;br /&gt;
		|{{#show:{{PAGENAME}}|?DrlPageName#}}&lt;br /&gt;
		|{{#titleparts:{{SUBPAGENAME}} }}&lt;br /&gt;
	}}&lt;br /&gt;
}}{{Header&lt;br /&gt;
	|AltTitle={{{ AltTitle | }}}&lt;br /&gt;
	|TextTranslated={{{ TextTranslated | }}}&lt;br /&gt;
	|SubPagename={{#show:{{PAGENAME}}|?Display title of#}}&lt;br /&gt;
}}&amp;lt;div class=&amp;quot;d-flex flex-wrap justify-content-between&amp;quot; style=&amp;quot;gap:0 1rem&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{#ask:[[{{PAGENAME}}]]&lt;br /&gt;
				[[Contains a full translation of::Texts/Bodhicaryāvatāra]]&lt;br /&gt;
			|link=none&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|template=LinkBackToTrTimeline&lt;br /&gt;
			|outro=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
		}}{{#ask:[[TmlnTextTitle::{{SUBPAGENAME}}]]&lt;br /&gt;
			|link=none&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|template=LinkBackToComTimeline&lt;br /&gt;
			|outro=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
		}}{{#if:{{{ SubTheme | }}}|{{SubThemesList&lt;br /&gt;
			|{{BASEPAGENAME}}&lt;br /&gt;
			|{{FirstValueOfArray|{{{ SubTheme | }}}|;}}&lt;br /&gt;
			|{{#ifeq:{{{ SubTheme | }}}|SSC Chapter Summaries&lt;br /&gt;
				|Articles/Chapter 1: Giving One&#039;s Body, Possessions, and Virtues;Articles/Chapter 2: Upholding the Dharma from the Perfection of Discipline;Articles/Chapter 3: Perfection of Discipline: Protecting the Dharma Teacher;Articles/Chapter 4: Perfection of Discipline: Discussion of Major Harms in the Sūtras;Articles/Chapter 5: Perfection of Discipline: Avoiding the Harms;Articles/Chapter 6: Protecting the Body;Articles/Chapter 7: Protecting the Possessions and Merit;Articles/Chapter 8: Expiation of Sinful Actions;Articles/Chapter 9: Perfection of Patience;Articles/Chapter 10: Perfection of Effort;Articles/Chapter 11: Praise of Wilderness;Articles/Chapter 12: Purifying the Mind;Articles/Chapter 13: Mindfulness;Articles/Chapter 14: Purification of the Body;Articles/Chapter 15: Purification of Possessions and Merit;Articles/Chapter 16: Enhancement of Body, Possessions, and Merit;Articles/Chapter 17: Benefit of Prostration and Other Practices;Articles/Chapter 18: Recollecting the Three Jewels;Articles/Chapter 19: Enhancing Merit&lt;br /&gt;
				|{{#ask:[[Category:Library Items]][[SubTheme::{{#arraymap:{{{ SubTheme | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|@@@&lt;br /&gt;
					|{{!}}{{!}}&lt;br /&gt;
				}}]]|limit=500|link=none|sep=;|valuesep=;}}&lt;br /&gt;
			}}&lt;br /&gt;
			|sep=none&lt;br /&gt;
		}}&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;|}}{{ReadingTime}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{#arraymap:[[Library]];[[{{BASEPAGENAME}}]];[[Bibliography]];{{#ifexist:{{PAGENAME}}/Full text&lt;br /&gt;
			|[[{{#titleparts:{{PAGENAME}}}}/Full text|&amp;lt;i class=&amp;quot;fa-duotone fa-input-text fa-lg&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Full text available]]&lt;br /&gt;
			|&lt;br /&gt;
		}}&amp;lt;!--&lt;br /&gt;
	The PDF link is gated client-side rather than with ifsysop.&lt;br /&gt;
&lt;br /&gt;
	ifsysop makes a page&#039;s output depend on who is viewing it, so MediaWiki marks&lt;br /&gt;
	the parse transient and refuses to cache it. Measured on this template that&lt;br /&gt;
	meant ttl 0 — every library item re-parsed in full, roughly a second of work&lt;br /&gt;
	including over a hundred GetItemData calls, on every single view by every&lt;br /&gt;
	reader. See .tws-group-only in tws.js.&lt;br /&gt;
--&amp;gt;;&amp;lt;span class=&amp;quot;tws-group-only tws-group-inline&amp;quot; data-group=&amp;quot;sysop&amp;quot;&amp;gt;{{GetItemData&lt;br /&gt;
			|prop=Pdflink&lt;br /&gt;
			|map={{lb}}https://research.tsadra.org/index.php/File:{{ob}}PAGENAMEE:@@@{{cb}} &amp;lt;i class=&amp;quot;fa-duotone fa-file-pdf&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; PDF Link{{rb}}&lt;br /&gt;
		}}&amp;lt;/span&amp;gt;&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
	}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;font-italic font-sans-wiki text-100 text-muted mb-4 px-3&amp;quot;&amp;gt;{{#ifeq: {{{ Editorial | }}}&lt;br /&gt;
	|Yes&lt;br /&gt;
	|&#039;&#039;&#039;&#039;&#039;Editorial content&#039;&#039;&#039;&#039;&#039;: This page was written or translated by the Tsadra Foundation staff as part of the editorial project of this website. It is original content written or translated for the Bodhicitta Project.&lt;br /&gt;
	|Please note that many items in our library are simply pages that represent a detailed library catalog entry and citation of someone else&#039;s work, presentation, or performance. [[Project:General disclaimer|Read our General Disclaimer for more information]].&lt;br /&gt;
}} {{GetItemData&lt;br /&gt;
	|prop=Publisherlink&lt;br /&gt;
	|intro=You can find more information about this item on the [&lt;br /&gt;
	|outro=&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;publisher website].&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;ssb-content row&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ssb {{#ifeq:{{{ wideSidebar | }}}|true|col-md-4|col-md-3}} order-md-last sliding-drawer&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner mb-5&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mt-3 mt-md-0&amp;quot;&amp;gt;{{#if:{{{ SourceAuthorOverride | }}}{{{ AuthorOverride | }}}{{{ TranslatorOverride | }}}{{{ EditorOverride | }}}{{{ CompilerOverride | }}}&lt;br /&gt;
					|{{SidebarPeople&lt;br /&gt;
						|sourceauthor={{ArrayNoSpaces|{{{ SourceAuthorOverride | }}}|;}}&lt;br /&gt;
						|authors={{ArrayNoSpaces|{{{ AuthorOverride | }}}|;}}&lt;br /&gt;
						|translators={{ArrayNoSpaces|{{{ TranslatorOverride | }}}|;}}&lt;br /&gt;
						|editors={{ArrayNoSpaces|{{{ EditorOverride | }}}|;}}&lt;br /&gt;
						|compilers={{ArrayNoSpaces|{{{ CompilerOverride | }}}|;}}&lt;br /&gt;
					}}&lt;br /&gt;
					|{{SidebarPeople&lt;br /&gt;
						|sourceauthor={{GetItemData|prop=SourceAuthor}}&lt;br /&gt;
						|authors={{Uniquify|{{GetItemData|prop=BcaAuthor|sep=;}};{{GetItemData|prop=AllAuthors|sep=;}}|;}}&lt;br /&gt;
						|translators={{Uniquify|{{GetItemData|prop=Translator}};{{GetItemData|prop=AllTranslators}}|;}}&lt;br /&gt;
						|contributors={{GetItemData|prop=DrlContributors}}&lt;br /&gt;
						|editors={{GetItemData|prop=Editor}} &lt;br /&gt;
						|creators={{GetItemData|prop=Creator}}&lt;br /&gt;
						|performers={{GetItemData|prop=Performer}}&lt;br /&gt;
						|producers={{GetItemData|prop=Producer}}&lt;br /&gt;
						|publisher={{GetItemData|prop=BcaPublisher}}&lt;br /&gt;
						|compilers={{GetItemData|prop=Compiler}}&lt;br /&gt;
					}}&lt;br /&gt;
				}}&amp;lt;!--&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				--&amp;gt;{{#if:{{{ TermTopics | }}}{{{ TextTopics | }}}{{{ PeopleTopics | }}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarTopics&lt;br /&gt;
					|terms={{{ TermTopics | }}}&lt;br /&gt;
					|texts={{{ TextTopics | }}}&lt;br /&gt;
					|people={{{ PeopleTopics | }}}&lt;br /&gt;
					|drlTopics={{GetItemData|prop=DrlTopics}}&lt;br /&gt;
				}} | }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
				EXTERNAL RESOURCES AND rKTs DATA&lt;br /&gt;
&lt;br /&gt;
				Both were tabs of their own. The sidebar has room now that the&lt;br /&gt;
				people rows are compact, and both belong beside the work rather&lt;br /&gt;
				than behind a tab: the links say where else the text lives, and&lt;br /&gt;
				the rKTs block is catalogue apparatus for scholars, collapsed so&lt;br /&gt;
				it costs nothing for everyone else.&lt;br /&gt;
&lt;br /&gt;
				Each renders nothing when the work has no such data, so the&lt;br /&gt;
				dividers do not strand themselves above an empty section.&lt;br /&gt;
--&amp;gt;{{#if:{{GetItemData|prop=ISTBLink}}{{GetItemData|prop=AdarshaLink}}{{GetItemData|prop=TlbLink}}{{GetItemData|prop=tbrclink}}{{GetItemData|prop=EightyFour}}{{GetItemData|prop=AcipLink}}{{GetItemData|prop=CbetaLink}}{{GetItemData|prop=SatLink}}{{GetItemData|prop=GretilLink}}{{GetItemData|prop=SARITLink}}{{GetItemData|prop=DsbcLink}}{{GetItemData|prop=TsadraEpubLink}}{{GetItemData|prop=LotsaHouseLink}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarLinks}} | }}{{#if:{{GetItemData|prop=RktsNumber}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarRkts}} | }}&lt;br /&gt;
			&amp;lt;/div&amp;gt;{{#ifeq: {{{ Editorial | }}}|Yes|&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mt-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;{{#widget:TocFix}}|}}&lt;br /&gt;
			{{ScrollToTop}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;{{#ifeq:{{{ wideSidebar | }}}|true|col-md-8|col-md-9}}&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;offwhite-bg rounded-xl tsdwiki-depth-1 p-3 p-xl-4 mb-3 mb-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;{{#ifeq: {{GetItemData|prop=Classification}} &lt;br /&gt;
					| Multimedia&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;col-12&amp;quot;&amp;gt;&lt;br /&gt;
					|{{#if:{{{ FrontCoverImg | }}}&lt;br /&gt;
						|&amp;lt;div class=&amp;quot;col-md-3 tws-lightbox&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	No link= on the cover: an empty link= suppresses the anchor entirely, and&lt;br /&gt;
	the anchor is what the lightbox binds to. Left as a normal file link it&lt;br /&gt;
	targets the file page, which is also where MediaWiki emits the&lt;br /&gt;
	.mw-file-source href the lightbox reads the full-size URL from.&lt;br /&gt;
	See the .tws-lightbox handler in tws.js.&lt;br /&gt;
&lt;br /&gt;
	300px, not 500px. MediaWiki puts the ORIGINAL file in the srcset once the&lt;br /&gt;
	1.5x or 2x variant would exceed the image&#039;s native width, and most covers&lt;br /&gt;
	here are under 750px wide — so a 500px request made every Retina display&lt;br /&gt;
	download the full file on page load, up to 3MB. The lightbox fetches the&lt;br /&gt;
	original on click, which is the point of it. The slot is col-md-3, so 300px&lt;br /&gt;
	is ample anyway.&lt;br /&gt;
--&amp;gt;[[File:{{PAGENAME:{{{ FrontCoverImg | }}}}}|300px|class=w-100 h-auto rounded tsdwiki-depth-1 mb-4]]&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
						|{{GetItemData&lt;br /&gt;
							|prop=FrontCoverImg&lt;br /&gt;
							|intro=&amp;lt;div class=&amp;quot;col-md-3 pt-4 tws-lightbox&amp;quot;&amp;gt;&lt;br /&gt;
							|outro=&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
							|map={{lb}}{{lb}}@@@{{!}}300px{{!}}class=w-100 h-auto rounded tsdwiki-depth-1 mb-4{{rb}}{{rb}}&lt;br /&gt;
							|default=&amp;lt;div class=&amp;quot;col-12&amp;quot;&amp;gt;&lt;br /&gt;
						}}&lt;br /&gt;
					}}&lt;br /&gt;
				}}{{MediaModule&lt;br /&gt;
					|VideoDelay={{{ VideoDelay | }}}&lt;br /&gt;
					|VideoEnd={{{ VideoEnd | }}}&lt;br /&gt;
				}}{{#ifeq: {{{ Editorial | }}}&lt;br /&gt;
					|Yes&lt;br /&gt;
					|{{GetItemData&lt;br /&gt;
						|prop=Abstract&lt;br /&gt;
						|map=&amp;lt;div class=&amp;quot;h4 pt-2&amp;quot;&amp;gt;Abstract&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;mb-3 text-article&amp;quot;&amp;gt;&lt;br /&gt;
@@@&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}{{#if: {{{ EditFeaturedOn | }}} | &lt;br /&gt;
					&amp;lt;h4&amp;gt;Featured on&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;row mb-3&amp;quot;&amp;gt;{{#arraymap:{{{ EditFeaturedOn | }}}&lt;br /&gt;
						|;&lt;br /&gt;
						|@@@&lt;br /&gt;
						|{{MiniTile&lt;br /&gt;
							|wrapperclasses=col-md-6&lt;br /&gt;
							|image={{#show:@@@|?FrontCoverImg#}}&lt;br /&gt;
							|link=@@@&lt;br /&gt;
							|text={{SUBPAGENAME:@@@}}&lt;br /&gt;
						}}&lt;br /&gt;
						|&lt;br /&gt;
					}}&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
					|&amp;lt;h4&amp;gt;{{I18n|en=Description|bo=ངོ་སྤྲོད།}}&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;mb-4 text-article&amp;quot;&amp;gt;{{#if:{{GetItemData|prop=DescriptionTib}}&lt;br /&gt;
						|{{I18n&lt;br /&gt;
							|en={{#if: {{{ AltDescription | }}}&lt;br /&gt;
								|{{{ AltDescription | }}} &lt;br /&gt;
								|{{#ifeq:{{GetItemData|prop=Classification}}|Articles&lt;br /&gt;
									|{{GetItemData&lt;br /&gt;
										|prop=Abstract&lt;br /&gt;
										|default={{GetItemData&lt;br /&gt;
											|prop=Description&lt;br /&gt;
										}}&lt;br /&gt;
									}}&lt;br /&gt;
									|{{GetItemData&lt;br /&gt;
										|prop=Description&lt;br /&gt;
										|default={{GetItemData&lt;br /&gt;
											|prop=Abstract&lt;br /&gt;
										}}&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
							}}&lt;br /&gt;
							|bo={{GetItemData|prop=DescriptionTib}}&lt;br /&gt;
						}}&lt;br /&gt;
						|{{#if: {{{ AltDescription | }}}&lt;br /&gt;
							|{{{ AltDescription | }}} &lt;br /&gt;
							|{{#ifeq:{{GetItemData|prop=Classification}}|Articles&lt;br /&gt;
								|{{GetItemData&lt;br /&gt;
									|prop=Abstract&lt;br /&gt;
									|default={{GetItemData&lt;br /&gt;
										|prop=Description&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
								|{{GetItemData&lt;br /&gt;
									|prop=Description&lt;br /&gt;
									|default={{GetItemData&lt;br /&gt;
										|prop=Abstract&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
							}}&lt;br /&gt;
						}}&lt;br /&gt;
					}}				&lt;br /&gt;
					&amp;lt;/div&amp;gt;{{#if: {{{ EditFeaturedOn | }}} | &lt;br /&gt;
&lt;br /&gt;
					&amp;lt;h4&amp;gt;Featured on&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;row mb-3&amp;quot;&amp;gt;{{#arraymap:{{{ EditFeaturedOn | }}}&lt;br /&gt;
						|;&lt;br /&gt;
						|@@@&lt;br /&gt;
						|{{MiniTile&lt;br /&gt;
							|wrapperclasses=col-md-6&lt;br /&gt;
							|image={{#show:@@@|?FrontCoverImg#}}&lt;br /&gt;
							|link=@@@&lt;br /&gt;
							|text={{SUBPAGENAME:@@@}}&lt;br /&gt;
						}}&lt;br /&gt;
						|&lt;br /&gt;
					}}&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
				}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row mx-n2 justify-content-center&amp;quot;&amp;gt;{{#ask:[[{{#arraymap: {{{ AltTitle | }}};{{#show:{{PAGENAME}}|?Fulltitletrans}};{{#show:{{PAGENAME}}|?Display title of}};{{SUBPAGENAME}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|@@@&lt;br /&gt;
					|{{!}}{{!}}&lt;br /&gt;
				}}]][[Category:Key Texts]]&lt;br /&gt;
				|limit=1&lt;br /&gt;
				|format=template&lt;br /&gt;
				|template=TileToKeyText&lt;br /&gt;
				|link=none&lt;br /&gt;
				|default=&lt;br /&gt;
			}}{{#ifexist:{{FULLPAGENAME}}/Full text&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{FULLPAGENAME}}/Full text&lt;br /&gt;
					|label=Read the Full Text&lt;br /&gt;
					|icon=book-open-reader&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#if:{{{ BilingualPage | }}}&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{{ BilingualPage | }}}&lt;br /&gt;
					|label=Bilingual Layout&lt;br /&gt;
					|icon=language&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#if:{{{ PublicPdfFile | }}}&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|ext-link={{filepath:{{PAGENAME:{{{ PublicPdfFile | }}}}} }}&lt;br /&gt;
					|label=Freely Available PDF&lt;br /&gt;
					|icon=file-pdf&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#ifexist:{{FULLPAGENAME}}/Sabche&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{FULLPAGENAME}}/Sabche&lt;br /&gt;
					|label=Read the Sabche&lt;br /&gt;
					|icon=memo-pad&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	CITED IN THE ŚIKṢĀSAMUCCAYA&lt;br /&gt;
&lt;br /&gt;
	Renders only when this page is actually quoted: at least one segment&#039;s&lt;br /&gt;
	QuoteSource names it. QuoteSource is a Page-type property, so the count is one&lt;br /&gt;
	cheap indexed lookup, and SMW resolves redirects on a page value, so a segment&lt;br /&gt;
	that named one of the text&#039;s other titles counts too. No flag to maintain, and&lt;br /&gt;
	no list to keep in sync as the alignments grow.&lt;br /&gt;
&lt;br /&gt;
	The count is of QUOTATIONS, not segments. One quotation is often split over&lt;br /&gt;
	several consecutive segments — the Pitāputrasamāgamanasūtra has 62 quote&lt;br /&gt;
	segments in the Śikṣāsamuccaya but is quoted 14 times, and one of its runs is&lt;br /&gt;
	36 segments long. See the module for how the runs are collapsed.&lt;br /&gt;
&lt;br /&gt;
	Every aligned translation is searched, not just the Śikṣāsamuccaya: sixteen&lt;br /&gt;
	carry quote data, and 53 texts are cited by more than one — the&lt;br /&gt;
	Laṅkāvatārasūtra by six. The panel groups by citing work, root texts first.&lt;br /&gt;
&lt;br /&gt;
	Collapsed by default, and the panel itself is @deferred so the module runs&lt;br /&gt;
	after the page paints. See Template:SscCitationsDeferred.&lt;br /&gt;
&lt;br /&gt;
	This gate used to test DrlPageName for an &amp;quot;RKTS&amp;quot; catalogue prefix, a proxy for&lt;br /&gt;
	&amp;quot;canonical text&amp;quot; from before QuoteSource was a Page. It hid every cited text&lt;br /&gt;
	without a catalogue number (16 in Oct 2026, e.g. Tathāgatakośasūtra). The&lt;br /&gt;
	module still checks Classification, so a non-text page that is named as a&lt;br /&gt;
	source renders no passages, and tws.js removes the empty panel.&lt;br /&gt;
&lt;br /&gt;
	Keep the pipe on the same line as the expression: #ifexpr fails on a trailing&lt;br /&gt;
	newline.&lt;br /&gt;
--&amp;gt;{{#ifexpr: {{#ask:[[QuoteSource::{{FULLPAGENAME}}]]|format=count}} &amp;gt; 0|&lt;br /&gt;
			&amp;lt;div class=&amp;quot;ssc-citations-block mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show the passages&amp;quot; data-collapsetext=&amp;quot;Hide the passages&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;ssc-citations-heading&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-quote-left fa-sm mr-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;Quoted in the aligned translations&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;{{#ask:[[{{FULLPAGENAME}}]]&lt;br /&gt;
					|?DrlPageName&lt;br /&gt;
					|format=template&lt;br /&gt;
					|template=SscCitationsDeferred&lt;br /&gt;
					|named args=yes&lt;br /&gt;
					|link=none&lt;br /&gt;
					|limit=1&lt;br /&gt;
					|searchlabel=&lt;br /&gt;
					|default=&lt;br /&gt;
					|@deferred&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
			}}{{TileQuery&lt;br /&gt;
				|query=[[Category:Book Excerpts]][[Category:{{SUBPAGENAME}}||{{PAGENAME}}]]&lt;br /&gt;
				|classes=col-md-6 mb-2 mb-md-4&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Book Excerpts&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;row justify-content-center mt-3 my-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}&lt;br /&gt;
			&amp;lt;div class=&amp;quot;alternating-bg text-article opac-85 mt-4&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;row m-0&amp;quot;&amp;gt;{{GetItemData&lt;br /&gt;
						|prop=Citation&lt;br /&gt;
						|intro=&amp;lt;div class=&amp;quot;col-md-3 p-2 font-italic border-top text-md-right&amp;quot;&amp;gt;{{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
							|Classical Works&lt;br /&gt;
							|Reference&lt;br /&gt;
							|Citation&lt;br /&gt;
						}}&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9 p-2 border-top text-90&amp;quot;&amp;gt;&lt;br /&gt;
						|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}{{GetItemData&lt;br /&gt;
						|prop=Publisherlink&lt;br /&gt;
						|intro=&amp;lt;div class=&amp;quot;col-md-3 p-2 font-italic border-top text-md-right&amp;quot;&amp;gt;Publisher Link&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9 p-2 border-top text-90&amp;quot;&amp;gt;&lt;br /&gt;
						|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;{{#ask:[[{{PAGENAME}}]]&lt;br /&gt;
					|?SourceTexts&lt;br /&gt;
					|format=template&lt;br /&gt;
					|template=ShowTranslatedTexts&lt;br /&gt;
					|default=&lt;br /&gt;
					|intro=&amp;lt;div class=&amp;quot;row m-0&amp;quot;&amp;gt;&lt;br /&gt;
					|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					|@deferred&lt;br /&gt;
				}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;{{GetItemData&lt;br /&gt;
				|prop=RecensionCitations&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Recensions&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			}}{{#if:{{{ TextMentions | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ TextMentions | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Texts&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{#if:{{{ PublicationMentions | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ PublicationMentions | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Publications&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{#if:{{{ PeopleMentions | }}}|&amp;lt;h4&amp;gt;People Mentioned&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4 text-85&amp;quot;&amp;gt;{{#arraymap:{{{ PeopleMentions | }}}&lt;br /&gt;
				|;&lt;br /&gt;
				|@@@&lt;br /&gt;
				|{{PersonBadge|@@@}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&amp;lt;/div&amp;gt;|}}{{#if:{{{ RelatedPages | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ RelatedPages | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Works&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{GetItemData&lt;br /&gt;
				|prop=Relatedpagesnotes&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Citations of Related Scholarship&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;related-citations mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			}}&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if: {{{ EditorialFullText | }}} |&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-article my-5 time-to-read&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{ EditorialFullText | }}}&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;h2 class=&amp;quot;ref-header&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Notes&amp;lt;/h2&amp;gt;&lt;br /&gt;
			&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	TABLE OF CONTENTS&lt;br /&gt;
&lt;br /&gt;
	A collapsible band above the relationships, not a tab. Two thirds of works&lt;br /&gt;
	have a ToC and it runs to a median of about 1,100 characters — too much to&lt;br /&gt;
	sit open above the relationships, and too useful to bury.&lt;br /&gt;
&lt;br /&gt;
	This was the last thing in the tabber besides the relationships themselves,&lt;br /&gt;
	so the tabber goes with it: a two-tab strip where one tab was often empty is&lt;br /&gt;
	more furniture than navigation. Links and rKTs data moved to the sidebar&lt;br /&gt;
	earlier for the same reason.&lt;br /&gt;
&lt;br /&gt;
	Renders nothing when the work has no ToC, so nothing shows an empty band.&lt;br /&gt;
--&amp;gt;{{#if: {{{ TableOfContents | }}}&lt;br /&gt;
	|&amp;lt;div class=&amp;quot;work-toc mw-collapsible mw-collapsed shadow-sm&amp;quot; data-expandtext=&amp;quot;Show table of contents&amp;quot; data-collapsetext=&amp;quot;Hide table of contents&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;work-toc-heading&amp;quot;&amp;gt;Table of contents&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;formatted-toc offwhite-bg rounded tsdwiki-depth-0 mt-3 p-2 pr-3&amp;quot;&amp;gt;&lt;br /&gt;
{{{ TableOfContents | }}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	|&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	RELATED WORKS&lt;br /&gt;
&lt;br /&gt;
	A page-level header, outside the #ifeq below so both branches carry it. The&lt;br /&gt;
	tabber used to provide this separation; without it the relationship sections&lt;br /&gt;
	ran straight on from the table of contents band with nothing between them.&lt;br /&gt;
&lt;br /&gt;
	Centred with a byline under it, and plenty of room above: this is the seam&lt;br /&gt;
	between the work itself and everything connected to it, so it reads as a&lt;br /&gt;
	break in the page rather than as one more section heading.&lt;br /&gt;
&lt;br /&gt;
	Hidden by CSS when nothing follows it. The sections below come from&lt;br /&gt;
	Module:GetRels and from a deferred query, so whether there is anything to&lt;br /&gt;
	head is not knowable at parse time — an Editorial page, for instance,&lt;br /&gt;
	renders the area but no rows. tws.js drops the heading when it comes up&lt;br /&gt;
	empty, once the deferred rows have landed.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;work-rels&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;work-rels-heading&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;work-rels-title&amp;quot;&amp;gt;Interconnections&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;work-rels-byline&amp;quot;&amp;gt;Works related to this item&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;{{#ifeq:{{SUBPAGENAME}}&lt;br /&gt;
	|Bodhicaryāvatāra&lt;br /&gt;
	|&amp;lt;table id=&amp;quot;RelationshipsContent&amp;quot; class=&amp;quot;smwtable-clean th-top-right th-nowrap border w-100 mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;th colspan=&amp;quot;2&amp;quot; class=&amp;quot;font-weight-bold&amp;quot;&amp;gt;&amp;lt;center&amp;gt;Text Relationships&amp;lt;/center&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;{{#widget:FilterRelationships|id=Relationships|placeholder=Filter by relationships...}}&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;{{#widget:FilterRelationships|id=Pages|placeholder=Filter by pages found...}}&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		{{#show:{{FULLPAGENAME}}/Relationships|?RelationshipTable}}&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	|&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	EXPLORE PIECES ABOUT THIS WORK&lt;br /&gt;
&lt;br /&gt;
	Our own editorial writing about this text, ahead of the bibliographic&lt;br /&gt;
	relationships below it. These come from the local TextTopics property rather&lt;br /&gt;
	than any of the RelatedTo relationships — no Editorial Content page uses those,&lt;br /&gt;
	in either direction, so GetRels alone can never surface them.&lt;br /&gt;
&lt;br /&gt;
	Rendered with TopicBiblioSection, the same rows as the topic pages, so a piece&lt;br /&gt;
	looks the same wherever it is met. Editorial pages carry no Citation or&lt;br /&gt;
	Pubdate, but TopicBiblioRow already falls back Citation -&amp;gt; Title -&amp;gt; page name,&lt;br /&gt;
	and narration appears by itself through the reverse AssociatedArticle lookup&lt;br /&gt;
	in the row, so nothing extra is needed for either.&lt;br /&gt;
&lt;br /&gt;
	The same piece also appears on the topic pages it lists. That is intended:&lt;br /&gt;
	they are two different ways in to the same writing, not a duplicate.&lt;br /&gt;
&lt;br /&gt;
	Matched on both title forms — relationships store the full prefixed title&lt;br /&gt;
	while TextTopics stores the bare name. See the same fix in Module:GetRels.&lt;br /&gt;
--&amp;gt;{{TopicBiblioSection&lt;br /&gt;
		|query=[[Class::Editorial Content]][[TextTopics::{{SUBPAGENAME}}||{{FULLPAGENAME}}]]&lt;br /&gt;
		|heading=Explore this work&lt;br /&gt;
		|sort=Citation&lt;br /&gt;
		|order=asc&lt;br /&gt;
	}}{{#invoke:GetRels|main}}&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		{{FeatureItems&lt;br /&gt;
			|items={{{ featured-books | }}}&lt;br /&gt;
			|header=Featured books&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-articles | }}}&lt;br /&gt;
			|header=Featured articles&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-dissertations | }}}&lt;br /&gt;
			|header=Featured dissertations&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-texts | }}}&lt;br /&gt;
			|header=Featured source texts&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-media | }}}&lt;br /&gt;
			|header=Featured multimedia&lt;br /&gt;
		}}&amp;lt;!-- &lt;br /&gt;
		{{#if: {{{ GregNotes | }}} |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;span class=&amp;quot;mw-customtoggle-GregNotes opac-50&amp;quot;&amp;gt;Greg Notes &amp;lt;i class=&amp;quot;fa-solid fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-GregNotes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;h3&amp;gt;Initial Notes&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			{{{!}} class=&amp;quot;table offwhite-bg table-striped table-bordered&amp;quot;&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Item Number&lt;br /&gt;
			{{!}} {{{ ItemNumber | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Priority&lt;br /&gt;
			{{!}} {{{ Priority | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Greg Description&lt;br /&gt;
			{{!}} {{{ GregDescription | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Greg Notes&lt;br /&gt;
			{{!}} {{{ GregNotes | }}}&lt;br /&gt;
			{{!}}}&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }} --&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{Categories&lt;br /&gt;
	|Library Items;{{GetItemData|prop=Classification}};{{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
		|Classical Works&lt;br /&gt;
		|{{#ifeq: {{GetItemData|prop=Whichcanon}}&lt;br /&gt;
			|Kangyur&lt;br /&gt;
			|Sutras&lt;br /&gt;
			|Commentaries&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}};{{Uniquify&lt;br /&gt;
		|{{GetItemData&lt;br /&gt;
			|prop=BcaAuthor;AllAuthors;Translator;AllTranslators;DrlContributors;Editor;SourceAuthor;Creator;Performer;Producer;BcaPublisher&lt;br /&gt;
			|sep=;&lt;br /&gt;
			|printsep=;&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
	}};{{#if:{{GetItemData|prop=MediaSeries}}&lt;br /&gt;
		|{{GetItemData|prop=MediaSeries}};Member of a media series&lt;br /&gt;
		|&lt;br /&gt;
	}}{{#if:{{{ BilingualPage | }}}&lt;br /&gt;
		|;Available in Bilingual Format&lt;br /&gt;
	}};{{#ifeq:{{#show:{{PAGENAME}}|?DescriptionByLLM}}&lt;br /&gt;
		|true&lt;br /&gt;
		|Descriptions by LLM&lt;br /&gt;
		|&lt;br /&gt;
	}};{{{ ExtraCats | }}}&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Facet categories for the site search: one per topic and one per decade.&lt;br /&gt;
	Hidden from the footer in CSS. See Module:FacetCategories.&lt;br /&gt;
--&amp;gt;{{#invoke:FacetCategories|main|topics={{{ TermTopics | }}}|date={{GetItemData|prop=Pubdate}}}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
	Silently set SMW properties via lua (for fetched values that are straightforward):&lt;br /&gt;
--&amp;gt;{{SetItemData&lt;br /&gt;
	|source=research&lt;br /&gt;
	|prop=Abstract;Citation;FullTitle;FullTitleTib;FullTitleDev;FullTitleSkt;Fulltitletrans;MediaSeries;RecensionCitations;Relatedpagesnotes;RktsNumber;RktsCanon;RktsSkt;RktsRelationships;RktsNotes;RktsColophon;RktsColophonTitle;Pubdate;DescriptionTib;Publisherlink;SourceTexts;DescriptionByLLM;BcaTibetanPage&lt;br /&gt;
}}{{SetItemData&lt;br /&gt;
	|source=research&lt;br /&gt;
	|prop=ISTBLink;AcipLink;AdarshaLink;AssociatedClassicalWork;BcaAuthor;CbetaLink;Classification;columbiabcrd;Creator;DrlTranspages;DsbcLink;Editor;EightyFour;Event;FirstImage;GretilLink;LocalMediaFile;LotsaHouseLink;MediaCreationDate;Performer;Producer;Roottexttib;Roottextwylie;SARITLink;SatLink;SourceAuthor;StreamingService;Subclass;tbrclink;TlbLink;Totalvolumes;Translator;AllTranslators;TsadraEpubLink;VideoNumberInEvent;VideoStreamID;Whichcanon;RktsAltTitles;RktsAltTitlesSkt;RktsAltTitlesDev;RktstAuthor;RktstAuthorTib;RktstTranslator;RktstTranslatorPandita;BcaPublisher;Associated person;Compiler;Contains a full translation of;Contains a modern commentary of;Contains a partial translation of;Contains a recension of;Contains a review of;Contains a teaching based on;Contains a translation of;Contains polemical content related to;Contains scholarship related to;DrlContributors;Director of editing;Editor;Has a title identical or similar to;Has other volumes;Illustrator;Is a book based on this dissertation;Is a chapter or a part of;Is a commentary of;Is a member of;Is a reading of;Is a scholarly presentation about;Is a teaching based on;Is an interview about;Is another edition of;Is cited in;Is related to;Lead editor;Photographer;Printer;Redactor;Scribe;Shares intertextuality with;Source author;AllAuthors;Language;School;SchoolTib;BcaTibetanGenre;RelatedMedia&lt;br /&gt;
	|sep=;&lt;br /&gt;
}}&amp;lt;!-- &lt;br /&gt;
	END&lt;br /&gt;
&lt;br /&gt;
	Set other properties using SMW&#039;s #set parser function:&lt;br /&gt;
--&amp;gt;{{#set:&lt;br /&gt;
	|DrlPageName={{GetItemData|prop=Pagename}}&lt;br /&gt;
	|CreateRedirectNow={{#ifexist:{{GetItemData|prop=Display title of}}||{{GetItemData|prop=Display title of}} }}&lt;br /&gt;
	|Class={{#if:{{GetItemData|prop=Classification}}&lt;br /&gt;
		|{{GetItemData|prop=Classification}}&lt;br /&gt;
		|unset&lt;br /&gt;
	}}&lt;br /&gt;
	|Volumenumber={{#if:{{GetItemData|prop=Volumenumber}}&lt;br /&gt;
		|{{GetItemData|prop=Volumenumber}}&lt;br /&gt;
		|0&lt;br /&gt;
	}}&lt;br /&gt;
	|Description={{GetItemData&lt;br /&gt;
		|prop=Description&lt;br /&gt;
		|default={{GetItemData|prop=Abstract}}&lt;br /&gt;
	}}&lt;br /&gt;
	|Editorial={{{ Editorial | }}}&lt;br /&gt;
	|ItemNumber={{{ ItemNumber | }}}&lt;br /&gt;
	|Priority={{{ Priority | }}}	&lt;br /&gt;
	|GregDescription={{{ GregDescription | }}}&lt;br /&gt;
	|GregNotes={{{ GregNotes | }}}&lt;br /&gt;
	|Theme={{{ Theme | }}}|+sep=;&lt;br /&gt;
	|SubTheme={{{ SubTheme | }}}|+sep=;&lt;br /&gt;
	|Approach={{{ Approach | }}}|+sep=;&lt;br /&gt;
	|Audience={{{ Audience | }}}|+sep=;&lt;br /&gt;
	|TermTopics={{{ TermTopics | }}}|+sep=;&lt;br /&gt;
	|TextTopics={{{ TextTopics | }}}|+sep=;&lt;br /&gt;
	|PeopleTopics={{{ PeopleTopics | }}}|+sep=;&lt;br /&gt;
	|AllTopics={{#arraymap:{{GetItemData|prop=Subclass}};{{{ TermTopics | }}};{{{ SubTheme | }}};{{{ Theme | }}};{{{ TextTopics | }}};{{{ PeopleTopics | }}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|Title={{#if: {{{ AltTitle | }}}&lt;br /&gt;
		|{{{ AltTitle | }}}&lt;br /&gt;
		|{{#if:{{#show:{{PAGENAME}}|?Display title of}}&lt;br /&gt;
			|{{#show:{{PAGENAME}}|?Display title of}}&lt;br /&gt;
			|{{SUBPAGENAME}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|FrontCoverImg={{#invoke:GetFrontCoverImg|main}}&lt;br /&gt;
	|TileImageUrl={{#if: {{{ FrontCoverImg | }}}&lt;br /&gt;
		|{{filepath:{{#titleparts:{{PAGENAME:{{FirstValueOfArray|{{{ FrontCoverImg | }}}|;}} }} }}|180}}&lt;br /&gt;
		|{{filepath:{{#titleparts:{{PAGENAME:{{FirstValueOfArray|{{#show:{{PAGENAME}}|?FrontCoverImg#}}|;}} }} }}|180}}&lt;br /&gt;
	}}&lt;br /&gt;
	|TileDescription={{#if: {{{ TileDescription | }}}&lt;br /&gt;
		|{{{ TileDescription | }}}&lt;br /&gt;
		|{{#if: {{{ AltDescription | }}}&lt;br /&gt;
			| {{{ AltDescription | }}}&lt;br /&gt;
			| {{GetItemData&lt;br /&gt;
				|prop=Description&lt;br /&gt;
				|default={{GetItemData&lt;br /&gt;
					|prop=Abstract&lt;br /&gt;
					|default={{GetItemData&lt;br /&gt;
						|prop=Citation&lt;br /&gt;
						|default={{RedDot}} &#039;&#039;No description provided.&#039;&#039;&lt;br /&gt;
					}}&lt;br /&gt;
				}}&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|People={{#arraymap:{{GetItemData&lt;br /&gt;
			|prop=SourceAuthor;BcaAuthor;AllAuthors;Translator;AllTranslators;DrlContributors;Editor;Creator;Performer;Producer&lt;br /&gt;
			|sep=;&lt;br /&gt;
			|printsep=;&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|TextClass={{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
		|Classical Works&lt;br /&gt;
		|{{#ifeq: {{GetItemData|prop=Whichcanon}}&lt;br /&gt;
			|Kangyur&lt;br /&gt;
			|Sutra&lt;br /&gt;
			|Commentary&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}}&lt;br /&gt;
	|RelatedBcaVerse={{#arraymap:{{#if: {{{ BcaChapterNum | }}}{{{ BcaVerseNum | }}}&lt;br /&gt;
			|{{{ BcaChapterNum | }}}.{{{ BcaVerseNum | }}}&lt;br /&gt;
			|&lt;br /&gt;
		}};{{#if:{{{ BcaChapVerseNum | }}}&lt;br /&gt;
			|{{{ BcaChapVerseNum | }}}&lt;br /&gt;
			|&lt;br /&gt;
		}};{{#if:{{{ BcaChapVerseNumRangeStart | }}}&lt;br /&gt;
			|{{#ask:&lt;br /&gt;
				[[TransMemID::001-Tsadra-BCA-Root-Padmakara]][[SegmentOrder::&amp;gt;{{#show:Texts/Bodhicaryāvatāra/Verses/{{{ BcaChapVerseNumRangeStart | }}}|?SegmentOrder}}]][[SegmentOrder::&amp;lt;{{#show:Texts/Bodhicaryāvatāra/Verses/{{{ BcaChapVerseNumRangeEnd | }}}|?SegmentOrder}}]]&lt;br /&gt;
				|?RootTextChapVerseNum=&lt;br /&gt;
				|mainlabel=-&lt;br /&gt;
				|sep=;&lt;br /&gt;
				|valuesep=;&lt;br /&gt;
			}}&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|TransMemID={{#ask:&lt;br /&gt;
		[[Category:Translation Memory Basepages]][[SourceWikiPage::{{SUBPAGENAME}}]]OR[[Category:Translation Memory Basepages]][[TranslationWikiPage::{{SUBPAGENAME}}]]&lt;br /&gt;
		|?TransMemID=&lt;br /&gt;
		|mainlabel=-&lt;br /&gt;
		|sep=;&lt;br /&gt;
		|valuesep=;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|KeyTextPage={{#ask:[[Category:Key Texts]][[LibraryTextPage::{{PAGENAME}}]]|limit=1|searchlabel=|link=none}}&lt;br /&gt;
	|BilingualPage={{{ BilingualPage | }}}&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Term={{GetItemData|prop=FullTitle}};{{GetItemData|prop=FullTitleDev}};{{GetItemData|prop=FullTitleSkt}};{{GetItemData|prop=FullTitleTib}};{{#titleparts: {{SUBPAGENAME}} }}|}}|+sep=;&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Definition={{GetItemData|prop=Citation}}|}}&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Link={{FULLPAGENAME}}|}}&lt;br /&gt;
	|PublicPdfFile={{{ PublicPdfFile | }}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:GlossaryInfoBox&amp;diff=144259</id>
		<title>Template:GlossaryInfoBox</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:GlossaryInfoBox&amp;diff=144259"/>
		<updated>2026-10-08T21:38:50Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Mobile: let the names line wrap (it forced the Glossary page to 1011px wide on phones)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;filterable {{{ #userparam | }}} mb-4&amp;quot;&amp;gt;&amp;lt;noglossary&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;position-relative link-no-border rounded-sm offwhite-bg px-3 py-2 p-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;h2 mb-0&amp;quot; style=&amp;quot;line-height: 1;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mt-0 mb-1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-break mb-2 pb-0&amp;quot; style=&amp;quot;color: #004d97&amp;quot;&amp;gt;{{#if: {{{ Glossary-English | }}}&lt;br /&gt;
					|{{{ Glossary-English | }}}&lt;br /&gt;
					|{{#switch:{{{ Glossary-SourceLanguage | }}}&lt;br /&gt;
						|Sanskrit={{{ Glossary-Devanagari | }}} &amp;lt;small&amp;gt;({{{ Glossary-Sanskrit | }}})&amp;lt;/small&amp;gt;&lt;br /&gt;
						|Tibetan={{{ Glossary-Tibetan | }}} &amp;lt;small&amp;gt;({{{ Glossary-Wylie | }}})&amp;lt;/small&amp;gt;&lt;br /&gt;
						|Chinese={{{ Glossary-Chinese | }}} &amp;lt;small&amp;gt;({{{ Glossary-Pinyin | }}})&amp;lt;/small&amp;gt;&lt;br /&gt;
						|#default={{{ Glossary-Devanagari | }}} &amp;lt;small&amp;gt;({{{ Glossary-Sanskrit | }}})&amp;lt;/small&amp;gt;&lt;br /&gt;
					}}&lt;br /&gt;
				}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;d-flex flex-wrap mr-3 align-items-center text-60 line17&amp;quot;&amp;gt;{{#arraymap:{{#if: {{{ Glossary-English | }}}&lt;br /&gt;
						|{{#switch:{{{ Glossary-SourceLanguage | }}}&lt;br /&gt;
							|Sanskrit={{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
							|Tibetan={{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}};{{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
							|Chinese={{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}};{{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}}&lt;br /&gt;
							|#default={{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
						}}&lt;br /&gt;
						|{{#switch:{{{ Glossary-SourceLanguage | }}}&lt;br /&gt;
							|Sanskrit={{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
							|Tibetan={{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
							|Chinese={{{ Glossary-Devanagari | }}};{{{ Glossary-Sanskrit | }}};{{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}}&lt;br /&gt;
							|#default={{{ Glossary-Tibetan | }}};{{{ Glossary-Wylie | }}};{{{ Glossary-Chinese | }}};{{{ Glossary-Pinyin | }}}&lt;br /&gt;
						}}&lt;br /&gt;
					}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|@@@&lt;br /&gt;
					|&amp;lt;i class=&amp;quot;fa-light fa-pipe mx-2 opac-30&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				}}				&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;container p-0 pt-4&amp;quot;&amp;gt;{{#if: {{{ Glossary-BasicMeaning | }}}{{{ Glossary-PopUpBeginnerDefinition | }}} | &lt;br /&gt;
			&amp;lt;div class=&amp;quot;row pb-3&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-3 font-larger font-weight-bolder text-md-right&amp;quot;&amp;gt;Basic Meaning:&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-9 pl-md-0&amp;quot;&amp;gt;{{#if: {{{ Glossary-PopUpBeginnerDefinition | }}}&lt;br /&gt;
					| {{{ Glossary-PopUpBeginnerDefinition | }}}&lt;br /&gt;
					| {{{ Glossary-BasicMeaning | }}}&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt; | }}{{#if: {{{ Glossary-Senses | }}}{{{ Glossary-DefinitionTsadra | }}} | &lt;br /&gt;
			&amp;lt;div class=&amp;quot;row pb-3&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-3 font-larger font-weight-bolder text-md-right&amp;quot;&amp;gt;Has the sense of:&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-9 pl-md-0&amp;quot;&amp;gt;{{#if:{{{ Glossary-DefinitionTsadra | }}}&lt;br /&gt;
					|{{{ Glossary-DefinitionTsadra | }}}&lt;br /&gt;
					|{{{ Glossary-Senses | }}}&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt; | }}{{#if: {{{ Glossary-SimpleUsage | }}} | &lt;br /&gt;
			&amp;lt;div class=&amp;quot;row pb-3&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-3 font-larger font-weight-bolder text-md-right&amp;quot;&amp;gt;Simplified English Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-9 pl-md-0&amp;quot;&amp;gt;{{{ Glossary-SimpleUsage | }}}&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt; | }}{{#if: {{{ Glossary-SutraQuote | }}} | &lt;br /&gt;
			&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-3 font-larger font-weight-bolder text-right&amp;quot;&amp;gt;In the scriptures:&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-9 pl-md-0&amp;quot;&amp;gt;{{ Blockquote | {{{ Glossary-SutraQuote | }}} | {{{ Glossary-SutraQuoteSource | }}} |classes=m-0 }}&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div style=&amp;quot;display: none;&amp;quot;&amp;gt;{{{ Glossary-Wylie | }}}; {{{ Glossary-Term-Alt | }}}; {{{ Glossary-TopicVariation | }}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;d-flex justify-content-between row-wrap&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;opac-50 carnelian&amp;quot; style=&amp;quot;font-size: 1.3em;&amp;quot;&amp;gt;{{{ Glossary-SourceLanguage | }}} {{{ Glossary-PartOfSpeech | }}}&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;tsdwiki-link-blue&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-memo fa-fw&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Go to page &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-arrow-right fa-fw &amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#widget:OverlayLink&lt;br /&gt;
			|link=/index.php/{{{ 1 | }}}&lt;br /&gt;
			|classes=tsdwiki-pop-off&lt;br /&gt;
			|target=_self&lt;br /&gt;
			|title={{SUBPAGENAME:{{{ 1 | }}}}}&lt;br /&gt;
		}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;/noglossary&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Topics&amp;diff=144258</id>
		<title>Topics</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Topics&amp;diff=144258"/>
		<updated>2026-10-08T21:38:36Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Editors note: show to logged-in users only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION__{{RemoveFirstHeading}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Topics&lt;br /&gt;
	|subtitle=An Index of Bodhicitta and Buddhist Topics&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tws-group-only&amp;quot; data-group=&amp;quot;user&amp;quot;&amp;gt;&amp;lt;!-- Editors&#039; note: shown to logged-in users only. --&amp;gt;&lt;br /&gt;
*NEEDED BUT NOT YET HERE: Ngöndro ([[sngon &#039;gro]]), meaning &amp;quot;[[Preliminary Practices]]&amp;quot;. &lt;br /&gt;
:Some of these should be Topics? Right? &lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/View&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Conduct &lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Philosophy&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Meditation&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Mind_Training&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Secular_World&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Training&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Training:_Giving&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Training:_Protecting&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Training:_Purifying&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Training:_Increasing&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Study/Bodhicary%C4%81vat%C4%81ra:_Source_Texts&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Study/Bodhicary%C4%81vat%C4%81ra:_Commentaries_(scholarship)&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Study/Bodhicary%C4%81vat%C4%81ra:_Commentaries_(original_texts)&lt;br /&gt;
:*https://bodhicitta.tsadra.org/index.php/Explore/Reference_Texts &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row ssb-content&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ssb col-md-3 order-md-last sliding-drawer&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;my-4&amp;quot;&amp;gt;{{#Widget:filterInput|placeholder=Search topics...|autofocus=autofocus}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;ml-2 mb-4 text-110&amp;quot;&amp;gt;&lt;br /&gt;
* [[#General Topics|General Topics]]&lt;br /&gt;
* [[#Bodhicaryāvatāra Chapters &amp;amp; Verses|BCA Chapters &amp;amp; Verses]]&lt;br /&gt;
* [[#Śikṣāsamuccaya Chapters &amp;amp; Verses|SSC Chapters &amp;amp; Verses]]&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			{{ScrollToTop}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-9 filterableContent&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		{{#ask:[[Category:Topic Pages]][[AvailableTopic::!~BCA*]][[AvailableTopic::!~SSC*]][[AvailableTopic::!~Śikṣā*]]&lt;br /&gt;
			|?AvailableTopic |?CountEditorialContent |?CountBooks |?CountDissertations |?CountArticles |?CountClassicalWorks |?CountMultimedia&lt;br /&gt;
			|named args=true&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicTile&lt;br /&gt;
			|link=none&lt;br /&gt;
			|sort=AvailableTopic&lt;br /&gt;
			|order=asc&lt;br /&gt;
			|intro=&amp;lt;h3 class=&amp;quot;filterable&amp;quot;&amp;gt;General Topics&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;row sort-ascending&amp;quot;&amp;gt;&lt;br /&gt;
			|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			|limit=2000&lt;br /&gt;
			|@deferred&lt;br /&gt;
		}}&lt;br /&gt;
&lt;br /&gt;
		{{#ask:[[Category:Topic Pages]][[AvailableTopic::~BCA*]]&lt;br /&gt;
			|?AvailableTopic |?CountEditorialContent |?CountBooks |?CountDissertations |?CountArticles |?CountClassicalWorks |?CountMultimedia&lt;br /&gt;
			|named args=true&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicTile&lt;br /&gt;
			|link=none&lt;br /&gt;
			|sort=AvailableTopic&lt;br /&gt;
			|order=asc&lt;br /&gt;
			|intro=&amp;lt;h3 class=&amp;quot;filterable&amp;quot;&amp;gt;Bodhicaryāvatāra Chapters &amp;amp; Verses&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;row filterableContent sort-ascending&amp;quot;&amp;gt;&lt;br /&gt;
			|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			|limit=2000&lt;br /&gt;
			|userparam=var(--tws-heading-gold)&lt;br /&gt;
			|@deferred&lt;br /&gt;
		}}&lt;br /&gt;
&lt;br /&gt;
		{{#ask:[[Category:Topic Pages]][[AvailableTopic::~SSC*]]&lt;br /&gt;
			OR[[Category:Topic Pages]][[AvailableTopic::~Śikṣā*]]&lt;br /&gt;
			|?AvailableTopic |?CountEditorialContent |?CountBooks |?CountDissertations |?CountArticles |?CountClassicalWorks |?CountMultimedia&lt;br /&gt;
			|named args=true&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicTile&lt;br /&gt;
			|link=none&lt;br /&gt;
			|sort=AvailableTopic&lt;br /&gt;
			|order=asc&lt;br /&gt;
			|intro=&amp;lt;h3 class=&amp;quot;filterable&amp;quot;&amp;gt;Śikṣāsamuccaya Chapters &amp;amp; Verses&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;row filterableContent sort-ascending&amp;quot;&amp;gt;&lt;br /&gt;
			|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			|limit=2000&lt;br /&gt;
			|userparam=green&lt;br /&gt;
			|@deferred&lt;br /&gt;
		}}&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;columns-4&amp;quot;&amp;gt;&lt;br /&gt;
#[[Topics/Śāntideva&#039;s Life]]&lt;br /&gt;
#[[Topics/Śāntideva&#039;s Life Story]]&lt;br /&gt;
#[[Topics/Active Bodhicitta]]&lt;br /&gt;
#[[Topics/Arousing Bodhicitta]]&lt;br /&gt;
#[[Topics/Aspirational Bodhicitta]]&lt;br /&gt;
#[[Topics/Ultimate Bodhicitta]] &#039;&#039;&#039;Added Dec 20, 2024 by Marcus - Ultimate and Relative Bodhicitta are defined in this article we have here: [[Divisions of Bodhicitta]]&#039;&#039;&#039;&lt;br /&gt;
#[[Topics/Relative Bodhicitta]] &#039;&#039;&#039;Added Dec 20, 2024 by Marcus - Ultimate and Relative Bodhicitta are defined in this article we have here: [[Divisions of Bodhicitta]]&#039;&#039;&#039;&lt;br /&gt;
#[[Topics/Defining Bodhicitta]]&lt;br /&gt;
#[[Topics/Increasing Bodhicitta]]&lt;br /&gt;
#[[Topics/Protecting Bodhicitta]]&lt;br /&gt;
#[[Topics/Taking Hold of Bodhicitta]]&lt;br /&gt;
#[[Topics/The Concept of Bodhicitta]]&lt;br /&gt;
#[[Topics/The Excellence of Bodhicitta]]&lt;br /&gt;
#[[Topics/Actualized Enlightenment]]&lt;br /&gt;
#[[Topics/advaya]]&lt;br /&gt;
#[[Topics/Altruism]]&lt;br /&gt;
#[[Topics/Amalavijñāna]]&lt;br /&gt;
#[[Topics/Anger]]&lt;br /&gt;
#[[Topics/Animals]]&lt;br /&gt;
#[[Topics/anātman]]&lt;br /&gt;
#[[Topics/Aṣṭasāhasrikāprajñāpāramitā]]&lt;br /&gt;
#[[Topics/BCA intro]]&lt;br /&gt;
#[[Topics/BCA Chapter 1]]&lt;br /&gt;
#[[Topics/BCA Chapter 2]]&lt;br /&gt;
#[[Topics/BCA Chapter 3]]&lt;br /&gt;
#[[Topics/BCA Chapter 4]]&lt;br /&gt;
#[[Topics/BCA Chapter 5]]&lt;br /&gt;
#[[Topics/BCA Chapter 6]]&lt;br /&gt;
#[[Topics/BCA Chapter 7]]&lt;br /&gt;
#[[Topics/BCA Chapter 8]]&lt;br /&gt;
#[[Topics/BCA Chapter 9]]&lt;br /&gt;
#[[Topics/BCA 9.2|The Wisdom Chapter Verse 9.2]]&lt;br /&gt;
#[[Topics/BCA Chapter 10]]: Dedication&lt;br /&gt;
#[[Topics/Śikṣā Chapter 1]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 10]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 11]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 12]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 13]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 14]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 15]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 16]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 17]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 18]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 19]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 2]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 3]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 4]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 5]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 6]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 7]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 8]]&lt;br /&gt;
#[[Topics/Śikṣā Chapter 9]]&lt;br /&gt;
#[[Topics/bhūmi]]&lt;br /&gt;
#[[Topics/Bibliography]]&lt;br /&gt;
#[[Topics/bodhi]]&lt;br /&gt;
#[[Topics/bodhigarbha]]&lt;br /&gt;
#[[Topics/Bodies and Embodiment]]&lt;br /&gt;
#[[Topics/Buddha-Nature]]&lt;br /&gt;
#[[Topics/buddhadhātu]]&lt;br /&gt;
#[[Topics/Buddhist Ethics]]&lt;br /&gt;
#[[Topics/byams chos sde lnga]]&lt;br /&gt;
#[[Topics/bīja]]&lt;br /&gt;
#[[Topics/Carefulness]]&lt;br /&gt;
#[[Topics/Catalog]]&lt;br /&gt;
#[[Topics/Christian Thought and Śāntideva]]&lt;br /&gt;
#[[Topics/Cittamātra]]&lt;br /&gt;
#[[Topics/Comparative]]&lt;br /&gt;
#[[Topics/Compassion]]&lt;br /&gt;
#[[Topics/Confession]]&lt;br /&gt;
#[[Topics/Consciousness]]&lt;br /&gt;
#[[Topics/Consequentialism]]&lt;br /&gt;
#[[Topics/Contemporary]]&lt;br /&gt;
#[[Topics/Contemporary American Buddhist]]&lt;br /&gt;
#[[Topics/dbyed sgom]]&lt;br /&gt;
#[[Topics/Debate]]&lt;br /&gt;
#[[Topics/Dedication]]&lt;br /&gt;
#[[Topics/Dedication of Merit]]&lt;br /&gt;
#[[Topics/dharmadhātu]]&lt;br /&gt;
#[[Topics/dharmakāya]]&lt;br /&gt;
#[[Topics/dharmatā]]&lt;br /&gt;
#[[Topics/dhātu]]&lt;br /&gt;
#[[Topics/Diligence]]&lt;br /&gt;
#[[Topics/Dissertation]]&lt;br /&gt;
#[[Topics/Doctrine]]&lt;br /&gt;
#[[Topics/Dpal sprul rin po che]]&lt;br /&gt;
#[[Topics/Drikung Kagyu]]&lt;br /&gt;
#[[Topics/Drukpa Kagyu]]&lt;br /&gt;
#[[Topics/Dunhuang]]&lt;br /&gt;
#[[Topics/Dzogchen]]&lt;br /&gt;
#[[Topics/Economics]]&lt;br /&gt;
#[[Topics/Education]]&lt;br /&gt;
#[[Topics/ekayāna]]&lt;br /&gt;
#[[Topics/Emotions]]&lt;br /&gt;
#[[Topics/Emptiness]]&lt;br /&gt;
#[[Topics/Engaged Buddhism]]&lt;br /&gt;
#[[Topics/Environment]]&lt;br /&gt;
#[[Topics/First Turning]]&lt;br /&gt;
#[[Topics/Four Immeasurables]]&lt;br /&gt;
#[[Topics/Free Will]]&lt;br /&gt;
#[[Topics/Geluk]]&lt;br /&gt;
#[[Topics/Gender and Sexuality]]&lt;br /&gt;
#[[Topics/Generosity]]&lt;br /&gt;
#[[Topics/gotra]]&lt;br /&gt;
#[[Topics/Great Madhyamaka]]&lt;br /&gt;
#[[Topics/guṇa]]&lt;br /&gt;
#[[Topics/guṇapāramitā]]&lt;br /&gt;
#[[Topics/gzhan stong]]&lt;br /&gt;
#[[Topics/gzhi]]&lt;br /&gt;
#[[Topics/Health Care]]&lt;br /&gt;
#[[Topics/History]]&lt;br /&gt;
#[[Topics/History of Buddhism in China]]&lt;br /&gt;
#[[Topics/History of Buddhism in India]]&lt;br /&gt;
#[[Topics/History of Buddhism in Japan]]&lt;br /&gt;
#[[Topics/History of Buddhism in Korea]]&lt;br /&gt;
#[[Topics/History of Buddhism in Tibet]]&lt;br /&gt;
#[[Topics/icchantika]]&lt;br /&gt;
#[[Topics/Index]]&lt;br /&gt;
#[[Topics/Jonang]]&lt;br /&gt;
#[[Topics/Kadam]]&lt;br /&gt;
#[[Topics/Kagyu]]&lt;br /&gt;
#[[Topics/Karma Kagyu]]&lt;br /&gt;
#[[Topics/Karmapa, 8th]]&lt;br /&gt;
#[[Topics/kleśa]]&lt;br /&gt;
#[[Topics/kun gzhi]]&lt;br /&gt;
#[[Topics/Kālacakra]]&lt;br /&gt;
#[[Topics/Madhyamaka]]&lt;br /&gt;
#[[Topics/Mahamudra]]&lt;br /&gt;
#[[Topics/Material Culture]]&lt;br /&gt;
#[[Topics/Meditation]]&lt;br /&gt;
#[[Topics/Meditative Concentration]]&lt;br /&gt;
#[[Topics/Mental Health]]&lt;br /&gt;
#[[Topics/Mental Health and Well-Being]]&lt;br /&gt;
#[[Topics/Mental Health/Well-Being]]&lt;br /&gt;
#[[Topics/Metaphors]]&lt;br /&gt;
#[[Topics/Mind Training]]&lt;br /&gt;
#[[Topics/Mindfulness]]&lt;br /&gt;
#[[Topics/Monasticism]]&lt;br /&gt;
#[[Topics/neyārtha]]&lt;br /&gt;
#[[Topics/ngo bo]]&lt;br /&gt;
#[[Topics/Ngok Tradition]]&lt;br /&gt;
#[[Topics/niḥsvabhāva]]&lt;br /&gt;
#[[Topics/niḥsvabhāvatā]]&lt;br /&gt;
#[[Topics/niṣprapañca]]&lt;br /&gt;
#[[Topics/Nyingma]]&lt;br /&gt;
#[[Topics/nītārtha]]&lt;br /&gt;
#[[Topics/Offering]]&lt;br /&gt;
#[[Topics/Original Enlightenment]]&lt;br /&gt;
#[[Topics/paramārthasatya]]&lt;br /&gt;
#[[Topics/paratantrasvabhāva]]&lt;br /&gt;
#[[Topics/parikalpitasvabhāva]]&lt;br /&gt;
#[[Topics/pariniṣpannasvabhāva]]&lt;br /&gt;
#[[Topics/paryudāsapratiṣedha]]&lt;br /&gt;
#[[Topics/Patience]]&lt;br /&gt;
#[[Topics/Pawo Rinpoche, 2nd]]&lt;br /&gt;
#[[Topics/Peace and Conflict]]&lt;br /&gt;
#[[Topics/Perfection of Concentration]]&lt;br /&gt;
#[[Topics/Perfection of Diligence]]&lt;br /&gt;
#[[Topics/Perfection of Discipline]]&lt;br /&gt;
#[[Topics/Perfection of Generosity]]&lt;br /&gt;
#[[Topics/Perfection of Patience]]&lt;br /&gt;
#[[Topics/Perfection of Wisdom]]&lt;br /&gt;
#[[Topics/prabhāsvara]]&lt;br /&gt;
#[[Topics/prabhāsvaracitta]]&lt;br /&gt;
#[[Topics/Praising]]&lt;br /&gt;
#[[Topics/prajñā]]&lt;br /&gt;
#[[Topics/Prakṛtinirvāṇa]]&lt;br /&gt;
#[[Topics/Prakṛtinirvṛta]]&lt;br /&gt;
#[[Topics/prakṛtisthagotra]]&lt;br /&gt;
#[[Topics/prasajyapratiṣedha]]&lt;br /&gt;
#[[Topics/pratipakṣa]]&lt;br /&gt;
#[[Topics/pratītyasamutpāda]]&lt;br /&gt;
#[[Topics/Provisional or Definitive]]&lt;br /&gt;
#[[Topics/Pure Land]]&lt;br /&gt;
#[[Topics/rang stong]]&lt;br /&gt;
#[[Topics/Refuge]]&lt;br /&gt;
#[[Topics/Review]]&lt;br /&gt;
#[[Topics/rgyu&#039;i rgyud]]&lt;br /&gt;
#[[Topics/Rime]]&lt;br /&gt;
#[[Topics/Ritual]]&lt;br /&gt;
#[[Topics/Sakya]]&lt;br /&gt;
#[[Topics/samudānītagotra]]&lt;br /&gt;
#[[Topics/Sangpu Neutok]]&lt;br /&gt;
#[[Topics/sarvākāravaropetāśūnyatā]]&lt;br /&gt;
#[[Topics/saṃvṛtisatya]]&lt;br /&gt;
#[[Topics/Second Turning]]&lt;br /&gt;
#[[Topics/sems nyid]]&lt;br /&gt;
#[[Topics/Sentient beings]]&lt;br /&gt;
#[[Topics/Shakyamuni Buddha]]&lt;br /&gt;
#[[Topics/Shangpa Kagyu]]&lt;br /&gt;
#[[Topics/Six Perfections]]&lt;br /&gt;
#[[Topics/Skillful Means]]&lt;br /&gt;
#[[Topics/sugatagarbha]]&lt;br /&gt;
#[[Topics/svabhāva]]&lt;br /&gt;
#[[Topics/svasaṃvedana]]&lt;br /&gt;
#[[Topics/tathatā]]&lt;br /&gt;
#[[Topics/tathāgatagarbha]]&lt;br /&gt;
#[[Topics/Ten bhūmis]]&lt;br /&gt;
#[[Topics/Ten Perfections]]&lt;br /&gt;
#[[Topics/Terma]]&lt;br /&gt;
#[[Topics/Terminology]]&lt;br /&gt;
#[[Topics/Textual study]]&lt;br /&gt;
#[[Topics/tha mal gyi shes pa]]&lt;br /&gt;
#[[Topics/The Bodhisattva Doctrine]]&lt;br /&gt;
#[[Topics/The Path]]&lt;br /&gt;
#[[Topics/Third Turning]]&lt;br /&gt;
#[[Topics/Tien Tai]]&lt;br /&gt;
#[[Topics/Tonglen]]&lt;br /&gt;
#[[Topics/Translation]]&lt;br /&gt;
#[[Topics/tridharmacakrapravartana]]&lt;br /&gt;
#[[Topics/trikāya]]&lt;br /&gt;
#[[Topics/trisvabhāva]]&lt;br /&gt;
#[[Topics/triyāna]]&lt;br /&gt;
#[[Topics/Tsen Tradition]]&lt;br /&gt;
#[[Topics/Tsong kha pa]]&lt;br /&gt;
#[[Topics/Two Extremes]]&lt;br /&gt;
#[[Topics/Two Truths]]&lt;br /&gt;
#[[Topics/Universals]]&lt;br /&gt;
#[[Topics/Uttaratantra]]&lt;br /&gt;
#[[Topics/Vajrayana]]&lt;br /&gt;
#[[Topics/Vigilant Introspection]]&lt;br /&gt;
#[[Topics/visaṃyogaphala]]&lt;br /&gt;
#[[Topics/Wisdom]]&lt;br /&gt;
#[[Topics/Yogācāra]]&lt;br /&gt;
#[[Topics/Zen - Chan]]&lt;br /&gt;
#[[Topics/āgantukamala]]&lt;br /&gt;
#[[Topics/ālayavijñāna]]&lt;br /&gt;
#[[Topics/ātmaka]]&lt;br /&gt;
#[[Topics/ātman]]&lt;br /&gt;
#[[Topics/śūnyatā]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=The central index of Bodhicitta and Mahāyāna Buddhist topics. Browse our comprehensive library of teachings, scriptures, and multimedia categorized by philosophical concepts, practices, and history.&lt;br /&gt;
	|Title=Topics Index: A Guide to Bodhicitta and Mahāyāna Buddhism&lt;br /&gt;
	|AllTopics=Bodhicitta Topics; Buddhist Concept Index; Mahayana Taxonomy; Dharma Categories; Buddhist Philosophy; Meditation Practices; Historical Lineages; Buddhist Research Hub; Tsadra Foundation Index&lt;br /&gt;
	|FrontCoverImg=File:Shantideva-Eric-reduced.jpg&lt;br /&gt;
}}[[Category: Resources]][[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Listening_Room&amp;diff=144255</id>
		<title>Listening Room</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Listening_Room&amp;diff=144255"/>
		<updated>2026-10-08T21:35:26Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: VSCode edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION__{{RemoveFirstHeading}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Listening Room&lt;br /&gt;
	|subtitle={{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}} narrated readings &amp;amp;amp; recordings on Bodhicitta&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row justify-content-center&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-9 text-article&amp;quot;&amp;gt;A growing collection of narrated readings of articles from the Bodhicitta website, alongside related talks, interviews, and guided practices. These are read by our authors, staff, and translators, not by AI. So far, readers include [[Laura Swan]], [[Simon Houlton]], [[Alex Catanese]], and [[Lopen Dr. Karma Phuntsho]]. Stream any episode in your browser, or follow the link from an episode to read the article it accompanies.&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row mt-5 mb-4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-7 col-lg-5&amp;quot;&amp;gt;{{#widget:FilterInput|placeholder=Search by title or narrator…}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;filterableContent&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Grouped by doorway rather than presented as one flat grid.&lt;br /&gt;
&lt;br /&gt;
	These are narrations OF specific site pages, not standalone episodes, so the&lt;br /&gt;
	collection inherits the structure of the site itself. Explore carries the&lt;br /&gt;
	Bodhicaryavatara chapters and is by far the largest group, while Practice and&lt;br /&gt;
	Discover are short. Grouping mirrors how a reader already navigates the site,&lt;br /&gt;
	and keeps the chapter sequence legible instead of scattering it.&lt;br /&gt;
&lt;br /&gt;
	Sorting is by AssociatedArticle within each group. Note this is alphabetical,&lt;br /&gt;
	so Chapter 10 sorts next to Chapter 1. Give the chapter pages a numeric sort&lt;br /&gt;
	property if strict reading order matters later.&lt;br /&gt;
--&amp;gt;{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Discover&lt;br /&gt;
	|heading=Discover&lt;br /&gt;
	|blurb=Introductory readings for newcomers to the site.&lt;br /&gt;
}}{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Explore&lt;br /&gt;
	|heading=Explore&lt;br /&gt;
	|blurb=Narrated readings of the Explore essays, including the chapter-by-chapter guide to the &#039;&#039;Bodhicaryāvatāra&#039;&#039;.&lt;br /&gt;
}}{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Practice&lt;br /&gt;
	|heading=Practice&lt;br /&gt;
	|blurb=Recordings drawn from the Living Traditions of Practice series.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=A curated audio library of narrated readings of Bodhicitta website articles, with talks, guided practices, and interviews exploring Śāntideva, the Bodhisattvacaryāvatāra, and the Mahāyāna path of awakening.&lt;br /&gt;
	|Title=Bodhicitta Audio Library: Narrated Articles, Talks &amp;amp;amp; Guided Practices&lt;br /&gt;
	|AllTopics=Bodhicitta Audio; Buddhist Podcast; Narrated Articles; Śāntideva Audio; Bodhicaryāvatāra Readings; Guided Meditations; Dharma Talks; Tsadra Foundation Audio; Listening Practice; Mahāyāna Recordings; Six Perfections Audio&lt;br /&gt;
	|FrontCoverImg=File:Media.jpeg&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Resources]]&lt;br /&gt;
[[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Listening_Room&amp;diff=144254</id>
		<title>Listening Room</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Listening_Room&amp;diff=144254"/>
		<updated>2026-10-08T21:35:07Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: VSCode edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION__{{RemoveFirstHeading}}&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Listening Room&lt;br /&gt;
	|subtitle={{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}} narrated readings &amp;amp;amp; recordings on Bodhicitta&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row justify-content-center&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-9 text-article&amp;quot;&amp;gt;A growing collection of narrated readings of articles from the Bodhicitta website, alongside related talks, interviews, and guided practices. These are read by our authors, staff, and translators, not by AI. So far, readers include [[Laura Swan]], [[Simon Houlton]], [[Alex Catanese]], and [[Lopen Dr. Karma Phuntsho]]. Stream any episode in your browser, or follow the link from an episode to read the article it accompanies.&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row mt-5 mb-4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-7 col-lg-5&amp;quot;&amp;gt;{{#widget:FilterInput|placeholder=Search by title or narrator…}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;filterableContent&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Grouped by doorway rather than presented as one flat grid.&lt;br /&gt;
&lt;br /&gt;
	These are narrations OF specific site pages, not standalone episodes, so the&lt;br /&gt;
	collection inherits the structure of the site itself. Explore carries the&lt;br /&gt;
	Bodhicaryavatara chapters and is by far the largest group, while Practice and&lt;br /&gt;
	Discover are short. Grouping mirrors how a reader already navigates the site,&lt;br /&gt;
	and keeps the chapter sequence legible instead of scattering it.&lt;br /&gt;
&lt;br /&gt;
	Sorting is by AssociatedArticle within each group. Note this is alphabetical,&lt;br /&gt;
	so Chapter 10 sorts next to Chapter 1. Give the chapter pages a numeric sort&lt;br /&gt;
	property if strict reading order matters later.&lt;br /&gt;
--&amp;gt;{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Discover&lt;br /&gt;
	|heading=Discover&lt;br /&gt;
	|blurb=Introductory readings for newcomers to the site.&lt;br /&gt;
}}{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Explore&lt;br /&gt;
	|heading=Explore&lt;br /&gt;
	|blurb=Narrated readings of the Explore essays, including the chapter-by-chapter guide to the &#039;&#039;Bodhicaryāvatāra&#039;&#039;.&lt;br /&gt;
}}{{AudioEpisodeGroup&lt;br /&gt;
	|doorway=Practice&lt;br /&gt;
	|heading=Practice&lt;br /&gt;
	|blurb=Recordings drawn from the Living Traditions of Practice series.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=A curated audio library of narrated readings of Bodhicitta website articles, with talks, guided practices, and interviews exploring Śāntideva, the Bodhisattvacaryāvatāra, and the Mahāyāna path of awakening.&lt;br /&gt;
	|Title=Bodhicitta Audio Library: Narrated Articles, Talks &amp;amp;amp; Guided Practices&lt;br /&gt;
	|AllTopics=Bodhicitta Audio; Buddhist Podcast; Narrated Articles; Śāntideva Audio; Bodhicaryāvatāra Readings; Guided Meditations; Dharma Talks; Tsadra Foundation Audio; Listening Practice; Mahāyāna Recordings; Six Perfections Audio&lt;br /&gt;
	|FrontCoverImg=File:Media.jpeg&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Resources]]&lt;br /&gt;
[[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Main_Page&amp;diff=144253</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Main_Page&amp;diff=144253"/>
		<updated>2026-10-08T21:34:56Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: VSCode edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;hero tsdwiki-depth-2&amp;quot; style=&amp;quot;border-bottom: solid 3px #BA1B1D;&amp;quot;&amp;gt;__NOTOC____NOEDITSECTION____NOGLOSSARY__{{#widget:HeroVideo&lt;br /&gt;
		|720pVideoPath={{filepath:Bca-hero-video-pp-720-hb.mp4}}&lt;br /&gt;
		|1080pVideoPath={{filepath:Bca-hero-video-pp-1080-hb.mp4}}&lt;br /&gt;
		|1440pVideoPath={{filepath:Bca-hero-video-pp-1440-hb.mp4}}&lt;br /&gt;
		|2160pVideoPath={{filepath:Bca-hero-video-pp-2160-hb.mp4}}&lt;br /&gt;
		|FallBackImage720p={{filepath:HomeHeroFirstFrame720.webp}}&lt;br /&gt;
		|FallBackImage1080p={{filepath:HomeHeroFirstFrame1080.webp}}&lt;br /&gt;
		|FallBackImage1440p={{filepath:HomeHeroFirstFrame1440.webp}}&lt;br /&gt;
		|FallBackImage2160p={{filepath:HomeHeroFirstFrame2160.webp}}&lt;br /&gt;
		|LastFrameImage720p={{filepath:HomeHeroLastFrame720.webp}}&lt;br /&gt;
		|LastFrameImage1080p={{filepath:HomeHeroLastFrame1080.webp}}&lt;br /&gt;
		|LastFrameImage1440p={{filepath:HomeHeroLastFrame1440.webp}}&lt;br /&gt;
		|LastFrameImage2160p={{filepath:HomeHeroLastFrame2160.webp}}&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;hero-content&amp;quot; style=&amp;quot;color: black; text-shadow: 0 0 17px #fdf5e4;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row justify-content-center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;div class=&amp;quot;col-lg-6 pt-xl-4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mb-4 mt-md-3 mt-xl-4 mt-xxl-5 pb-lg-4 rfs font-serif text-center animate__animated animate__fadeIn animate__slower animate__delay-4s&amp;quot; style=&amp;quot;opacity: 0;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;d-inline-block&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div id=&amp;quot;textFader&amp;quot; class=&amp;quot;faderContainer line14&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div id=&amp;quot;section1&amp;quot; class=&amp;quot;text-section&amp;quot; style=&amp;quot;font-size: 4.2em;&amp;quot;&amp;gt;Bodhicitta&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div id=&amp;quot;section2&amp;quot; class=&amp;quot;text-section pt-4&amp;quot; style=&amp;quot;font-size: 2.7em;&amp;quot;&amp;gt;Mind of Awakening&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;fade-after-parent text-150 font-serif-alt font-italic mt-md-2 mt-lg-3 tsdwiki-border-t-redfade&amp;quot;&amp;gt;Wisdom and Compassion as a Way of Life&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;animate__animated animate__fadeIn animate__slower animate__delay-4s font-serif-alt text-120 fw-500&amp;quot; style=&amp;quot;opacity: 0;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;rfs text-center&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;faderContainer text-180&amp;quot; style=&amp;quot;line-height: 1.6;&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;text-section&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས་མཆོག་རིན་པོ་ཆེ།།&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;text-section&amp;quot;&amp;gt;མ་སྐྱེས་པ་རྣམས་སྐྱེ་གྱུར་ཅིག།&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;text-section&amp;quot;&amp;gt;སྐྱེས་པ་ཉམས་པ་མེད་པར་ཡང་།།&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;text-section&amp;quot;&amp;gt;གོང་ནས་གོང་དུ་འཕེལ་བར་ཤོག།&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/div&amp;gt;{{#widget:CrossfadeTweaks}}{{#widget:SmoothScrollToHomePageContent}}&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bottomAngle&amp;quot; class=&amp;quot;animate__animated animate__fadeIn animate__slower animate__delay-4s position-absolute w-100 text-center pb-5&amp;quot; style=&amp;quot;bottom: 0; font-size: 2em !important;&amp;quot;&amp;gt;[[#homePageContent|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-down fa-2xl&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;homePageContent&amp;quot; class=&amp;quot;non-hero-container row w-100 py-2 py-md-4 mb-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;offset-lg-1 col-lg-10 offset-xl-2 col-xl-8 text-center font-serif-alt text-180&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div&amp;gt;Welcome to the Bodhicitta website&amp;lt;/div&amp;gt;&lt;br /&gt;
		{{EmbedYoutube&lt;br /&gt;
			|wrapper=mt-4 rounded-xl shadow&lt;br /&gt;
			|id=7eo1I2mYQuM&lt;br /&gt;
		}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;non-hero-container row justify-content-center px-4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-12 text-center font-serif-alt text-180 mb-4&amp;quot;&amp;gt;The Doorways&amp;lt;/div&amp;gt;{{NewHomeTile&lt;br /&gt;
		|wrapperClasses=col-sm-6 col-xl-3 px-4&lt;br /&gt;
		|image=Patrick-connor-klopf-ZNMcI9DtSWQ-unsplash-cropped.jpg&lt;br /&gt;
		|bgPosition=15% 50%&lt;br /&gt;
		|header=Discover&lt;br /&gt;
		|content=What is bodhicitta and why should we learn about it? Discover the basics of bodhicitta.&lt;br /&gt;
		|text-styles=color: white !important; text-shadow: 0px 0px 2px #000000;&lt;br /&gt;
		|link=Discover&lt;br /&gt;
		|icon=eye&lt;br /&gt;
		|style=height: 280px;&lt;br /&gt;
	}}{{NewHomeTile&lt;br /&gt;
		|wrapperClasses=col-sm-6 col-xl-3 px-4&lt;br /&gt;
		|image=Jeremy-bezanger-ls94iFAQerE-unsplash-skyCropped-flipped.jpg&lt;br /&gt;
		|header=Explore&lt;br /&gt;
		|bgPosition=40% 0%&lt;br /&gt;
		|content=Explore bodhicitta&#039;s associated stories, key concepts, texts, and people to gain understanding and engage in practice. &lt;br /&gt;
		|text-styles=color: white !important; text-shadow: 0px 0px 2px #000000;&lt;br /&gt;
		|link=Explore&lt;br /&gt;
		|icon=map&lt;br /&gt;
		|style=height: 280px;&lt;br /&gt;
	}}{{NewHomeTile&lt;br /&gt;
		|wrapperClasses=col-sm-6 col-xl-3 px-4&lt;br /&gt;
		|image=Pecha library cabinet.jpg&lt;br /&gt;
		|header=Study&lt;br /&gt;
		|content=Delve deeper into the study of bodhicitta&#039;s theory, practice, and traditions by reading the core texts.&lt;br /&gt;
		|text-styles=color: white !important; text-shadow: 0px 0px 2px #000000;&lt;br /&gt;
		|link=Study&lt;br /&gt;
		|icon=book-open-cover&lt;br /&gt;
		|style=height: 280px;&lt;br /&gt;
	}}{{NewHomeTile&lt;br /&gt;
		|wrapperClasses=col-sm-6 col-xl-3 px-4&lt;br /&gt;
		|image=Shantideva-Eric-reduced.jpg&lt;br /&gt;
		|header=Practice&lt;br /&gt;
		|bgPosition=50% 20%&lt;br /&gt;
		|content=Learn how to put bodhicitta into practice in order to bring the highest good – perfect enlightenment – to all sentient beings.&lt;br /&gt;
		|text-styles=color: black !important; text-shadow: 0px 0px 2px #FFF;&lt;br /&gt;
		|link=Practice&lt;br /&gt;
		|icon=spa&lt;br /&gt;
		|style=height: 280px;&lt;br /&gt;
	}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;non-hero-container row justify-content-center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-12 text-center font-serif-alt text-190 mb-5&amp;quot;&amp;gt;Browse the Bodhicitta Project&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-12 d-flex flex-row&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;!-- &amp;lt;div class=&amp;quot;d-flex justify-content-center align-items-center&amp;quot; style=&amp;quot;background: linear-gradient(270deg,rgba(253, 245, 228, 0) 0%, rgba(253, 245, 228, 1) 100%);&amp;quot;&amp;gt;&amp;lt;i id=&amp;quot;tileGalleryScrollLeft&amp;quot; class=&amp;quot;fa-duotone fa-solid fa-angle-left cursor-pointer&amp;quot; style=&amp;quot;font-size: 5rem;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt; --&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;tileGallery&amp;quot; class=&amp;quot;row mx-0 pb-4 justify-content-center&amp;quot;&amp;gt;&lt;br /&gt;
			{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Shantideva rising-cropped-left.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=10% 0% !important&lt;br /&gt;
				|header=Śāntideva&lt;br /&gt;
				|description=Begin your exploration with a study of Shantideva&#039;s life and works. Considered essential reading for Buddhists, they have influenced contemporary presentations of the concept profoundly even today. &lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=meet the master &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Śāntideva&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Tibet-scripture 84000.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=60% 50%&lt;br /&gt;
				|header=Reading Room&lt;br /&gt;
				|description=Pull up a chair and start reading here. This is the portal to the main texts presented on this website, along with our multi-lingual presentations and special comparative versions. &lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=read the core texts &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Reading Room&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Pecha Collection.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=60% 25%&lt;br /&gt;
				|header=The Verses&lt;br /&gt;
				|description=Explore the Bodhicaryāvatāra like never before, with a full unpacking, verse-by-verse, of Śāntideva&#039;s masterpiece in multiple languages, with many commentaries available.&lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=compare the BCA &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Texts/Bodhicaryāvatāra/Verses/1.1&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=The Nectar of Manjushri&#039;s Speech-cover-cropped.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=50% 40%&lt;br /&gt;
				|header=བྱང་སེམས་ཆོས་མཛོད།&lt;br /&gt;
				|description=དྲྭ་རྒྱ་འདིར་བྱང་སེམས་སྤྱི་དང་། བྱེ་བྲག་ཞི་བ་ལྷའི་བསྟན་བཅོས་བསླབ་གཏུས་དང་སྤྱོད་འཇུག་གཉིས་ལ་ཐོས་བསམ་སྒོམ་སྒྲུབ་དང་ཞིབ་འཇུག་ལ་སྤྲོ་བ་རྣམས་བདེ་བླག་ཏུ་འཇུག་པའི་ཕྱིར། རྒྱ་གར་དང་རིས་མེད་བོད་ཀྱི་ཆོས་བརྒྱུད་སོ་སོའི་མཁས་དབང་དག་གིས་མཛད་པའི་འབྲེལ་ཡོད་ཡིག་ཆ་ཐ་དག་གཅིག་ཏུ་བསྒྲིགས་ཡོད།&lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=&amp;lt;span class=&amp;quot;text-120&amp;quot;&amp;gt;བྱང་སེམས་ཆོས་མཛོད།&amp;lt;/span&amp;gt; &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=བྱང་སེམས་ཆོས་མཛོད།&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|header=Library&lt;br /&gt;
				|description=A curated library of books, articles, dissertations, sūtras, commentaries, Tibetan and Sanskrit publications, and multimedia resources on the topic of Bodhicitta and Śāntideva&#039;s works.&lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=browse the catalog &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Library&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Library-unsplash.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|header=Bibliography&lt;br /&gt;
				|description=The most complete bibliography of academic and related references on bodhicitta. Special emphasis has been given to works on Śāntideva&#039;s life and his texts. &lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=search the citations &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Bibliography&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=Shantideva high res brighter cropped.jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=50% 30%&lt;br /&gt;
				|header=Timelines&lt;br /&gt;
				|description=Navigate historical milestones of bodhicitta as well as presentations of translations and commentaries on the Bodhicaryāvatāra, by also meeting their respective authors spanning almost two millennia.&lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=go back in time &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Timelines&lt;br /&gt;
			}}{{HomeTile&lt;br /&gt;
				|wrapperclasses=col-12 col-sm-6 col-lg-4 col-xxl-3 px-4 py-0 line-12 mb-5&lt;br /&gt;
				|image=7910 (Buddha teaching at Vulture Peak).jpg&lt;br /&gt;
				|imgHeight=40%&lt;br /&gt;
				|bgPosition=60% 25%&lt;br /&gt;
				|header=Site guide&lt;br /&gt;
				|description=Get help navigating the many layers of content on this website: from introductions to basic buddhist concepts to advanced textual explorations of Śāntideva&#039;s works.&lt;br /&gt;
				|text-lines=6&lt;br /&gt;
				|height=480px&lt;br /&gt;
				|bottomrightlabel=see the big picture &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|tilelink=Site guide&lt;br /&gt;
			}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;!-- &amp;lt;div class=&amp;quot;d-flex justify-content-center align-items-center&amp;quot; style=&amp;quot;background: linear-gradient(90deg,rgba(253, 245, 228, 0) 0%, rgba(253, 245, 228, 1) 100%);&amp;quot;&amp;gt;&amp;lt;i id=&amp;quot;tileGalleryScrollRight&amp;quot; class=&amp;quot;fa-duotone fa-solid fa-angle-right cursor-pointer&amp;quot; style=&amp;quot;font-size: 5rem;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;{{#widget:GalleryScrollingButtons}} --&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;non-hero-container row w-100 pb-2 pb-md-4 mb-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-sm-8 offset-sm-2 offset-xl-3 col-xl-6 pt-2 pt-md-4 text-center&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center font-serif-alt text-180 font-italic mb-3 mt-5&amp;quot;&amp;gt;Search this website&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center mx-4 mb-4&amp;quot;&amp;gt;&amp;lt;inputbox&amp;gt;&lt;br /&gt;
			type=search2&lt;br /&gt;
			placeholder=Search here...&lt;br /&gt;
		&amp;lt;/inputbox&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-6 py-2 py-md-4 text-center&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center font-serif-alt text-180 font-italic my-3&amp;quot;&amp;gt;Join us on social media&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;d-flex justify-content-center text-150 mb-3 mb-lg-5&amp;quot;&amp;gt;{{#widget:SocialMediaHomeIcons}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-6 py-2 py-md-4 text-center&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center font-serif-alt text-180 font-italic my-3&amp;quot;&amp;gt;Join our mailing list &amp;lt;br&amp;gt; &amp;lt;small&amp;gt;Receive updates on events and new resources&amp;lt;/small&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		{{#widget:TsadraEmailSignupTinyEmbed}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-12 pb-2 pb-md-4 pb-lg-5 mt-4&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center font-serif-alt text-180 font-italic line12 mb-3&amp;quot;&amp;gt;More resources&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row mb-lg-5 justify-content-center&amp;quot;&amp;gt;{{Tile&lt;br /&gt;
				|wrapper-classes=col-md-6 col-xl-4 mb-3 mb-sm-4&lt;br /&gt;
				|image=7500 (devotees at base of throne).jpg&lt;br /&gt;
				|header=Events&lt;br /&gt;
				|text=View Tsadra events related to this website: Online conversations, conferences, and publication releases.&lt;br /&gt;
				|label=events portal &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-calendar fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|page=Events&lt;br /&gt;
				|min-height=150px&lt;br /&gt;
			}}{{Tile&lt;br /&gt;
				|wrapper-classes=col-md-6 col-xl-4 mb-3 mb-sm-4&lt;br /&gt;
				|image=Bodhicitta screenshot.jpg&lt;br /&gt;
				|header=LIVE EVENT: Bodhicitta Website Launch&lt;br /&gt;
				|header-lines=1-line&lt;br /&gt;
				|text=A live Dharma Chat event at Wisdom Publications Headquarters with Tsadra Foundation Featuring Karma Phuntsho, Thupten Jinpa, Wulstan Fletcher, and others.&lt;br /&gt;
				|page=Events/Bodhicitta_Website_Launch_in_NYC_26_April_2026&lt;br /&gt;
				|label=26 April 2026 &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-arrow-up-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|min-height=150px&lt;br /&gt;
			}}{{Tile&lt;br /&gt;
				|wrapper-classes=col-md-6 col-xl-4 mb-3 mb-sm-4&lt;br /&gt;
				|header-lines=1-line&lt;br /&gt;
				|page=Courses/Bodhicitta:_Wisdom_and_Compassion_as_a_Way_of_Life&lt;br /&gt;
				|label=29 May 2026 &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-arrow-up-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|min-height=150px&lt;br /&gt;
			}}{{Tile&lt;br /&gt;
				|wrapper-classes=col-md-6 col-xl-4 mb-3 mb-sm-4&lt;br /&gt;
				|image=Kathmandu-2023-June2-13.jpg&lt;br /&gt;
				|header=Bodhicitta Conference&lt;br /&gt;
				|header-lines=1-line&lt;br /&gt;
				|text=Tsadra Foundation and Shechen Monastery will host special representatives from all major traditions to present and debate in the Tibetan language on Bodhicitta.&lt;br /&gt;
				|page=Events/Bodhicitta_Conference_at_Shechen_Monastery_13-16_May_2026&lt;br /&gt;
				|label=13-16 May 2026 &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-arrow-up-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|min-height=150px&lt;br /&gt;
			}}{{Tile&lt;br /&gt;
				|wrapper-classes=col-md-6 col-xl-4 mb-3 mb-sm-4&lt;br /&gt;
				|image=File:Milarepa (R. Beer).jpg&lt;br /&gt;
				|header=Listening Room&lt;br /&gt;
				|header-lines=1-line&lt;br /&gt;
				|text=A list of audio versions of articles in this website.&lt;br /&gt;
				|page=Listening_Room&lt;br /&gt;
				|label=In Development &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-arrow-up-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|min-height=150px&lt;br /&gt;
			}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#widget:HomePageAdjusts}}{{#set:&lt;br /&gt;
	|Description=A multimedia resource hub for scripture, scholarship, and teachings on Bodhicitta (&amp;quot;bodhichitta&amp;quot;) and Śāntideva&#039;s (&amp;quot;Shantideva&amp;quot;) life and works, the Bodhisattvacaryāvatāra and the Śikṣāsamuccaya.&lt;br /&gt;
	|Title=Bodhicitta, A Tsadra Foundation Project&lt;br /&gt;
	|AllTopics=Bodhicitta; Śāntideva; Bodhicaryāvatāra; Śikṣāsamuccaya; Translations; Buddhist Studies; Tibetan Original Works; Tibetan Unicode; The Practices of the Bodhisattva; Multimedia; Videos; Books; Articles; Classical Works&lt;br /&gt;
	|FrontCoverImg=File:Guan-yin-close-up.jpg&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:OrgCall&amp;diff=144252</id>
		<title>Template:OrgCall</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:OrgCall&amp;diff=144252"/>
		<updated>2026-10-08T21:24:09Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: VSCode edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC__{{RemoveFirstHeading}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;d-flex justify-content-center mt-5 mb-3&amp;quot;&amp;gt;{{#ifsysop:&amp;lt;span class=&amp;quot;admin-links font-sans pr-3&amp;quot;&amp;gt;[https://research.tsadra.org/index.php?title={{SUBPAGENAMEE}} &amp;lt;i class=&amp;quot;fa-duotone fa-eye&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; View on DRL] &amp;amp;nbsp; [https://research.tsadra.org/index.php?title={{SUBPAGENAMEE}}&amp;amp;action=edit &amp;lt;i class=&amp;quot;fa-duotone fa-building&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Edit on DRL]&amp;lt;/span&amp;gt;|}}&amp;lt;/div&amp;gt;{{#ifexist:{{SUBPAGENAME}}&lt;br /&gt;
		|&lt;br /&gt;
		|{{Callout&lt;br /&gt;
			|icon=‼&lt;br /&gt;
			|title=&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Redirect needed!&amp;lt;/span&amp;gt;&lt;br /&gt;
			|text=Please create the redirects below by clicking below and saving. &amp;lt;br&amp;gt; {{Redirect|{{#titleparts:{{SUBPAGENAME}} }} }}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 d-md-flex justify-content-between align-items-end no-after-display&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;mr-2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div&amp;gt;{{#if: {{GetOrgValue|prop=Orgname}} &lt;br /&gt;
			| {{GetOrgValue|prop=Orgname}} &lt;br /&gt;
			| {{SUBPAGENAME}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row mt-4&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-4 p-0&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;bnw-person-image mx-2 mb-5 position-relative&amp;quot;&amp;gt;&lt;br /&gt;
			{{#widget:RoundFancyboxImage&lt;br /&gt;
				|filepath={{#ifeq: {{GetOrgValue|prop=FirstImage}} &lt;br /&gt;
					| File:Noimagefound.jpg &lt;br /&gt;
					| {{filepath:Teaching_Mudra_2_reduced_opacity.png}}&lt;br /&gt;
					| {{filepath:{{#titleparts:{{PAGENAME:{{GetOrgValue&lt;br /&gt;
						|prop=FirstImage&lt;br /&gt;
						|default={{filepath:Teaching_Mudra_2_reduced_opacity.png}}&lt;br /&gt;
					}} }} }}|300}}&lt;br /&gt;
				}}&lt;br /&gt;
				|fullimage={{#ifeq: {{GetOrgValue|prop=FirstImage}} &lt;br /&gt;
					| File:Noimagefound.jpg &lt;br /&gt;
					| {{filepath:Teaching_Mudra_2_reduced_opacity.png}}&lt;br /&gt;
					| {{filepath:{{#titleparts:{{PAGENAME:{{GetOrgValue&lt;br /&gt;
						|prop=FirstImage&lt;br /&gt;
						|default={{filepath:Teaching_Mudra_2_reduced_opacity.png}}&lt;br /&gt;
					}} }} }} }}&lt;br /&gt;
				}}&lt;br /&gt;
				|size=250px&lt;br /&gt;
				|depth=3 m-auto&lt;br /&gt;
				|bgSize=cover&lt;br /&gt;
				|linkclasses={{#ifeq: {{GetOrgValue|prop=FirstImage}} | File:Noimagefound.jpg | d-none | }}&lt;br /&gt;
			}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-center link-no-border mt-3 mb-4&amp;quot;&amp;gt;{{#arraydefine:personImages&lt;br /&gt;
				|{{#arraymap:{{GetOrgValue|prop=Images}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@@&lt;br /&gt;
					|@@@@&lt;br /&gt;
					|;&lt;br /&gt;
				}}&lt;br /&gt;
				|;&lt;br /&gt;
			}}{{#arrayslice:personImagesNotFirst&lt;br /&gt;
				|personImages&lt;br /&gt;
				|1&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#arraymap:{{#arrayprint:personImagesNotFirst|;}}&lt;br /&gt;
				|;&lt;br /&gt;
				|@@@&lt;br /&gt;
				|{{#widget:PersonGallery&lt;br /&gt;
					|anchorsrc={{filepath:{{#titleparts:{{PAGENAME:@@@}} }}|nowiki}}&lt;br /&gt;
					|src={{filepath:{{#titleparts:{{PAGENAME:@@@}} }}|50}}&lt;br /&gt;
					|height=50px !important&lt;br /&gt;
					|imgclasses=m-1&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-lg-8 text-article&amp;quot;&amp;gt;{{#if: {{{ description | }}} | &lt;br /&gt;
{{{ description | }}} | &lt;br /&gt;
{{GetOrgValue|prop=Description}} }}{{#if: {{GetOrgValue|prop=Website}}|&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row justify-content-center my-4&amp;quot;&amp;gt;&lt;br /&gt;
			{{MiniTile&lt;br /&gt;
				|wrapperclasses=col-md-6&lt;br /&gt;
				|text=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-building-columns mr-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Organization Website &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				|text-wrapper-classes=justify-content-center w-100&lt;br /&gt;
				|ext-link={{GetOrgValue|prop=Website}}&lt;br /&gt;
			}}			&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{SetOrgValue&lt;br /&gt;
	|prop=Images;Website&lt;br /&gt;
	|sep=;&lt;br /&gt;
}}{{SetOrgValue&lt;br /&gt;
	|prop=Orgname;Description;FirstImage&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:FilterInput}}&lt;br /&gt;
{{GetWorks&lt;br /&gt;
	|header=Library items related to this organization&lt;br /&gt;
	|query=[[Category:{{SUBPAGENAME}}]][[Category:Library Items]]&lt;br /&gt;
	|limit=108&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{CreateRootPageRedirect}}--&amp;gt;{{DEFAULTSORT: {{SUBPAGENAME}} }}{{DISPLAYTITLE: {{SUBPAGENAME}} }}[[Category:Organizations]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:TermCall&amp;diff=144223</id>
		<title>Template:TermCall</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:TermCall&amp;diff=144223"/>
		<updated>2026-10-08T18:03:11Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Glossary term pages: Discover / Explore / Study layout via commons Template:GlossaryTermRemote&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOGLOSSARY____NOEDITSECTION____NOTOC__{{#widget:NoFirstHeading}}&lt;br /&gt;
&lt;br /&gt;
{{#ask:[[{{SUBPAGENAME}}]]&lt;br /&gt;
	|?Glossary-KeyTerm|?Glossary-TopicVariation|?Glossary-Tibetan|?Glossary-Wylie|?Glossary-Devanagari|?Glossary-Sanskrit|?Glossary-Phonetic|?Glossary-PhoneticSkt|?Glossary-Chinese|?Glossary-Pinyin|?Glossary-Japanese|?Glossary-JapanTranslit|?Glossary-Korean|?Glossary-KoreanTranslit|?Glossary-English|?Glossary-EnglishPadma|?Glossary-84000|?Glossary-EnglishKB|?Glossary-EnglishRB|?Glossary-EnglishJH|?Glossary-EnglishSH|?Glossary-EnglishDM|?Glossary-EnglishGD|?Glossary-EnglishIW|?Glossary-Term-Alt|?Glossary-Pronunciation-Audio|?Glossary-PartOfSpeech|?Glossary-SourceLanguage|?Glossary-Definition|?Glossary-Senses|?EncodedGlossary-Senses|?Glossary-Simon|?Glossary-SimpleUsage|?Glossary-SutraQuote|?Glossary-Usage|?Glossary-DidYouKnow|?Glossary-RelatedTerms|?Glossary-RelatedTopics|?Glossary-DefinitionKB|?Glossary-DefinitionPDB|?Glossary-DefinitionEdgerton|?Glossary-EnglishRY|?EncodedGlossary-EnglishRY|?Glossary-DefinitionDDB|?EncodedGlossary-DefinitionDDB|?Glossary-DefinitionTDC|?Glossary-DefinitionDKTDC|?Glossary-DefinitionMVP|?Glossary-DefinitionWP|?Glossary-DefinitionRPW|?Glossary-DefinitionOther|?EncodedGlossary-DefinitionOther|?Glossary-Synonyms|?Glossary-Antonyms|?Glossary-Etymology|?Glossary-Earliest|?Glossary-Link|?Glossary-FurtherReads|?Glossary-Term|?Glossary-HoverChoices|?Glossary-SutraQuoteSource|?DefaultSort|?FeaturedPeople|?Glossary-DefinitionTsadra|?Glossary-DefinitionBodhicittaWiki|?Glossary-PopUpBeginnerDefinition|?Glossary-PopUpScholarDefinition	&lt;br /&gt;
	|named args=yes&lt;br /&gt;
	|link=none&lt;br /&gt;
	|source=commons&lt;br /&gt;
	|format=template&lt;br /&gt;
	|template=GlossaryTermRemote&lt;br /&gt;
	|userparam={{SUBPAGENAME}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TaggedWorksQuery&lt;br /&gt;
	|class=Books;Articles;Dissertations;Multimedia;Tibetan Publications;Sanskrit Publications;Other Classical Publications;Sutras;Commentaries&lt;br /&gt;
}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
SILENT PROPERTY SETTING&lt;br /&gt;
&lt;br /&gt;
 --&amp;gt;{{SetRemoteValues&lt;br /&gt;
	|source=commons&lt;br /&gt;
	|props=Glossary-Tibetan;Glossary-Wylie;Glossary-Devanagari;Glossary-Sanskrit;Glossary-Phonetic;Glossary-PhoneticSkt;Glossary-Chinese;Glossary-Pinyin;Glossary-Japanese;Glossary-JapanTranslit;Glossary-Korean;Glossary-KoreanTranslit;Glossary-English;Glossary-EnglishKB;Glossary-EnglishRB;Glossary-EnglishJH;Glossary-EnglishSH;Glossary-EnglishRY;Glossary-EnglishDM;Glossary-EnglishGD;Glossary-EnglishIW;Glossary-Term-Alt;Glossary-RelatedTerms;Glossary-RelatedTopics;FeaturedPeople;Glossary-HoverChoices&lt;br /&gt;
	|sep=;&lt;br /&gt;
}}{{SetRemoteValues&lt;br /&gt;
	|source=commons&lt;br /&gt;
	|props=Glossary-TopicVariation;Glossary-Pronunciation-Audio;Glossary-PartOfSpeech;Glossary-SourceLanguage;Glossary-Senses;Glossary-Simon;Glossary-DidYouKnow;Glossary-DefinitionKB;Glossary-DefinitionPDB;Glossary-DefinitionDDB;Glossary-DefinitionTDC;Glossary-DefinitionDKTDC;Glossary-DefinitionMVP;Glossary-DefinitionWP;Glossary-DefinitionRPW;Glossary-DefinitionOther;Glossary-Synonyms;Glossary-Antonyms;Glossary-Etymology;Glossary-Usage;Glossary-SimpleUsage;Glossary-SutraQuote;Glossary-SutraQuoteSource;Glossary-Earliest;Glossary-FurtherReads;DefaultSort;Glossary-DefinitionTsadra;Glossary-DefinitionBodhicittaWiki;Glossary-PopUpBeginnerDefinition;Glossary-PopUpScholarDefinition&lt;br /&gt;
}}{{#set:&lt;br /&gt;
	|Glossary-KeyTerm={{SUBPAGENAME}}&lt;br /&gt;
	|Glossary-Link={{#if: {{GetCommonsData|Glossary-Link}} | {{GetCommonsData|Glossary-Link}} | Key Terms/{{SUBPAGENAME}} }}&lt;br /&gt;
	|Glossary-BasicMeaning={{#if: {{Show|Glossary-PopUpBeginnerDefinition}}&lt;br /&gt;
		| {{Show|Glossary-PopUpBeginnerDefinition}}&lt;br /&gt;
		|{{GetCommonsData|Glossary-Definition}}&lt;br /&gt;
	}}&lt;br /&gt;
	|ValuesToRedirect={{SUBPAGENAME}};{{GetCommonsData|Glossary-KeyTerm}};{{Show|Glossary-TopicVariation}};{{Show|Glossary-HoverChoices}};{{#arraymap:{{Show|Glossary-Term-Alt}}|,|@@@|@@@|;}}|+sep=;&lt;br /&gt;
	|Has parent page=Glossary&lt;br /&gt;
	|DefaultSort={{#if: {{Show|DefaultSort }}&lt;br /&gt;
		| {{lc:{{Show|DefaultSort}} }}&lt;br /&gt;
		| {{lc:{{#titleparts:{{SUBPAGENAME}} }} }}&lt;br /&gt;
	}}&lt;br /&gt;
	|Glossary-Term={{#arraymap: {{Show|Glossary-HoverChoices}}&lt;br /&gt;
		|;&lt;br /&gt;
		|###&lt;br /&gt;
		|###&lt;br /&gt;
		|@@@&lt;br /&gt;
	}}@@@{{SUBPAGENAME}}@@@{{SUBPAGENAME}}@@@{{lcfirst:{{SUBPAGENAME}}}}@@@{{ucfirst:{{SUBPAGENAME}}}}@@@{{lcfirst:{{SUBPAGENAME}}}}s@@@{{ucfirst:{{SUBPAGENAME}}}}s|+sep=@@@&lt;br /&gt;
	|Glossary-Definition={{SUBPAGENAME}} - {{#if: {{Show|Glossary-PopUpBeginnerDefinition}}&lt;br /&gt;
		| {{Show|Glossary-PopUpBeginnerDefinition}}&lt;br /&gt;
		|{{GetCommonsData|Glossary-Definition}}&lt;br /&gt;
	}} {{#if: {{Show|Glossary-Devanagari}} &lt;br /&gt;
		| Skt {{Show|Glossary-Devanagari}}&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
		| &lt;br /&gt;
	}}{{#if: {{Show|Glossary-Tibetan}} &lt;br /&gt;
		| Tib {{Show|Glossary-Tibetan}}&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
		| &lt;br /&gt;
	}}{{#if: {{Show|Glossary-Chinese}} &lt;br /&gt;
		| Ch {{Show|Glossary-Chinese}}&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
		| &lt;br /&gt;
	}}&lt;br /&gt;
	|CreateRedirectNow={{#arraymap:{{SUBPAGENAME}};{{lcfirst:{{SUBPAGENAME}} }}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|{{#ifexist:@@@||@@@}}&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|Description=Definition and meaning of {{SUBPAGENAME}} ({{Show|Glossary-Tibetan}}, {{Show|Glossary-Devanagari}}). {{Show|Glossary-BasicMeaning}}&lt;br /&gt;
	|Title={{SUBPAGENAME}} ({{Show|Glossary-Tibetan}}, {{Show|Glossary-Devanagari}}): Buddhist Glossary &amp;amp; Definition&lt;br /&gt;
	|AllTopics={{#arraymap:{{SUBPAGENAME}}; {{Show|Glossary-Devanagari}}; {{Show|Glossary-Tibetan}}; {{Show|Glossary-Wylie}}; {{Show|Glossary-Chinese}}; {{Show|Glossary-Pinyin}}; Buddhist Dictionary; Dharma Terminology; Mahayana Philosophy; {{Show|Glossary-SourceLanguage}}; {{#arraymap:{{Show|Glossary-RelatedTerms}}|;|@@@|{{SUBPAGENAME:@@@}}|;}}; Tsadra Foundation Glossary|;|@@@|@@@|;}}&lt;br /&gt;
	|FrontCoverImg=File:Shantideva-Eric-reduced.jpg&lt;br /&gt;
}}[[Category:Glossary Terms]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143961</id>
		<title>Reading Room</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143961"/>
		<updated>2026-10-05T16:31:42Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Tibetan texts: title line above the citation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RemoveFirstHeading}}{{#widget:ReadingRoomCovers}}__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-header-container&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;main-header-title&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-130 line10 mb-3&amp;quot;&amp;gt;{{I18n|en=Reading Room|bo=དཔེ་མཛོད་ཁང་།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PanelTransparent&lt;br /&gt;
	|bg-image=Tibet-scripture 84000.jpg&lt;br /&gt;
	|image-side=left&lt;br /&gt;
	|bg-position=100% 100%&lt;br /&gt;
	|imgClasses=rounded-xl tsdwiki-depth-1&lt;br /&gt;
	|classes=my-5&lt;br /&gt;
	|header={{I18n|en=Introduction|bo=ངོ་སྤྲོད།}}&lt;br /&gt;
	|text={{I18n&lt;br /&gt;
|en=Welcome to our library reading room! Explore our curated collection of essential texts, thoughtfully organized to guide your journey through the essential literature on bodhicitta. You&#039;ll find foundational works focused on bodhicitta and the cultivation of compassionate awakening, alongside other core teachings and a rich selection of texts from the Tibetan tradition. Each core text includes a comprehensive landing page where you can discover the work&#039;s historical context, explore different recensions and editions, access scholarly commentaries, and find related teachings. Whether you&#039;re seeking to deepen your understanding through background study or ready to dive directly into the texts themselves, our reading room provides both scholarly resources and direct access to these timeless teachings.&lt;br /&gt;
|bo= ང་ཚོའི་དཔེ་མཛོད་ཀློག་འདོན་ཁང་དུ་ཕེབས་པར་དགའ་བསུ་ཞུ།&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
བྱང་སེམས་ཀྱི་རྣམ་གཞག་སྟོན་པའི་གཞི་རྩའི་གཞུང་ལུགས་དག་ལ་བདེ་བླག་ཏུ་འཇུག་པའི་མཐུན་རྐྱེན་བསྐྲུན་པའི་ཆེད། ང་ཚོས་ལེགས་འདེམས་ཕྱོགས་སྒྲིག་ཞུས་པའི་གསུང་རབ་ཀྱི་ཚོགས་འདིར། བྱང་ཆུབ་ཀྱི་སེམས་དང་སྙིང་རྗེ་བསྐྱེད་ཐབས་གཙོ་བོར་སྟོན་པའི་གསུང་རབ་སྣ་ཚོགས་དང་། ལྷག་པར་བོད་ཀྱི་ཆོས་བརྒྱུད་རྣམས་ནས་ཞལ་གདམས་དང་བརྩམས་ཆོས་གཙིགས་སུ་ཆེ་བ་དུ་མ་ཞིག་འདེམས་སྒྲུག་འཚོལ་བདེར་བྱས་ཡོད་པས། ལྷན་རྒྱས་རྣམ་པས་ཀྱང་དེ་མཚུངས་ཞིབ་གཟིགས་གནང་སྐྱོང་ཡོང་བར་ཞུ་རྒྱུ་དང་། དྲྭ་ཤོག་འདིར་འཁོད་གཞི་རྩའི་གཞུང་ལུགས་རེ་རེ་བཞིན། གཞུང་གི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས། བསྐྱར་བཅོས་དང་པར་སྐྲུན་མི་འདྲ་བ་ཇི་ཡོད། མཁས་པའི་དགོངས་འགྲེལ་དང་འབྲེལ་ཡོད་ཡིག་ཆ་སོགས་འཚོལ་ཞིབ་སྟབས་བདེར་བྱས་ཡོད་པས། སྤྱིར་མཁྱེན་རྟོགས་རྒྱ་བསྐྱེད་ཕྱིར་གཞུང་གི་རྒྱབ་ལྗོངས་ལ་སློབ་གཉེར་རམ། གཞུང་ལ་དངོས་སུ་ཐད་ཞུགས་ཀྱིས་དཔྱད་ཞིབ་དཔྱིས་ཕྱིན་དོན་དུ་གཉེར་བ་གཉིས་ཀའི་ཆེད། ང་ཚོའི་ཀློག་འདོན་ཁང་འདིར་སློབ་གཉེར་གྱི་མཐུན་རྐྱེན་མཁོ་སྤྲོད་དང་། གཞུང་ལུགས་རིན་ཐང་བྲལ་བ་དག་ལ་ཐད་འཇུག་གི་སྒོ་འཕར་ཡངས་པོར་ཕྱེས་ཡོད།}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Bilingual Bookshelf|bo=སྐད་གཉིས་ཤན་སྦྱར།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BilingualBookshelf}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Core Texts|bo=བྱང་སེམས་གཞུང་ལུགས་གཙོ་བོ།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicaryāvatāra&lt;br /&gt;
	|description=An &amp;quot;Introduction to Bodhisattva Practice,&amp;quot; the &#039;&#039;Bodhisattvacaryāvatāra&#039;&#039; is a poem about the path of a bodhisattva, in ten chapters, written by the Indian Buddhist Śāntideva (fl. c. 685–763). One of the masterpieces of world literature, it is a core text of Mahāyāna Buddhism and continues to be taught, studied, and commented upon in many languages and by many traditions around the world.&lt;br /&gt;
	|readLink=Texts/Bodhicaryāvatāra/Chapter_1&lt;br /&gt;
	|coverImg=File:Santideva BCA BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Śikṣāsamuccaya&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Compendium of Training,&amp;quot; a work by the eighth-century Indian Mahāyāna master Śāntideva. It consists of twenty-seven stanzas on the motivation and practice of the bodhisattva, including bodhicitta, the six perfections (&#039;&#039;pāramitā&#039;&#039;), the worship of buddhas and bodhisattvas, the benefits of renunciation, and the peace derived from the knowledge of emptiness (&#039;&#039;śūnyatā&#039;&#039;). Śāntideva supports his presentation throughout by drawing on dozens of Mahāyāna sūtras and other texts, which he quotes at length.&lt;br /&gt;
	|readLink=Books/The_Training_Anthology_of_Śāntideva/Bilingual/1&lt;br /&gt;
	|coverImg=File:Santideva SSC BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Yogācārabhūmaubodhisattvabhūmiḥ&lt;br /&gt;
	|description=The Bodhisattvabhūmi (literally &amp;quot;The Stage of a Bodhisattva&amp;quot;) stands as one of the most comprehensive and systematic expositions of the Mahāyāna Buddhist path from classical India. Formally the fifteenth section of the massive Yogācārabhūmi corpus, this foundational treatise provides an encyclopedic manual detailing the entire spiritual trajectory of a bodhisattva—from the initial arising of the &amp;quot;mind of awakening&amp;quot; (bodhicitta) to the ultimate attainment of perfect buddhahood.&lt;br /&gt;
	|coverImg=File:Asanga Bodhisattvabumi BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicittavivaraṇanāma&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Exposition of the Mind of Enlightenment&amp;quot;; a work traditionally ascribed to Nāgārjuna, although the text is not cited by Nāgārjuna&#039;s commentators Buddhapālita, Candrakīrti, or Bhāvaviveka. The text consists of 112 stanzas, preceded by a brief section in prose. It is essentially a compendium of Mahāyāna theory and practice, intended for bodhisattvas, both monastic and lay, organized around the theme of bodhicitta, both in its conventional aspect (&#039;&#039;saṃvṛtibodhicitta&#039;&#039;) as the aspiration to buddhahood out of compassion for all sentient beings, and in its ultimate aspect (&#039;&#039;paramārthabodhicitta&#039;&#039;) as the insight into emptiness (&#039;&#039;śūnyatā&#039;&#039;).&lt;br /&gt;
	|coverImg=File:Nagarjuna Bodhicittavirana BC cover.jpg&lt;br /&gt;
	|readLink=Articles/A_Commentary_on_the_Awakening_Mind/Bilingual&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bhāvanākrama_(Kamalaśīla)&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Stages of Meditation,&amp;quot; the title of three separate but related works by the late eighth-century Indian master Kamalaśīla (RKTST 4228, RKTST 4229, and RKTST 4230). The three texts set forth the process for the potential bodhisattva to cultivate bodhicitta and then develop &#039;&#039;śamatha&#039;&#039; and &#039;&#039;vipaśyanā&#039;&#039; and progress through the bodhisattva stages (&#039;&#039;bhūmi&#039;&#039;) to buddhahood.&lt;br /&gt;
	|readLink=Dissertations/Meditation and the Concept of Insight in Kamalaśīla&#039;s Bhāvanākramas/Bilingual&lt;br /&gt;
	|coverImg=File:Kamalashila Bhavanakrama BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhipathapradīpa&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Lamp for the Path to Enlightenment&amp;quot;; a work composed by the Indian scholar Atiśa Dīpamkaraśrījñāna at Tholing Tsuklakhang shortly after he arrived in Tibet in 1042. Tibetan histories often note that Atiśa wrote this text in order to clarify problematic points of Buddhist practice, especially tantra, which were thought to have degenerated and become distorted, and to show that tantra did not render basic Buddhist practice irrelevant.&lt;br /&gt;
	|coverImg=File:Atisha Bodhipratapadipa BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Rgyal sras lag len so bdun ma&lt;br /&gt;
    |description=Gyalse Tokme Zangpo&#039;s (1295–1369) highly influential work on Mind Training (&#039;&#039;blo sbyong&#039;&#039;) that outlines the training of a bodhisattva in a series of thirty-seven verses is still very popular today with Buddhist practitioners around the world. The colophon states: &amp;quot;This was composed at the Jewel Cave of Ngulchu by the monk Tokme [Zangpo], expounder of scripture and reasoning, for the benefit of myself and others.&amp;quot; Since he gathered together all the paths of the bodhisattvas and composed them in the form of thirty-seven verses, the title is clearly fitting.&lt;br /&gt;
    |coverImg=File:Gyaltse Tokme 37 practices BC cover.jpg	&lt;br /&gt;
    |readLink=Books/The_Heart_of_Compassion_(Ricard_2006)/Bilingual/Root_Verses&lt;br /&gt;
    |aboutLink=Thirty-Seven_Practices_of_a_Bodhisattva&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Blo_sbyong_don_bdun_ma&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Seven Points of Mind Training&amp;quot;; an influential Tibetan work in the Mind Training (&#039;&#039;blo sbyong&#039;&#039;) genre. The work was composed by the Kadampa scholar Chekawa Yeshe Dorje, often known as Geshe Chekawa, based on the tradition of generating bodhicitta known as &amp;quot;mind training&amp;quot; transmitted by the Bengali master Atiśa Dīpaṃkaraśrījñāna. It also follows the system laid out previously by Langri Tangpa in his &#039;&#039;Blo sbyong tshig brgyad ma&#039;&#039; (&amp;quot;Eight Verses on Mind Training&amp;quot;).&lt;br /&gt;
    |coverImg=File:Chekawa 7Pt Mind Training BC cover.jpg&lt;br /&gt;
    |readLink=Texts/Blo_sbyong_don_bdun_ma/Full_text&lt;br /&gt;
    |aboutLink=Seven_Points_of_Mind_Training&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mb-4 row justify-content-center clearfix&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-sm-8 col-md-6 col-lg-4 &amp;quot;&amp;gt;[[File:Separator narrow.png|500px|class=w-100 h-auto opac-30|]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;Other Core Texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung&lt;br /&gt;
    |readLink=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung/Full_text&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Words of My Perfect Teacher,&amp;quot; explains the preliminary practices (&#039;&#039;sngon &#039;gro&#039;&#039;) for the Longchen Nyingthik (&amp;quot;Heart Essence of the Great Expanse&amp;quot;), a system of Nyingma doctrine and meditation instruction stemming from the eighteenth-century treasure revealer (&#039;&#039;gter ston&#039;&#039;) Jigme Lingpa. The work is much loved for its direct, nontechnical approach and for its heartfelt practical advice.&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Lam_gyi_gtso_bo_rnam_gsum&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Dam chos yid bzhin gyi nor bu thar pa rin po che&#039;i rgyan&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Zhen_pa_bzhi_bral_gyi_gdams_ngag&lt;br /&gt;
	|description=As explicitly mentioned in this brief text, the four lines that present the core instruction of the practice of parting from the four clingings is traditionally recognized as a revelation from Mañjuśrī, the buddha of wisdom. Jamgön Amé, in his &#039;&#039;Lineages of the Sakya Family&#039;&#039; (&#039;&#039;Sa skya&#039;i gdung rabs&#039;&#039;, p. 26), identifies Sachen Kunga Nyingpo as the &amp;quot;great Sakyapa,&amp;quot; who experienced this vision of Mañjuśrī and received the revelation. Interestingly, Nupa Rikzin Drak . . . identifies Drakpa Gyaltsen as the origin of this instruction.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Library of All Tibetan Texts ==&lt;br /&gt;
&lt;br /&gt;
{{#widget:filterInput|placeholder=Filter {{#ask: [[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|format=count}} texts...}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;filterableContent&amp;quot;&amp;gt;{{#invoke:LibraryRows|section|query=[[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|template=CommentaryRow|title=yes}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- {{GetTibetanTexts|limit=100|offset=0}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=100}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=200}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=300}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=400}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=500}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=600}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=Access a curated digital library of foundational Mahāyāna texts. The Reading Room features bilingual editions of the Bodhicaryāvatāra, Śikṣāsamuccaya, and other core works with direct access to Tibetan Unicode and scholarly translations.&lt;br /&gt;
	|Title=The Reading Room: A Multilingual Library of Essential Bodhicitta Texts&lt;br /&gt;
	|AllTopics=Bodhicitta; Śāntideva; Shantideva; Reading Room; Core Buddhist Texts; Bodhicaryāvatāra; Śikṣāsamuccaya; Bodhisattvabhūmi; Bodhicittavivaraṇa; Bhāvanākrama; Bodhipathapradīpa; Seven Points of Mind Training; Thirty-Seven Practices of a Bodhisattva; Bilingual Bookshelf; Tibetan Unicode; Tibetan Buddhist Texts; Mahāyāna Literature; Buddhist Translations; Scriptural Commentaries; Tsadra Foundation Resources&lt;br /&gt;
	|FrontCoverImg=File:Tibet-scripture 84000.jpg&lt;br /&gt;
}}&lt;br /&gt;
[[Category: Resources]][[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143960</id>
		<title>Template:CommentaryRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143960"/>
		<updated>2026-10-05T16:31:40Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Pass userparam through (title line)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{TopicBiblioRow&lt;br /&gt;
	|1={{#ifexist:{{{ 1 | }}}/Full text|{{{ 1 | }}}/Full text|{{{ 1 | }}}}}&lt;br /&gt;
	|#userparam={{{#userparam|}}}&lt;br /&gt;
	|Citation={{{ Citation | }}}&lt;br /&gt;
	|BcaAuthor={{{ BcaAuthor | }}}&lt;br /&gt;
	|Class={{{ Class | }}}&lt;br /&gt;
	|Title={{#if:{{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
	|FrontCoverImg={{{ FrontCoverImg | }}}&lt;br /&gt;
	|Pubdate={{{ Pubdate | }}}&lt;br /&gt;
	|TileDescription={{{ TileDescription | }}}&lt;br /&gt;
	|Description={{{ Description | }}}&lt;br /&gt;
	|FullTitleTib={{{ FullTitleTib | }}}&lt;br /&gt;
	|DescriptionTib={{{ DescriptionTib | }}}&lt;br /&gt;
	|SchoolTib={{{ SchoolTib | }}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
A library row ([[Template:TopicBiblioRow]]) that leads to the work&#039;s full text. Used for the&lt;br /&gt;
Commentaries section of the full-text pages ([[Template:FullTextSubpage]]) and for the&lt;br /&gt;
Library of All Tibetan Texts on [[Reading Room]] (via [[Module:LibraryRows]], &amp;lt;code&amp;gt;template=CommentaryRow&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Two things differ from an ordinary row, both carried over from the old commentary tiles:&lt;br /&gt;
&lt;br /&gt;
* the row links to the commentary&#039;s own &amp;lt;code&amp;gt;/Full text&amp;lt;/code&amp;gt; page when there is one,&lt;br /&gt;
  otherwise to the item page;&lt;br /&gt;
* the school, in Tibetan (&amp;lt;code&amp;gt;SchoolTib&amp;lt;/code&amp;gt;), is shown beside the class, when the query&lt;br /&gt;
  prints it (the full-text pages do; the Reading Room does not).&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;userparam=title&amp;lt;/code&amp;gt; on the query (Module:LibraryRows &amp;lt;code&amp;gt;title=yes&amp;lt;/code&amp;gt;) is passed&lt;br /&gt;
through, giving the title line above the citation.&lt;br /&gt;
&lt;br /&gt;
Called from an &amp;lt;code&amp;gt;#ask&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;format=template&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the printout names must match the parameters here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143959</id>
		<title>Reading Room</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143959"/>
		<updated>2026-10-05T16:30:11Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: filterableContent wrapper so the filter box works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RemoveFirstHeading}}{{#widget:ReadingRoomCovers}}__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-header-container&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;main-header-title&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-130 line10 mb-3&amp;quot;&amp;gt;{{I18n|en=Reading Room|bo=དཔེ་མཛོད་ཁང་།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PanelTransparent&lt;br /&gt;
	|bg-image=Tibet-scripture 84000.jpg&lt;br /&gt;
	|image-side=left&lt;br /&gt;
	|bg-position=100% 100%&lt;br /&gt;
	|imgClasses=rounded-xl tsdwiki-depth-1&lt;br /&gt;
	|classes=my-5&lt;br /&gt;
	|header={{I18n|en=Introduction|bo=ངོ་སྤྲོད།}}&lt;br /&gt;
	|text={{I18n&lt;br /&gt;
|en=Welcome to our library reading room! Explore our curated collection of essential texts, thoughtfully organized to guide your journey through the essential literature on bodhicitta. You&#039;ll find foundational works focused on bodhicitta and the cultivation of compassionate awakening, alongside other core teachings and a rich selection of texts from the Tibetan tradition. Each core text includes a comprehensive landing page where you can discover the work&#039;s historical context, explore different recensions and editions, access scholarly commentaries, and find related teachings. Whether you&#039;re seeking to deepen your understanding through background study or ready to dive directly into the texts themselves, our reading room provides both scholarly resources and direct access to these timeless teachings.&lt;br /&gt;
|bo= ང་ཚོའི་དཔེ་མཛོད་ཀློག་འདོན་ཁང་དུ་ཕེབས་པར་དགའ་བསུ་ཞུ།&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
བྱང་སེམས་ཀྱི་རྣམ་གཞག་སྟོན་པའི་གཞི་རྩའི་གཞུང་ལུགས་དག་ལ་བདེ་བླག་ཏུ་འཇུག་པའི་མཐུན་རྐྱེན་བསྐྲུན་པའི་ཆེད། ང་ཚོས་ལེགས་འདེམས་ཕྱོགས་སྒྲིག་ཞུས་པའི་གསུང་རབ་ཀྱི་ཚོགས་འདིར། བྱང་ཆུབ་ཀྱི་སེམས་དང་སྙིང་རྗེ་བསྐྱེད་ཐབས་གཙོ་བོར་སྟོན་པའི་གསུང་རབ་སྣ་ཚོགས་དང་། ལྷག་པར་བོད་ཀྱི་ཆོས་བརྒྱུད་རྣམས་ནས་ཞལ་གདམས་དང་བརྩམས་ཆོས་གཙིགས་སུ་ཆེ་བ་དུ་མ་ཞིག་འདེམས་སྒྲུག་འཚོལ་བདེར་བྱས་ཡོད་པས། ལྷན་རྒྱས་རྣམ་པས་ཀྱང་དེ་མཚུངས་ཞིབ་གཟིགས་གནང་སྐྱོང་ཡོང་བར་ཞུ་རྒྱུ་དང་། དྲྭ་ཤོག་འདིར་འཁོད་གཞི་རྩའི་གཞུང་ལུགས་རེ་རེ་བཞིན། གཞུང་གི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས། བསྐྱར་བཅོས་དང་པར་སྐྲུན་མི་འདྲ་བ་ཇི་ཡོད། མཁས་པའི་དགོངས་འགྲེལ་དང་འབྲེལ་ཡོད་ཡིག་ཆ་སོགས་འཚོལ་ཞིབ་སྟབས་བདེར་བྱས་ཡོད་པས། སྤྱིར་མཁྱེན་རྟོགས་རྒྱ་བསྐྱེད་ཕྱིར་གཞུང་གི་རྒྱབ་ལྗོངས་ལ་སློབ་གཉེར་རམ། གཞུང་ལ་དངོས་སུ་ཐད་ཞུགས་ཀྱིས་དཔྱད་ཞིབ་དཔྱིས་ཕྱིན་དོན་དུ་གཉེར་བ་གཉིས་ཀའི་ཆེད། ང་ཚོའི་ཀློག་འདོན་ཁང་འདིར་སློབ་གཉེར་གྱི་མཐུན་རྐྱེན་མཁོ་སྤྲོད་དང་། གཞུང་ལུགས་རིན་ཐང་བྲལ་བ་དག་ལ་ཐད་འཇུག་གི་སྒོ་འཕར་ཡངས་པོར་ཕྱེས་ཡོད།}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Bilingual Bookshelf|bo=སྐད་གཉིས་ཤན་སྦྱར།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BilingualBookshelf}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Core Texts|bo=བྱང་སེམས་གཞུང་ལུགས་གཙོ་བོ།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicaryāvatāra&lt;br /&gt;
	|description=An &amp;quot;Introduction to Bodhisattva Practice,&amp;quot; the &#039;&#039;Bodhisattvacaryāvatāra&#039;&#039; is a poem about the path of a bodhisattva, in ten chapters, written by the Indian Buddhist Śāntideva (fl. c. 685–763). One of the masterpieces of world literature, it is a core text of Mahāyāna Buddhism and continues to be taught, studied, and commented upon in many languages and by many traditions around the world.&lt;br /&gt;
	|readLink=Texts/Bodhicaryāvatāra/Chapter_1&lt;br /&gt;
	|coverImg=File:Santideva BCA BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Śikṣāsamuccaya&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Compendium of Training,&amp;quot; a work by the eighth-century Indian Mahāyāna master Śāntideva. It consists of twenty-seven stanzas on the motivation and practice of the bodhisattva, including bodhicitta, the six perfections (&#039;&#039;pāramitā&#039;&#039;), the worship of buddhas and bodhisattvas, the benefits of renunciation, and the peace derived from the knowledge of emptiness (&#039;&#039;śūnyatā&#039;&#039;). Śāntideva supports his presentation throughout by drawing on dozens of Mahāyāna sūtras and other texts, which he quotes at length.&lt;br /&gt;
	|readLink=Books/The_Training_Anthology_of_Śāntideva/Bilingual/1&lt;br /&gt;
	|coverImg=File:Santideva SSC BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Yogācārabhūmaubodhisattvabhūmiḥ&lt;br /&gt;
	|description=The Bodhisattvabhūmi (literally &amp;quot;The Stage of a Bodhisattva&amp;quot;) stands as one of the most comprehensive and systematic expositions of the Mahāyāna Buddhist path from classical India. Formally the fifteenth section of the massive Yogācārabhūmi corpus, this foundational treatise provides an encyclopedic manual detailing the entire spiritual trajectory of a bodhisattva—from the initial arising of the &amp;quot;mind of awakening&amp;quot; (bodhicitta) to the ultimate attainment of perfect buddhahood.&lt;br /&gt;
	|coverImg=File:Asanga Bodhisattvabumi BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicittavivaraṇanāma&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Exposition of the Mind of Enlightenment&amp;quot;; a work traditionally ascribed to Nāgārjuna, although the text is not cited by Nāgārjuna&#039;s commentators Buddhapālita, Candrakīrti, or Bhāvaviveka. The text consists of 112 stanzas, preceded by a brief section in prose. It is essentially a compendium of Mahāyāna theory and practice, intended for bodhisattvas, both monastic and lay, organized around the theme of bodhicitta, both in its conventional aspect (&#039;&#039;saṃvṛtibodhicitta&#039;&#039;) as the aspiration to buddhahood out of compassion for all sentient beings, and in its ultimate aspect (&#039;&#039;paramārthabodhicitta&#039;&#039;) as the insight into emptiness (&#039;&#039;śūnyatā&#039;&#039;).&lt;br /&gt;
	|coverImg=File:Nagarjuna Bodhicittavirana BC cover.jpg&lt;br /&gt;
	|readLink=Articles/A_Commentary_on_the_Awakening_Mind/Bilingual&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bhāvanākrama_(Kamalaśīla)&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Stages of Meditation,&amp;quot; the title of three separate but related works by the late eighth-century Indian master Kamalaśīla (RKTST 4228, RKTST 4229, and RKTST 4230). The three texts set forth the process for the potential bodhisattva to cultivate bodhicitta and then develop &#039;&#039;śamatha&#039;&#039; and &#039;&#039;vipaśyanā&#039;&#039; and progress through the bodhisattva stages (&#039;&#039;bhūmi&#039;&#039;) to buddhahood.&lt;br /&gt;
	|readLink=Dissertations/Meditation and the Concept of Insight in Kamalaśīla&#039;s Bhāvanākramas/Bilingual&lt;br /&gt;
	|coverImg=File:Kamalashila Bhavanakrama BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhipathapradīpa&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Lamp for the Path to Enlightenment&amp;quot;; a work composed by the Indian scholar Atiśa Dīpamkaraśrījñāna at Tholing Tsuklakhang shortly after he arrived in Tibet in 1042. Tibetan histories often note that Atiśa wrote this text in order to clarify problematic points of Buddhist practice, especially tantra, which were thought to have degenerated and become distorted, and to show that tantra did not render basic Buddhist practice irrelevant.&lt;br /&gt;
	|coverImg=File:Atisha Bodhipratapadipa BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Rgyal sras lag len so bdun ma&lt;br /&gt;
    |description=Gyalse Tokme Zangpo&#039;s (1295–1369) highly influential work on Mind Training (&#039;&#039;blo sbyong&#039;&#039;) that outlines the training of a bodhisattva in a series of thirty-seven verses is still very popular today with Buddhist practitioners around the world. The colophon states: &amp;quot;This was composed at the Jewel Cave of Ngulchu by the monk Tokme [Zangpo], expounder of scripture and reasoning, for the benefit of myself and others.&amp;quot; Since he gathered together all the paths of the bodhisattvas and composed them in the form of thirty-seven verses, the title is clearly fitting.&lt;br /&gt;
    |coverImg=File:Gyaltse Tokme 37 practices BC cover.jpg	&lt;br /&gt;
    |readLink=Books/The_Heart_of_Compassion_(Ricard_2006)/Bilingual/Root_Verses&lt;br /&gt;
    |aboutLink=Thirty-Seven_Practices_of_a_Bodhisattva&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Blo_sbyong_don_bdun_ma&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Seven Points of Mind Training&amp;quot;; an influential Tibetan work in the Mind Training (&#039;&#039;blo sbyong&#039;&#039;) genre. The work was composed by the Kadampa scholar Chekawa Yeshe Dorje, often known as Geshe Chekawa, based on the tradition of generating bodhicitta known as &amp;quot;mind training&amp;quot; transmitted by the Bengali master Atiśa Dīpaṃkaraśrījñāna. It also follows the system laid out previously by Langri Tangpa in his &#039;&#039;Blo sbyong tshig brgyad ma&#039;&#039; (&amp;quot;Eight Verses on Mind Training&amp;quot;).&lt;br /&gt;
    |coverImg=File:Chekawa 7Pt Mind Training BC cover.jpg&lt;br /&gt;
    |readLink=Texts/Blo_sbyong_don_bdun_ma/Full_text&lt;br /&gt;
    |aboutLink=Seven_Points_of_Mind_Training&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mb-4 row justify-content-center clearfix&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-sm-8 col-md-6 col-lg-4 &amp;quot;&amp;gt;[[File:Separator narrow.png|500px|class=w-100 h-auto opac-30|]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;Other Core Texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung&lt;br /&gt;
    |readLink=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung/Full_text&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Words of My Perfect Teacher,&amp;quot; explains the preliminary practices (&#039;&#039;sngon &#039;gro&#039;&#039;) for the Longchen Nyingthik (&amp;quot;Heart Essence of the Great Expanse&amp;quot;), a system of Nyingma doctrine and meditation instruction stemming from the eighteenth-century treasure revealer (&#039;&#039;gter ston&#039;&#039;) Jigme Lingpa. The work is much loved for its direct, nontechnical approach and for its heartfelt practical advice.&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Lam_gyi_gtso_bo_rnam_gsum&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Dam chos yid bzhin gyi nor bu thar pa rin po che&#039;i rgyan&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Zhen_pa_bzhi_bral_gyi_gdams_ngag&lt;br /&gt;
	|description=As explicitly mentioned in this brief text, the four lines that present the core instruction of the practice of parting from the four clingings is traditionally recognized as a revelation from Mañjuśrī, the buddha of wisdom. Jamgön Amé, in his &#039;&#039;Lineages of the Sakya Family&#039;&#039; (&#039;&#039;Sa skya&#039;i gdung rabs&#039;&#039;, p. 26), identifies Sachen Kunga Nyingpo as the &amp;quot;great Sakyapa,&amp;quot; who experienced this vision of Mañjuśrī and received the revelation. Interestingly, Nupa Rikzin Drak . . . identifies Drakpa Gyaltsen as the origin of this instruction.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Library of All Tibetan Texts ==&lt;br /&gt;
&lt;br /&gt;
{{#widget:filterInput|placeholder=Filter {{#ask: [[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|format=count}} texts...}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;filterableContent&amp;quot;&amp;gt;{{#invoke:LibraryRows|section|query=[[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|template=CommentaryRow}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- {{GetTibetanTexts|limit=100|offset=0}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=100}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=200}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=300}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=400}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=500}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=600}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=Access a curated digital library of foundational Mahāyāna texts. The Reading Room features bilingual editions of the Bodhicaryāvatāra, Śikṣāsamuccaya, and other core works with direct access to Tibetan Unicode and scholarly translations.&lt;br /&gt;
	|Title=The Reading Room: A Multilingual Library of Essential Bodhicitta Texts&lt;br /&gt;
	|AllTopics=Bodhicitta; Śāntideva; Shantideva; Reading Room; Core Buddhist Texts; Bodhicaryāvatāra; Śikṣāsamuccaya; Bodhisattvabhūmi; Bodhicittavivaraṇa; Bhāvanākrama; Bodhipathapradīpa; Seven Points of Mind Training; Thirty-Seven Practices of a Bodhisattva; Bilingual Bookshelf; Tibetan Unicode; Tibetan Buddhist Texts; Mahāyāna Literature; Buddhist Translations; Scriptural Commentaries; Tsadra Foundation Resources&lt;br /&gt;
	|FrontCoverImg=File:Tibet-scripture 84000.jpg&lt;br /&gt;
}}&lt;br /&gt;
[[Category: Resources]][[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143958</id>
		<title>Reading Room</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Reading_Room&amp;diff=143958"/>
		<updated>2026-10-05T16:26:55Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Library of All Tibetan Texts as library rows, linking to the full text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RemoveFirstHeading}}{{#widget:ReadingRoomCovers}}__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-header-container&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;main-header-title&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-130 line10 mb-3&amp;quot;&amp;gt;{{I18n|en=Reading Room|bo=དཔེ་མཛོད་ཁང་།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{PanelTransparent&lt;br /&gt;
	|bg-image=Tibet-scripture 84000.jpg&lt;br /&gt;
	|image-side=left&lt;br /&gt;
	|bg-position=100% 100%&lt;br /&gt;
	|imgClasses=rounded-xl tsdwiki-depth-1&lt;br /&gt;
	|classes=my-5&lt;br /&gt;
	|header={{I18n|en=Introduction|bo=ངོ་སྤྲོད།}}&lt;br /&gt;
	|text={{I18n&lt;br /&gt;
|en=Welcome to our library reading room! Explore our curated collection of essential texts, thoughtfully organized to guide your journey through the essential literature on bodhicitta. You&#039;ll find foundational works focused on bodhicitta and the cultivation of compassionate awakening, alongside other core teachings and a rich selection of texts from the Tibetan tradition. Each core text includes a comprehensive landing page where you can discover the work&#039;s historical context, explore different recensions and editions, access scholarly commentaries, and find related teachings. Whether you&#039;re seeking to deepen your understanding through background study or ready to dive directly into the texts themselves, our reading room provides both scholarly resources and direct access to these timeless teachings.&lt;br /&gt;
|bo= ང་ཚོའི་དཔེ་མཛོད་ཀློག་འདོན་ཁང་དུ་ཕེབས་པར་དགའ་བསུ་ཞུ།&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
བྱང་སེམས་ཀྱི་རྣམ་གཞག་སྟོན་པའི་གཞི་རྩའི་གཞུང་ལུགས་དག་ལ་བདེ་བླག་ཏུ་འཇུག་པའི་མཐུན་རྐྱེན་བསྐྲུན་པའི་ཆེད། ང་ཚོས་ལེགས་འདེམས་ཕྱོགས་སྒྲིག་ཞུས་པའི་གསུང་རབ་ཀྱི་ཚོགས་འདིར། བྱང་ཆུབ་ཀྱི་སེམས་དང་སྙིང་རྗེ་བསྐྱེད་ཐབས་གཙོ་བོར་སྟོན་པའི་གསུང་རབ་སྣ་ཚོགས་དང་། ལྷག་པར་བོད་ཀྱི་ཆོས་བརྒྱུད་རྣམས་ནས་ཞལ་གདམས་དང་བརྩམས་ཆོས་གཙིགས་སུ་ཆེ་བ་དུ་མ་ཞིག་འདེམས་སྒྲུག་འཚོལ་བདེར་བྱས་ཡོད་པས། ལྷན་རྒྱས་རྣམ་པས་ཀྱང་དེ་མཚུངས་ཞིབ་གཟིགས་གནང་སྐྱོང་ཡོང་བར་ཞུ་རྒྱུ་དང་། དྲྭ་ཤོག་འདིར་འཁོད་གཞི་རྩའི་གཞུང་ལུགས་རེ་རེ་བཞིན། གཞུང་གི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས། བསྐྱར་བཅོས་དང་པར་སྐྲུན་མི་འདྲ་བ་ཇི་ཡོད། མཁས་པའི་དགོངས་འགྲེལ་དང་འབྲེལ་ཡོད་ཡིག་ཆ་སོགས་འཚོལ་ཞིབ་སྟབས་བདེར་བྱས་ཡོད་པས། སྤྱིར་མཁྱེན་རྟོགས་རྒྱ་བསྐྱེད་ཕྱིར་གཞུང་གི་རྒྱབ་ལྗོངས་ལ་སློབ་གཉེར་རམ། གཞུང་ལ་དངོས་སུ་ཐད་ཞུགས་ཀྱིས་དཔྱད་ཞིབ་དཔྱིས་ཕྱིན་དོན་དུ་གཉེར་བ་གཉིས་ཀའི་ཆེད། ང་ཚོའི་ཀློག་འདོན་ཁང་འདིར་སློབ་གཉེར་གྱི་མཐུན་རྐྱེན་མཁོ་སྤྲོད་དང་། གཞུང་ལུགས་རིན་ཐང་བྲལ་བ་དག་ལ་ཐད་འཇུག་གི་སྒོ་འཕར་ཡངས་པོར་ཕྱེས་ཡོད།}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Bilingual Bookshelf|bo=སྐད་གཉིས་ཤན་སྦྱར།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BilingualBookshelf}}&lt;br /&gt;
&lt;br /&gt;
{{VerticalSpacer|4}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;{{I18n|en=Core Texts|bo=བྱང་སེམས་གཞུང་ལུགས་གཙོ་བོ།}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicaryāvatāra&lt;br /&gt;
	|description=An &amp;quot;Introduction to Bodhisattva Practice,&amp;quot; the &#039;&#039;Bodhisattvacaryāvatāra&#039;&#039; is a poem about the path of a bodhisattva, in ten chapters, written by the Indian Buddhist Śāntideva (fl. c. 685–763). One of the masterpieces of world literature, it is a core text of Mahāyāna Buddhism and continues to be taught, studied, and commented upon in many languages and by many traditions around the world.&lt;br /&gt;
	|readLink=Texts/Bodhicaryāvatāra/Chapter_1&lt;br /&gt;
	|coverImg=File:Santideva BCA BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Śikṣāsamuccaya&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Compendium of Training,&amp;quot; a work by the eighth-century Indian Mahāyāna master Śāntideva. It consists of twenty-seven stanzas on the motivation and practice of the bodhisattva, including bodhicitta, the six perfections (&#039;&#039;pāramitā&#039;&#039;), the worship of buddhas and bodhisattvas, the benefits of renunciation, and the peace derived from the knowledge of emptiness (&#039;&#039;śūnyatā&#039;&#039;). Śāntideva supports his presentation throughout by drawing on dozens of Mahāyāna sūtras and other texts, which he quotes at length.&lt;br /&gt;
	|readLink=Books/The_Training_Anthology_of_Śāntideva/Bilingual/1&lt;br /&gt;
	|coverImg=File:Santideva SSC BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Yogācārabhūmaubodhisattvabhūmiḥ&lt;br /&gt;
	|description=The Bodhisattvabhūmi (literally &amp;quot;The Stage of a Bodhisattva&amp;quot;) stands as one of the most comprehensive and systematic expositions of the Mahāyāna Buddhist path from classical India. Formally the fifteenth section of the massive Yogācārabhūmi corpus, this foundational treatise provides an encyclopedic manual detailing the entire spiritual trajectory of a bodhisattva—from the initial arising of the &amp;quot;mind of awakening&amp;quot; (bodhicitta) to the ultimate attainment of perfect buddhahood.&lt;br /&gt;
	|coverImg=File:Asanga Bodhisattvabumi BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhicittavivaraṇanāma&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Exposition of the Mind of Enlightenment&amp;quot;; a work traditionally ascribed to Nāgārjuna, although the text is not cited by Nāgārjuna&#039;s commentators Buddhapālita, Candrakīrti, or Bhāvaviveka. The text consists of 112 stanzas, preceded by a brief section in prose. It is essentially a compendium of Mahāyāna theory and practice, intended for bodhisattvas, both monastic and lay, organized around the theme of bodhicitta, both in its conventional aspect (&#039;&#039;saṃvṛtibodhicitta&#039;&#039;) as the aspiration to buddhahood out of compassion for all sentient beings, and in its ultimate aspect (&#039;&#039;paramārthabodhicitta&#039;&#039;) as the insight into emptiness (&#039;&#039;śūnyatā&#039;&#039;).&lt;br /&gt;
	|coverImg=File:Nagarjuna Bodhicittavirana BC cover.jpg&lt;br /&gt;
	|readLink=Articles/A_Commentary_on_the_Awakening_Mind/Bilingual&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bhāvanākrama_(Kamalaśīla)&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Stages of Meditation,&amp;quot; the title of three separate but related works by the late eighth-century Indian master Kamalaśīla (RKTST 4228, RKTST 4229, and RKTST 4230). The three texts set forth the process for the potential bodhisattva to cultivate bodhicitta and then develop &#039;&#039;śamatha&#039;&#039; and &#039;&#039;vipaśyanā&#039;&#039; and progress through the bodhisattva stages (&#039;&#039;bhūmi&#039;&#039;) to buddhahood.&lt;br /&gt;
	|readLink=Dissertations/Meditation and the Concept of Insight in Kamalaśīla&#039;s Bhāvanākramas/Bilingual&lt;br /&gt;
	|coverImg=File:Kamalashila Bhavanakrama BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Bodhipathapradīpa&lt;br /&gt;
	|description=In Sanskrit, &amp;quot;Lamp for the Path to Enlightenment&amp;quot;; a work composed by the Indian scholar Atiśa Dīpamkaraśrījñāna at Tholing Tsuklakhang shortly after he arrived in Tibet in 1042. Tibetan histories often note that Atiśa wrote this text in order to clarify problematic points of Buddhist practice, especially tantra, which were thought to have degenerated and become distorted, and to show that tantra did not render basic Buddhist practice irrelevant.&lt;br /&gt;
	|coverImg=File:Atisha Bodhipratapadipa BC cover.jpg&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Rgyal sras lag len so bdun ma&lt;br /&gt;
    |description=Gyalse Tokme Zangpo&#039;s (1295–1369) highly influential work on Mind Training (&#039;&#039;blo sbyong&#039;&#039;) that outlines the training of a bodhisattva in a series of thirty-seven verses is still very popular today with Buddhist practitioners around the world. The colophon states: &amp;quot;This was composed at the Jewel Cave of Ngulchu by the monk Tokme [Zangpo], expounder of scripture and reasoning, for the benefit of myself and others.&amp;quot; Since he gathered together all the paths of the bodhisattvas and composed them in the form of thirty-seven verses, the title is clearly fitting.&lt;br /&gt;
    |coverImg=File:Gyaltse Tokme 37 practices BC cover.jpg	&lt;br /&gt;
    |readLink=Books/The_Heart_of_Compassion_(Ricard_2006)/Bilingual/Root_Verses&lt;br /&gt;
    |aboutLink=Thirty-Seven_Practices_of_a_Bodhisattva&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Blo_sbyong_don_bdun_ma&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Seven Points of Mind Training&amp;quot;; an influential Tibetan work in the Mind Training (&#039;&#039;blo sbyong&#039;&#039;) genre. The work was composed by the Kadampa scholar Chekawa Yeshe Dorje, often known as Geshe Chekawa, based on the tradition of generating bodhicitta known as &amp;quot;mind training&amp;quot; transmitted by the Bengali master Atiśa Dīpaṃkaraśrījñāna. It also follows the system laid out previously by Langri Tangpa in his &#039;&#039;Blo sbyong tshig brgyad ma&#039;&#039; (&amp;quot;Eight Verses on Mind Training&amp;quot;).&lt;br /&gt;
    |coverImg=File:Chekawa 7Pt Mind Training BC cover.jpg&lt;br /&gt;
    |readLink=Texts/Blo_sbyong_don_bdun_ma/Full_text&lt;br /&gt;
    |aboutLink=Seven_Points_of_Mind_Training&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mb-4 row justify-content-center clearfix&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-sm-8 col-md-6 col-lg-4 &amp;quot;&amp;gt;[[File:Separator narrow.png|500px|class=w-100 h-auto opac-30|]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h2 red-header text-center&amp;quot;&amp;gt;Other Core Texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung&lt;br /&gt;
    |readLink=Texts/Kun_bzang_bla_ma&#039;i_zhal_lung/Full_text&lt;br /&gt;
	|description=In Tibetan, &amp;quot;Words of My Perfect Teacher,&amp;quot; explains the preliminary practices (&#039;&#039;sngon &#039;gro&#039;&#039;) for the Longchen Nyingthik (&amp;quot;Heart Essence of the Great Expanse&amp;quot;), a system of Nyingma doctrine and meditation instruction stemming from the eighteenth-century treasure revealer (&#039;&#039;gter ston&#039;&#039;) Jigme Lingpa. The work is much loved for its direct, nontechnical approach and for its heartfelt practical advice.&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Lam_gyi_gtso_bo_rnam_gsum&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Dam chos yid bzhin gyi nor bu thar pa rin po che&#039;i rgyan&lt;br /&gt;
}}{{ReadingRoomText&lt;br /&gt;
	|page=Texts/Zhen_pa_bzhi_bral_gyi_gdams_ngag&lt;br /&gt;
	|description=As explicitly mentioned in this brief text, the four lines that present the core instruction of the practice of parting from the four clingings is traditionally recognized as a revelation from Mañjuśrī, the buddha of wisdom. Jamgön Amé, in his &#039;&#039;Lineages of the Sakya Family&#039;&#039; (&#039;&#039;Sa skya&#039;i gdung rabs&#039;&#039;, p. 26), identifies Sachen Kunga Nyingpo as the &amp;quot;great Sakyapa,&amp;quot; who experienced this vision of Mañjuśrī and received the revelation. Interestingly, Nupa Rikzin Drak . . . identifies Drakpa Gyaltsen as the origin of this instruction.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Library of All Tibetan Texts ==&lt;br /&gt;
&lt;br /&gt;
{{#widget:filterInput|placeholder=Filter {{#ask: [[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|format=count}} texts...}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LibraryRows|section|query=[[-Has parent page::&amp;lt;q&amp;gt;[[Category:Full text subpages]]&amp;lt;/q&amp;gt;]]|template=CommentaryRow}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- {{GetTibetanTexts|limit=100|offset=0}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=100}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=200}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=300}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=400}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=500}}&lt;br /&gt;
{{GetTibetanTexts|limit=100|offset=600}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=Access a curated digital library of foundational Mahāyāna texts. The Reading Room features bilingual editions of the Bodhicaryāvatāra, Śikṣāsamuccaya, and other core works with direct access to Tibetan Unicode and scholarly translations.&lt;br /&gt;
	|Title=The Reading Room: A Multilingual Library of Essential Bodhicitta Texts&lt;br /&gt;
	|AllTopics=Bodhicitta; Śāntideva; Shantideva; Reading Room; Core Buddhist Texts; Bodhicaryāvatāra; Śikṣāsamuccaya; Bodhisattvabhūmi; Bodhicittavivaraṇa; Bhāvanākrama; Bodhipathapradīpa; Seven Points of Mind Training; Thirty-Seven Practices of a Bodhisattva; Bilingual Bookshelf; Tibetan Unicode; Tibetan Buddhist Texts; Mahāyāna Literature; Buddhist Translations; Scriptural Commentaries; Tsadra Foundation Resources&lt;br /&gt;
	|FrontCoverImg=File:Tibet-scripture 84000.jpg&lt;br /&gt;
}}&lt;br /&gt;
[[Category: Resources]][[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143957</id>
		<title>Template:CommentaryRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143957"/>
		<updated>2026-10-05T16:26:53Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Doc: also used on the Reading Room&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{TopicBiblioRow&lt;br /&gt;
	|1={{#ifexist:{{{ 1 | }}}/Full text|{{{ 1 | }}}/Full text|{{{ 1 | }}}}}&lt;br /&gt;
	|Citation={{{ Citation | }}}&lt;br /&gt;
	|BcaAuthor={{{ BcaAuthor | }}}&lt;br /&gt;
	|Class={{{ Class | }}}&lt;br /&gt;
	|Title={{#if:{{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
	|FrontCoverImg={{{ FrontCoverImg | }}}&lt;br /&gt;
	|Pubdate={{{ Pubdate | }}}&lt;br /&gt;
	|TileDescription={{{ TileDescription | }}}&lt;br /&gt;
	|Description={{{ Description | }}}&lt;br /&gt;
	|FullTitleTib={{{ FullTitleTib | }}}&lt;br /&gt;
	|DescriptionTib={{{ DescriptionTib | }}}&lt;br /&gt;
	|SchoolTib={{{ SchoolTib | }}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
A library row ([[Template:TopicBiblioRow]]) that leads to the work&#039;s full text. Used for the&lt;br /&gt;
Commentaries section of the full-text pages ([[Template:FullTextSubpage]]) and for the&lt;br /&gt;
Library of All Tibetan Texts on [[Reading Room]] (via [[Module:LibraryRows]], &amp;lt;code&amp;gt;template=CommentaryRow&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Two things differ from an ordinary row, both carried over from the old commentary tiles:&lt;br /&gt;
&lt;br /&gt;
* the row links to the commentary&#039;s own &amp;lt;code&amp;gt;/Full text&amp;lt;/code&amp;gt; page when there is one,&lt;br /&gt;
  otherwise to the item page;&lt;br /&gt;
* the school, in Tibetan (&amp;lt;code&amp;gt;SchoolTib&amp;lt;/code&amp;gt;), is shown beside the class, when the query&lt;br /&gt;
  prints it (the full-text pages do; the Reading Room does not).&lt;br /&gt;
&lt;br /&gt;
Called from an &amp;lt;code&amp;gt;#ask&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;format=template&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the printout names must match the parameters here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143956</id>
		<title>Module:LibraryRows</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143956"/>
		<updated>2026-10-05T16:26:51Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Optional row template (template=)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Bibliographic rows for the library hub pages (Library, Library/Books, ...).&lt;br /&gt;
--&lt;br /&gt;
-- The same rows the topic pages use (Template:TopicBiblioRow): cover, citation,&lt;br /&gt;
-- class and date, an &amp;quot;About this item&amp;quot; disclosure. They replace the tile grid,&lt;br /&gt;
-- which was heavier to render and showed less.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:LibraryRows|controls|classes=Books;Articles;Classical Works|q:Multimedia=[[...]]}}&lt;br /&gt;
--       text filter plus class pills, as on topic pages (tws.js drives both)&lt;br /&gt;
--   {{#invoke:LibraryRows|section|heading=Books|link=Library/Books|query=[[Category:Books]]|title=yes}}&lt;br /&gt;
--       one class: a counted heading, then the rows (title=yes: title line above the citation)&lt;br /&gt;
--   ...|template=CommentaryRow&lt;br /&gt;
--       a different row template (default TopicBiblioRow). CommentaryRow links each row to&lt;br /&gt;
--       the item&#039;s /Full text page when it has one (the Reading Room&#039;s list of texts)&lt;br /&gt;
--&lt;br /&gt;
-- Rows load in deferred chunks of CHUNK, so a long class does not hold up the&lt;br /&gt;
-- page; the number of chunks comes from the count, so nothing is truncated (the&lt;br /&gt;
-- old tile chunks stopped at a fixed 1,100).&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local CHUNK = 100&lt;br /&gt;
&lt;br /&gt;
-- Printout names must match Template:TopicBiblioRow&#039;s parameters (named args).&lt;br /&gt;
-- BcaAuthor is taken raw (#) so the row can build the link itself.&lt;br /&gt;
local PRINTOUTS = &#039;|?Citation|?BcaAuthor#=BcaAuthor|?Class|?Title|?FrontCoverImg|?Pubdate|?TileDescription|?Description|?FullTitleTib|?DescriptionTib&#039;&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	s = mw.text.trim(s or &#039;&#039;)&lt;br /&gt;
	return s ~= &#039;&#039; and s or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function count(frame, query)&lt;br /&gt;
	local n = frame:preprocess(&#039;{{#ask:&#039; .. query .. &#039;|format=count}}&#039;)&lt;br /&gt;
	return tonumber((n or &#039;&#039;):match(&#039;%d+&#039;)) or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.controls(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local classes = trim(args.classes) or &#039;&#039;&lt;br /&gt;
	local base = trim(args.base) or &#039;[[Category:Library Items]]&#039;&lt;br /&gt;
	local pills = {}&lt;br /&gt;
	local total = 0&lt;br /&gt;
	for class in mw.text.gsplit(classes, &#039;%s*;%s*&#039;) do&lt;br /&gt;
		if class ~= &#039;&#039; then&lt;br /&gt;
			-- A pill counts what its section lists: pass q:&amp;lt;Class&amp;gt;=&amp;lt;query&amp;gt; when the&lt;br /&gt;
			-- section uses a narrower query than &amp;quot;every item of this class&amp;quot;.&lt;br /&gt;
			local n = count(frame, trim(args[&#039;q:&#039; .. class]) or (base .. &#039;[[Class::&#039; .. class .. &#039;]]&#039;))&lt;br /&gt;
			if n &amp;gt; 0 then&lt;br /&gt;
				total = total + n&lt;br /&gt;
				table.insert(pills, &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&amp;quot; data-filter-class=&amp;quot;&#039; .. mw.text.encode(class) ..&lt;br /&gt;
					&#039;&amp;quot;&amp;gt;&#039; .. class .. &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; .. mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local all = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill is-active&amp;quot; data-filter-class=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		mw.language.getContentLanguage():formatNum(total) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	-- No whitespace between the containers and their children: a newline there&lt;br /&gt;
	-- makes MediaWiki wrap the run in a &amp;lt;p&amp;gt;, which then becomes the only flex child.&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;topic-biblio-controls&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-filter&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		frame:preprocess(&#039;{{#widget:filterInput|placeholder=&#039; .. (trim(args.placeholder) or&lt;br /&gt;
			(&#039;Filter &#039; .. mw.language.getContentLanguage():formatNum(total) .. &#039; items…&#039;)) .. &#039;}}&#039;) ..&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-pills&amp;quot;&amp;gt;&#039; .. all .. table.concat(pills) .. &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.section(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local query = trim(args.query)&lt;br /&gt;
	if not query then return &#039;&#039; end&lt;br /&gt;
	local heading = trim(args.heading)&lt;br /&gt;
	local link = trim(args.link)&lt;br /&gt;
	local sort = trim(args.sort) or &#039;Citation&#039;&lt;br /&gt;
	local order = trim(args.order) or &#039;asc&#039;&lt;br /&gt;
	-- title=yes: each row leads with the work&#039;s title above the citation.&lt;br /&gt;
	local userparam = (trim(args.title) == &#039;yes&#039;) and &#039;|userparam=title&#039; or &#039;&#039;&lt;br /&gt;
	local template = trim(args.template) or &#039;TopicBiblioRow&#039;&lt;br /&gt;
&lt;br /&gt;
	local n = count(frame, query)&lt;br /&gt;
	if n == 0 then return &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
	local out = { &#039;&amp;lt;div class=&amp;quot;topic-biblio-section&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
	if heading then&lt;br /&gt;
		local label = link and (&#039;[[&#039; .. link .. &#039;|&#039; .. heading .. &#039;]]&#039;) or heading&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;h2 class=&amp;quot;link-no-border&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
			mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt; &#039; .. label .. &#039;&amp;lt;/h2&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	for offset = 0, n - 1, CHUNK do&lt;br /&gt;
		table.insert(out, frame:preprocess(&#039;{{#ask:&#039; .. query .. PRINTOUTS ..&lt;br /&gt;
			&#039;|format=template|template=&#039; .. template .. &#039;|named args=yes|link=none&#039; ..&lt;br /&gt;
			&#039;|sort=&#039; .. sort .. &#039;|order=&#039; .. order ..&lt;br /&gt;
			userparam ..&lt;br /&gt;
			&#039;|limit=&#039; .. CHUNK .. &#039;|offset=&#039; .. offset ..&lt;br /&gt;
			-- Each deferred chunk is parsed on its own, so the page&#039;s __NOGLOSSARY__&lt;br /&gt;
			-- would not reach it: the glossary would mark up every chunk (~2,300&lt;br /&gt;
			-- terms across the Library). A wrapper whose class is exactly&lt;br /&gt;
			-- &amp;quot;noglossary&amp;quot; keeps it out: measured 800 -&amp;gt; 440 ms and 388 -&amp;gt; 285 KB&lt;br /&gt;
			-- for a chunk of 100 rows.&lt;br /&gt;
			&#039;|intro=&amp;lt;div class=&amp;quot;noglossary&amp;quot;&amp;gt;|outro=&amp;lt;/div&amp;gt;&#039; ..&lt;br /&gt;
			&#039;|searchlabel=|default=|@deferred}}&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:FullTextSubpage&amp;diff=143955</id>
		<title>Template:FullTextSubpage</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:FullTextSubpage&amp;diff=143955"/>
		<updated>2026-10-05T16:20:04Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Commentaries: rows link to full text and show the school, as the old tiles did&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC____NOEDITSECTION____NOGLOSSARY__{{#Widget:NoFirstHeading}}{{#widget:ReadingRoomCovers}}{{DISPLAYTITLE:{{#show:{{BASEPAGENAME}}|?Display title of}}/Full text}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h1 mb-1 mt-3 mt-lg-5 mx-0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;d-flex justify-content-between align-items-end&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div&amp;gt;{{#if: {{{ AltTitle | }}} &lt;br /&gt;
			| {{{ AltTitle | }}} &lt;br /&gt;
			| {{#switch:{{#show:{{BASEPAGENAME}}|?Subclass}}&lt;br /&gt;
				|Sanskrit Original Work=&amp;lt;div class=&amp;quot;text-110 mb-2&amp;quot;&amp;gt;{{#if:{{#show:{{BASEPAGENAME}}|?FullTitleDev#}}&lt;br /&gt;
					|{{#show:{{BASEPAGENAME}}|?FullTitleDev#}} &lt;br /&gt;
					&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Display title of}}&amp;lt;/div&amp;gt;&lt;br /&gt;
					|{{#show:{{BASEPAGENAME}}|?Display title of}}&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-60 my-2&amp;quot;&amp;gt;{{#arraymap:{{#ifeq:{{ucfirst:{{#show:{{BASEPAGENAME}}|?FullTitleSkt}} }}&lt;br /&gt;
						|{{#show:{{BASEPAGENAME}}|?Display title of}}&lt;br /&gt;
						|&lt;br /&gt;
						|FullTitleSkt&lt;br /&gt;
					}};FullTitleTib;FullTitle&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;d-inline-block&amp;quot;&amp;gt;[[{{BASEPAGENAME}}|{{#show:{{BASEPAGENAME}}|?@@@}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
					|&amp;lt;i class=&amp;quot;fa-light fa-pipe align-bottom mx-3 opac-50&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Fulltitletrans#}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				|Tibetan Original Work=&amp;lt;div class=&amp;quot;text-110 mb-3&amp;quot;&amp;gt;{{#if:{{#show:{{BASEPAGENAME}}|?FullTitleTib}}|{{#show:{{BASEPAGENAME}}|?FullTitleTib}}|{{#show:{{BASEPAGENAME}}|?Display title of}} }}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-60 my-2&amp;quot;&amp;gt;{{#arraymap:{{#show:{{BASEPAGENAME}}|?FullTitle#}};{{#show:{{BASEPAGENAME}}|?FullTitleDev#}};{{#show:{{BASEPAGENAME}}|?FullTitleSkt#}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;d-inline-block&amp;quot;&amp;gt;[[{{BASEPAGENAME}}|@@@]]&amp;lt;/div&amp;gt;&lt;br /&gt;
					|&amp;lt;i class=&amp;quot;fa-light fa-pipe align-bottom mx-3 opac-50&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Fulltitletrans#}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				|[[{{BASEPAGENAME}}|{{#show:{{BASEPAGENAME}}|?Display title of}}]]&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;d-none d-md-block&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;header-watermark&amp;quot; style=&amp;quot;white-space: nowrap;&amp;quot;&amp;gt;FULL TEXT&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Jumbo&lt;br /&gt;
	|full-width=yes&lt;br /&gt;
	|image={{#show:{{BASEPAGENAME}}|?FrontCoverImg#}}&lt;br /&gt;
	|imageposition=50% 33%&lt;br /&gt;
	|header={{I18n&lt;br /&gt;
			|en=Description&lt;br /&gt;
			|bo=ངོ་སྤྲོད།&lt;br /&gt;
		}}&lt;br /&gt;
	|header-classes=pb-2&lt;br /&gt;
	|text={{#if:{{#show:{{BASEPAGENAME}}|?Description}}{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
		|{{I18n&lt;br /&gt;
			|en={{#show:{{BASEPAGENAME}}|?Description}}&lt;br /&gt;
			|bo={{#if:{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
				|{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
				|{{r|No Tibetan description!}}&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
		|{{LoremTibDescription}} &amp;lt;br&amp;gt; {{FormEditOnDrlButton&lt;br /&gt;
			|page={{BASEPAGENAME}}&lt;br /&gt;
			|icon=file-circle-plus&lt;br /&gt;
			|text=Add Tibetan Description to DRL&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|below-text={{#ifingroup:staff|&lt;br /&gt;
	&amp;lt;div class=&amp;quot;text-right&amp;quot;&amp;gt;[https://research.tsadra.org/index.php?title={{urlencode:{{#show:{{BASEPAGENAME}}|?DrlPageName#}}|WIKI}}&amp;amp;action=formedit Edit on DRL]&amp;lt;/div&amp;gt;|}}{{#if:{{{ ExtraFullTextMiniTiles | }}}|&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row my-3 justify-content-center&amp;quot;&amp;gt;{{{ ExtraFullTextMiniTiles | }}}&amp;lt;/div&amp;gt;|}}&lt;br /&gt;
	&amp;lt;table class=&amp;quot;smwtable-clean th-right mt-4&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Reference&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;{{#show:{{BASEPAGENAME}}|?Citation#}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;People&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;{{#arraymap:{{FirstValueOfArray|{{#ask:[[{{BASEPAGENAME}}]]&lt;br /&gt;
			|?AllAuthors#- |?People#- |format=template|template=ListPropValues |limit=1 |link=none |searchlabel= |default= |valuesep=; |sep=; |import-annotation=yes&lt;br /&gt;
		}}|;|3}}|;|@@@|[[@@@]]|,\s}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	|text-padding=p-3 p-md-4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#ask:{{#if:{{{ BilingualTMs | }}}&lt;br /&gt;
		|{{#arraymap:{{{ BilingualTMs | }}}&lt;br /&gt;
			|;&lt;br /&gt;
			|@@@&lt;br /&gt;
			|[[Translation Memory:@@@]]&lt;br /&gt;
			|OR&lt;br /&gt;
		}}&lt;br /&gt;
		|[[Category:Translation Memory Basepages]][[SourceWikiPage::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]OR[[Category:Translation Memory Basepages]][[RootTextWikiPage::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]&lt;br /&gt;
	}}&lt;br /&gt;
	|?TranslationWikiPage&lt;br /&gt;
	|intro=&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&lt;br /&gt;
	|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
	|format=template&lt;br /&gt;
	|template=BilingualVersionRow&lt;br /&gt;
	|link=none&lt;br /&gt;
	|searchlabel=&lt;br /&gt;
}}{{#if:{{#ifexist:{{PAGENAME}}/tib|1}}{{#ifexist:{{PAGENAME}}/wyl|1}}{{#ifexist:{{PAGENAME}}/skt|1}}|&lt;br /&gt;
&lt;br /&gt;
{{Callout&lt;br /&gt;
	|id=largeContentWarning&lt;br /&gt;
    |icon=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-books&amp;quot; style=&amp;quot;--fa-primary-color: #8e3c40; --fa-secondary-color: #8e3c40;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
    |title=Large content warning&lt;br /&gt;
    |text=&amp;lt;div class=&amp;quot;float-right&amp;quot; id=&amp;quot;lazy-load-all-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; Click the buttons below to load the different versions of the text.&lt;br /&gt;
}}|}}{{{ FullTextVersions | }}}&lt;br /&gt;
&lt;br /&gt;
{{CheckForVersions|Tsadra}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Tibetan &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextTibetan | }}}&lt;br /&gt;
    |suffix=tib&lt;br /&gt;
    |buttonLabel=Load Tibetan Text (བོད་ཡིག་འཇུག)&lt;br /&gt;
	|buttonClass=text-70&lt;br /&gt;
    |loadingLabel=Loading... (འཇུག་བཞིན་པ...)&lt;br /&gt;
	|source={{{ FullTextSource | }}}&lt;br /&gt;
	|sourceDate={{{ FullTextDate | }}}&lt;br /&gt;
	|PdfLink={{{ PdfLink | }}}&lt;br /&gt;
	|TsadraVersion={{{ TsadraVersion | }}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Wylie &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextWylie | }}}&lt;br /&gt;
    |suffix=wyl&lt;br /&gt;
    |buttonLabel=Load Wylie&lt;br /&gt;
    |loadingLabel=Loading Wylie...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Sanskrit &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextSkt | }}}&lt;br /&gt;
    |suffix=skt&lt;br /&gt;
    |buttonLabel=Load Sanskrit&lt;br /&gt;
    |loadingLabel=Loading Sanskrit...&lt;br /&gt;
	|source={{{ SktSource | }}}&lt;br /&gt;
	|sourceDate={{{ SktPubDate | }}}&lt;br /&gt;
	|PdfLink={{{ SktPdfLink | }}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{CheckForVersions}}&lt;br /&gt;
&lt;br /&gt;
{{#ifexpr:{{#ask:[[Is a commentary of::{{BASEPAGENAME}}]]OR[[TextClass::Commentary]][[TextTopics::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]|format=count}}|&lt;br /&gt;
&amp;lt;h1&amp;gt;Commentaries&amp;lt;/h1&amp;gt;|}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;topic-biblio-section&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;{{#ask:[[Is a commentary of::{{BASEPAGENAME}}]]OR[[TextClass::Commentary]][[TextTopics::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]&lt;br /&gt;
	|?Citation&lt;br /&gt;
	|?BcaAuthor#=BcaAuthor&lt;br /&gt;
	|?Class&lt;br /&gt;
	|?Title&lt;br /&gt;
	|?FrontCoverImg&lt;br /&gt;
	|?Pubdate&lt;br /&gt;
	|?TileDescription&lt;br /&gt;
	|?Description&lt;br /&gt;
	|?FullTitleTib&lt;br /&gt;
	|?DescriptionTib&lt;br /&gt;
	|?SchoolTib&lt;br /&gt;
	|format=template&lt;br /&gt;
	|template=CommentaryRow&lt;br /&gt;
	|named args=yes&lt;br /&gt;
	|link=none&lt;br /&gt;
	|valuesep=;&lt;br /&gt;
	|limit=500&lt;br /&gt;
	|sort=Citation&lt;br /&gt;
	|order=asc&lt;br /&gt;
	|intro=&amp;lt;div class=&amp;quot;noglossary&amp;quot;&amp;gt;&lt;br /&gt;
	|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
	|searchlabel=&lt;br /&gt;
	|default=&lt;br /&gt;
	|@deferred&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#widget:AddEditVersions}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:{{#titleparts: {{FULLPAGENAME}} | -1 | 2 }}]][[Category:Full text subpages]]&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Has parent page={{BASEPAGENAME}}&lt;br /&gt;
	|TsadraVersion={{{ TsadraVersion | }}}&lt;br /&gt;
	|FullTextSource={{{ FullTextSource | }}}&lt;br /&gt;
	|FullTextDate={{{ FullTextDate | }}}&lt;br /&gt;
	|FullTextTibetan={{{ FullTextTibetan | }}}&lt;br /&gt;
	|FullTextWylie={{{ FullTextWylie | }}}&lt;br /&gt;
	|FullTextSkt={{{ FullTextSkt | }}}&lt;br /&gt;
	|FrontCoverImg={{#show:{{BASEPAGENAME}}|?FrontCoverImg#}}&lt;br /&gt;
	|Title=Full text available&lt;br /&gt;
	|TileDescription=Read the full text of this work here on our website.&lt;br /&gt;
	|TileLabel={{#if:{{{ PdfLink | }}}&lt;br /&gt;
		|PDF {{#if:{{{ FullTextTibetan | }}}&lt;br /&gt;
			|· Unicode&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		|{{#if:{{{ FullTextTibetan | }}}&lt;br /&gt;
			|Unicode&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|TileSize=short&lt;br /&gt;
	|PdfLink={{{ PdfLink | }}}&lt;br /&gt;
	|TileImageUrl={{#if:{{{ PdfLink | }}}&lt;br /&gt;
		|https://bodhicitta.tsadra.org/thumb.php?f={{PAGENAMEE:{{{ PdfLink | }}}}}&amp;amp;width=800&amp;amp;page=1&lt;br /&gt;
		|{{filepath:{{PAGENAME:{{#show:{{BASEPAGENAME}}|?FrontCoverImg#}} }}|500}}&lt;br /&gt;
	}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143954</id>
		<title>Template:TopicBiblioRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143954"/>
		<updated>2026-10-05T16:20:03Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Optional SchoolTib in the meta line (only CommentaryRow passes it)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-row filterable{{#ifeq:{{{#userparam|}}}|title|&amp;amp;#32;topic-biblio-row--titled|}}&amp;quot; data-class=&amp;quot;{{{ Class | }}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	One bibliographic entry on a topic page.&lt;br /&gt;
&lt;br /&gt;
	Topic pages are bibliographies, so the row leads with the Citation, which&lt;br /&gt;
	already carries author, title, publisher and year in a single formatted&lt;br /&gt;
	line. Citation is present on 99% of tagged items, so this is reliable; the&lt;br /&gt;
	page title is used as a fallback for the remainder.&lt;br /&gt;
&lt;br /&gt;
	The description is collapsed rather than shown on hover. Descriptions run to&lt;br /&gt;
	a median of about 800 characters here and a maximum over 5000, which is far&lt;br /&gt;
	too much for a tooltip — it would cover the list and be unreadable on touch&lt;br /&gt;
	devices. A disclosure keeps the row to one line until asked.&lt;br /&gt;
&lt;br /&gt;
	Editorial Content entries that have a narrated recording get the player&lt;br /&gt;
	inline, matching the Listening Room. The audio is found by reverse lookup on&lt;br /&gt;
	AssociatedArticle, so nothing needs storing on the article itself.&lt;br /&gt;
&lt;br /&gt;
	The cover is requested at 250px, which is larger than the 42px slot it sits&lt;br /&gt;
	in while collapsed. That is deliberate — opening the description grows the&lt;br /&gt;
	cover to 120px, and on a 2x display that needs 240px of real pixels. Without&lt;br /&gt;
	an explicit size MediaWiki would serve the original file instead, which on a&lt;br /&gt;
	long list means megabytes of images scaled down by the browser.&lt;br /&gt;
&lt;br /&gt;
	250 rather than a round 260: the Commons scaler fails for exactly the 260px&lt;br /&gt;
	bucket on a subset of files (20 of 298 covers, deterministic on retry) and&lt;br /&gt;
	returns no thumbnail, so the image degrades to a plain link to the file&lt;br /&gt;
	page. Every other width tested from 100 to 500 works, 250 and 270 included.&lt;br /&gt;
	If covers ever render as links again, probe a few widths before suspecting&lt;br /&gt;
	the file, the ForeignFileRepo, or this template.&lt;br /&gt;
&lt;br /&gt;
	The cover deliberately has no link= parameter, so its anchor points at the&lt;br /&gt;
	file page with class=&amp;quot;image&amp;quot;. That is the hook MultimediaViewer binds to;&lt;br /&gt;
	pointing link= at the item page suppresses the viewer, because MMV only&lt;br /&gt;
	upgrades images that link to their own file description page. The citation&lt;br /&gt;
	beside it already links to the item, so no navigation is lost.&lt;br /&gt;
--&amp;gt;{{#if: {{{ FrontCoverImg | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb tws-lightbox&amp;quot;&amp;gt;[[File:{{PAGENAME:{{{ FrontCoverImg | }}}}}|200px|class=object-fit-cover w-100 h-100]]&amp;lt;/div&amp;gt;&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	}}&lt;br /&gt;
	&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	TITLE LINE (library hub pages only)&lt;br /&gt;
&lt;br /&gt;
	Module:LibraryRows passes userparam=title, so its rows lead with the work&#039;s&lt;br /&gt;
	title, larger, above the citation: a list sorted by citation reads author&lt;br /&gt;
	first, and the title line keeps it scannable by work. Topic pages and the&lt;br /&gt;
	Bibliography pass nothing and are unchanged. The userparam arrives as a&lt;br /&gt;
	parameter named #userparam, with the hash.&lt;br /&gt;
--&amp;gt;{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
			|&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
				|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
			}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
			|{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
				|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
			}}&lt;br /&gt;
			|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
		}}]]&amp;lt;!--&lt;br /&gt;
	TIBETAN (the language toggle)&lt;br /&gt;
&lt;br /&gt;
	FullTitleTib and DescriptionTib, where the item has them, are carried as the&lt;br /&gt;
	Tibetan side of {{I18n}}, so switching the toggle to Tibetan shows them and an&lt;br /&gt;
	item without them stays in English. On a titled row the Tibetan title goes on&lt;br /&gt;
	the title line and the citation stays as it is, so the title is not shown twice.&lt;br /&gt;
--&amp;gt;&amp;lt;!--&lt;br /&gt;
	AUTHOR BYLINE&lt;br /&gt;
&lt;br /&gt;
	Inline, straight after the title, so the line reads the way a citation does&lt;br /&gt;
	— work then author — rather than stacking a second line under it.&lt;br /&gt;
&lt;br /&gt;
	Only when there is no Citation: a citation already opens with the author, so&lt;br /&gt;
	printing it again would just repeat the line above. Our own editorial writing&lt;br /&gt;
	carries no citation at all, which is what left those rows with no attribution.&lt;br /&gt;
&lt;br /&gt;
	BcaAuthor arrives as a raw page title (&amp;quot;People/Houlton, S.&amp;quot;), because the&lt;br /&gt;
	query runs with link=none and would otherwise flatten it to plain text. The&lt;br /&gt;
	link is built here instead, and MediaWiki applies the person&#039;s display title,&lt;br /&gt;
	so it reads &amp;quot;Simon Houlton&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	Deliberately NOT split with #arraymap: these page names contain commas, so&lt;br /&gt;
	splitting on comma turns one author into two red links.&lt;br /&gt;
&lt;br /&gt;
	Present on about a quarter of Editorial pages, so the row still has to read&lt;br /&gt;
	correctly without it. No leading space before the span: it is supplied in CSS&lt;br /&gt;
	so the separator moves with the styling.&lt;br /&gt;
--&amp;gt;{{#if: {{{ Citation | }}}&lt;br /&gt;
			|&lt;br /&gt;
			|{{#if: {{{ BcaAuthor | }}}&lt;br /&gt;
				|&amp;lt;span class=&amp;quot;topic-biblio-byline&amp;quot;&amp;gt;[[{{{ BcaAuthor | }}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;{{#if: {{{ Class | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;{{{ Class | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ SchoolTib | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-school&amp;quot; lang=&amp;quot;bo&amp;quot;&amp;gt;{{#arraymap:{{{ SchoolTib | }}}|;|@@@|@@@|&amp;amp;nbsp;·&amp;amp;nbsp;}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ Pubdate | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;{{{ Pubdate | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-more&amp;quot; role=&amp;quot;button&amp;quot; tabindex=&amp;quot;0&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;About this item&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-desc&amp;quot; hidden&amp;gt;{{#if: {{{ DescriptionTib | }}}&lt;br /&gt;
			|{{I18n|en={{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{#if: {{{ Description | }}}|{{{ Description | }}}|{{{ DescriptionTib | }}}}}}}|bo={{{ DescriptionTib | }}}}}&lt;br /&gt;
			|{{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{{ Description | }}}}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		|}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;{{#ifeq: {{{ Class | }}}&lt;br /&gt;
		|Editorial Content&lt;br /&gt;
		|{{#ask:[[Category:Tsadra Bodhicitta Audio]][[AssociatedArticle::{{{ 1 | }}}]]&lt;br /&gt;
			|?#-=file&lt;br /&gt;
			|mainlabel=-&lt;br /&gt;
			|headers=hide&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|link=none&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicBiblioPlayer&lt;br /&gt;
			|named args=yes&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
Renders one row of the bibliographic list on a [[:Category:Topic Pages|topic page]].&lt;br /&gt;
&lt;br /&gt;
Called by [[Template:TopicBiblioSection]] with &amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the&lt;br /&gt;
printout names in that query must match the parameter names used here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143953</id>
		<title>Template:CommentaryRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:CommentaryRow&amp;diff=143953"/>
		<updated>2026-10-05T16:20:02Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Commentary as a library row: links to its full text, shows its school&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{TopicBiblioRow&lt;br /&gt;
	|1={{#ifexist:{{{ 1 | }}}/Full text|{{{ 1 | }}}/Full text|{{{ 1 | }}}}}&lt;br /&gt;
	|Citation={{{ Citation | }}}&lt;br /&gt;
	|BcaAuthor={{{ BcaAuthor | }}}&lt;br /&gt;
	|Class={{{ Class | }}}&lt;br /&gt;
	|Title={{#if:{{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
	|FrontCoverImg={{{ FrontCoverImg | }}}&lt;br /&gt;
	|Pubdate={{{ Pubdate | }}}&lt;br /&gt;
	|TileDescription={{{ TileDescription | }}}&lt;br /&gt;
	|Description={{{ Description | }}}&lt;br /&gt;
	|FullTitleTib={{{ FullTitleTib | }}}&lt;br /&gt;
	|DescriptionTib={{{ DescriptionTib | }}}&lt;br /&gt;
	|SchoolTib={{{ SchoolTib | }}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
One commentary as a library row ([[Template:TopicBiblioRow]]), for the Commentaries&lt;br /&gt;
section of the full-text pages ([[Template:FullTextSubpage]]).&lt;br /&gt;
&lt;br /&gt;
Two things differ from an ordinary row, both carried over from the old commentary tiles:&lt;br /&gt;
&lt;br /&gt;
* the row links to the commentary&#039;s own &amp;lt;code&amp;gt;/Full text&amp;lt;/code&amp;gt; page when there is one,&lt;br /&gt;
  otherwise to the item page;&lt;br /&gt;
* the commentary&#039;s school, in Tibetan (&amp;lt;code&amp;gt;SchoolTib&amp;lt;/code&amp;gt;), is shown beside the class.&lt;br /&gt;
&lt;br /&gt;
Called from an &amp;lt;code&amp;gt;#ask&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;format=template&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the printout names must match the parameters here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143952</id>
		<title>Template:TopicBiblioRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143952"/>
		<updated>2026-10-05T16:18:39Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: About this item: back to plain English label&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-row filterable{{#ifeq:{{{#userparam|}}}|title|&amp;amp;#32;topic-biblio-row--titled|}}&amp;quot; data-class=&amp;quot;{{{ Class | }}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	One bibliographic entry on a topic page.&lt;br /&gt;
&lt;br /&gt;
	Topic pages are bibliographies, so the row leads with the Citation, which&lt;br /&gt;
	already carries author, title, publisher and year in a single formatted&lt;br /&gt;
	line. Citation is present on 99% of tagged items, so this is reliable; the&lt;br /&gt;
	page title is used as a fallback for the remainder.&lt;br /&gt;
&lt;br /&gt;
	The description is collapsed rather than shown on hover. Descriptions run to&lt;br /&gt;
	a median of about 800 characters here and a maximum over 5000, which is far&lt;br /&gt;
	too much for a tooltip — it would cover the list and be unreadable on touch&lt;br /&gt;
	devices. A disclosure keeps the row to one line until asked.&lt;br /&gt;
&lt;br /&gt;
	Editorial Content entries that have a narrated recording get the player&lt;br /&gt;
	inline, matching the Listening Room. The audio is found by reverse lookup on&lt;br /&gt;
	AssociatedArticle, so nothing needs storing on the article itself.&lt;br /&gt;
&lt;br /&gt;
	The cover is requested at 250px, which is larger than the 42px slot it sits&lt;br /&gt;
	in while collapsed. That is deliberate — opening the description grows the&lt;br /&gt;
	cover to 120px, and on a 2x display that needs 240px of real pixels. Without&lt;br /&gt;
	an explicit size MediaWiki would serve the original file instead, which on a&lt;br /&gt;
	long list means megabytes of images scaled down by the browser.&lt;br /&gt;
&lt;br /&gt;
	250 rather than a round 260: the Commons scaler fails for exactly the 260px&lt;br /&gt;
	bucket on a subset of files (20 of 298 covers, deterministic on retry) and&lt;br /&gt;
	returns no thumbnail, so the image degrades to a plain link to the file&lt;br /&gt;
	page. Every other width tested from 100 to 500 works, 250 and 270 included.&lt;br /&gt;
	If covers ever render as links again, probe a few widths before suspecting&lt;br /&gt;
	the file, the ForeignFileRepo, or this template.&lt;br /&gt;
&lt;br /&gt;
	The cover deliberately has no link= parameter, so its anchor points at the&lt;br /&gt;
	file page with class=&amp;quot;image&amp;quot;. That is the hook MultimediaViewer binds to;&lt;br /&gt;
	pointing link= at the item page suppresses the viewer, because MMV only&lt;br /&gt;
	upgrades images that link to their own file description page. The citation&lt;br /&gt;
	beside it already links to the item, so no navigation is lost.&lt;br /&gt;
--&amp;gt;{{#if: {{{ FrontCoverImg | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb tws-lightbox&amp;quot;&amp;gt;[[File:{{PAGENAME:{{{ FrontCoverImg | }}}}}|200px|class=object-fit-cover w-100 h-100]]&amp;lt;/div&amp;gt;&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	}}&lt;br /&gt;
	&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	TITLE LINE (library hub pages only)&lt;br /&gt;
&lt;br /&gt;
	Module:LibraryRows passes userparam=title, so its rows lead with the work&#039;s&lt;br /&gt;
	title, larger, above the citation: a list sorted by citation reads author&lt;br /&gt;
	first, and the title line keeps it scannable by work. Topic pages and the&lt;br /&gt;
	Bibliography pass nothing and are unchanged. The userparam arrives as a&lt;br /&gt;
	parameter named #userparam, with the hash.&lt;br /&gt;
--&amp;gt;{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
			|&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
				|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
			}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
			|{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
				|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
			}}&lt;br /&gt;
			|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
		}}]]&amp;lt;!--&lt;br /&gt;
	TIBETAN (the language toggle)&lt;br /&gt;
&lt;br /&gt;
	FullTitleTib and DescriptionTib, where the item has them, are carried as the&lt;br /&gt;
	Tibetan side of {{I18n}}, so switching the toggle to Tibetan shows them and an&lt;br /&gt;
	item without them stays in English. On a titled row the Tibetan title goes on&lt;br /&gt;
	the title line and the citation stays as it is, so the title is not shown twice.&lt;br /&gt;
--&amp;gt;&amp;lt;!--&lt;br /&gt;
	AUTHOR BYLINE&lt;br /&gt;
&lt;br /&gt;
	Inline, straight after the title, so the line reads the way a citation does&lt;br /&gt;
	— work then author — rather than stacking a second line under it.&lt;br /&gt;
&lt;br /&gt;
	Only when there is no Citation: a citation already opens with the author, so&lt;br /&gt;
	printing it again would just repeat the line above. Our own editorial writing&lt;br /&gt;
	carries no citation at all, which is what left those rows with no attribution.&lt;br /&gt;
&lt;br /&gt;
	BcaAuthor arrives as a raw page title (&amp;quot;People/Houlton, S.&amp;quot;), because the&lt;br /&gt;
	query runs with link=none and would otherwise flatten it to plain text. The&lt;br /&gt;
	link is built here instead, and MediaWiki applies the person&#039;s display title,&lt;br /&gt;
	so it reads &amp;quot;Simon Houlton&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	Deliberately NOT split with #arraymap: these page names contain commas, so&lt;br /&gt;
	splitting on comma turns one author into two red links.&lt;br /&gt;
&lt;br /&gt;
	Present on about a quarter of Editorial pages, so the row still has to read&lt;br /&gt;
	correctly without it. No leading space before the span: it is supplied in CSS&lt;br /&gt;
	so the separator moves with the styling.&lt;br /&gt;
--&amp;gt;{{#if: {{{ Citation | }}}&lt;br /&gt;
			|&lt;br /&gt;
			|{{#if: {{{ BcaAuthor | }}}&lt;br /&gt;
				|&amp;lt;span class=&amp;quot;topic-biblio-byline&amp;quot;&amp;gt;[[{{{ BcaAuthor | }}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;{{#if: {{{ Class | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;{{{ Class | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ Pubdate | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;{{{ Pubdate | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-more&amp;quot; role=&amp;quot;button&amp;quot; tabindex=&amp;quot;0&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;About this item&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-desc&amp;quot; hidden&amp;gt;{{#if: {{{ DescriptionTib | }}}&lt;br /&gt;
			|{{I18n|en={{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{#if: {{{ Description | }}}|{{{ Description | }}}|{{{ DescriptionTib | }}}}}}}|bo={{{ DescriptionTib | }}}}}&lt;br /&gt;
			|{{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{{ Description | }}}}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		|}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;{{#ifeq: {{{ Class | }}}&lt;br /&gt;
		|Editorial Content&lt;br /&gt;
		|{{#ask:[[Category:Tsadra Bodhicitta Audio]][[AssociatedArticle::{{{ 1 | }}}]]&lt;br /&gt;
			|?#-=file&lt;br /&gt;
			|mainlabel=-&lt;br /&gt;
			|headers=hide&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|link=none&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicBiblioPlayer&lt;br /&gt;
			|named args=yes&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
Renders one row of the bibliographic list on a [[:Category:Topic Pages|topic page]].&lt;br /&gt;
&lt;br /&gt;
Called by [[Template:TopicBiblioSection]] with &amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the&lt;br /&gt;
printout names in that query must match the parameter names used here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:FacetCategories&amp;diff=143951</id>
		<title>Module:FacetCategories</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:FacetCategories&amp;diff=143951"/>
		<updated>2026-10-05T16:09:09Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Strip a Topics/ prefix from topic values&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Facet categories for library items, so the site search can filter on them.&lt;br /&gt;
--&lt;br /&gt;
-- CirrusSearch cannot read SMW properties, but it can filter by category&lt;br /&gt;
-- (incategory:). Class, people and publishers already arrive as categories;&lt;br /&gt;
-- this adds the two facets that did not:&lt;br /&gt;
--&lt;br /&gt;
--   Topic: &amp;lt;TermTopics value&amp;gt;     one per topic, e.g. &amp;quot;Topic: Compassion&amp;quot;&lt;br /&gt;
--   Decade: &amp;lt;1990s&amp;gt;               from the first four-digit year in Pubdate&lt;br /&gt;
--&lt;br /&gt;
-- The categories are hidden from the page footer in CSS (tws.main.scss,&lt;br /&gt;
-- .catlinks), so they need no category pages.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:FacetCategories|main|topics={{{ TermTopics | }}}|date={{GetItemData|prop=Pubdate}}}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local out = {}&lt;br /&gt;
	local seen = {}&lt;br /&gt;
&lt;br /&gt;
	for topic in mw.text.gsplit(args.topics or &#039;&#039;, &#039;%s*;%s*&#039;) do&lt;br /&gt;
		topic = mw.text.trim(topic)&lt;br /&gt;
		-- Some pages give the topic as its page title (&amp;quot;Topics/Debate&amp;quot;); file&lt;br /&gt;
		-- those under the bare name, with the rest.&lt;br /&gt;
		topic = topic:gsub(&#039;^Topics/&#039;, &#039;&#039;)&lt;br /&gt;
		if topic ~= &#039;&#039; and not seen[topic] then&lt;br /&gt;
			seen[topic] = true&lt;br /&gt;
			-- A category name cannot carry these characters.&lt;br /&gt;
			local name = topic:gsub(&#039;[%[%]{}|#&amp;lt;&amp;gt;]&#039;, &#039;&#039;)&lt;br /&gt;
			if name ~= &#039;&#039; then&lt;br /&gt;
				table.insert(out, &#039;[[Category:Topic: &#039; .. name .. &#039;]]&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local year = tonumber((args.date or &#039;&#039;):match(&#039;(%d%d%d%d)&#039;))&lt;br /&gt;
	if year and year &amp;gt;= 1000 and year &amp;lt;= 2100 then&lt;br /&gt;
		table.insert(out, &#039;[[Category:Decade: &#039; .. (year - year % 10) .. &#039;s]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:FullTextSubpage&amp;diff=143950</id>
		<title>Template:FullTextSubpage</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:FullTextSubpage&amp;diff=143950"/>
		<updated>2026-10-05T16:01:47Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Bilingual versions and Commentaries as library rows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC____NOEDITSECTION____NOGLOSSARY__{{#Widget:NoFirstHeading}}{{#widget:ReadingRoomCovers}}{{DISPLAYTITLE:{{#show:{{BASEPAGENAME}}|?Display title of}}/Full text}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;h1 mb-1 mt-3 mt-lg-5 mx-0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;d-flex justify-content-between align-items-end&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div&amp;gt;{{#if: {{{ AltTitle | }}} &lt;br /&gt;
			| {{{ AltTitle | }}} &lt;br /&gt;
			| {{#switch:{{#show:{{BASEPAGENAME}}|?Subclass}}&lt;br /&gt;
				|Sanskrit Original Work=&amp;lt;div class=&amp;quot;text-110 mb-2&amp;quot;&amp;gt;{{#if:{{#show:{{BASEPAGENAME}}|?FullTitleDev#}}&lt;br /&gt;
					|{{#show:{{BASEPAGENAME}}|?FullTitleDev#}} &lt;br /&gt;
					&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Display title of}}&amp;lt;/div&amp;gt;&lt;br /&gt;
					|{{#show:{{BASEPAGENAME}}|?Display title of}}&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-60 my-2&amp;quot;&amp;gt;{{#arraymap:{{#ifeq:{{ucfirst:{{#show:{{BASEPAGENAME}}|?FullTitleSkt}} }}&lt;br /&gt;
						|{{#show:{{BASEPAGENAME}}|?Display title of}}&lt;br /&gt;
						|&lt;br /&gt;
						|FullTitleSkt&lt;br /&gt;
					}};FullTitleTib;FullTitle&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;d-inline-block&amp;quot;&amp;gt;[[{{BASEPAGENAME}}|{{#show:{{BASEPAGENAME}}|?@@@}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
					|&amp;lt;i class=&amp;quot;fa-light fa-pipe align-bottom mx-3 opac-50&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Fulltitletrans#}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				|Tibetan Original Work=&amp;lt;div class=&amp;quot;text-110 mb-3&amp;quot;&amp;gt;{{#if:{{#show:{{BASEPAGENAME}}|?FullTitleTib}}|{{#show:{{BASEPAGENAME}}|?FullTitleTib}}|{{#show:{{BASEPAGENAME}}|?Display title of}} }}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-60 my-2&amp;quot;&amp;gt;{{#arraymap:{{#show:{{BASEPAGENAME}}|?FullTitle#}};{{#show:{{BASEPAGENAME}}|?FullTitleDev#}};{{#show:{{BASEPAGENAME}}|?FullTitleSkt#}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;d-inline-block&amp;quot;&amp;gt;[[{{BASEPAGENAME}}|@@@]]&amp;lt;/div&amp;gt;&lt;br /&gt;
					|&amp;lt;i class=&amp;quot;fa-light fa-pipe align-bottom mx-3 opac-50&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;text-muted font-italic text-60&amp;quot;&amp;gt;{{#show:{{BASEPAGENAME}}|?Fulltitletrans#}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				|[[{{BASEPAGENAME}}|{{#show:{{BASEPAGENAME}}|?Display title of}}]]&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;d-none d-md-block&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;header-watermark&amp;quot; style=&amp;quot;white-space: nowrap;&amp;quot;&amp;gt;FULL TEXT&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Jumbo&lt;br /&gt;
	|full-width=yes&lt;br /&gt;
	|image={{#show:{{BASEPAGENAME}}|?FrontCoverImg#}}&lt;br /&gt;
	|imageposition=50% 33%&lt;br /&gt;
	|header={{I18n&lt;br /&gt;
			|en=Description&lt;br /&gt;
			|bo=ངོ་སྤྲོད།&lt;br /&gt;
		}}&lt;br /&gt;
	|header-classes=pb-2&lt;br /&gt;
	|text={{#if:{{#show:{{BASEPAGENAME}}|?Description}}{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
		|{{I18n&lt;br /&gt;
			|en={{#show:{{BASEPAGENAME}}|?Description}}&lt;br /&gt;
			|bo={{#if:{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
				|{{#show:{{BASEPAGENAME}}|?DescriptionTib}}&lt;br /&gt;
				|{{r|No Tibetan description!}}&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
		|{{LoremTibDescription}} &amp;lt;br&amp;gt; {{FormEditOnDrlButton&lt;br /&gt;
			|page={{BASEPAGENAME}}&lt;br /&gt;
			|icon=file-circle-plus&lt;br /&gt;
			|text=Add Tibetan Description to DRL&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|below-text={{#ifingroup:staff|&lt;br /&gt;
	&amp;lt;div class=&amp;quot;text-right&amp;quot;&amp;gt;[https://research.tsadra.org/index.php?title={{urlencode:{{#show:{{BASEPAGENAME}}|?DrlPageName#}}|WIKI}}&amp;amp;action=formedit Edit on DRL]&amp;lt;/div&amp;gt;|}}{{#if:{{{ ExtraFullTextMiniTiles | }}}|&lt;br /&gt;
	&amp;lt;div class=&amp;quot;row my-3 justify-content-center&amp;quot;&amp;gt;{{{ ExtraFullTextMiniTiles | }}}&amp;lt;/div&amp;gt;|}}&lt;br /&gt;
	&amp;lt;table class=&amp;quot;smwtable-clean th-right mt-4&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Reference&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;{{#show:{{BASEPAGENAME}}|?Citation#}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;People&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;{{#arraymap:{{FirstValueOfArray|{{#ask:[[{{BASEPAGENAME}}]]&lt;br /&gt;
			|?AllAuthors#- |?People#- |format=template|template=ListPropValues |limit=1 |link=none |searchlabel= |default= |valuesep=; |sep=; |import-annotation=yes&lt;br /&gt;
		}}|;|3}}|;|@@@|[[@@@]]|,\s}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	|text-padding=p-3 p-md-4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#ask:{{#if:{{{ BilingualTMs | }}}&lt;br /&gt;
		|{{#arraymap:{{{ BilingualTMs | }}}&lt;br /&gt;
			|;&lt;br /&gt;
			|@@@&lt;br /&gt;
			|[[Translation Memory:@@@]]&lt;br /&gt;
			|OR&lt;br /&gt;
		}}&lt;br /&gt;
		|[[Category:Translation Memory Basepages]][[SourceWikiPage::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]OR[[Category:Translation Memory Basepages]][[RootTextWikiPage::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]&lt;br /&gt;
	}}&lt;br /&gt;
	|?TranslationWikiPage&lt;br /&gt;
	|intro=&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&lt;br /&gt;
	|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
	|format=template&lt;br /&gt;
	|template=BilingualVersionRow&lt;br /&gt;
	|link=none&lt;br /&gt;
	|searchlabel=&lt;br /&gt;
}}{{#if:{{#ifexist:{{PAGENAME}}/tib|1}}{{#ifexist:{{PAGENAME}}/wyl|1}}{{#ifexist:{{PAGENAME}}/skt|1}}|&lt;br /&gt;
&lt;br /&gt;
{{Callout&lt;br /&gt;
	|id=largeContentWarning&lt;br /&gt;
    |icon=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-books&amp;quot; style=&amp;quot;--fa-primary-color: #8e3c40; --fa-secondary-color: #8e3c40;&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
    |title=Large content warning&lt;br /&gt;
    |text=&amp;lt;div class=&amp;quot;float-right&amp;quot; id=&amp;quot;lazy-load-all-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; Click the buttons below to load the different versions of the text.&lt;br /&gt;
}}|}}{{{ FullTextVersions | }}}&lt;br /&gt;
&lt;br /&gt;
{{CheckForVersions|Tsadra}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Tibetan &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextTibetan | }}}&lt;br /&gt;
    |suffix=tib&lt;br /&gt;
    |buttonLabel=Load Tibetan Text (བོད་ཡིག་འཇུག)&lt;br /&gt;
	|buttonClass=text-70&lt;br /&gt;
    |loadingLabel=Loading... (འཇུག་བཞིན་པ...)&lt;br /&gt;
	|source={{{ FullTextSource | }}}&lt;br /&gt;
	|sourceDate={{{ FullTextDate | }}}&lt;br /&gt;
	|PdfLink={{{ PdfLink | }}}&lt;br /&gt;
	|TsadraVersion={{{ TsadraVersion | }}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Wylie &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextWylie | }}}&lt;br /&gt;
    |suffix=wyl&lt;br /&gt;
    |buttonLabel=Load Wylie&lt;br /&gt;
    |loadingLabel=Loading Wylie...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LazyTextSection&lt;br /&gt;
    |header=&amp;lt;h1&amp;gt; Sanskrit &amp;lt;/h1&amp;gt;&lt;br /&gt;
    |directContent={{{ FullTextSkt | }}}&lt;br /&gt;
    |suffix=skt&lt;br /&gt;
    |buttonLabel=Load Sanskrit&lt;br /&gt;
    |loadingLabel=Loading Sanskrit...&lt;br /&gt;
	|source={{{ SktSource | }}}&lt;br /&gt;
	|sourceDate={{{ SktPubDate | }}}&lt;br /&gt;
	|PdfLink={{{ SktPdfLink | }}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{CheckForVersions}}&lt;br /&gt;
&lt;br /&gt;
{{#ifexpr:{{#ask:[[Is a commentary of::{{BASEPAGENAME}}]]OR[[TextClass::Commentary]][[TextTopics::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]|format=count}}|&lt;br /&gt;
&amp;lt;h1&amp;gt;Commentaries&amp;lt;/h1&amp;gt;|}}&lt;br /&gt;
{{TopicBiblioSection&lt;br /&gt;
	|query=[[Is a commentary of::{{BASEPAGENAME}}]]OR[[TextClass::Commentary]][[TextTopics::{{SUBPAGENAME:{{BASEPAGENAME}}}}]]&lt;br /&gt;
	|sort=Citation&lt;br /&gt;
	|order=asc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:AddEditVersions}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:{{#titleparts: {{FULLPAGENAME}} | -1 | 2 }}]][[Category:Full text subpages]]&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Has parent page={{BASEPAGENAME}}&lt;br /&gt;
	|TsadraVersion={{{ TsadraVersion | }}}&lt;br /&gt;
	|FullTextSource={{{ FullTextSource | }}}&lt;br /&gt;
	|FullTextDate={{{ FullTextDate | }}}&lt;br /&gt;
	|FullTextTibetan={{{ FullTextTibetan | }}}&lt;br /&gt;
	|FullTextWylie={{{ FullTextWylie | }}}&lt;br /&gt;
	|FullTextSkt={{{ FullTextSkt | }}}&lt;br /&gt;
	|FrontCoverImg={{#show:{{BASEPAGENAME}}|?FrontCoverImg#}}&lt;br /&gt;
	|Title=Full text available&lt;br /&gt;
	|TileDescription=Read the full text of this work here on our website.&lt;br /&gt;
	|TileLabel={{#if:{{{ PdfLink | }}}&lt;br /&gt;
		|PDF {{#if:{{{ FullTextTibetan | }}}&lt;br /&gt;
			|· Unicode&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		|{{#if:{{{ FullTextTibetan | }}}&lt;br /&gt;
			|Unicode&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|TileSize=short&lt;br /&gt;
	|PdfLink={{{ PdfLink | }}}&lt;br /&gt;
	|TileImageUrl={{#if:{{{ PdfLink | }}}&lt;br /&gt;
		|https://bodhicitta.tsadra.org/thumb.php?f={{PAGENAMEE:{{{ PdfLink | }}}}}&amp;amp;width=800&amp;amp;page=1&lt;br /&gt;
		|{{filepath:{{PAGENAME:{{#show:{{BASEPAGENAME}}|?FrontCoverImg#}} }}|500}}&lt;br /&gt;
	}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:BilingualVersionRow&amp;diff=143949</id>
		<title>Template:BilingualVersionRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:BilingualVersionRow&amp;diff=143949"/>
		<updated>2026-10-05T16:01:46Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Bilingual edition as a library row&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{TopicBiblioRow&lt;br /&gt;
	|1={{#if:{{#show:{{{ 2 | }}}|?BilingualPage#}}|{{#show:{{{ 2 | }}}|?BilingualPage#}}|{{{ 2 | }}}}}&lt;br /&gt;
	|#userparam=title&lt;br /&gt;
	|Title=Bilingual version: {{SUBPAGENAME:{{{ 2 | }}}}}&lt;br /&gt;
	|FullTitleTib={{#show:{{{ 2 | }}}|?FullTitleTib#}}&lt;br /&gt;
	|Citation={{#show:{{{ 2 | }}}|?Citation#}}&lt;br /&gt;
	|Class=Bilingual version&lt;br /&gt;
	|FrontCoverImg={{#show:{{{ 2 | }}}|?FrontCoverImg#}}&lt;br /&gt;
	|Pubdate={{#show:{{{ 2 | }}}|?Pubdate#}}&lt;br /&gt;
	|TileDescription={{#show:{{{ 2 | }}}|?TileDescription#}}&lt;br /&gt;
	|Description={{#show:{{{ 2 | }}}|?Description#}}&lt;br /&gt;
	|DescriptionTib={{#show:{{{ 2 | }}}|?DescriptionTib#}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
One bilingual edition of a work, as a library row ([[Template:TopicBiblioRow]]), for the&lt;br /&gt;
full-text pages ([[Template:FullTextSubpage]]). Replaces the tile from&lt;br /&gt;
[[Template:GetBilingualTiles]].&lt;br /&gt;
&lt;br /&gt;
Called from an &amp;lt;code&amp;gt;#ask&amp;lt;/code&amp;gt; over Translation Memory basepages with&lt;br /&gt;
&amp;lt;code&amp;gt;?TranslationWikiPage&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;format=template&amp;lt;/code&amp;gt;, so parameter 2 is the&lt;br /&gt;
translation&#039;s page. The row links to its &amp;lt;code&amp;gt;BilingualPage&amp;lt;/code&amp;gt;, and leads with a title&lt;br /&gt;
line (&amp;quot;Bilingual version: …&amp;quot;) above the translation&#039;s citation.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:GetRels&amp;diff=143948</id>
		<title>Module:GetRels</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:GetRels&amp;diff=143948"/>
		<updated>2026-10-05T16:01:44Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Pass FullTitleTib, DescriptionTib to the rows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Configuration&lt;br /&gt;
local RELATIONSHIP_LIMIT = 500&lt;br /&gt;
local FILTER_THRESHOLD_RELS = 5&lt;br /&gt;
local FILTER_THRESHOLD_PAGES = 10&lt;br /&gt;
-- Show the class pills only once there are more rows than this in total.&lt;br /&gt;
local FILTER_THRESHOLD_ROWS = 10&lt;br /&gt;
&lt;br /&gt;
-- Relationship display name mappings&lt;br /&gt;
local REL_NAMES = {&lt;br /&gt;
	-- Not a RelatedTo relationship. Generated from the local TextTopics property&lt;br /&gt;
	-- by fetchTopicOfRelationships, and only ever in one direction, so both&lt;br /&gt;
	-- labels are the same.&lt;br /&gt;
	[&amp;quot;Is a topic of&amp;quot;] = {forward = &#039;A topic of&#039;, inverse = &#039;A topic of&#039;},&lt;br /&gt;
	[&amp;quot;Contains a full translation of&amp;quot;] = {forward = &#039;Full translation of&#039;, inverse = &#039;Full translations&#039;},&lt;br /&gt;
	[&amp;quot;Contains a modern commentary of&amp;quot;] = {forward = &#039;Modern commentary of&#039;, inverse = &#039;Modern commentaries&#039;},&lt;br /&gt;
	[&amp;quot;Contains a partial translation of&amp;quot;] = {forward = &#039;Partial translation of&#039;, inverse = &#039;Partial translations&#039;},&lt;br /&gt;
	[&amp;quot;Contains a translated commentary of&amp;quot;] = {forward = &#039;Translated commentary of&#039;, inverse = &#039;Translated Commentaries&#039;},&lt;br /&gt;
	[&amp;quot;Contains a recension of&amp;quot;] = {forward = &#039;Recension of&#039;, inverse = &#039;Recensions&#039;},&lt;br /&gt;
	[&amp;quot;Contains a review of&amp;quot;] = {forward = &#039;Review of&#039;, inverse = &#039;Reviews&#039;},&lt;br /&gt;
	[&amp;quot;Contains a teaching based on&amp;quot;] = {forward = &#039;Teaching based on&#039;, inverse = &#039;Works containing teachings&#039;},&lt;br /&gt;
	[&amp;quot;Contains a translation of&amp;quot;] = {forward = &#039;Translation of&#039;, inverse = &#039;Translations&#039;},&lt;br /&gt;
	[&amp;quot;Contains polemical content related to&amp;quot;] = {forward = &#039;Polemical content on&#039;, inverse = &#039;Polemical content&#039;},&lt;br /&gt;
	[&amp;quot;Contains scholarship related to&amp;quot;] = {forward = &#039;Scholarship on&#039;, inverse = &#039;Scholarship&#039;},&lt;br /&gt;
	[&amp;quot;Has a title identical or similar to&amp;quot;] = {forward = &#039;Similar title&#039;, inverse = &#039;Similar title&#039;},&lt;br /&gt;
	[&amp;quot;Has other volumes&amp;quot;] = {forward = &#039;Other volumes&#039;, inverse = &#039;Other volumes&#039;},&lt;br /&gt;
	[&amp;quot;Is a book based on this dissertation&amp;quot;] = {forward = &#039;Based on dissertation&#039;, inverse = &#039;Based on dissertation&#039;},&lt;br /&gt;
	[&amp;quot;Is a chapter or a part of&amp;quot;] = {forward = &#039;Chapter or part of&#039;, inverse = &#039;Contains chapter or part&#039;},&lt;br /&gt;
	[&amp;quot;Is a commentary of&amp;quot;] = {forward = &#039;Classical commentary of&#039;, inverse = &#039;Classical commentaries&#039;},&lt;br /&gt;
	[&amp;quot;Is a member of&amp;quot;] = {forward = &#039;Member of&#039;, inverse = &#039;Contains members&#039;},&lt;br /&gt;
	[&amp;quot;Is a reading of&amp;quot;] = {forward = &#039;Reading of&#039;, inverse = &#039;Readings&#039;},&lt;br /&gt;
	[&amp;quot;Is a scholarly presentation about&amp;quot;] = {forward = &#039;Scholarly presentation about&#039;, inverse = &#039;Scholarly presentations&#039;},&lt;br /&gt;
	[&amp;quot;Is a teaching based on&amp;quot;] = {forward = &#039;Teaching on&#039;, inverse = &#039;Teachings&#039;},&lt;br /&gt;
	[&amp;quot;Is cited in&amp;quot;] = {forward = &#039;Cited in&#039;, inverse = &#039;Citations&#039;},&lt;br /&gt;
	[&amp;quot;Is an interview about&amp;quot;] = {forward = &#039;Interview about&#039;, inverse = &#039;Interviews&#039;},&lt;br /&gt;
	[&amp;quot;Is another edition of&amp;quot;] = {forward = &#039;Other editions&#039;, inverse = &#039;Other editions&#039;},&lt;br /&gt;
	[&amp;quot;Is related to&amp;quot;] = {forward = &#039;Related&#039;, inverse = &#039;Related&#039;},&lt;br /&gt;
	[&amp;quot;Shares intertextuality with&amp;quot;] = {forward = &#039;Shares intertextuality&#039;, inverse = &#039;Shares intertextuality&#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Relationship directions (horizontal relationships are symmetric/peer-level)&lt;br /&gt;
-- All others are vertical (hierarchical/directional)&lt;br /&gt;
local HORIZONTAL_RELS = {&lt;br /&gt;
	[&amp;quot;Has other volumes&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Has a title identical or similar to&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Shares intertextuality with&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Is another edition of&amp;quot;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Relationship display priority (lower number = higher priority)&lt;br /&gt;
local REL_PRIORITY = {&lt;br /&gt;
	[&amp;quot;Contains a recension of&amp;quot;] = 1,&lt;br /&gt;
	[&amp;quot;Contains a full translation of&amp;quot;] = 2,&lt;br /&gt;
	[&amp;quot;Contains a translation of&amp;quot;] = 3,&lt;br /&gt;
	[&amp;quot;Is a commentary of&amp;quot;] = 4,&lt;br /&gt;
	[&amp;quot;Contains a modern commentary of&amp;quot;] = 5,&lt;br /&gt;
	[&amp;quot;Contains a translated commentary of&amp;quot;] = 6,&lt;br /&gt;
	[&amp;quot;Contains a partial translation of&amp;quot;] = 7,&lt;br /&gt;
	[&amp;quot;Is another edition of&amp;quot;] = 8,&lt;br /&gt;
	[&amp;quot;Has other volumes&amp;quot;] = 9,&lt;br /&gt;
	[&amp;quot;Has a title identical or similar to&amp;quot;] = 10,&lt;br /&gt;
	[&amp;quot;Is a reading of&amp;quot;] = 11,&lt;br /&gt;
	[&amp;quot;Is a book based on this dissertation&amp;quot;] = 12,&lt;br /&gt;
	[&amp;quot;Is a chapter or a part of&amp;quot;] = 13,&lt;br /&gt;
	[&amp;quot;Is a member of&amp;quot;] = 14,&lt;br /&gt;
	[&amp;quot;Is a teaching based on&amp;quot;] = 15,&lt;br /&gt;
	[&amp;quot;Contains a teaching based on&amp;quot;] = 16,&lt;br /&gt;
	[&amp;quot;Contains a review of&amp;quot;] = 17,&lt;br /&gt;
	[&amp;quot;Is cited in&amp;quot;] = 18,&lt;br /&gt;
	[&amp;quot;Contains scholarship related to&amp;quot;] = 19,&lt;br /&gt;
	[&amp;quot;Is a scholarly presentation about&amp;quot;] = 20,&lt;br /&gt;
	[&amp;quot;Is an interview about&amp;quot;] = 21,&lt;br /&gt;
	[&amp;quot;Shares intertextuality with&amp;quot;] = 22,&lt;br /&gt;
	[&amp;quot;Is related to&amp;quot;] = 23,&lt;br /&gt;
	[&amp;quot;Contains polemical content related to&amp;quot;] = 24,&lt;br /&gt;
	-- TextTopics is not one of the RelatedTo relationships; it is a separate&lt;br /&gt;
	-- local property. It is listed last so it reads as broader context after the&lt;br /&gt;
	-- specific bibliographic relationships above.&lt;br /&gt;
	[&amp;quot;Is a topic of&amp;quot;] = 25&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Classification to namespace mapping&lt;br /&gt;
local CLASS_NAMESPACE = {&lt;br /&gt;
	[&#039;Articles&#039;] = &#039;Articles&#039;,&lt;br /&gt;
	[&#039;Books&#039;] = &#039;Books&#039;,&lt;br /&gt;
	[&#039;Classical Works&#039;] = &#039;Texts&#039;,&lt;br /&gt;
	[&#039;Dissertations&#039;] = &#039;Books&#039;,&lt;br /&gt;
	[&#039;Multimedia&#039;] = &#039;Media&#039;,&lt;br /&gt;
	[&#039;Periodical Issues&#039;] = &#039;Books&#039;,&lt;br /&gt;
	[&#039;Sanskrit Publications&#039;] = &#039;Books&#039;,&lt;br /&gt;
	[&#039;Tibetan Publications&#039;] = &#039;Books&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Check if a relationship is horizontal (symmetric)&lt;br /&gt;
local function isHorizontalRelationship(rel)&lt;br /&gt;
	return HORIZONTAL_RELS[rel] == true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Fetch outgoing relationships for a page (page has property pointing to other pages)&lt;br /&gt;
-- Single query fetches all relationship properties at once instead of one query per property.&lt;br /&gt;
-- limit=1 restricts to 1 subject row (pageA itself); multi-valued properties are returned in full&lt;br /&gt;
-- regardless of the row limit, so RELATIONSHIP_LIMIT no longer applies here.&lt;br /&gt;
local function fetchOutgoingRelationships(pageA)&lt;br /&gt;
	local queryArgs = { &#039;[[&#039; .. pageA .. &#039;]]&#039;, limit = 1 }&lt;br /&gt;
	for relName, _ in pairs(REL_NAMES) do&lt;br /&gt;
		-- Use ?#- operator to get unlinked (plain text) values&lt;br /&gt;
		table.insert(queryArgs, &#039;?&#039; .. relName .. &#039;#-&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local query = mw.smw.ask(queryArgs)&lt;br /&gt;
	if not query or not query[1] then return nil end&lt;br /&gt;
&lt;br /&gt;
	local results = {}&lt;br /&gt;
	local row = query[1]&lt;br /&gt;
	for relName, _ in pairs(REL_NAMES) do&lt;br /&gt;
		local targets = row[relName]&lt;br /&gt;
		if targets then&lt;br /&gt;
			-- Handle both single value and table of values&lt;br /&gt;
			if type(targets) == &#039;table&#039; then&lt;br /&gt;
				for _, target in ipairs(targets) do&lt;br /&gt;
					table.insert(results, {Relationship = relName, RelatedTo = target})&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(results, {Relationship = relName, RelatedTo = targets})&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return #results &amp;gt; 0 and results or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Fetch incoming relationships (other pages have property pointing to this page).&lt;br /&gt;
-- Also fetches Classification, Display title of, MediaSeries, Volumenumber, and tile fields for&lt;br /&gt;
-- each result row so that downstream checks (isLibraryItem, isMultiVolumeSeries, buildPageLink,&lt;br /&gt;
-- generateTile) can use the cached data instead of issuing additional per-page queries.&lt;br /&gt;
local function fetchIncomingRelationships(pageA, pageFull)&lt;br /&gt;
	local results = {}&lt;br /&gt;
&lt;br /&gt;
	-- Match either the bare or the full title. Relationship properties store the&lt;br /&gt;
	-- full title, but accepting both keeps this working for pages that are not&lt;br /&gt;
	-- subpages, and for any entry recorded the other way round.&lt;br /&gt;
	local target = pageA&lt;br /&gt;
	if pageFull and pageFull ~= pageA then&lt;br /&gt;
		target = pageA .. &#039;||&#039; .. pageFull&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for relName, _ in pairs(REL_NAMES) do&lt;br /&gt;
		local query = mw.smw.ask{&lt;br /&gt;
			&#039;[[&#039; .. relName .. &#039;::&#039; .. target .. &#039;]]&#039;,&lt;br /&gt;
			&#039;?#-=Page&#039;,&lt;br /&gt;
			&#039;?Classification=Classification&#039;,&lt;br /&gt;
			&#039;?Display title of=Title&#039;,&lt;br /&gt;
			&#039;?MediaSeries=MediaSeries&#039;,&lt;br /&gt;
			&#039;?Volumenumber=Volumenumber&#039;,&lt;br /&gt;
			&#039;?Class=Class&#039;,&lt;br /&gt;
			&#039;?TileDescription=TileDescription&#039;,&lt;br /&gt;
			&#039;?TileImageUrl=TileImageUrl&#039;,&lt;br /&gt;
			&#039;?Citation=Citation&#039;,&lt;br /&gt;
			&#039;?Pubdate=Pubdate&#039;,&lt;br /&gt;
			&#039;?FrontCoverImg#=FrontCoverImg&#039;,&lt;br /&gt;
			&#039;?BcaAuthor#=BcaAuthor&#039;,&lt;br /&gt;
			&#039;?Description=Description&#039;,&lt;br /&gt;
			&#039;?FullTitleTib=FullTitleTib&#039;,&lt;br /&gt;
			&#039;?DescriptionTib=DescriptionTib&#039;,&lt;br /&gt;
			&#039;?TileLabel=TileLabel&#039;,&lt;br /&gt;
			limit = RELATIONSHIP_LIMIT&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if query then&lt;br /&gt;
			for _, row in ipairs(query) do&lt;br /&gt;
				local sourcePage = row.Page&lt;br /&gt;
				if sourcePage then&lt;br /&gt;
					table.insert(results, {&lt;br /&gt;
						Page           = sourcePage,&lt;br /&gt;
						Relationship   = relName,&lt;br /&gt;
						RelatedTo      = pageA,&lt;br /&gt;
							Classification = row.Classification,&lt;br /&gt;
						Title          = row.Title,&lt;br /&gt;
						MediaSeries    = row.MediaSeries,&lt;br /&gt;
						Volumenumber   = row.Volumenumber,&lt;br /&gt;
						Class          = row.Class,&lt;br /&gt;
						TileDescription = row.TileDescription,&lt;br /&gt;
						TileImageUrl   = row.TileImageUrl,&lt;br /&gt;
						Citation     = row.Citation,&lt;br /&gt;
						Pubdate      = row.Pubdate,&lt;br /&gt;
						FrontCoverImg = row.FrontCoverImg,&lt;br /&gt;
						BcaAuthor    = row.BcaAuthor,&lt;br /&gt;
						Description  = row.Description,&lt;br /&gt;
						FullTitleTib   = row.FullTitleTib,&lt;br /&gt;
						DescriptionTib = row.DescriptionTib,&lt;br /&gt;
						TileLabel      = row.TileLabel,&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return #results &amp;gt; 0 and results or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Build a lookup table of page metadata from the outgoing targets.&lt;br /&gt;
-- Fetches all fields needed for tile rendering plus library/series checks,&lt;br /&gt;
-- for all outgoing target pages in a single query, keyed by plain page name.&lt;br /&gt;
local function fetchOutgoingPageData(targets)&lt;br /&gt;
	if not targets or #targets == 0 then return {} end&lt;br /&gt;
&lt;br /&gt;
	-- Build OR condition: [[PageA]]OR[[PageB]]OR...&lt;br /&gt;
	local conditions = {}&lt;br /&gt;
	for _, page in ipairs(targets) do&lt;br /&gt;
		table.insert(conditions, &#039;[[&#039; .. page .. &#039;]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local query = mw.smw.ask{&lt;br /&gt;
		table.concat(conditions, &#039;OR&#039;),&lt;br /&gt;
		&#039;?#-=Page&#039;,&lt;br /&gt;
		&#039;?Classification=Classification&#039;,&lt;br /&gt;
		&#039;?Display title of=Title&#039;,&lt;br /&gt;
		&#039;?MediaSeries=MediaSeries&#039;,&lt;br /&gt;
		&#039;?Volumenumber=Volumenumber&#039;,&lt;br /&gt;
		&#039;?Class=Class&#039;,&lt;br /&gt;
		&#039;?TileDescription=TileDescription&#039;,&lt;br /&gt;
		&#039;?TileImageUrl=TileImageUrl&#039;,&lt;br /&gt;
		&#039;?Citation=Citation&#039;,&lt;br /&gt;
		&#039;?Pubdate=Pubdate&#039;,&lt;br /&gt;
		&#039;?FrontCoverImg#=FrontCoverImg&#039;,&lt;br /&gt;
		&#039;?BcaAuthor#=BcaAuthor&#039;,&lt;br /&gt;
		&#039;?Description=Description&#039;,&lt;br /&gt;
		&#039;?FullTitleTib=FullTitleTib&#039;,&lt;br /&gt;
		&#039;?DescriptionTib=DescriptionTib&#039;,&lt;br /&gt;
		&#039;?TileLabel=TileLabel&#039;,&lt;br /&gt;
		limit = #targets&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local cache = {}&lt;br /&gt;
	if query then&lt;br /&gt;
		for _, row in ipairs(query) do&lt;br /&gt;
			if row.Page then&lt;br /&gt;
				cache[row.Page] = {&lt;br /&gt;
					Classification = row.Classification,&lt;br /&gt;
					Title          = row.Title,&lt;br /&gt;
					MediaSeries    = row.MediaSeries,&lt;br /&gt;
					Volumenumber   = row.Volumenumber,&lt;br /&gt;
					Class          = row.Class,&lt;br /&gt;
					TileDescription = row.TileDescription,&lt;br /&gt;
					TileImageUrl   = row.TileImageUrl,&lt;br /&gt;
					Citation     = row.Citation,&lt;br /&gt;
					Pubdate      = row.Pubdate,&lt;br /&gt;
					FrontCoverImg = row.FrontCoverImg,&lt;br /&gt;
					BcaAuthor    = row.BcaAuthor,&lt;br /&gt;
					Description  = row.Description,&lt;br /&gt;
					FullTitleTib   = row.FullTitleTib,&lt;br /&gt;
					DescriptionTib = row.DescriptionTib,&lt;br /&gt;
					TileLabel      = row.TileLabel,&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return cache&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Check if page is a Library Item using pre-fetched metadata.&lt;br /&gt;
-- A page with a Classification value is a Library Item on this wiki.&lt;br /&gt;
-- Falls back to a targeted SMW query only when Classification is absent, which handles&lt;br /&gt;
-- Classical Works stored under a Texts/ prefix or linked via the KeyTextPage property.&lt;br /&gt;
local function isLibraryItem(page, cachedData)&lt;br /&gt;
	local classification = cachedData and cachedData.Classification&lt;br /&gt;
	if type(classification) == &#039;table&#039; then classification = classification[1] end&lt;br /&gt;
	if classification and classification ~= &#039;&#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Fallback for pages not found in cache (Texts/ prefix or KeyTextPage variants)&lt;br /&gt;
	local fallback = mw.smw.ask{&lt;br /&gt;
		&#039;[[Category:Library Items]][[Texts/&#039; .. page .. &#039;]]OR[[Category:Library Items]][[KeyTextPage::&#039; .. page .. &#039;]]&#039;,&lt;br /&gt;
		limit = 1&lt;br /&gt;
	}&lt;br /&gt;
	return fallback ~= nil and #fallback &amp;gt; 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Check if page is a multi-volume series using pre-fetched data.&lt;br /&gt;
local function isMultiVolumeSeries(cachedData)&lt;br /&gt;
	if not cachedData then return false end&lt;br /&gt;
	local hasSeries = cachedData.MediaSeries and cachedData.MediaSeries ~= &#039;&#039;&lt;br /&gt;
	local vol = cachedData.Volumenumber&lt;br /&gt;
	local volNum = type(vol) == &#039;table&#039; and tonumber(vol[1]) or tonumber(vol)&lt;br /&gt;
	return hasSeries and volNum and volNum &amp;gt; 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Build page link with namespace using pre-fetched metadata.&lt;br /&gt;
local function buildPageLink(page, cachedData)&lt;br /&gt;
	local classification = cachedData and cachedData.Classification&lt;br /&gt;
	local title = cachedData and cachedData.Title&lt;br /&gt;
&lt;br /&gt;
	-- Classification may be a table if multi-valued (take first)&lt;br /&gt;
	if type(classification) == &#039;table&#039; then classification = classification[1] end&lt;br /&gt;
	if type(title) == &#039;table&#039; then title = title[1] end&lt;br /&gt;
&lt;br /&gt;
	local pagename = (title and title ~= &#039;&#039;) and title or page&lt;br /&gt;
	-- Remove RKTS identifiers&lt;br /&gt;
	pagename = string.gsub(pagename, &#039;%s?%(RKTS%w?%s?%d*%)&#039;, &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
	local namespace = CLASS_NAMESPACE[classification] or classification or &#039;&#039;&lt;br /&gt;
	if namespace ~= &#039;&#039; then&lt;br /&gt;
		return namespace .. &#039;/&#039; .. pagename&lt;br /&gt;
	end&lt;br /&gt;
	return pagename&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Remove duplicates from indexed table&lt;br /&gt;
local function makeTableUnique(tbl)&lt;br /&gt;
	local seen = {}&lt;br /&gt;
	local result = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, value in ipairs(tbl) do&lt;br /&gt;
		if not seen[value] then&lt;br /&gt;
			seen[value] = true&lt;br /&gt;
			table.insert(result, value)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Split string by delimiter&lt;br /&gt;
local function splitString(str, delimiter)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for match in string.gmatch(str, &amp;quot;([^&amp;quot; .. delimiter .. &amp;quot;]+)&amp;quot;) do&lt;br /&gt;
		table.insert(result, match)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Get display name for relationship&lt;br /&gt;
local function getRelationshipName(rel, direction)&lt;br /&gt;
	if REL_NAMES[rel] then&lt;br /&gt;
		return direction == &#039;forward&#039; and REL_NAMES[rel].forward or REL_NAMES[rel].inverse&lt;br /&gt;
	end&lt;br /&gt;
	return rel&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Process outgoing relationships&lt;br /&gt;
local function processOutgoingRelationships(frame, data, allRels)&lt;br /&gt;
	if not data then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, item in ipairs(data) do&lt;br /&gt;
		local rel = item.Relationship&lt;br /&gt;
&lt;br /&gt;
		if not allRels[rel] then&lt;br /&gt;
			allRels[rel] = {}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if allRels[rel].right then&lt;br /&gt;
			allRels[rel].right = allRels[rel].right .. &#039;~&#039; .. item.RelatedTo&lt;br /&gt;
		else&lt;br /&gt;
			allRels[rel].right = item.RelatedTo&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Process incoming relationships.&lt;br /&gt;
-- pageCache receives pre-fetched metadata keyed by plain page name.&lt;br /&gt;
-- Incoming page metadata (fetched inline) is written into pageCache here so that&lt;br /&gt;
-- generateRelationshipSection can look it up by page name later.&lt;br /&gt;
local function processIncomingRelationships(frame, data, allRels, pageA, pageCache)&lt;br /&gt;
	if not data then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, item in ipairs(data) do&lt;br /&gt;
		local pageB = frame:preprocess(&#039;{{PAGENAME:&#039; .. item.Page .. &#039;}}&#039;)&lt;br /&gt;
		local rel = item.Relationship&lt;br /&gt;
&lt;br /&gt;
		if not allRels[rel] then&lt;br /&gt;
			allRels[rel] = {}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Build cachedData from inline fields; fall back to pageCache entry if sparse&lt;br /&gt;
		local cachedData = {&lt;br /&gt;
			Classification  = item.Classification,&lt;br /&gt;
			Title           = item.Title,&lt;br /&gt;
			MediaSeries     = item.MediaSeries,&lt;br /&gt;
			Volumenumber    = item.Volumenumber,&lt;br /&gt;
			Class           = item.Class,&lt;br /&gt;
			TileDescription = item.TileDescription,&lt;br /&gt;
			TileImageUrl    = item.TileImageUrl,&lt;br /&gt;
			FullTitleTib    = item.FullTitleTib,&lt;br /&gt;
			DescriptionTib  = item.DescriptionTib,&lt;br /&gt;
			TileLabel       = item.TileLabel,&lt;br /&gt;
			-- Row fields. This table is rebuilt field by field rather than&lt;br /&gt;
			-- copied, so anything added to the queries must be listed here too&lt;br /&gt;
			-- or it is silently dropped before it reaches the row.&lt;br /&gt;
			Citation        = item.Citation,&lt;br /&gt;
			Pubdate         = item.Pubdate,&lt;br /&gt;
			FrontCoverImg   = item.FrontCoverImg,&lt;br /&gt;
			BcaAuthor       = item.BcaAuthor,&lt;br /&gt;
			Description     = item.Description,&lt;br /&gt;
		}&lt;br /&gt;
		if not cachedData.Classification and pageCache[pageB] then&lt;br /&gt;
			cachedData = pageCache[pageB]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Store in pageCache so generateRelationshipSection can find it by name&lt;br /&gt;
		if not pageCache[pageB] then&lt;br /&gt;
			pageCache[pageB] = cachedData&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Skip if this is part of a multi-volume series (uses cached data, no extra query)&lt;br /&gt;
		if not isMultiVolumeSeries(cachedData) then&lt;br /&gt;
			if not isHorizontalRelationship(rel) then&lt;br /&gt;
				if allRels[rel].left then&lt;br /&gt;
					allRels[rel].left = allRels[rel].left .. &#039;~&#039; .. pageB&lt;br /&gt;
				else&lt;br /&gt;
					allRels[rel].left = pageB&lt;br /&gt;
				end&lt;br /&gt;
			elseif not allRels[rel].right then&lt;br /&gt;
				-- Horizontal relationships are symmetric. Only use the incoming pass as a fallback&lt;br /&gt;
				-- when the outgoing pass found nothing (i.e. the property is only set on page B side).&lt;br /&gt;
				allRels[rel].right = pageB&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Check if filters are needed&lt;br /&gt;
local function shouldShowFilters(allRels)&lt;br /&gt;
	local relCount = 0&lt;br /&gt;
	for _ in pairs(allRels) do&lt;br /&gt;
		relCount = relCount + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if relCount &amp;gt; FILTER_THRESHOLD_RELS then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, dirs in pairs(allRels) do&lt;br /&gt;
		for _, pages in pairs(dirs) do&lt;br /&gt;
			local pageCount = 0&lt;br /&gt;
			for _ in string.gmatch(pages, &amp;quot;([^~]+)&amp;quot;) do&lt;br /&gt;
				pageCount = pageCount + 1&lt;br /&gt;
			end&lt;br /&gt;
			if pageCount &amp;gt; FILTER_THRESHOLD_PAGES then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Generate filter widgets&lt;br /&gt;
local function generateFilters(frame)&lt;br /&gt;
	local filterRels = frame:callParserFunction{&lt;br /&gt;
		name = &#039;#widget&#039;,&lt;br /&gt;
		args = {&lt;br /&gt;
			&#039;FilterRelationships&#039;,&lt;br /&gt;
			id = &#039;Relationships&#039;,&lt;br /&gt;
			placeholder = &#039;Filter by relationships...&#039;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local filterPages = frame:callParserFunction{&lt;br /&gt;
		name = &#039;#widget&#039;,&lt;br /&gt;
		args = {&lt;br /&gt;
			&#039;FilterRelationships&#039;,&lt;br /&gt;
			id = &#039;Pages&#039;,&lt;br /&gt;
			placeholder = &#039;Filter by pages found...&#039;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;col-sm-6&amp;quot;&amp;gt;&#039; .. filterRels .. &#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-sm-6&amp;quot;&amp;gt;&#039; .. filterPages .. &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Generate tile for existing page using pre-fetched cached data.&lt;br /&gt;
-- Calls RelationshipTile directly, bypassing the RelTileQuery #ask entirely.&lt;br /&gt;
local function generateTile(frame, page, cachedData)&lt;br /&gt;
	local function firstVal(v)&lt;br /&gt;
		if type(v) == &#039;table&#039; then return v[1] or &#039;&#039; end&lt;br /&gt;
		return v or &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Rendered with TopicBiblioRow, the same row used on topic pages and for the&lt;br /&gt;
	-- Explore section above, so a work looks the same wherever it is met.&lt;br /&gt;
	--&lt;br /&gt;
	-- The row falls back Citation -&amp;gt; Title -&amp;gt; page name, so entries with no&lt;br /&gt;
	-- citation still read correctly, and it does its own reverse&lt;br /&gt;
	-- AssociatedArticle lookup for narration. Nothing here needs to know about&lt;br /&gt;
	-- either.&lt;br /&gt;
	return frame:expandTemplate{&lt;br /&gt;
		title = &#039;TopicBiblioRow&#039;,&lt;br /&gt;
		args = {&lt;br /&gt;
			[1]             = page,&lt;br /&gt;
			Citation        = firstVal(cachedData and cachedData.Citation),&lt;br /&gt;
			BcaAuthor       = firstVal(cachedData and cachedData.BcaAuthor),&lt;br /&gt;
			Title           = firstVal(cachedData and cachedData.Title),&lt;br /&gt;
			Class           = firstVal(cachedData and cachedData.Class),&lt;br /&gt;
			Pubdate         = firstVal(cachedData and cachedData.Pubdate),&lt;br /&gt;
			FrontCoverImg   = firstVal(cachedData and cachedData.FrontCoverImg),&lt;br /&gt;
			TileDescription = firstVal(cachedData and cachedData.TileDescription),&lt;br /&gt;
			Description     = firstVal(cachedData and cachedData.Description),&lt;br /&gt;
			FullTitleTib    = firstVal(cachedData and cachedData.FullTitleTib),&lt;br /&gt;
			DescriptionTib  = firstVal(cachedData and cachedData.DescriptionTib),&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Generate tile for non-existent page&lt;br /&gt;
local function generateNoExistTile(frame, page, cachedData)&lt;br /&gt;
	local pageLink = buildPageLink(page, cachedData)&lt;br /&gt;
	&lt;br /&gt;
	local parts = {&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;col-md-6 mb-3 mb-md-4 filterable&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;tsdwiki-pop-off tsdwiki-tile tsdwiki-tile-library&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;tsdwiki-tile-library-content&amp;quot; style=&amp;quot;flex: 0 0 100%; max-width: 100%;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;h4 mb-2 p-0 clipped-2-lines border-0 text-140 line13 carnelian&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		pageLink,&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;text-muted clipped-3-lines unclamp-here carnelian&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;b&amp;gt;PAGE MISSING!&amp;lt;/b&amp;gt; Please click to create this library item or the redirect that is missing to direct it to the appropriate page.&#039;,&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;div class=&amp;quot;mt-1 mb-0 clipped-1-line carnelian font-italic text-right&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		&#039;Click to create &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-rectangle-history-circle-plus&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&#039;,&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
		&#039;{{NoExistTileLink|pageLink=&#039; .. pageLink .. &#039;}}&#039;,&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
		&#039;[[Category:Pages with red relationship tiles]]&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return frame:preprocess(table.concat(parts))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Generate output for a relationship section.&lt;br /&gt;
-- pageCache is a lookup table of pre-fetched metadata keyed by plain page name.&lt;br /&gt;
-- Works that name this page as a topic, via the local TextTopics property.&lt;br /&gt;
--&lt;br /&gt;
-- This is not a RelatedTo relationship, so it is fetched separately, but the&lt;br /&gt;
-- rows carry the same printouts as fetchIncomingRelationships so they can be&lt;br /&gt;
-- rendered by the same tile code and appear as one more section.&lt;br /&gt;
local function fetchTopicOfRelationships(pageA)&lt;br /&gt;
	local query = mw.smw.ask{&lt;br /&gt;
		&#039;[[TextTopics::&#039; .. pageA .. &#039;]]&#039;,&lt;br /&gt;
		&#039;?#-=Page&#039;,&lt;br /&gt;
		&#039;?Classification=Classification&#039;,&lt;br /&gt;
		&#039;?Display title of=Title&#039;,&lt;br /&gt;
		&#039;?MediaSeries=MediaSeries&#039;,&lt;br /&gt;
		&#039;?Volumenumber=Volumenumber&#039;,&lt;br /&gt;
		&#039;?Class=Class&#039;,&lt;br /&gt;
		&#039;?TileDescription=TileDescription&#039;,&lt;br /&gt;
		&#039;?TileImageUrl=TileImageUrl&#039;,&lt;br /&gt;
		&#039;?Citation=Citation&#039;,&lt;br /&gt;
		&#039;?Pubdate=Pubdate&#039;,&lt;br /&gt;
		&#039;?FrontCoverImg#=FrontCoverImg&#039;,&lt;br /&gt;
		&#039;?BcaAuthor#=BcaAuthor&#039;,&lt;br /&gt;
		&#039;?Description=Description&#039;,&lt;br /&gt;
		&#039;?FullTitleTib=FullTitleTib&#039;,&lt;br /&gt;
		&#039;?DescriptionTib=DescriptionTib&#039;,&lt;br /&gt;
		&#039;?TileLabel=TileLabel&#039;,&lt;br /&gt;
		limit = RELATIONSHIP_LIMIT&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if not query then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local results = {}&lt;br /&gt;
	for _, row in ipairs(query) do&lt;br /&gt;
		if row.Page then&lt;br /&gt;
			table.insert(results, {&lt;br /&gt;
				Page            = row.Page,&lt;br /&gt;
				Relationship    = &#039;Is a topic of&#039;,&lt;br /&gt;
				RelatedTo       = pageA,&lt;br /&gt;
				Classification  = row.Classification,&lt;br /&gt;
				Title           = row.Title,&lt;br /&gt;
				MediaSeries     = row.MediaSeries,&lt;br /&gt;
				Volumenumber    = row.Volumenumber,&lt;br /&gt;
				Class           = row.Class,&lt;br /&gt;
				TileDescription = row.TileDescription,&lt;br /&gt;
				TileImageUrl    = row.TileImageUrl,&lt;br /&gt;
				Citation     = row.Citation,&lt;br /&gt;
				Pubdate      = row.Pubdate,&lt;br /&gt;
				FrontCoverImg = row.FrontCoverImg,&lt;br /&gt;
				BcaAuthor    = row.BcaAuthor,&lt;br /&gt;
				Description  = row.Description,&lt;br /&gt;
				FullTitleTib    = row.FullTitleTib,&lt;br /&gt;
				DescriptionTib  = row.DescriptionTib,&lt;br /&gt;
				TileLabel       = row.TileLabel,&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #results == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return results&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function: Build the controls shown above the sections — a text&lt;br /&gt;
-- filter and, when there is more than one class, the class pills.&lt;br /&gt;
--&lt;br /&gt;
-- Same markup and same behaviour as the pills on topic pages: tws.js keys on&lt;br /&gt;
-- .topic-biblio-pill and matches data-filter-class against each row&#039;s&lt;br /&gt;
-- data-class, so nothing extra is needed on the JS side.&lt;br /&gt;
--&lt;br /&gt;
-- Only worth showing when there is enough to filter. Below the threshold the&lt;br /&gt;
-- reader can already see everything, and a row of pills would be more clutter&lt;br /&gt;
-- than help.&lt;br /&gt;
local function generateControls(frame, classTally)&lt;br /&gt;
	local total = classTally.__total or 0&lt;br /&gt;
	if total &amp;lt;= FILTER_THRESHOLD_ROWS then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Ordered, not alphabetical: Editorial Content first, matching topic pages,&lt;br /&gt;
	-- then the rest in a stable reading order. Anything not listed follows,&lt;br /&gt;
	-- sorted, so a new Class still appears without a code change.&lt;br /&gt;
	local ORDER = {&#039;Editorial Content&#039;, &#039;Books&#039;, &#039;Articles&#039;, &#039;Classical Works&#039;,&lt;br /&gt;
		&#039;Multimedia&#039;, &#039;Dissertations&#039;, &#039;Tibetan Publications&#039;, &#039;Sanskrit Publications&#039;,&lt;br /&gt;
		&#039;Periodical Issues&#039;}&lt;br /&gt;
	local seen, ordered = {}, {}&lt;br /&gt;
	for _, cls in ipairs(ORDER) do&lt;br /&gt;
		if classTally[cls] then&lt;br /&gt;
			table.insert(ordered, cls)&lt;br /&gt;
			seen[cls] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local rest = {}&lt;br /&gt;
	for cls in pairs(classTally) do&lt;br /&gt;
		if cls ~= &#039;__total&#039; and not seen[cls] then&lt;br /&gt;
			table.insert(rest, cls)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rest)&lt;br /&gt;
	for _, cls in ipairs(rest) do&lt;br /&gt;
		table.insert(ordered, cls)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Fewer than two classes means the pills would be pointless — &amp;quot;All&amp;quot; and the&lt;br /&gt;
	-- one class filter to the same set — but the text field is still worth&lt;br /&gt;
	-- having, so only the pill row is dropped, not the whole control bar.&lt;br /&gt;
	local showPills = #ordered &amp;gt;= 2&lt;br /&gt;
&lt;br /&gt;
	-- No newline before the first pill. MediaWiki wraps a run that starts on its&lt;br /&gt;
	-- own line in a &amp;lt;p&amp;gt;, which then becomes the only flex child and collapses&lt;br /&gt;
	-- the pill spacing. Same trap as on the topic page template.&lt;br /&gt;
	local out = {&#039;&amp;lt;div class=&amp;quot;topic-biblio-controls&amp;quot;&amp;gt;&#039;}&lt;br /&gt;
&lt;br /&gt;
	-- Text filter. The widget emits the same .filter-input the rest of the wiki&lt;br /&gt;
	-- uses, and tws.js already handles it: it matches accent-insensitively over&lt;br /&gt;
	-- each .filterable row&#039;s text, highlights the hits, and re-applies the class&lt;br /&gt;
	-- filter afterwards so the two controls compose instead of fighting.&lt;br /&gt;
	-- Plain wrapper, not a Bootstrap .row: the grid&#039;s negative x-margins have no&lt;br /&gt;
	-- container here to absorb them and push out a horizontal scrollbar. Width&lt;br /&gt;
	-- and centring are done in CSS instead.&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;div class=&amp;quot;topic-biblio-filter&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	table.insert(out, frame:callParserFunction{&lt;br /&gt;
		name = &#039;#widget&#039;,&lt;br /&gt;
		args = {&lt;br /&gt;
			&#039;filterInput&#039;,&lt;br /&gt;
			placeholder = &#039;Filter &#039; .. total .. &#039; related works...&#039;&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
	if showPills then&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;div class=&amp;quot;topic-biblio-pills&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill is-active&amp;quot; data-filter-class=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039;&lt;br /&gt;
			.. total .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
		for _, cls in ipairs(ordered) do&lt;br /&gt;
			table.insert(out, &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&amp;quot; data-filter-class=&amp;quot;&#039; .. cls .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
				.. cls .. &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; .. classTally[cls] .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function generateRelationshipSection(frame, rel, dir, pages, pageCache, classTally)&lt;br /&gt;
	-- Determine display name&lt;br /&gt;
	local relName = getRelationshipName(rel, dir == &#039;left&#039; and &#039;inverse&#039; or &#039;forward&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Process pages, collecting only existing ones&lt;br /&gt;
	local pagesList = makeTableUnique(splitString(pages, &#039;~&#039;))&lt;br /&gt;
	local tiles = {}&lt;br /&gt;
&lt;br /&gt;
	for _, page in ipairs(pagesList) do&lt;br /&gt;
		local cachedData = pageCache[page]&lt;br /&gt;
		if isLibraryItem(page, cachedData) then&lt;br /&gt;
			-- Page exists on this wiki — render tile directly from cached data, no extra query&lt;br /&gt;
			table.insert(tiles, generateTile(frame, page, cachedData))&lt;br /&gt;
			-- Tally the class for the filter pills. Counted here, from what is&lt;br /&gt;
			-- actually rendered, so a pill can never claim more than is shown.&lt;br /&gt;
			-- A work can appear under several relationships, so this counts row&lt;br /&gt;
			-- instances rather than distinct works — which is what the pills&lt;br /&gt;
			-- filter over.&lt;br /&gt;
			if classTally then&lt;br /&gt;
				local cls = cachedData and cachedData.Class&lt;br /&gt;
				if type(cls) == &#039;table&#039; then cls = cls[1] end&lt;br /&gt;
				if cls and cls ~= &#039;&#039; then&lt;br /&gt;
					classTally[cls] = (classTally[cls] or 0) + 1&lt;br /&gt;
					classTally.__total = (classTally.__total or 0) + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		-- else&lt;br /&gt;
		-- 	-- Page not found on this wiki — show red &amp;quot;PAGE MISSING&amp;quot; tile&lt;br /&gt;
		-- 	table.insert(tiles, generateNoExistTile(frame, page, cachedData))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Hide entire section if no related pages exist on this wiki&lt;br /&gt;
	if #tiles == 0 then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Count comes from #tiles rather than #pagesList, so it reflects what is&lt;br /&gt;
	-- actually rendered. Pages that do not exist on this wiki are filtered out&lt;br /&gt;
	-- above, and a heading claiming more items than are shown would be wrong.&lt;br /&gt;
	-- topic-biblio-section / -list, not the old Bootstrap grid: these are the&lt;br /&gt;
	-- full-width rows used on topic pages, not two-column tiles. The grid&#039;s&lt;br /&gt;
	-- own &amp;quot;row&amp;quot; class would also collide with .topic-biblio-row.&lt;br /&gt;
	-- No .filterableContent here: one wrapper spans every section (see main),&lt;br /&gt;
	-- so the text filter reaches all rows rather than only the section it sits in.&lt;br /&gt;
	local output = {&#039;&amp;lt;div class=&amp;quot;clearfix topic-biblio-section&amp;quot;&amp;gt;&#039;}&lt;br /&gt;
	table.insert(output, &#039;&amp;lt;div class=&amp;quot;h4 mx-3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; .. #tiles ..&lt;br /&gt;
		&#039;&amp;lt;/span&amp;gt; &#039; .. relName .. &#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	for _, tile in ipairs(tiles) do&lt;br /&gt;
		table.insert(output, tile)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main function&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- Get current page name.&lt;br /&gt;
	--&lt;br /&gt;
	-- Two forms are needed, because the two property families on this wiki store&lt;br /&gt;
	-- their targets differently. The relationship properties store the FULL page&lt;br /&gt;
	-- title (Texts/Bodhipathapradīpa) while TextTopics stores the BARE subpage&lt;br /&gt;
	-- name (Bodhipathapradīpa). Querying only the bare form, as this module used&lt;br /&gt;
	-- to, made every relationship section come back empty on a subpage while&lt;br /&gt;
	-- &amp;quot;A topic of&amp;quot; still worked — which read as the topic section crowding the&lt;br /&gt;
	-- others out, when in fact the others were never being found.&lt;br /&gt;
	local pageA = mw.title.getCurrentTitle().subpageText&lt;br /&gt;
	local pageFull = mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
&lt;br /&gt;
	-- Fetch relationships using local SMW queries&lt;br /&gt;
	local outgoingRels = fetchOutgoingRelationships(pageA)&lt;br /&gt;
	local incomingRels = fetchIncomingRelationships(pageA, pageFull)&lt;br /&gt;
	local topicOfRels  = fetchTopicOfRelationships(pageA)&lt;br /&gt;
&lt;br /&gt;
	-- Return empty if nothing relates to this page at all&lt;br /&gt;
	if not outgoingRels and not incomingRels and not topicOfRels then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Collect all unique outgoing target page names so we can batch-fetch their metadata.&lt;br /&gt;
	-- Incoming results already carry inline metadata from fetchIncomingRelationships.&lt;br /&gt;
	local outgoingTargets = {}&lt;br /&gt;
	local seenTargets = {}&lt;br /&gt;
	if outgoingRels then&lt;br /&gt;
		for _, item in ipairs(outgoingRels) do&lt;br /&gt;
			if not seenTargets[item.RelatedTo] then&lt;br /&gt;
				seenTargets[item.RelatedTo] = true&lt;br /&gt;
				table.insert(outgoingTargets, item.RelatedTo)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- One query for all outgoing targets: Classification, Display title, MediaSeries, Volumenumber, tile fields&lt;br /&gt;
	local pageCache = fetchOutgoingPageData(outgoingTargets)&lt;br /&gt;
&lt;br /&gt;
	-- Organize relationships (incoming metadata comes inline; outgoing uses pageCache)&lt;br /&gt;
	local allRels = {}&lt;br /&gt;
	processOutgoingRelationships(frame, outgoingRels, allRels)&lt;br /&gt;
	processIncomingRelationships(frame, incomingRels, allRels, pageA, pageCache)&lt;br /&gt;
	-- TextTopics rows carry the same fields as incoming rows, so they go through&lt;br /&gt;
	-- the same processor and land in allRels as one more relationship.&lt;br /&gt;
	processIncomingRelationships(frame, topicOfRels, allRels, pageA, pageCache)&lt;br /&gt;
&lt;br /&gt;
	-- Build output&lt;br /&gt;
	local output = {}&lt;br /&gt;
&lt;br /&gt;
	-- -- Add filters if needed&lt;br /&gt;
	-- if shouldShowFilters(allRels) then&lt;br /&gt;
	-- 	table.insert(output, generateFilters(frame))&lt;br /&gt;
	-- end&lt;br /&gt;
&lt;br /&gt;
	-- Sort relationships by priority&lt;br /&gt;
	local sortedRels = {}&lt;br /&gt;
	for rel, _ in pairs(allRels) do&lt;br /&gt;
		table.insert(sortedRels, rel)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(sortedRels, function(a, b)&lt;br /&gt;
		local prioA = REL_PRIORITY[a] or 999&lt;br /&gt;
		local prioB = REL_PRIORITY[b] or 999&lt;br /&gt;
		return prioA &amp;lt; prioB&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	-- Sections are built first so the pills can be counted from what was&lt;br /&gt;
	-- actually rendered, then prepended. Counting up front would mean counting&lt;br /&gt;
	-- pages that get filtered out as non-existent further down.&lt;br /&gt;
	local sections = {}&lt;br /&gt;
	local classTally = {}&lt;br /&gt;
	for _, rel in ipairs(sortedRels) do&lt;br /&gt;
		local dirs = allRels[rel]&lt;br /&gt;
		for dir, pages in pairs(dirs) do&lt;br /&gt;
			table.insert(sections, generateRelationshipSection(frame, rel, dir, pages, pageCache, classTally))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(output, generateControls(frame, classTally))&lt;br /&gt;
	-- One .filterableContent around every section, so the single text field&lt;br /&gt;
	-- filters the whole relationships area rather than one section of it.&lt;br /&gt;
	table.insert(output, &#039;&amp;lt;div class=&amp;quot;filterableContent&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	for _, section in ipairs(sections) do&lt;br /&gt;
		table.insert(output, section)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(output, &#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143947</id>
		<title>Module:LibraryRows</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143947"/>
		<updated>2026-10-05T16:01:42Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Pass FullTitleTib, DescriptionTib to the rows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Bibliographic rows for the library hub pages (Library, Library/Books, ...).&lt;br /&gt;
--&lt;br /&gt;
-- The same rows the topic pages use (Template:TopicBiblioRow): cover, citation,&lt;br /&gt;
-- class and date, an &amp;quot;About this item&amp;quot; disclosure. They replace the tile grid,&lt;br /&gt;
-- which was heavier to render and showed less.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:LibraryRows|controls|classes=Books;Articles;Classical Works|q:Multimedia=[[...]]}}&lt;br /&gt;
--       text filter plus class pills, as on topic pages (tws.js drives both)&lt;br /&gt;
--   {{#invoke:LibraryRows|section|heading=Books|link=Library/Books|query=[[Category:Books]]|title=yes}}&lt;br /&gt;
--       one class: a counted heading, then the rows (title=yes: title line above the citation)&lt;br /&gt;
--&lt;br /&gt;
-- Rows load in deferred chunks of CHUNK, so a long class does not hold up the&lt;br /&gt;
-- page; the number of chunks comes from the count, so nothing is truncated (the&lt;br /&gt;
-- old tile chunks stopped at a fixed 1,100).&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local CHUNK = 100&lt;br /&gt;
&lt;br /&gt;
-- Printout names must match Template:TopicBiblioRow&#039;s parameters (named args).&lt;br /&gt;
-- BcaAuthor is taken raw (#) so the row can build the link itself.&lt;br /&gt;
local PRINTOUTS = &#039;|?Citation|?BcaAuthor#=BcaAuthor|?Class|?Title|?FrontCoverImg|?Pubdate|?TileDescription|?Description|?FullTitleTib|?DescriptionTib&#039;&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	s = mw.text.trim(s or &#039;&#039;)&lt;br /&gt;
	return s ~= &#039;&#039; and s or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function count(frame, query)&lt;br /&gt;
	local n = frame:preprocess(&#039;{{#ask:&#039; .. query .. &#039;|format=count}}&#039;)&lt;br /&gt;
	return tonumber((n or &#039;&#039;):match(&#039;%d+&#039;)) or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.controls(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local classes = trim(args.classes) or &#039;&#039;&lt;br /&gt;
	local base = trim(args.base) or &#039;[[Category:Library Items]]&#039;&lt;br /&gt;
	local pills = {}&lt;br /&gt;
	local total = 0&lt;br /&gt;
	for class in mw.text.gsplit(classes, &#039;%s*;%s*&#039;) do&lt;br /&gt;
		if class ~= &#039;&#039; then&lt;br /&gt;
			-- A pill counts what its section lists: pass q:&amp;lt;Class&amp;gt;=&amp;lt;query&amp;gt; when the&lt;br /&gt;
			-- section uses a narrower query than &amp;quot;every item of this class&amp;quot;.&lt;br /&gt;
			local n = count(frame, trim(args[&#039;q:&#039; .. class]) or (base .. &#039;[[Class::&#039; .. class .. &#039;]]&#039;))&lt;br /&gt;
			if n &amp;gt; 0 then&lt;br /&gt;
				total = total + n&lt;br /&gt;
				table.insert(pills, &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&amp;quot; data-filter-class=&amp;quot;&#039; .. mw.text.encode(class) ..&lt;br /&gt;
					&#039;&amp;quot;&amp;gt;&#039; .. class .. &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; .. mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local all = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill is-active&amp;quot; data-filter-class=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		mw.language.getContentLanguage():formatNum(total) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	-- No whitespace between the containers and their children: a newline there&lt;br /&gt;
	-- makes MediaWiki wrap the run in a &amp;lt;p&amp;gt;, which then becomes the only flex child.&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;topic-biblio-controls&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-filter&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		frame:preprocess(&#039;{{#widget:filterInput|placeholder=&#039; .. (trim(args.placeholder) or&lt;br /&gt;
			(&#039;Filter &#039; .. mw.language.getContentLanguage():formatNum(total) .. &#039; items…&#039;)) .. &#039;}}&#039;) ..&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-pills&amp;quot;&amp;gt;&#039; .. all .. table.concat(pills) .. &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.section(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local query = trim(args.query)&lt;br /&gt;
	if not query then return &#039;&#039; end&lt;br /&gt;
	local heading = trim(args.heading)&lt;br /&gt;
	local link = trim(args.link)&lt;br /&gt;
	local sort = trim(args.sort) or &#039;Citation&#039;&lt;br /&gt;
	local order = trim(args.order) or &#039;asc&#039;&lt;br /&gt;
	-- title=yes: each row leads with the work&#039;s title above the citation.&lt;br /&gt;
	local userparam = (trim(args.title) == &#039;yes&#039;) and &#039;|userparam=title&#039; or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local n = count(frame, query)&lt;br /&gt;
	if n == 0 then return &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
	local out = { &#039;&amp;lt;div class=&amp;quot;topic-biblio-section&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
	if heading then&lt;br /&gt;
		local label = link and (&#039;[[&#039; .. link .. &#039;|&#039; .. heading .. &#039;]]&#039;) or heading&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;h2 class=&amp;quot;link-no-border&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
			mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt; &#039; .. label .. &#039;&amp;lt;/h2&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	for offset = 0, n - 1, CHUNK do&lt;br /&gt;
		table.insert(out, frame:preprocess(&#039;{{#ask:&#039; .. query .. PRINTOUTS ..&lt;br /&gt;
			&#039;|format=template|template=TopicBiblioRow|named args=yes|link=none&#039; ..&lt;br /&gt;
			&#039;|sort=&#039; .. sort .. &#039;|order=&#039; .. order ..&lt;br /&gt;
			userparam ..&lt;br /&gt;
			&#039;|limit=&#039; .. CHUNK .. &#039;|offset=&#039; .. offset ..&lt;br /&gt;
			-- Each deferred chunk is parsed on its own, so the page&#039;s __NOGLOSSARY__&lt;br /&gt;
			-- would not reach it: the glossary would mark up every chunk (~2,300&lt;br /&gt;
			-- terms across the Library). A wrapper whose class is exactly&lt;br /&gt;
			-- &amp;quot;noglossary&amp;quot; keeps it out: measured 800 -&amp;gt; 440 ms and 388 -&amp;gt; 285 KB&lt;br /&gt;
			-- for a chunk of 100 rows.&lt;br /&gt;
			&#039;|intro=&amp;lt;div class=&amp;quot;noglossary&amp;quot;&amp;gt;|outro=&amp;lt;/div&amp;gt;&#039; ..&lt;br /&gt;
			&#039;|searchlabel=|default=|@deferred}}&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioSection&amp;diff=143946</id>
		<title>Template:TopicBiblioSection</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioSection&amp;diff=143946"/>
		<updated>2026-10-05T16:01:40Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Pass FullTitleTib, DescriptionTib to the rows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifexpr:{{#ask:{{{ query | }}}|format=count}}&amp;gt;0|&amp;lt;div class=&amp;quot;topic-biblio-section&amp;quot;&amp;gt;{{#if: {{{ heading | }}}&lt;br /&gt;
	|&amp;lt;div class=&amp;quot;h4 mb-3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;{{#ask:{{{ query | }}}|format=count}}&amp;lt;/span&amp;gt; {{{ heading | }}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	|&lt;br /&gt;
}}&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;{{#ask:{{{ query | }}}&lt;br /&gt;
	|?Citation&lt;br /&gt;
	|?BcaAuthor#=BcaAuthor&amp;lt;!--&lt;br /&gt;
	Raw page title, not the rendered value: link=none below would otherwise&lt;br /&gt;
	flatten the byline to plain text. The row builds the wikilink itself, and&lt;br /&gt;
	MediaWiki then applies the person&#039;s display title, so &amp;quot;People/Houlton, S.&amp;quot;&lt;br /&gt;
	still reads as &amp;quot;Simon Houlton&amp;quot;.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
	|?Class&lt;br /&gt;
	|?Title&lt;br /&gt;
	|?FrontCoverImg&lt;br /&gt;
	|?Pubdate&lt;br /&gt;
	|?TileDescription&lt;br /&gt;
	|?Description&lt;br /&gt;
	|?FullTitleTib&lt;br /&gt;
	|?DescriptionTib&lt;br /&gt;
	|format=template&lt;br /&gt;
	|template=TopicBiblioRow&lt;br /&gt;
	|named args=yes&lt;br /&gt;
	|link=none&lt;br /&gt;
	|limit={{{ limit | 500 }}}&lt;br /&gt;
	|sort={{{ sort | Class,Citation }}}&lt;br /&gt;
	|order={{{ order | asc,asc }}}&amp;lt;!--&lt;br /&gt;
	The deferred rows are parsed on their own, so the page-level no-glossary switch&lt;br /&gt;
	does not reach them and the glossary marked up every chunk. A wrapper whose&lt;br /&gt;
	class is exactly &amp;quot;noglossary&amp;quot; keeps it out: about 45% faster per chunk.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
	|intro=&amp;lt;div class=&amp;quot;noglossary&amp;quot;&amp;gt;&lt;br /&gt;
	|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
	|@deferred&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
One section of the bibliographic list on a topic page — an optional heading with&lt;br /&gt;
a count, then the rows themselves.&lt;br /&gt;
&lt;br /&gt;
Renders nothing when the query is empty, so a topic that has no Books (or no&lt;br /&gt;
Multimedia, and so on) simply does not show that heading rather than leaving an&lt;br /&gt;
empty section behind.&lt;br /&gt;
&lt;br /&gt;
The query is &amp;lt;code&amp;gt;@deferred&amp;lt;/code&amp;gt;, so the rows load after the page paints. On a&lt;br /&gt;
topic with a few hundred entries that keeps the page responsive.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; || SMW query for this section. Required.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;heading&amp;lt;/code&amp;gt; || Optional heading. Omit for a single flat list.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || Max rows. Defaults to 500.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; || Passed to the query.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143945</id>
		<title>Template:TopicBiblioRow</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:TopicBiblioRow&amp;diff=143945"/>
		<updated>2026-10-05T16:01:39Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Tibetan title and description (FullTitleTib, DescriptionTib) for the language toggle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-row filterable{{#ifeq:{{{#userparam|}}}|title|&amp;amp;#32;topic-biblio-row--titled|}}&amp;quot; data-class=&amp;quot;{{{ Class | }}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	One bibliographic entry on a topic page.&lt;br /&gt;
&lt;br /&gt;
	Topic pages are bibliographies, so the row leads with the Citation, which&lt;br /&gt;
	already carries author, title, publisher and year in a single formatted&lt;br /&gt;
	line. Citation is present on 99% of tagged items, so this is reliable; the&lt;br /&gt;
	page title is used as a fallback for the remainder.&lt;br /&gt;
&lt;br /&gt;
	The description is collapsed rather than shown on hover. Descriptions run to&lt;br /&gt;
	a median of about 800 characters here and a maximum over 5000, which is far&lt;br /&gt;
	too much for a tooltip — it would cover the list and be unreadable on touch&lt;br /&gt;
	devices. A disclosure keeps the row to one line until asked.&lt;br /&gt;
&lt;br /&gt;
	Editorial Content entries that have a narrated recording get the player&lt;br /&gt;
	inline, matching the Listening Room. The audio is found by reverse lookup on&lt;br /&gt;
	AssociatedArticle, so nothing needs storing on the article itself.&lt;br /&gt;
&lt;br /&gt;
	The cover is requested at 250px, which is larger than the 42px slot it sits&lt;br /&gt;
	in while collapsed. That is deliberate — opening the description grows the&lt;br /&gt;
	cover to 120px, and on a 2x display that needs 240px of real pixels. Without&lt;br /&gt;
	an explicit size MediaWiki would serve the original file instead, which on a&lt;br /&gt;
	long list means megabytes of images scaled down by the browser.&lt;br /&gt;
&lt;br /&gt;
	250 rather than a round 260: the Commons scaler fails for exactly the 260px&lt;br /&gt;
	bucket on a subset of files (20 of 298 covers, deterministic on retry) and&lt;br /&gt;
	returns no thumbnail, so the image degrades to a plain link to the file&lt;br /&gt;
	page. Every other width tested from 100 to 500 works, 250 and 270 included.&lt;br /&gt;
	If covers ever render as links again, probe a few widths before suspecting&lt;br /&gt;
	the file, the ForeignFileRepo, or this template.&lt;br /&gt;
&lt;br /&gt;
	The cover deliberately has no link= parameter, so its anchor points at the&lt;br /&gt;
	file page with class=&amp;quot;image&amp;quot;. That is the hook MultimediaViewer binds to;&lt;br /&gt;
	pointing link= at the item page suppresses the viewer, because MMV only&lt;br /&gt;
	upgrades images that link to their own file description page. The citation&lt;br /&gt;
	beside it already links to the item, so no navigation is lost.&lt;br /&gt;
--&amp;gt;{{#if: {{{ FrontCoverImg | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb tws-lightbox&amp;quot;&amp;gt;[[File:{{PAGENAME:{{{ FrontCoverImg | }}}}}|200px|class=object-fit-cover w-100 h-100]]&amp;lt;/div&amp;gt;&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	}}&lt;br /&gt;
	&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	TITLE LINE (library hub pages only)&lt;br /&gt;
&lt;br /&gt;
	Module:LibraryRows passes userparam=title, so its rows lead with the work&#039;s&lt;br /&gt;
	title, larger, above the citation: a list sorted by citation reads author&lt;br /&gt;
	first, and the title line keeps it scannable by work. Topic pages and the&lt;br /&gt;
	Bibliography pass nothing and are unchanged. The userparam arrives as a&lt;br /&gt;
	parameter named #userparam, with the hash.&lt;br /&gt;
--&amp;gt;{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
			|&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
				|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}&lt;br /&gt;
			}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;[[{{{ 1 | }}}|{{#if: {{{ FullTitleTib | }}}&lt;br /&gt;
			|{{#ifeq:{{{#userparam|}}}|title&lt;br /&gt;
				|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
				|{{I18n|en={{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}|bo={{{ FullTitleTib | }}}}}&lt;br /&gt;
			}}&lt;br /&gt;
			|{{#if: {{{ Citation | }}}|{{{ Citation | }}}|{{#if: {{{ Title | }}}|{{{ Title | }}}|{{SUBPAGENAME:{{{ 1 | }}}}}}}}}&lt;br /&gt;
		}}]]&amp;lt;!--&lt;br /&gt;
	TIBETAN (the language toggle)&lt;br /&gt;
&lt;br /&gt;
	FullTitleTib and DescriptionTib, where the item has them, are carried as the&lt;br /&gt;
	Tibetan side of {{I18n}}, so switching the toggle to Tibetan shows them and an&lt;br /&gt;
	item without them stays in English. On a titled row the Tibetan title goes on&lt;br /&gt;
	the title line and the citation stays as it is, so the title is not shown twice.&lt;br /&gt;
--&amp;gt;&amp;lt;!--&lt;br /&gt;
	AUTHOR BYLINE&lt;br /&gt;
&lt;br /&gt;
	Inline, straight after the title, so the line reads the way a citation does&lt;br /&gt;
	— work then author — rather than stacking a second line under it.&lt;br /&gt;
&lt;br /&gt;
	Only when there is no Citation: a citation already opens with the author, so&lt;br /&gt;
	printing it again would just repeat the line above. Our own editorial writing&lt;br /&gt;
	carries no citation at all, which is what left those rows with no attribution.&lt;br /&gt;
&lt;br /&gt;
	BcaAuthor arrives as a raw page title (&amp;quot;People/Houlton, S.&amp;quot;), because the&lt;br /&gt;
	query runs with link=none and would otherwise flatten it to plain text. The&lt;br /&gt;
	link is built here instead, and MediaWiki applies the person&#039;s display title,&lt;br /&gt;
	so it reads &amp;quot;Simon Houlton&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	Deliberately NOT split with #arraymap: these page names contain commas, so&lt;br /&gt;
	splitting on comma turns one author into two red links.&lt;br /&gt;
&lt;br /&gt;
	Present on about a quarter of Editorial pages, so the row still has to read&lt;br /&gt;
	correctly without it. No leading space before the span: it is supplied in CSS&lt;br /&gt;
	so the separator moves with the styling.&lt;br /&gt;
--&amp;gt;{{#if: {{{ Citation | }}}&lt;br /&gt;
			|&lt;br /&gt;
			|{{#if: {{{ BcaAuthor | }}}&lt;br /&gt;
				|&amp;lt;span class=&amp;quot;topic-biblio-byline&amp;quot;&amp;gt;[[{{{ BcaAuthor | }}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;{{#if: {{{ Class | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;{{{ Class | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ Pubdate | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;{{{ Pubdate | }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;topic-biblio-more&amp;quot; role=&amp;quot;button&amp;quot; tabindex=&amp;quot;0&amp;quot; aria-expanded=&amp;quot;false&amp;quot;&amp;gt;{{I18n|en=About this item|bo=ངོ་སྤྲོད།}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if: {{{ TileDescription | }}}{{{ Description | }}}{{{ DescriptionTib | }}}&lt;br /&gt;
		|&amp;lt;div class=&amp;quot;topic-biblio-desc&amp;quot; hidden&amp;gt;{{#if: {{{ DescriptionTib | }}}&lt;br /&gt;
			|{{I18n|en={{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{#if: {{{ Description | }}}|{{{ Description | }}}|{{{ DescriptionTib | }}}}}}}|bo={{{ DescriptionTib | }}}}}&lt;br /&gt;
			|{{#if: {{{ TileDescription | }}}|{{{ TileDescription | }}}|{{{ Description | }}}}}&lt;br /&gt;
		}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		|}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;{{#ifeq: {{{ Class | }}}&lt;br /&gt;
		|Editorial Content&lt;br /&gt;
		|{{#ask:[[Category:Tsadra Bodhicitta Audio]][[AssociatedArticle::{{{ 1 | }}}]]&lt;br /&gt;
			|?#-=file&lt;br /&gt;
			|mainlabel=-&lt;br /&gt;
			|headers=hide&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|link=none&lt;br /&gt;
			|format=template&lt;br /&gt;
			|template=TopicBiblioPlayer&lt;br /&gt;
			|named args=yes&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&lt;br /&gt;
&lt;br /&gt;
Renders one row of the bibliographic list on a [[:Category:Topic Pages|topic page]].&lt;br /&gt;
&lt;br /&gt;
Called by [[Template:TopicBiblioSection]] with &amp;lt;code&amp;gt;named args=yes&amp;lt;/code&amp;gt;, so the&lt;br /&gt;
printout names in that query must match the parameter names used here.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=User:Jeremi&amp;diff=143942</id>
		<title>User:Jeremi</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=User:Jeremi&amp;diff=143942"/>
		<updated>2026-10-05T15:59:21Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Replaced content with &amp;quot;{{#ask:Category:Translation Memory Basepages|?Creation date}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ask:[[Category:Translation Memory Basepages]]|?Creation date}}&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:EditorialContent&amp;diff=143941</id>
		<title>Template:EditorialContent</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:EditorialContent&amp;diff=143941"/>
		<updated>2026-10-05T15:55:49Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Topic facet categories for the site search&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC____NOEDITSECTION__&amp;lt;!-- {{ReviewTemplate}}{{ReviewTools}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#ifeq:{{{ firstHeading | }}}|none|{{RemoveFirstHeading}}|&lt;br /&gt;
{{RemoveFirstHeading&lt;br /&gt;
	|AltTitle={{#if:{{{ AltTitle | }}}&lt;br /&gt;
		|{{{ AltTitle | }}}&lt;br /&gt;
		|{{#ifeq:{{{ subclass | }}}&lt;br /&gt;
			|བྱང་སེམས་ཆོས་མཛོད།&lt;br /&gt;
			|&amp;lt;span class=&amp;quot;line17&amp;quot;&amp;gt;{{{ title | {{SUBPAGENAME}} }}}&amp;lt;/span&amp;gt;&lt;br /&gt;
			|{{{ title | {{SUBPAGENAME}} }}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|SubTitle={{{ SubTitle | }}}&lt;br /&gt;
	|watermark={{#ifeq:{{{ subclass | }}}&lt;br /&gt;
		|བྱང་སེམས་ཆོས་མཛོད།&lt;br /&gt;
		|&amp;lt;span class=&amp;quot;line17&amp;quot;&amp;gt;{{#invoke:GetWatermark|main}}&amp;lt;/span&amp;gt;&lt;br /&gt;
		|{{#invoke:GetWatermark|main}}&lt;br /&gt;
	}}&lt;br /&gt;
}} }}&lt;br /&gt;
&amp;lt;div class=&amp;quot;d-flex justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{#if: {{{ parent | }}}&lt;br /&gt;
		|&amp;lt;span class=&amp;quot;{{{ parent-classes | }}}&amp;quot;&amp;gt;[[{{{ parent | }}}|&amp;lt;i class=&amp;quot;fa-light fa-angle-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; {{{ parent | }}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
		|{{#if:{{#show:{{PAGENAME}}|?Has parent page#}}&lt;br /&gt;
			|[[{{#show:{{PAGENAME}}|?Has parent page#}}|&amp;lt;i class=&amp;quot;fa-light fa-angle-left&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; {{#show:{{PAGENAME}}|?Has parent page#}}]]&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
	}}{{SubThemesList&lt;br /&gt;
		|{{BASEPAGENAME}}&lt;br /&gt;
		|{{{ subclass | }}}&lt;br /&gt;
		|{{GetSubThemes|{{{ subclass | }}}}}&lt;br /&gt;
	}}&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{ReadingTime}}{{#ifeq:{{{ subclass | }}}|BCA Chapter Summaries| {{!}} {{#switch:{{{ sub-theme | }}}&lt;br /&gt;
		|Chapter 1=&amp;lt;span class=&amp;quot;text-muted font-italic&amp;quot;&amp;gt;First Chapter&amp;lt;/span&amp;gt; {{!}} [[Explore/Chapter 2 - Confession of Negativity|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 2=[[Explore/Chapter 1 - The Excellence and Benefits of Bodhicitta|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 3 - Taking Hold of Bodhicitta|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 3=[[Explore/Chapter 2 - Confession of Negativity|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 4 - Conscientiousness|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 4=[[Explore/Chapter 3 - Taking Hold of Bodhicitta|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 5 - Vigilant Introspection|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 5=[[Explore/Chapter 4 - Conscientiousness|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 6 - Patience|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 6=[[Explore/Chapter 5 - Vigilant Introspection|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 7 - Diligence|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 7=[[Explore/Chapter 6 - Patience|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 8 - Meditative Concentration|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 8=[[Explore/Chapter 7 - Diligence|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 9 - Wisdom|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 9=[[Explore/Chapter 8 - Meditative Concentration|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} [[Explore/Chapter 10 - Dedication|Next Summary &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]&lt;br /&gt;
		|Chapter 10=[[Explore/Chapter 9 - Wisdom|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-caret-left fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Previous Summary]] {{!}} &amp;lt;span class=&amp;quot;text-muted font-italic&amp;quot;&amp;gt;Last Chapter&amp;lt;/span&amp;gt;&lt;br /&gt;
	}} }}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#if:{{{ TopContent | }}}|&lt;br /&gt;
&lt;br /&gt;
{{{ TopContent | }}}&lt;br /&gt;
&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row ssb-content&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ssb {{#switch:{{{ wideSidebar | }}}|true|Yes=col-md-4|#default=col-md-3}} order-md-last sliding-drawer&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner mb-5&amp;quot;&amp;gt;{{#switch:{{BASEPAGENAME}}&lt;br /&gt;
				|Discover={{DoorwayReturnTile|Discover}}&lt;br /&gt;
				|Explore={{DoorwayReturnTile|Explore}}&lt;br /&gt;
				|Study={{DoorwayReturnTile|Study}}&lt;br /&gt;
				|Practice={{DoorwayReturnTile|Practice}}&lt;br /&gt;
			}}{{#if: {{{ TopSidebarSection | }}} |&lt;br /&gt;
			{{{ TopSidebarSection | }}} | }}&lt;br /&gt;
			&amp;lt;div&amp;gt;{{#if: {{{ TopSidebarContent | }}} |&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mb-4&amp;quot;&amp;gt;{{{ TopSidebarContent | }}}&amp;lt;/div&amp;gt; }}{{#ifeq:{{{ subclass | }}}|BCA Chapter Summaries|&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mb-4&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;sidebar-section-heading&amp;quot;&amp;gt;More on this&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Texts/Bodhicaryāvatāra/{{{ sub-theme | }}}|Read Chapter Verses &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right ml-1 fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;]]{{#if:{{{ TermTopics | }}}|{{#ask:[[Category:Articles]][[Editorial::true]][[TermTopics::{{{ TermTopics | }}}]][[BcaAuthor::People/Houlton, S.]]|format=template|template=DetailedIntroLink|link=none|limit=1}}|}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;| }}{{#switch:{{BASEPAGENAME}}&lt;br /&gt;
					|བྱང་སེམས་ཆོས་མཛོད།&lt;br /&gt;
					|Courses=&lt;br /&gt;
					|#default=&amp;lt;div class=&amp;quot;text-center mb-3&amp;quot;&amp;gt;{{EditorialContentDisclaimer}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				}}&lt;br /&gt;
				{{SidebarPeople&lt;br /&gt;
					|authors={{{ EditorialAuthor | }}}&lt;br /&gt;
				}}	&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mb-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;{{#if:{{{ TermTopics | }}}{{{ TextTopics | }}}{{{ PeopleTopics | }}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarTopics&lt;br /&gt;
					|terms={{{ TermTopics | }}}&lt;br /&gt;
					|texts={{{ TextTopics | }}}&lt;br /&gt;
					|people={{{ PeopleTopics | }}}&lt;br /&gt;
					|drlTopics={{GetItemData|prop=DrlTopics}}&lt;br /&gt;
				}} | }}{{#ifeq:{{BASEPAGENAME}}|བྱང་སེམས་ཆོས་མཛོད།|&lt;br /&gt;
				&amp;lt;div&amp;gt;{{#Widget:filterInput|placeholder=Filter texts...}}&amp;lt;/div&amp;gt;|}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			{{ScrollToTop}}{{#if:{{{ SidebarBottomContent | }}} | &lt;br /&gt;
			{{{ SidebarBottomContent | }}} | }}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;{{#switch:{{{ wideSidebar | }}}|true|Yes=col-md-8|#default=col-md-9}}&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-article text-break&amp;quot;&amp;gt;{{#if: {{{ jumbo-text | }}} | &lt;br /&gt;
			{{Jumbo&lt;br /&gt;
				|image={{{ jumbo-image | }}}&lt;br /&gt;
				|imageposition={{{ jumbo-image-position | 50% 50% }}}&lt;br /&gt;
				|fixed-sized-image={{{ fixed-sized-image | }}}&lt;br /&gt;
				|full-width=yes&lt;br /&gt;
				|imageSource={{{ jumbo-image-source | }}}&lt;br /&gt;
				|text={{{ jumbo-text | }}}&lt;br /&gt;
				|text-padding=p-4&lt;br /&gt;
				|text-classes={{#ifeq:{{{ subclass | }}}|བྱང་སེམས་ཆོས་མཛོད།|text-130 line16|}}&lt;br /&gt;
			}} | }}{{#if:{{{ media | }}}{{{ featured-books | }}}{{{ featured-articles | }}}{{{ featured-dissertations | }}}{{{ featured-texts | }}}{{{ featured-media | }}}{{{ external-resources | }}}|&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row mx-n2 mt-3 mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				{{JumpToNavButton|check={{{ media | }}}|hash=Media|icon=video|label=Media}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ featured-books | }}}|hash=Featured books|icon=books|label=Featured books}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ featured-articles | }}}|hash=Featured articles|icon=newspaper|label=Featured articles}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ featured-dissertations | }}}|hash=Featured dissertations|icon=book|label=Featured dissertations}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ featured-texts | }}}|hash=Featured texts|icon=scroll|label=Featured source texts}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ featured-media | }}}|hash=Featured multimedia|icon=video|label=Featured multimedia}}&lt;br /&gt;
				{{JumpToNavButton|check={{{ external-resources | }}}|hash=External Resources|icon=globe|label=External Resources}}	&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			{{VerticalSpacer|2}} | }}&lt;br /&gt;
			&lt;br /&gt;
&amp;lt;div class=&amp;quot;time-to-read&amp;quot;&amp;gt;&lt;br /&gt;
{{{ main-text | }}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;ref-header mt-5&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Notes&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#ifeq:{{{ subclass | }}}|BCA Chapter Summaries|&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row justify-content-center my-5 py-4 tsdwiki-border-tb-redfade&amp;quot;&amp;gt;&lt;br /&gt;
				{{HomeTile&lt;br /&gt;
					|wrapperclasses=col-md-6 col-xl-5 text-90&lt;br /&gt;
					|image={{PAGENAME:{{{ jumbo-image | }}}}}&lt;br /&gt;
					|imgHeight=40%&lt;br /&gt;
					|bgPosition={{{ jumbo-image-position | 50% 50% }}}&lt;br /&gt;
					|header=More on this chapter&lt;br /&gt;
					|header-classes=clipped-1-line&lt;br /&gt;
					|description={{#show:{{{ ExtensiveSummaryPage | }}}|?Description#}}&lt;br /&gt;
					|text-lines=6&lt;br /&gt;
					|height=480px&lt;br /&gt;
					|bottomrightlabel=Detailed Introduction &amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-angles-right fa-sm&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
					|tilelink={{{ ExtensiveSummaryPage | }}}&lt;br /&gt;
				}}&lt;br /&gt;
				&amp;lt;div class=&amp;quot;col-md-6 col-xl-5&amp;quot;&amp;gt;&lt;br /&gt;
					{{NiceMiniTile|Texts/Bodhicaryāvatāra/{{{ sub-theme | }}}|Read {{{ sub-theme | }}} Verses}}&lt;br /&gt;
					{{#ask:[[Subclass::BCA Chapter Summaries ]][[SubTheme::{{#switch:{{{ sub-theme | }}}&lt;br /&gt;
							|Chapter 1=Chapter 0&lt;br /&gt;
							|Chapter 2=Chapter 1&lt;br /&gt;
							|Chapter 3=Chapter 2&lt;br /&gt;
							|Chapter 4=Chapter 3&lt;br /&gt;
							|Chapter 5=Chapter 4&lt;br /&gt;
							|Chapter 6=Chapter 5&lt;br /&gt;
							|Chapter 7=Chapter 6&lt;br /&gt;
							|Chapter 8=Chapter 7&lt;br /&gt;
							|Chapter 9=Chapter 8&lt;br /&gt;
							|Chapter 10=Chapter 9&lt;br /&gt;
						}}]]&lt;br /&gt;
						|?SubTheme&lt;br /&gt;
						|link=none&lt;br /&gt;
						|limit=1&lt;br /&gt;
						|format=template&lt;br /&gt;
						|template=PrevSummaryTile&lt;br /&gt;
					}}{{#ask:[[Subclass::BCA Chapter Summaries ]][[SubTheme::{{#switch:{{{ sub-theme | }}}&lt;br /&gt;
							|Chapter 1=Chapter 2&lt;br /&gt;
							|Chapter 2=Chapter 3&lt;br /&gt;
							|Chapter 3=Chapter 4&lt;br /&gt;
							|Chapter 4=Chapter 5&lt;br /&gt;
							|Chapter 5=Chapter 6&lt;br /&gt;
							|Chapter 6=Chapter 7&lt;br /&gt;
							|Chapter 7=Chapter 8&lt;br /&gt;
							|Chapter 8=Chapter 9&lt;br /&gt;
							|Chapter 9=Chapter 10&lt;br /&gt;
							|Chapter 10=Chapter 0&lt;br /&gt;
						}}]]&lt;br /&gt;
						|?SubTheme&lt;br /&gt;
						|link=none&lt;br /&gt;
						|limit=1&lt;br /&gt;
						|format=template&lt;br /&gt;
						|template=NextSummaryTile&lt;br /&gt;
					}}{{#arraymap:{{{ StoriesPage | }}}|;|@@@|&lt;br /&gt;
                      {{NiceMiniTile|{{#explode:@@@|::|0}}|{{#if:{{#explode:@@@|::|1}}|&lt;br /&gt;
                      {{#explode:@@@|::|1}}|{{SUBPAGENAME:{{#explode:@@@|::|0}} }} }} }}|}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt; {{#if:{{{ add-resources-text | }}}{{{ add-resources-tiles | }}}{{{ add-resources-section | }}}|&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;offwhite-bg rounded-xl shadow my-5 px-5 py-4 text-article&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
				&amp;lt;h3&amp;gt;Additional resources&amp;lt;/h3&amp;gt;{{#if:{{{ add-resources-text | }}}|&lt;br /&gt;
				&lt;br /&gt;
				{{{ add-resources-text | }}} | }}{{#if:{{{ add-resources-tiles | }}}|&lt;br /&gt;
				&lt;br /&gt;
				&amp;lt;div class=&amp;quot;row my-4&amp;quot;&amp;gt;{{TileQueryNoDef&lt;br /&gt;
					|query=[[{{#arraymap:{{{ add-resources-tiles | }}}&lt;br /&gt;
						|;&lt;br /&gt;
						|@@@&lt;br /&gt;
						|@@@&lt;br /&gt;
						|{{!}}{{!}}&lt;br /&gt;
					}}]]&lt;br /&gt;
				}}&amp;lt;/div&amp;gt; | }}{{#if:{{{ add-resources-section | }}}|&lt;br /&gt;
				&lt;br /&gt;
				{{{ add-resources-section | }}} | }}&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/div&amp;gt; | }} | }}&lt;br /&gt;
			&lt;br /&gt;
			{{TibetanTileQuery&lt;br /&gt;
				|query=[[BcaTibetanPage::{{SUBPAGENAME}}]]&lt;br /&gt;
				|intro=&amp;lt;div class=&amp;quot;row filterableContent mt-4 sort-tibetan&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|limit=1008&lt;br /&gt;
				|default={{#if:{{{ tibetan-texts | }}} &lt;br /&gt;
					|&amp;lt;div class=&amp;quot;row filterableContent mt-4&amp;quot;&amp;gt;{{TibetanTileQuery&lt;br /&gt;
						|query=[[{{#arraymap:{{{ tibetan-texts | }}}&lt;br /&gt;
							|;&lt;br /&gt;
							|@@@&lt;br /&gt;
							|Texts/{{#urldecode:{{ucfirst:@@@}} }}&lt;br /&gt;
							|{{!}}{{!}}&lt;br /&gt;
						}}]]&lt;br /&gt;
						|limit=1008&lt;br /&gt;
					}}&amp;lt;/div&amp;gt;&lt;br /&gt;
					|&lt;br /&gt;
				}}&lt;br /&gt;
				|searchlabel=&lt;br /&gt;
			}}&lt;br /&gt;
			&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if:{{{ media | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Media&amp;lt;/h2&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;pt-3&amp;quot;&amp;gt;&lt;br /&gt;
			{{{ media | }}}&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}{{#if:{{{ featured-books | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Featured books&amp;lt;/h2&amp;gt;&lt;br /&gt;
		{{FeatureItems|items={{{ featured-books | }}}}}|}}{{#if:{{{ featured-articles | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Featured articles&amp;lt;/h2&amp;gt;&lt;br /&gt;
		{{FeatureItems|items={{{ featured-articles | }}}}}|}}{{#if:{{{ featured-dissertations | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Featured dissertations&amp;lt;/h2&amp;gt;&lt;br /&gt;
		{{FeatureItems|items={{{ featured-dissertations | }}}}}|}}{{#if:{{{ featured-texts | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Featured texts&amp;lt;/h2&amp;gt;&lt;br /&gt;
		{{FeatureTexts|items={{{ featured-texts | }}}}}|}}{{#if:{{{ featured-media | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt;Featured media&amp;lt;/h2&amp;gt;&lt;br /&gt;
		{{FeatureItems|items={{{ featured-media | }}}}}|}}{{#if:{{{ external-resources | }}}|&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;h2&amp;gt; External Resources &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;row mb-5&amp;quot;&amp;gt;&lt;br /&gt;
{{{ external-resources | }}}&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}{{#if:{{{ sub-theme | }}}{{{ TermTopics | }}}|&lt;br /&gt;
&lt;br /&gt;
		{{#if:{{#ask:	[[Category:Library Items]][[SubTheme::{{#arraymap:{{{ sub-theme | }}}|;|@@@|@@@|{{!}}{{!}}}}]][[Volumenumber::&amp;lt;1]]OR[[TermTopics::{{{ TermTopics | none }}}]][[Volumenumber::&amp;lt;1]]}}&lt;br /&gt;
			|&amp;lt;h2&amp;gt;Bibliography: Works on &#039;&#039;{{SUBPAGENAME}}&#039;&#039;&amp;lt;/h2&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mx-3 mb-4&amp;quot;&amp;gt;{{#widget:filterInput}}&amp;lt;/div&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
			{{#ask:	[[Category:Library Items]][[SubTheme::{{#arraymap:{{{ sub-theme | }}}|;|@@@|@@@|{{!}}{{!}}}}]][[Volumenumber::&amp;lt;1]]&lt;br /&gt;
					OR[[TermTopics::{{{ TermTopics | none }}}]][[Volumenumber::&amp;lt;1]]&lt;br /&gt;
				|?Class&lt;br /&gt;
				|?Citation&lt;br /&gt;
				|?TileDescription&lt;br /&gt;
				|format=template&lt;br /&gt;
				|template=ListCitations&lt;br /&gt;
				|limit=1000&lt;br /&gt;
				|link=none&lt;br /&gt;
				|intro=&amp;lt;ol class=&amp;quot;text-article filterableContent mb-4 ml-3&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/ol&amp;gt;&lt;br /&gt;
				|@deferred&lt;br /&gt;
			}}&lt;br /&gt;
			|&lt;br /&gt;
		}} | }}&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{Categories|{{{ EditorialAuthor | }}};{{{ ExtraCats | }}};{{{ subclass | }}};{{{ theme | }}};{{{sub-theme|}}};Editorial Content}}&amp;lt;!--&lt;br /&gt;
	Topic categories for the site search (hidden from the footer in CSS). See Module:FacetCategories.&lt;br /&gt;
--&amp;gt;{{#invoke:FacetCategories|main|topics={{{ TermTopics | }}}}}{{#set:&lt;br /&gt;
	|BcaAuthor={{{ EditorialAuthor | }}}|+sep=;&lt;br /&gt;
	|FrontCoverImg={{#if: {{{ image | }}}&lt;br /&gt;
		|{{{ image | }}}&lt;br /&gt;
		|{{#if: {{{ jumbo-image | }}}&lt;br /&gt;
			|{{{ jumbo-image | }}}&lt;br /&gt;
			|{{#if: {{#show:{{PAGENAME}}|?FrontCoverImgJumbo}}&lt;br /&gt;
				|{{#show:{{PAGENAME}}|?FrontCoverImgJumbo#}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|Title={{#switch:{{FULLPAGENAME}}&lt;br /&gt;
		|Bodhicaryāvatāra=Bodhicaryāvatāra &amp;lt;br&amp;gt; &amp;lt;small&amp;gt;&#039;&#039;The Way of the Bodhisattva&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
		|Śikṣāsamuccaya=Śikṣāsamuccaya &amp;lt;br&amp;gt; &amp;lt;small&amp;gt;&#039;&#039;The Compendium of Training&#039;&#039;&amp;lt;/small&amp;gt;&lt;br /&gt;
		|#default={{#if: {{{ title | }}}&lt;br /&gt;
			|{{{ title | }}}&lt;br /&gt;
			|{{#if: {{{ AltTitle | }}}&lt;br /&gt;
				|{{{ AltTitle | }}}&lt;br /&gt;
				|{{#if: {{{ sub-theme | }}}&lt;br /&gt;
					|{{{ sub-theme | }}}&lt;br /&gt;
					|{{SUBPAGENAME}}&lt;br /&gt;
				}}&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|TileDescription={{#if: {{{ jumbo-text | }}}&lt;br /&gt;
		|{{{ jumbo-text | }}}&lt;br /&gt;
		|{{#if: {{{ TileDescription | }}}&lt;br /&gt;
			|{{{ TileDescription | }}}&lt;br /&gt;
			|{{#if: {{#show:{{PAGENAME}}|?TileDescriptionJumbo}}&lt;br /&gt;
				|{{#show:{{PAGENAME}}|?TileDescriptionJumbo}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|Description={{{ Description | }}}&lt;br /&gt;
	|Classification=Editorial Content&lt;br /&gt;
	|Class=Editorial Content&lt;br /&gt;
	|Subclass={{{ subclass | }}}|+sep=;&lt;br /&gt;
	|Theme={{{ theme | }}}|+sep=;&lt;br /&gt;
	|SubTheme={{{ sub-theme | }}}|+sep=;&lt;br /&gt;
	|TermTopics={{{ TermTopics | }}}|+sep=;&lt;br /&gt;
	|TextTopics={{{ TextTopics | }}}|+sep=;&lt;br /&gt;
	|PeopleTopics={{{ PeopleTopics | }}}|+sep=;&lt;br /&gt;
	|AllTopics={{#arraymap:{{{ subclass | }}};{{{ TermTopics | }}};{{{ sub-theme | }}};{{{ theme | }}};{{{ TextTopics | }}};{{{ PeopleTopics | }}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|ParentDoorway={{#switch:{{BASEPAGENAME}}&lt;br /&gt;
		|Discover&lt;br /&gt;
		|Explore&lt;br /&gt;
		|Study&lt;br /&gt;
		|Practice={{BASEPAGENAME}}&lt;br /&gt;
	}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Advanced_Search&amp;diff=143940</id>
		<title>Advanced Search</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Advanced_Search&amp;diff=143940"/>
		<updated>2026-10-05T15:55:48Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Start panel: BCA summaries, SSC chapters and summaries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION____NOGLOSSARY__{{RemoveFirstHeading}}&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Search&lt;br /&gt;
	|subtitle=Everything on the Bodhicitta website&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:BcaSearch}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;bcas-start&amp;quot; class=&amp;quot;bcas-start&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Start panel: shown until a search runs (Widget:BcaSearch hides it). A map of the&lt;br /&gt;
	site for someone who does not yet know what to type.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__grid&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Doorways&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Discover|&amp;lt;b&amp;gt;Discover&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;What bodhicitta is, and why it matters&amp;lt;/span&amp;gt;]][[Explore|&amp;lt;b&amp;gt;Explore&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Stories, key concepts, texts and people&amp;lt;/span&amp;gt;]][[Study|&amp;lt;b&amp;gt;Study&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The core texts and their traditions&amp;lt;/span&amp;gt;]][[Practice|&amp;lt;b&amp;gt;Practice&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Bringing bodhicitta into practice&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;The library&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Library/Books|Books &amp;lt;span&amp;gt;{{#ask:[[Category:Books]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Articles|Articles &amp;lt;span&amp;gt;{{#ask:[[Category:Articles]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Classical Works|Classical works &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Sutras|Sūtras &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]][[TextClass::Sutra]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Dissertations|Dissertations &amp;lt;span&amp;gt;{{#ask:[[Category:Dissertations]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Tibetan Publications|Tibetan publications &amp;lt;span&amp;gt;{{#ask:[[Category:Tibetan Publications]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Multimedia|Media &amp;lt;span&amp;gt;{{#ask:[[Category:Multimedia]]|format=count}}&amp;lt;/span&amp;gt;]][[Listening Room|Listening Room &amp;lt;span&amp;gt;{{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}}&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more bcas-start__more--stack&amp;quot;&amp;gt;[[Library|The whole library →]][[Bibliography|The bibliography →]][[Timelines|Timelines →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Most-covered topics&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Topics/Mind Training|Mind Training]][[Topics/Compassion|Compassion]][[Topics/Equalizing and Exchanging Self and Others|Exchanging self and others]][[Topics/Tonglen|Tonglen]][[Topics/Six Perfections|Six Perfections]][[Topics/Emptiness|Emptiness]][[Topics/Madhyamaka|Madhyamaka]][[Topics/Two Truths|Two Truths]][[Topics/Buddha-Nature|Buddha-Nature]][[Topics/Four Immeasurables|Four Immeasurables]][[Topics/The Concept of Bodhicitta|The concept of bodhicitta]][[Topics/Buddhist Ethics|Buddhist Ethics]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;[[Topics|All topics →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Śāntideva&#039;s texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Bodhicaryāvatāra|&amp;lt;b&amp;gt;Bodhicaryāvatāra&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Way of the Bodhisattva, verse by verse&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__sub&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Chapters&amp;lt;/span&amp;gt;[[Texts/Bodhicaryāvatāra/Chapter 1|1]][[Texts/Bodhicaryāvatāra/Chapter 2|2]][[Texts/Bodhicaryāvatāra/Chapter 3|3]][[Texts/Bodhicaryāvatāra/Chapter 4|4]][[Texts/Bodhicaryāvatāra/Chapter 5|5]][[Texts/Bodhicaryāvatāra/Chapter 6|6]][[Texts/Bodhicaryāvatāra/Chapter 7|7]][[Texts/Bodhicaryāvatāra/Chapter 8|8]][[Texts/Bodhicaryāvatāra/Chapter 9|9]][[Texts/Bodhicaryāvatāra/Chapter 10|10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Summaries&amp;lt;/span&amp;gt;[[Explore/Chapter 1 - The Excellence and Benefits of Bodhicitta|1]][[Explore/Chapter 2 - Confession of Negativity|2]][[Explore/Chapter 3 - Taking Hold of Bodhicitta|3]][[Explore/Chapter 4 - Conscientiousness|4]][[Explore/Chapter 5 - Vigilant Introspection|5]][[Explore/Chapter 6 - Patience|6]][[Explore/Chapter 7 - Diligence|7]][[Explore/Chapter 8 - Meditative Concentration|8]][[Explore/Chapter 9 - Wisdom|9]][[Explore/Chapter 10 - Dedication|10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__note&amp;quot;&amp;gt;Looking for a verse? Type its number in the search box, e.g. 9.1.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Śikṣāsamuccaya|&amp;lt;b&amp;gt;Śikṣāsamuccaya&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Compendium of Training and the works it cites&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__sub&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Chapters&amp;lt;/span&amp;gt;[[Books/The Training Anthology of Śāntideva/Bilingual/Root Verses|Root verses]][[Books/The Training Anthology of Śāntideva/Bilingual/1|1]][[Books/The Training Anthology of Śāntideva/Bilingual/2|2]][[Books/The Training Anthology of Śāntideva/Bilingual/3|3]][[Books/The Training Anthology of Śāntideva/Bilingual/4|4]][[Books/The Training Anthology of Śāntideva/Bilingual/5|5]][[Books/The Training Anthology of Śāntideva/Bilingual/6|6]][[Books/The Training Anthology of Śāntideva/Bilingual/7|7]][[Books/The Training Anthology of Śāntideva/Bilingual/8|8]][[Books/The Training Anthology of Śāntideva/Bilingual/9|9]][[Books/The Training Anthology of Śāntideva/Bilingual/10|10]][[Books/The Training Anthology of Śāntideva/Bilingual/11|11]][[Books/The Training Anthology of Śāntideva/Bilingual/12|12]][[Books/The Training Anthology of Śāntideva/Bilingual/13|13]][[Books/The Training Anthology of Śāntideva/Bilingual/14|14]][[Books/The Training Anthology of Śāntideva/Bilingual/15|15]][[Books/The Training Anthology of Śāntideva/Bilingual/16|16]][[Books/The Training Anthology of Śāntideva/Bilingual/17|17]][[Books/The Training Anthology of Śāntideva/Bilingual/18|18]][[Books/The Training Anthology of Śāntideva/Bilingual/19|19]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Summaries&amp;lt;/span&amp;gt;[[Articles/Chapter 1: Giving One&#039;s Body, Possessions, and Virtues|1]][[Articles/Chapter 2: Upholding the Dharma from the Perfection of Discipline|2]][[Articles/Chapter 3: Perfection of Discipline: Protecting the Dharma Teacher|3]][[Articles/Chapter 4: Perfection of Discipline: Discussion of Major Harms in the Sūtras|4]][[Articles/Chapter 5: Perfection of Discipline: Avoiding the Harms|5]][[Articles/Chapter 6: Protecting the Body|6]][[Articles/Chapter 7: Protecting the Possessions and Merit|7]][[Articles/Chapter 8: Expiation of Sinful Actions|8]][[Articles/Chapter 9: Perfection of Patience|9]][[Articles/Chapter 10: Perfection of Effort|10]][[Articles/Chapter 11: Praise of Wilderness|11]][[Articles/Chapter 12: Purifying the Mind|12]][[Articles/Chapter 13: Mindfulness|13]][[Articles/Chapter 14: Purification of the Body|14]][[Articles/Chapter 15: Purification of Possessions and Merit|15]][[Articles/Chapter 16: Enhancement of Body, Possessions, and Merit|16]][[Articles/Chapter 17: Benefit of Prostration and Other Practices|17]][[Articles/Chapter 18: Recollecting the Three Jewels|18]][[Articles/Chapter 19: Enhancing Merit|19]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Śāntideva|&amp;lt;b&amp;gt;Śāntideva&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;His life and works&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;text-center text-80 my-4&amp;quot; style=&amp;quot;color:#666&amp;quot;&amp;gt;Prefer the earlier form (person, topic and verse fields)? [[Special:RunQuery/Search|Open the classic search form]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=Search everything on the Bodhicitta website: the library, passages in the aligned translations and commentaries, essays, topics and people, with class filters and shareable searches.&lt;br /&gt;
	|Title=Advanced Search: Research &amp;amp; Filter Bodhicitta Resources&lt;br /&gt;
	|AllTopics=Advanced Search; Buddhist Research Tool; Search by BCA Verse; Bodhicitta Database; Śāntideva Search; Shantideva; Bodhisattvacaryāvatāra Index; Śikṣāsamuccaya Search; Mahāyāna Resource Search; Buddhist Bibliography Search; Scriptural Verse Locator; Scholar Search; Tibetan Text Search; Research Database; Tsadra Foundation Search; Find Buddhist Teachings; Filter by Topic; Filter by Person&lt;br /&gt;
	|FrontCoverImg=File:Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143939</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143939"/>
		<updated>2026-10-05T15:55:46Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search tips: incategory&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a,.bcas__hint a{cursor:pointer;color:#0645AD;text-decoration:none;border-bottom:1px dotted rgba(6,69,173,.4)}&lt;br /&gt;
.bcas__tips a:hover,.bcas__hint a:hover{color:#001028}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.5rem}&lt;br /&gt;
.bcas-start__sub{margin-bottom:.8rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;incategory:&amp;lt;/b&amp;gt; searches by tag. Topics, decades, people and publishers are all tags: &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Topic: Tonglen&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Topic: Tonglen&amp;quot;&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Decade: 1990s&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Decade: 1990s&amp;quot;&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;incategory:&amp;amp;quot;Padmakara Translation Group&amp;amp;quot;&amp;quot;&amp;gt;incategory:&amp;quot;Padmakara Translation Group&amp;quot;&amp;lt;/a&amp;gt;. Combine with words: &amp;lt;a data-q=&amp;quot;patience incategory:&amp;amp;quot;Topic: Six Perfections&amp;amp;quot;&amp;quot;&amp;gt;patience incategory:&amp;quot;Topic: Six Perfections&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		return (cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		// The results come first; the counts follow once they are on screen, so the&lt;br /&gt;
		// first page is not queued behind eleven count searches (and a class button&lt;br /&gt;
		// clicked early does not wait behind them either).&lt;br /&gt;
		var listDone = loadList(false) || $.Deferred().resolve().promise();&lt;br /&gt;
		listDone.always(function () { $.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		}); });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		// Clearing the box (its x, or deleting the text) returns to the browse panels.&lt;br /&gt;
		$(&#039;#bcas-q&#039;).on(&#039;input search&#039;, function () { if (!this.value.trim() &amp;amp;&amp;amp; state.q) { state.cls = &#039;&#039;; state.tab = &#039;library&#039;; run(); } });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143735</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143735"/>
		<updated>2026-10-02T23:57:02Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search: clearing the box returns to the browse panels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a,.bcas__hint a{cursor:pointer;color:#0645AD;text-decoration:none;border-bottom:1px dotted rgba(6,69,173,.4)}&lt;br /&gt;
.bcas__tips a:hover,.bcas__hint a:hover{color:#001028}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.6rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		return (cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		// The results come first; the counts follow once they are on screen, so the&lt;br /&gt;
		// first page is not queued behind eleven count searches (and a class button&lt;br /&gt;
		// clicked early does not wait behind them either).&lt;br /&gt;
		var listDone = loadList(false) || $.Deferred().resolve().promise();&lt;br /&gt;
		listDone.always(function () { $.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		}); });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		// Clearing the box (its x, or deleting the text) returns to the browse panels.&lt;br /&gt;
		$(&#039;#bcas-q&#039;).on(&#039;input search&#039;, function () { if (!this.value.trim() &amp;amp;&amp;amp; state.q) { state.cls = &#039;&#039;; state.tab = &#039;library&#039;; run(); } });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Template:LibraryItem&amp;diff=143734</id>
		<title>Template:LibraryItem</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Template:LibraryItem&amp;diff=143734"/>
		<updated>2026-10-02T23:56:20Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Topic and decade categories for the site search (Module:FacetCategories)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;__NOTOC____NOEDITSECTION__{{#widget:ReadingRoomCovers}}{{DefaultTitle|{{{ AltTitle | }}}}}{{AdminZone&lt;br /&gt;
	|AltTitle={{GetItemData|prop=DisplayName|default={{{ AltTitle | }}}}}&lt;br /&gt;
	|Approach={{{ Approach | }}}&lt;br /&gt;
	|Audience={{{ Audience | }}}&lt;br /&gt;
	|DisableRedirects={{{ DisableRedirects | }}}&lt;br /&gt;
	|SubTheme={{{ SubTheme | }}}&lt;br /&gt;
	|TermTopics={{{ TermTopics | }}}&lt;br /&gt;
	|Theme={{{ Theme | }}}&lt;br /&gt;
	|ParentTemplate=LibraryItem&lt;br /&gt;
	|DrlPageName={{#if:{{#show:{{PAGENAME}}|?DrlPageName#}}&lt;br /&gt;
		|{{#show:{{PAGENAME}}|?DrlPageName#}}&lt;br /&gt;
		|{{#titleparts:{{SUBPAGENAME}} }}&lt;br /&gt;
	}}&lt;br /&gt;
}}{{Header&lt;br /&gt;
	|AltTitle={{{ AltTitle | }}}&lt;br /&gt;
	|TextTranslated={{{ TextTranslated | }}}&lt;br /&gt;
	|SubPagename={{#show:{{PAGENAME}}|?Display title of#}}&lt;br /&gt;
}}&amp;lt;div class=&amp;quot;d-flex justify-content-between&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{#ask:[[{{PAGENAME}}]]&lt;br /&gt;
				[[Contains a full translation of::Texts/Bodhicaryāvatāra]]&lt;br /&gt;
			|link=none&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|template=LinkBackToTrTimeline&lt;br /&gt;
			|outro=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
		}}{{#ask:[[TmlnTextTitle::{{SUBPAGENAME}}]]&lt;br /&gt;
			|link=none&lt;br /&gt;
			|limit=1&lt;br /&gt;
			|template=LinkBackToComTimeline&lt;br /&gt;
			|outro=&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
		}}{{#if:{{{ SubTheme | }}}|{{SubThemesList&lt;br /&gt;
			|{{BASEPAGENAME}}&lt;br /&gt;
			|{{FirstValueOfArray|{{{ SubTheme | }}}|;}}&lt;br /&gt;
			|{{#ifeq:{{{ SubTheme | }}}|SSC Chapter Summaries&lt;br /&gt;
				|Articles/Chapter 1: Giving One&#039;s Body, Possessions, and Virtues;Articles/Chapter 2: Upholding the Dharma from the Perfection of Discipline;Articles/Chapter 3: Perfection of Discipline: Protecting the Dharma Teacher;Articles/Chapter 4: Perfection of Discipline: Discussion of Major Harms in the Sūtras;Articles/Chapter 5: Perfection of Discipline: Avoiding the Harms;Articles/Chapter 6: Protecting the Body;Articles/Chapter 7: Protecting the Possessions and Merit;Articles/Chapter 8: Expiation of Sinful Actions;Articles/Chapter 9: Perfection of Patience;Articles/Chapter 10: Perfection of Effort;Articles/Chapter 11: Praise of Wilderness;Articles/Chapter 12: Purifying the Mind;Articles/Chapter 13: Mindfulness;Articles/Chapter 14: Purification of the Body;Articles/Chapter 15: Purification of Possessions and Merit;Articles/Chapter 16: Enhancement of Body, Possessions, and Merit;Articles/Chapter 17: Benefit of Prostration and Other Practices;Articles/Chapter 18: Recollecting the Three Jewels;Articles/Chapter 19: Enhancing Merit&lt;br /&gt;
				|{{#ask:[[Category:Library Items]][[SubTheme::{{#arraymap:{{{ SubTheme | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|@@@&lt;br /&gt;
					|{{!}}{{!}}&lt;br /&gt;
				}}]]|limit=500|link=none|sep=;|valuesep=;}}&lt;br /&gt;
			}}&lt;br /&gt;
			|sep=none&lt;br /&gt;
		}}&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;|}}{{ReadingTime}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div&amp;gt;{{#arraymap:[[Library]];[[{{BASEPAGENAME}}]];[[Bibliography]];{{#ifexist:{{PAGENAME}}/Full text&lt;br /&gt;
			|[[{{#titleparts:{{PAGENAME}}}}/Full text|&amp;lt;i class=&amp;quot;fa-duotone fa-input-text fa-lg&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Full text available]]&lt;br /&gt;
			|&lt;br /&gt;
		}}&amp;lt;!--&lt;br /&gt;
	The PDF link is gated client-side rather than with ifsysop.&lt;br /&gt;
&lt;br /&gt;
	ifsysop makes a page&#039;s output depend on who is viewing it, so MediaWiki marks&lt;br /&gt;
	the parse transient and refuses to cache it. Measured on this template that&lt;br /&gt;
	meant ttl 0 — every library item re-parsed in full, roughly a second of work&lt;br /&gt;
	including over a hundred GetItemData calls, on every single view by every&lt;br /&gt;
	reader. See .tws-group-only in tws.js.&lt;br /&gt;
--&amp;gt;;&amp;lt;span class=&amp;quot;tws-group-only tws-group-inline&amp;quot; data-group=&amp;quot;sysop&amp;quot;&amp;gt;{{GetItemData&lt;br /&gt;
			|prop=Pdflink&lt;br /&gt;
			|map={{lb}}https://research.tsadra.org/index.php/File:{{ob}}PAGENAMEE:@@@{{cb}} &amp;lt;i class=&amp;quot;fa-duotone fa-file-pdf&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; PDF Link{{rb}}&lt;br /&gt;
		}}&amp;lt;/span&amp;gt;&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-pipe mx-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
	}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;font-italic font-sans-wiki text-100 text-muted mb-4 px-3&amp;quot;&amp;gt;{{#ifeq: {{{ Editorial | }}}&lt;br /&gt;
	|Yes&lt;br /&gt;
	|&#039;&#039;&#039;&#039;&#039;Editorial content&#039;&#039;&#039;&#039;&#039;: This page was written or translated by the Tsadra Foundation staff as part of the editorial project of this website. It is original content written or translated for the Bodhicitta Project.&lt;br /&gt;
	|Please note that many items in our library are simply pages that represent a detailed library catalog entry and citation of someone else&#039;s work, presentation, or performance. [[Project:General disclaimer|Read our General Disclaimer for more information]].&lt;br /&gt;
}} {{GetItemData&lt;br /&gt;
	|prop=Publisherlink&lt;br /&gt;
	|intro=You can find more information about this item on the [&lt;br /&gt;
	|outro=&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;publisher website].&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;ssb-content row&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ssb {{#ifeq:{{{ wideSidebar | }}}|true|col-md-4|col-md-3}} order-md-last sliding-drawer&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner mb-5&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mt-3 mt-md-0&amp;quot;&amp;gt;{{#if:{{{ SourceAuthorOverride | }}}{{{ AuthorOverride | }}}{{{ TranslatorOverride | }}}{{{ EditorOverride | }}}{{{ CompilerOverride | }}}&lt;br /&gt;
					|{{SidebarPeople&lt;br /&gt;
						|sourceauthor={{ArrayNoSpaces|{{{ SourceAuthorOverride | }}}|;}}&lt;br /&gt;
						|authors={{ArrayNoSpaces|{{{ AuthorOverride | }}}|;}}&lt;br /&gt;
						|translators={{ArrayNoSpaces|{{{ TranslatorOverride | }}}|;}}&lt;br /&gt;
						|editors={{ArrayNoSpaces|{{{ EditorOverride | }}}|;}}&lt;br /&gt;
						|compilers={{ArrayNoSpaces|{{{ CompilerOverride | }}}|;}}&lt;br /&gt;
					}}&lt;br /&gt;
					|{{SidebarPeople&lt;br /&gt;
						|sourceauthor={{GetItemData|prop=SourceAuthor}}&lt;br /&gt;
						|authors={{Uniquify|{{GetItemData|prop=BcaAuthor|sep=;}};{{GetItemData|prop=AllAuthors|sep=;}}|;}}&lt;br /&gt;
						|translators={{Uniquify|{{GetItemData|prop=Translator}};{{GetItemData|prop=AllTranslators}}|;}}&lt;br /&gt;
						|contributors={{GetItemData|prop=DrlContributors}}&lt;br /&gt;
						|editors={{GetItemData|prop=Editor}} &lt;br /&gt;
						|creators={{GetItemData|prop=Creator}}&lt;br /&gt;
						|performers={{GetItemData|prop=Performer}}&lt;br /&gt;
						|producers={{GetItemData|prop=Producer}}&lt;br /&gt;
						|publisher={{GetItemData|prop=BcaPublisher}}&lt;br /&gt;
						|compilers={{GetItemData|prop=Compiler}}&lt;br /&gt;
					}}&lt;br /&gt;
				}}&amp;lt;!--&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				--&amp;gt;{{#if:{{{ TermTopics | }}}{{{ TextTopics | }}}{{{ PeopleTopics | }}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarTopics&lt;br /&gt;
					|terms={{{ TermTopics | }}}&lt;br /&gt;
					|texts={{{ TextTopics | }}}&lt;br /&gt;
					|people={{{ PeopleTopics | }}}&lt;br /&gt;
					|drlTopics={{GetItemData|prop=DrlTopics}}&lt;br /&gt;
				}} | }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
				EXTERNAL RESOURCES AND rKTs DATA&lt;br /&gt;
&lt;br /&gt;
				Both were tabs of their own. The sidebar has room now that the&lt;br /&gt;
				people rows are compact, and both belong beside the work rather&lt;br /&gt;
				than behind a tab: the links say where else the text lives, and&lt;br /&gt;
				the rKTs block is catalogue apparatus for scholars, collapsed so&lt;br /&gt;
				it costs nothing for everyone else.&lt;br /&gt;
&lt;br /&gt;
				Each renders nothing when the work has no such data, so the&lt;br /&gt;
				dividers do not strand themselves above an empty section.&lt;br /&gt;
--&amp;gt;{{#if:{{GetItemData|prop=ISTBLink}}{{GetItemData|prop=AdarshaLink}}{{GetItemData|prop=TlbLink}}{{GetItemData|prop=tbrclink}}{{GetItemData|prop=EightyFour}}{{GetItemData|prop=AcipLink}}{{GetItemData|prop=CbetaLink}}{{GetItemData|prop=SatLink}}{{GetItemData|prop=GretilLink}}{{GetItemData|prop=SARITLink}}{{GetItemData|prop=DsbcLink}}{{GetItemData|prop=TsadraEpubLink}}{{GetItemData|prop=LotsaHouseLink}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarLinks}} | }}{{#if:{{GetItemData|prop=RktsNumber}}|&lt;br /&gt;
				&amp;lt;hr class=&amp;quot;no-bg my-2 tsdwiki-border-t-redfade text-center&amp;quot;&amp;gt;&lt;br /&gt;
				{{SidebarRkts}} | }}&lt;br /&gt;
			&amp;lt;/div&amp;gt;{{#ifeq: {{{ Editorial | }}}|Yes|&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mt-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;{{#widget:TocFix}}|}}&lt;br /&gt;
			{{ScrollToTop}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;{{#ifeq:{{{ wideSidebar | }}}|true|col-md-8|col-md-9}}&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;offwhite-bg rounded-xl tsdwiki-depth-1 p-3 p-xl-4 mb-3 mb-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;{{#ifeq: {{GetItemData|prop=Classification}} &lt;br /&gt;
					| Multimedia&lt;br /&gt;
					|&amp;lt;div class=&amp;quot;col-12&amp;quot;&amp;gt;&lt;br /&gt;
					|{{#if:{{{ FrontCoverImg | }}}&lt;br /&gt;
						|&amp;lt;div class=&amp;quot;col-md-3 tws-lightbox&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	No link= on the cover: an empty link= suppresses the anchor entirely, and&lt;br /&gt;
	the anchor is what the lightbox binds to. Left as a normal file link it&lt;br /&gt;
	targets the file page, which is also where MediaWiki emits the&lt;br /&gt;
	.mw-file-source href the lightbox reads the full-size URL from.&lt;br /&gt;
	See the .tws-lightbox handler in tws.js.&lt;br /&gt;
&lt;br /&gt;
	300px, not 500px. MediaWiki puts the ORIGINAL file in the srcset once the&lt;br /&gt;
	1.5x or 2x variant would exceed the image&#039;s native width, and most covers&lt;br /&gt;
	here are under 750px wide — so a 500px request made every Retina display&lt;br /&gt;
	download the full file on page load, up to 3MB. The lightbox fetches the&lt;br /&gt;
	original on click, which is the point of it. The slot is col-md-3, so 300px&lt;br /&gt;
	is ample anyway.&lt;br /&gt;
--&amp;gt;[[File:{{PAGENAME:{{{ FrontCoverImg | }}}}}|300px|class=w-100 h-auto rounded tsdwiki-depth-1 mb-4]]&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
						|{{GetItemData&lt;br /&gt;
							|prop=FrontCoverImg&lt;br /&gt;
							|intro=&amp;lt;div class=&amp;quot;col-md-3 pt-4 tws-lightbox&amp;quot;&amp;gt;&lt;br /&gt;
							|outro=&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9&amp;quot;&amp;gt;&lt;br /&gt;
							|map={{lb}}{{lb}}@@@{{!}}300px{{!}}class=w-100 h-auto rounded tsdwiki-depth-1 mb-4{{rb}}{{rb}}&lt;br /&gt;
							|default=&amp;lt;div class=&amp;quot;col-12&amp;quot;&amp;gt;&lt;br /&gt;
						}}&lt;br /&gt;
					}}&lt;br /&gt;
				}}{{MediaModule&lt;br /&gt;
					|VideoDelay={{{ VideoDelay | }}}&lt;br /&gt;
					|VideoEnd={{{ VideoEnd | }}}&lt;br /&gt;
				}}{{#ifeq: {{{ Editorial | }}}&lt;br /&gt;
					|Yes&lt;br /&gt;
					|{{GetItemData&lt;br /&gt;
						|prop=Abstract&lt;br /&gt;
						|map=&amp;lt;div class=&amp;quot;h4 pt-2&amp;quot;&amp;gt;Abstract&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;mb-3 text-article&amp;quot;&amp;gt;&lt;br /&gt;
@@@&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}{{#if: {{{ EditFeaturedOn | }}} | &lt;br /&gt;
					&amp;lt;h4&amp;gt;Featured on&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;row mb-3&amp;quot;&amp;gt;{{#arraymap:{{{ EditFeaturedOn | }}}&lt;br /&gt;
						|;&lt;br /&gt;
						|@@@&lt;br /&gt;
						|{{MiniTile&lt;br /&gt;
							|wrapperclasses=col-md-6&lt;br /&gt;
							|image={{#show:@@@|?FrontCoverImg#}}&lt;br /&gt;
							|link=@@@&lt;br /&gt;
							|text={{SUBPAGENAME:@@@}}&lt;br /&gt;
						}}&lt;br /&gt;
						|&lt;br /&gt;
					}}&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
					|&amp;lt;h4&amp;gt;{{I18n|en=Description|bo=ངོ་སྤྲོད།}}&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;mb-4 text-article&amp;quot;&amp;gt;{{#if:{{GetItemData|prop=DescriptionTib}}&lt;br /&gt;
						|{{I18n&lt;br /&gt;
							|en={{#if: {{{ AltDescription | }}}&lt;br /&gt;
								|{{{ AltDescription | }}} &lt;br /&gt;
								|{{#ifeq:{{GetItemData|prop=Classification}}|Articles&lt;br /&gt;
									|{{GetItemData&lt;br /&gt;
										|prop=Abstract&lt;br /&gt;
										|default={{GetItemData&lt;br /&gt;
											|prop=Description&lt;br /&gt;
										}}&lt;br /&gt;
									}}&lt;br /&gt;
									|{{GetItemData&lt;br /&gt;
										|prop=Description&lt;br /&gt;
										|default={{GetItemData&lt;br /&gt;
											|prop=Abstract&lt;br /&gt;
										}}&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
							}}&lt;br /&gt;
							|bo={{GetItemData|prop=DescriptionTib}}&lt;br /&gt;
						}}&lt;br /&gt;
						|{{#if: {{{ AltDescription | }}}&lt;br /&gt;
							|{{{ AltDescription | }}} &lt;br /&gt;
							|{{#ifeq:{{GetItemData|prop=Classification}}|Articles&lt;br /&gt;
								|{{GetItemData&lt;br /&gt;
									|prop=Abstract&lt;br /&gt;
									|default={{GetItemData&lt;br /&gt;
										|prop=Description&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
								|{{GetItemData&lt;br /&gt;
									|prop=Description&lt;br /&gt;
									|default={{GetItemData&lt;br /&gt;
										|prop=Abstract&lt;br /&gt;
									}}&lt;br /&gt;
								}}&lt;br /&gt;
							}}&lt;br /&gt;
						}}&lt;br /&gt;
					}}				&lt;br /&gt;
					&amp;lt;/div&amp;gt;{{#if: {{{ EditFeaturedOn | }}} | &lt;br /&gt;
&lt;br /&gt;
					&amp;lt;h4&amp;gt;Featured on&amp;lt;/h4&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;row mb-3&amp;quot;&amp;gt;{{#arraymap:{{{ EditFeaturedOn | }}}&lt;br /&gt;
						|;&lt;br /&gt;
						|@@@&lt;br /&gt;
						|{{MiniTile&lt;br /&gt;
							|wrapperclasses=col-md-6&lt;br /&gt;
							|image={{#show:@@@|?FrontCoverImg#}}&lt;br /&gt;
							|link=@@@&lt;br /&gt;
							|text={{SUBPAGENAME:@@@}}&lt;br /&gt;
						}}&lt;br /&gt;
						|&lt;br /&gt;
					}}&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
				}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;row mx-n2 justify-content-center&amp;quot;&amp;gt;{{#ask:[[{{#arraymap: {{{ AltTitle | }}};{{#show:{{PAGENAME}}|?Fulltitletrans}};{{#show:{{PAGENAME}}|?Display title of}};{{SUBPAGENAME}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|@@@&lt;br /&gt;
					|{{!}}{{!}}&lt;br /&gt;
				}}]][[Category:Key Texts]]&lt;br /&gt;
				|limit=1&lt;br /&gt;
				|format=template&lt;br /&gt;
				|template=TileToKeyText&lt;br /&gt;
				|link=none&lt;br /&gt;
				|default=&lt;br /&gt;
			}}{{#ifexist:{{FULLPAGENAME}}/Full text&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{FULLPAGENAME}}/Full text&lt;br /&gt;
					|label=Read the Full Text&lt;br /&gt;
					|icon=book-open-reader&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#if:{{{ BilingualPage | }}}&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{{ BilingualPage | }}}&lt;br /&gt;
					|label=Bilingual Layout&lt;br /&gt;
					|icon=language&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#if:{{{ PublicPdfFile | }}}&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|ext-link={{filepath:{{PAGENAME:{{{ PublicPdfFile | }}}}} }}&lt;br /&gt;
					|label=Freely Available PDF&lt;br /&gt;
					|icon=file-pdf&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}{{#ifexist:{{FULLPAGENAME}}/Sabche&lt;br /&gt;
				|{{LibItemMiniTile&lt;br /&gt;
					|link={{FULLPAGENAME}}/Sabche&lt;br /&gt;
					|label=Read the Sabche&lt;br /&gt;
					|icon=memo-pad&lt;br /&gt;
				}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	CITED IN THE ŚIKṢĀSAMUCCAYA&lt;br /&gt;
&lt;br /&gt;
	Renders only when this page is actually quoted: at least one segment&#039;s&lt;br /&gt;
	QuoteSource names it. QuoteSource is a Page-type property, so the count is one&lt;br /&gt;
	cheap indexed lookup, and SMW resolves redirects on a page value, so a segment&lt;br /&gt;
	that named one of the text&#039;s other titles counts too. No flag to maintain, and&lt;br /&gt;
	no list to keep in sync as the alignments grow.&lt;br /&gt;
&lt;br /&gt;
	The count is of QUOTATIONS, not segments. One quotation is often split over&lt;br /&gt;
	several consecutive segments — the Pitāputrasamāgamanasūtra has 62 quote&lt;br /&gt;
	segments in the Śikṣāsamuccaya but is quoted 14 times, and one of its runs is&lt;br /&gt;
	36 segments long. See the module for how the runs are collapsed.&lt;br /&gt;
&lt;br /&gt;
	Every aligned translation is searched, not just the Śikṣāsamuccaya: sixteen&lt;br /&gt;
	carry quote data, and 53 texts are cited by more than one — the&lt;br /&gt;
	Laṅkāvatārasūtra by six. The panel groups by citing work, root texts first.&lt;br /&gt;
&lt;br /&gt;
	Collapsed by default, and the panel itself is @deferred so the module runs&lt;br /&gt;
	after the page paints. See Template:SscCitationsDeferred.&lt;br /&gt;
&lt;br /&gt;
	This gate used to test DrlPageName for an &amp;quot;RKTS&amp;quot; catalogue prefix, a proxy for&lt;br /&gt;
	&amp;quot;canonical text&amp;quot; from before QuoteSource was a Page. It hid every cited text&lt;br /&gt;
	without a catalogue number (16 in Oct 2026, e.g. Tathāgatakośasūtra). The&lt;br /&gt;
	module still checks Classification, so a non-text page that is named as a&lt;br /&gt;
	source renders no passages, and tws.js removes the empty panel.&lt;br /&gt;
&lt;br /&gt;
	Keep the pipe on the same line as the expression: #ifexpr fails on a trailing&lt;br /&gt;
	newline.&lt;br /&gt;
--&amp;gt;{{#ifexpr: {{#ask:[[QuoteSource::{{FULLPAGENAME}}]]|format=count}} &amp;gt; 0|&lt;br /&gt;
			&amp;lt;div class=&amp;quot;ssc-citations-block mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;Show the passages&amp;quot; data-collapsetext=&amp;quot;Hide the passages&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;ssc-citations-heading&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa-sharp-duotone fa-solid fa-quote-left fa-sm mr-2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;Quoted in the aligned translations&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;{{#ask:[[{{FULLPAGENAME}}]]&lt;br /&gt;
					|?DrlPageName&lt;br /&gt;
					|format=template&lt;br /&gt;
					|template=SscCitationsDeferred&lt;br /&gt;
					|named args=yes&lt;br /&gt;
					|link=none&lt;br /&gt;
					|limit=1&lt;br /&gt;
					|searchlabel=&lt;br /&gt;
					|default=&lt;br /&gt;
					|@deferred&lt;br /&gt;
				}}&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			|&lt;br /&gt;
			}}{{TileQuery&lt;br /&gt;
				|query=[[Category:Book Excerpts]][[Category:{{SUBPAGENAME}}||{{PAGENAME}}]]&lt;br /&gt;
				|classes=col-md-6 mb-2 mb-md-4&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Book Excerpts&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;row justify-content-center mt-3 my-lg-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}&lt;br /&gt;
			&amp;lt;div class=&amp;quot;alternating-bg text-article opac-85 mt-4&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;row m-0&amp;quot;&amp;gt;{{GetItemData&lt;br /&gt;
						|prop=Citation&lt;br /&gt;
						|intro=&amp;lt;div class=&amp;quot;col-md-3 p-2 font-italic border-top text-md-right&amp;quot;&amp;gt;{{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
							|Classical Works&lt;br /&gt;
							|Reference&lt;br /&gt;
							|Citation&lt;br /&gt;
						}}&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9 p-2 border-top text-90&amp;quot;&amp;gt;&lt;br /&gt;
						|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}{{GetItemData&lt;br /&gt;
						|prop=Publisherlink&lt;br /&gt;
						|intro=&amp;lt;div class=&amp;quot;col-md-3 p-2 font-italic border-top text-md-right&amp;quot;&amp;gt;Publisher Link&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;col-md-9 p-2 border-top text-90&amp;quot;&amp;gt;&lt;br /&gt;
						|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					}}&lt;br /&gt;
				&amp;lt;/div&amp;gt;{{#ask:[[{{PAGENAME}}]]&lt;br /&gt;
					|?SourceTexts&lt;br /&gt;
					|format=template&lt;br /&gt;
					|template=ShowTranslatedTexts&lt;br /&gt;
					|default=&lt;br /&gt;
					|intro=&amp;lt;div class=&amp;quot;row m-0&amp;quot;&amp;gt;&lt;br /&gt;
					|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
					|@deferred&lt;br /&gt;
				}}&lt;br /&gt;
			&amp;lt;/div&amp;gt;{{GetItemData&lt;br /&gt;
				|prop=RecensionCitations&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Recensions&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			}}{{#if:{{{ TextMentions | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ TextMentions | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Texts&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{#if:{{{ PublicationMentions | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ PublicationMentions | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Publications&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{#if:{{{ PeopleMentions | }}}|&amp;lt;h4&amp;gt;People Mentioned&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4 text-85&amp;quot;&amp;gt;{{#arraymap:{{{ PeopleMentions | }}}&lt;br /&gt;
				|;&lt;br /&gt;
				|@@@&lt;br /&gt;
				|{{PersonBadge|@@@}}&lt;br /&gt;
				|&lt;br /&gt;
			}}&amp;lt;/div&amp;gt;|}}{{#if:{{{ RelatedPages | }}}|{{TileQuery&lt;br /&gt;
				|query={{#arraymap:{{{ RelatedPages | }}}&lt;br /&gt;
					|;&lt;br /&gt;
					|@@@&lt;br /&gt;
					|[[@@@]]&lt;br /&gt;
					|OR&lt;br /&gt;
				}}&lt;br /&gt;
				|classes=col-md-6 mb-4&lt;br /&gt;
				|intro=&amp;lt;h4&amp;gt;Related Works&amp;lt;/h4&amp;gt;&amp;lt;div class=&amp;quot;row mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
				|default=&lt;br /&gt;
			}}|}}{{GetItemData&lt;br /&gt;
				|prop=Relatedpagesnotes&lt;br /&gt;
				|intro=&amp;lt;h3&amp;gt;Citations of Related Scholarship&amp;lt;/h3&amp;gt;&amp;lt;div class=&amp;quot;related-citations mb-4&amp;quot;&amp;gt;&lt;br /&gt;
				|outro=&amp;lt;/div&amp;gt;&lt;br /&gt;
			}}&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt;{{#if: {{{ EditorialFullText | }}} |&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-article my-5 time-to-read&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{ EditorialFullText | }}}&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;h2 class=&amp;quot;ref-header&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Notes&amp;lt;/h2&amp;gt;&lt;br /&gt;
			&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	TABLE OF CONTENTS&lt;br /&gt;
&lt;br /&gt;
	A collapsible band above the relationships, not a tab. Two thirds of works&lt;br /&gt;
	have a ToC and it runs to a median of about 1,100 characters — too much to&lt;br /&gt;
	sit open above the relationships, and too useful to bury.&lt;br /&gt;
&lt;br /&gt;
	This was the last thing in the tabber besides the relationships themselves,&lt;br /&gt;
	so the tabber goes with it: a two-tab strip where one tab was often empty is&lt;br /&gt;
	more furniture than navigation. Links and rKTs data moved to the sidebar&lt;br /&gt;
	earlier for the same reason.&lt;br /&gt;
&lt;br /&gt;
	Renders nothing when the work has no ToC, so nothing shows an empty band.&lt;br /&gt;
--&amp;gt;{{#if: {{{ TableOfContents | }}}&lt;br /&gt;
	|&amp;lt;div class=&amp;quot;work-toc mw-collapsible mw-collapsed shadow-sm&amp;quot; data-expandtext=&amp;quot;Show table of contents&amp;quot; data-collapsetext=&amp;quot;Hide table of contents&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;work-toc-heading&amp;quot;&amp;gt;Table of contents&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;formatted-toc offwhite-bg rounded tsdwiki-depth-0 mt-3 p-2 pr-3&amp;quot;&amp;gt;&lt;br /&gt;
{{{ TableOfContents | }}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	|&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	RELATED WORKS&lt;br /&gt;
&lt;br /&gt;
	A page-level header, outside the #ifeq below so both branches carry it. The&lt;br /&gt;
	tabber used to provide this separation; without it the relationship sections&lt;br /&gt;
	ran straight on from the table of contents band with nothing between them.&lt;br /&gt;
&lt;br /&gt;
	Centred with a byline under it, and plenty of room above: this is the seam&lt;br /&gt;
	between the work itself and everything connected to it, so it reads as a&lt;br /&gt;
	break in the page rather than as one more section heading.&lt;br /&gt;
&lt;br /&gt;
	Hidden by CSS when nothing follows it. The sections below come from&lt;br /&gt;
	Module:GetRels and from a deferred query, so whether there is anything to&lt;br /&gt;
	head is not knowable at parse time — an Editorial page, for instance,&lt;br /&gt;
	renders the area but no rows. tws.js drops the heading when it comes up&lt;br /&gt;
	empty, once the deferred rows have landed.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;work-rels&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;work-rels-heading&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;work-rels-title&amp;quot;&amp;gt;Interconnections&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;work-rels-byline&amp;quot;&amp;gt;Works related to this item&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;{{#ifeq:{{SUBPAGENAME}}&lt;br /&gt;
	|Bodhicaryāvatāra&lt;br /&gt;
	|&amp;lt;table id=&amp;quot;RelationshipsContent&amp;quot; class=&amp;quot;smwtable-clean th-top-right th-nowrap border w-100 mw-collapsible&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;th colspan=&amp;quot;2&amp;quot; class=&amp;quot;font-weight-bold&amp;quot;&amp;gt;&amp;lt;center&amp;gt;Text Relationships&amp;lt;/center&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;{{#widget:FilterRelationships|id=Relationships|placeholder=Filter by relationships...}}&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;{{#widget:FilterRelationships|id=Pages|placeholder=Filter by pages found...}}&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		{{#show:{{FULLPAGENAME}}/Relationships|?RelationshipTable}}&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	|&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	EXPLORE PIECES ABOUT THIS WORK&lt;br /&gt;
&lt;br /&gt;
	Our own editorial writing about this text, ahead of the bibliographic&lt;br /&gt;
	relationships below it. These come from the local TextTopics property rather&lt;br /&gt;
	than any of the RelatedTo relationships — no Editorial Content page uses those,&lt;br /&gt;
	in either direction, so GetRels alone can never surface them.&lt;br /&gt;
&lt;br /&gt;
	Rendered with TopicBiblioSection, the same rows as the topic pages, so a piece&lt;br /&gt;
	looks the same wherever it is met. Editorial pages carry no Citation or&lt;br /&gt;
	Pubdate, but TopicBiblioRow already falls back Citation -&amp;gt; Title -&amp;gt; page name,&lt;br /&gt;
	and narration appears by itself through the reverse AssociatedArticle lookup&lt;br /&gt;
	in the row, so nothing extra is needed for either.&lt;br /&gt;
&lt;br /&gt;
	The same piece also appears on the topic pages it lists. That is intended:&lt;br /&gt;
	they are two different ways in to the same writing, not a duplicate.&lt;br /&gt;
&lt;br /&gt;
	Matched on both title forms — relationships store the full prefixed title&lt;br /&gt;
	while TextTopics stores the bare name. See the same fix in Module:GetRels.&lt;br /&gt;
--&amp;gt;{{TopicBiblioSection&lt;br /&gt;
		|query=[[Class::Editorial Content]][[TextTopics::{{SUBPAGENAME}}||{{FULLPAGENAME}}]]&lt;br /&gt;
		|heading=Explore this work&lt;br /&gt;
		|sort=Citation&lt;br /&gt;
		|order=asc&lt;br /&gt;
	}}{{#invoke:GetRels|main}}&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		{{FeatureItems&lt;br /&gt;
			|items={{{ featured-books | }}}&lt;br /&gt;
			|header=Featured books&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-articles | }}}&lt;br /&gt;
			|header=Featured articles&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-dissertations | }}}&lt;br /&gt;
			|header=Featured dissertations&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-texts | }}}&lt;br /&gt;
			|header=Featured source texts&lt;br /&gt;
		}}{{FeatureItems&lt;br /&gt;
			|items={{{ featured-media | }}}&lt;br /&gt;
			|header=Featured multimedia&lt;br /&gt;
		}}&amp;lt;!-- &lt;br /&gt;
		{{#if: {{{ GregNotes | }}} |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;span class=&amp;quot;mw-customtoggle-GregNotes opac-50&amp;quot;&amp;gt;Greg Notes &amp;lt;i class=&amp;quot;fa-solid fa-angle-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-GregNotes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;h3&amp;gt;Initial Notes&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			{{{!}} class=&amp;quot;table offwhite-bg table-striped table-bordered&amp;quot;&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Item Number&lt;br /&gt;
			{{!}} {{{ ItemNumber | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Priority&lt;br /&gt;
			{{!}} {{{ Priority | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Greg Description&lt;br /&gt;
			{{!}} {{{ GregDescription | }}}&lt;br /&gt;
			{{!}}-&lt;br /&gt;
			! Greg Notes&lt;br /&gt;
			{{!}} {{{ GregNotes | }}}&lt;br /&gt;
			{{!}}}&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt; | }} --&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{Categories&lt;br /&gt;
	|Library Items;{{GetItemData|prop=Classification}};{{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
		|Classical Works&lt;br /&gt;
		|{{#ifeq: {{GetItemData|prop=Whichcanon}}&lt;br /&gt;
			|Kangyur&lt;br /&gt;
			|Sutras&lt;br /&gt;
			|Commentaries&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}};{{Uniquify&lt;br /&gt;
		|{{GetItemData&lt;br /&gt;
			|prop=BcaAuthor;AllAuthors;Translator;AllTranslators;DrlContributors;Editor;SourceAuthor;Creator;Performer;Producer;BcaPublisher&lt;br /&gt;
			|sep=;&lt;br /&gt;
			|printsep=;&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
	}};{{#if:{{GetItemData|prop=MediaSeries}}&lt;br /&gt;
		|{{GetItemData|prop=MediaSeries}};Member of a media series&lt;br /&gt;
		|&lt;br /&gt;
	}}{{#if:{{{ BilingualPage | }}}&lt;br /&gt;
		|;Available in Bilingual Format&lt;br /&gt;
	}};{{#ifeq:{{#show:{{PAGENAME}}|?DescriptionByLLM}}&lt;br /&gt;
		|true&lt;br /&gt;
		|Descriptions by LLM&lt;br /&gt;
		|&lt;br /&gt;
	}};{{{ ExtraCats | }}}&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Facet categories for the site search: one per topic and one per decade.&lt;br /&gt;
	Hidden from the footer in CSS. See Module:FacetCategories.&lt;br /&gt;
--&amp;gt;{{#invoke:FacetCategories|main|topics={{{ TermTopics | }}}|date={{GetItemData|prop=Pubdate}}}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
	Silently set SMW properties via lua (for fetched values that are straightforward):&lt;br /&gt;
--&amp;gt;{{SetItemData&lt;br /&gt;
	|source=research&lt;br /&gt;
	|prop=Abstract;Citation;FullTitle;FullTitleTib;FullTitleDev;FullTitleSkt;Fulltitletrans;MediaSeries;RecensionCitations;Relatedpagesnotes;RktsNumber;RktsCanon;RktsSkt;RktsRelationships;RktsNotes;RktsColophon;RktsColophonTitle;Pubdate;DescriptionTib;Publisherlink;SourceTexts;DescriptionByLLM;BcaTibetanPage&lt;br /&gt;
}}{{SetItemData&lt;br /&gt;
	|source=research&lt;br /&gt;
	|prop=ISTBLink;AcipLink;AdarshaLink;AssociatedClassicalWork;BcaAuthor;CbetaLink;Classification;columbiabcrd;Creator;DrlTranspages;DsbcLink;Editor;EightyFour;Event;FirstImage;GretilLink;LocalMediaFile;LotsaHouseLink;MediaCreationDate;Performer;Producer;Roottexttib;Roottextwylie;SARITLink;SatLink;SourceAuthor;StreamingService;Subclass;tbrclink;TlbLink;Totalvolumes;Translator;AllTranslators;TsadraEpubLink;VideoNumberInEvent;VideoStreamID;Whichcanon;RktsAltTitles;RktsAltTitlesSkt;RktsAltTitlesDev;RktstAuthor;RktstAuthorTib;RktstTranslator;RktstTranslatorPandita;BcaPublisher;Associated person;Compiler;Contains a full translation of;Contains a modern commentary of;Contains a partial translation of;Contains a recension of;Contains a review of;Contains a teaching based on;Contains a translation of;Contains polemical content related to;Contains scholarship related to;DrlContributors;Director of editing;Editor;Has a title identical or similar to;Has other volumes;Illustrator;Is a book based on this dissertation;Is a chapter or a part of;Is a commentary of;Is a member of;Is a reading of;Is a scholarly presentation about;Is a teaching based on;Is an interview about;Is another edition of;Is cited in;Is related to;Lead editor;Photographer;Printer;Redactor;Scribe;Shares intertextuality with;Source author;AllAuthors;Language;School;SchoolTib;BcaTibetanGenre;RelatedMedia&lt;br /&gt;
	|sep=;&lt;br /&gt;
}}&amp;lt;!-- &lt;br /&gt;
	END&lt;br /&gt;
&lt;br /&gt;
	Set other properties using SMW&#039;s #set parser function:&lt;br /&gt;
--&amp;gt;{{#set:&lt;br /&gt;
	|DrlPageName={{GetItemData|prop=Pagename}}&lt;br /&gt;
	|CreateRedirectNow={{#ifexist:{{GetItemData|prop=Display title of}}||{{GetItemData|prop=Display title of}} }}&lt;br /&gt;
	|Class={{#if:{{GetItemData|prop=Classification}}&lt;br /&gt;
		|{{GetItemData|prop=Classification}}&lt;br /&gt;
		|unset&lt;br /&gt;
	}}&lt;br /&gt;
	|Volumenumber={{#if:{{GetItemData|prop=Volumenumber}}&lt;br /&gt;
		|{{GetItemData|prop=Volumenumber}}&lt;br /&gt;
		|0&lt;br /&gt;
	}}&lt;br /&gt;
	|Description={{GetItemData&lt;br /&gt;
		|prop=Description&lt;br /&gt;
		|default={{GetItemData|prop=Abstract}}&lt;br /&gt;
	}}&lt;br /&gt;
	|Editorial={{{ Editorial | }}}&lt;br /&gt;
	|ItemNumber={{{ ItemNumber | }}}&lt;br /&gt;
	|Priority={{{ Priority | }}}	&lt;br /&gt;
	|GregDescription={{{ GregDescription | }}}&lt;br /&gt;
	|GregNotes={{{ GregNotes | }}}&lt;br /&gt;
	|Theme={{{ Theme | }}}|+sep=;&lt;br /&gt;
	|SubTheme={{{ SubTheme | }}}|+sep=;&lt;br /&gt;
	|Approach={{{ Approach | }}}|+sep=;&lt;br /&gt;
	|Audience={{{ Audience | }}}|+sep=;&lt;br /&gt;
	|TermTopics={{{ TermTopics | }}}|+sep=;&lt;br /&gt;
	|TextTopics={{{ TextTopics | }}}|+sep=;&lt;br /&gt;
	|PeopleTopics={{{ PeopleTopics | }}}|+sep=;&lt;br /&gt;
	|AllTopics={{#arraymap:{{GetItemData|prop=Subclass}};{{{ TermTopics | }}};{{{ SubTheme | }}};{{{ Theme | }}};{{{ TextTopics | }}};{{{ PeopleTopics | }}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|Title={{#if: {{{ AltTitle | }}}&lt;br /&gt;
		|{{{ AltTitle | }}}&lt;br /&gt;
		|{{#if:{{#show:{{PAGENAME}}|?Display title of}}&lt;br /&gt;
			|{{#show:{{PAGENAME}}|?Display title of}}&lt;br /&gt;
			|{{SUBPAGENAME}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|FrontCoverImg={{#invoke:GetFrontCoverImg|main}}&lt;br /&gt;
	|TileImageUrl={{#if: {{{ FrontCoverImg | }}}&lt;br /&gt;
		|{{filepath:{{#titleparts:{{PAGENAME:{{FirstValueOfArray|{{{ FrontCoverImg | }}}|;}} }} }}|180}}&lt;br /&gt;
		|{{filepath:{{#titleparts:{{PAGENAME:{{FirstValueOfArray|{{#show:{{PAGENAME}}|?FrontCoverImg#}}|;}} }} }}|180}}&lt;br /&gt;
	}}&lt;br /&gt;
	|TileDescription={{#if: {{{ TileDescription | }}}&lt;br /&gt;
		|{{{ TileDescription | }}}&lt;br /&gt;
		|{{#if: {{{ AltDescription | }}}&lt;br /&gt;
			| {{{ AltDescription | }}}&lt;br /&gt;
			| {{GetItemData&lt;br /&gt;
				|prop=Description&lt;br /&gt;
				|default={{GetItemData&lt;br /&gt;
					|prop=Abstract&lt;br /&gt;
					|default={{GetItemData&lt;br /&gt;
						|prop=Citation&lt;br /&gt;
						|default={{RedDot}} &#039;&#039;No description provided.&#039;&#039;&lt;br /&gt;
					}}&lt;br /&gt;
				}}&lt;br /&gt;
			}}&lt;br /&gt;
		}}&lt;br /&gt;
	}}&lt;br /&gt;
	|People={{#arraymap:{{GetItemData&lt;br /&gt;
			|prop=SourceAuthor;BcaAuthor;AllAuthors;Translator;AllTranslators;DrlContributors;Editor;Creator;Performer;Producer&lt;br /&gt;
			|sep=;&lt;br /&gt;
			|printsep=;&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|TextClass={{#ifeq: {{GetItemData|prop=Classification}}&lt;br /&gt;
		|Classical Works&lt;br /&gt;
		|{{#ifeq: {{GetItemData|prop=Whichcanon}}&lt;br /&gt;
			|Kangyur&lt;br /&gt;
			|Sutra&lt;br /&gt;
			|Commentary&lt;br /&gt;
		}}&lt;br /&gt;
		|&lt;br /&gt;
	}}&lt;br /&gt;
	|RelatedBcaVerse={{#arraymap:{{#if: {{{ BcaChapterNum | }}}{{{ BcaVerseNum | }}}&lt;br /&gt;
			|{{{ BcaChapterNum | }}}.{{{ BcaVerseNum | }}}&lt;br /&gt;
			|&lt;br /&gt;
		}};{{#if:{{{ BcaChapVerseNum | }}}&lt;br /&gt;
			|{{{ BcaChapVerseNum | }}}&lt;br /&gt;
			|&lt;br /&gt;
		}};{{#if:{{{ BcaChapVerseNumRangeStart | }}}&lt;br /&gt;
			|{{#ask:&lt;br /&gt;
				[[TransMemID::001-Tsadra-BCA-Root-Padmakara]][[SegmentOrder::&amp;gt;{{#show:Texts/Bodhicaryāvatāra/Verses/{{{ BcaChapVerseNumRangeStart | }}}|?SegmentOrder}}]][[SegmentOrder::&amp;lt;{{#show:Texts/Bodhicaryāvatāra/Verses/{{{ BcaChapVerseNumRangeEnd | }}}|?SegmentOrder}}]]&lt;br /&gt;
				|?RootTextChapVerseNum=&lt;br /&gt;
				|mainlabel=-&lt;br /&gt;
				|sep=;&lt;br /&gt;
				|valuesep=;&lt;br /&gt;
			}}&lt;br /&gt;
			|&lt;br /&gt;
		}}&lt;br /&gt;
		|;&lt;br /&gt;
		|@@@&lt;br /&gt;
		|@@@&lt;br /&gt;
		|;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|TransMemID={{#ask:&lt;br /&gt;
		[[Category:Translation Memory Basepages]][[SourceWikiPage::{{SUBPAGENAME}}]]OR[[Category:Translation Memory Basepages]][[TranslationWikiPage::{{SUBPAGENAME}}]]&lt;br /&gt;
		|?TransMemID=&lt;br /&gt;
		|mainlabel=-&lt;br /&gt;
		|sep=;&lt;br /&gt;
		|valuesep=;&lt;br /&gt;
	}}|+sep=;&lt;br /&gt;
	|KeyTextPage={{#ask:[[Category:Key Texts]][[LibraryTextPage::{{PAGENAME}}]]|limit=1|searchlabel=|link=none}}&lt;br /&gt;
	|BilingualPage={{{ BilingualPage | }}}&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Term={{GetItemData|prop=FullTitle}};{{GetItemData|prop=FullTitleDev}};{{GetItemData|prop=FullTitleSkt}};{{GetItemData|prop=FullTitleTib}};{{#titleparts: {{SUBPAGENAME}} }}|}}|+sep=;&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Definition={{GetItemData|prop=Citation}}|}}&lt;br /&gt;
	|{{#ifeq: {{GetItemData|prop=Classification}}|Classical Works|&lt;br /&gt;
	Glossary-Link={{FULLPAGENAME}}|}}&lt;br /&gt;
	|PublicPdfFile={{{ PublicPdfFile | }}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{TemplateTag}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:FacetCategories&amp;diff=143733</id>
		<title>Module:FacetCategories</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:FacetCategories&amp;diff=143733"/>
		<updated>2026-10-02T23:55:53Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Topic and decade categories for library items (search facets)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Facet categories for library items, so the site search can filter on them.&lt;br /&gt;
--&lt;br /&gt;
-- CirrusSearch cannot read SMW properties, but it can filter by category&lt;br /&gt;
-- (incategory:). Class, people and publishers already arrive as categories;&lt;br /&gt;
-- this adds the two facets that did not:&lt;br /&gt;
--&lt;br /&gt;
--   Topic: &amp;lt;TermTopics value&amp;gt;     one per topic, e.g. &amp;quot;Topic: Compassion&amp;quot;&lt;br /&gt;
--   Decade: &amp;lt;1990s&amp;gt;               from the first four-digit year in Pubdate&lt;br /&gt;
--&lt;br /&gt;
-- The categories are hidden from the page footer in CSS (tws.main.scss,&lt;br /&gt;
-- .catlinks), so they need no category pages.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:FacetCategories|main|topics={{{ TermTopics | }}}|date={{GetItemData|prop=Pubdate}}}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local out = {}&lt;br /&gt;
	local seen = {}&lt;br /&gt;
&lt;br /&gt;
	for topic in mw.text.gsplit(args.topics or &#039;&#039;, &#039;%s*;%s*&#039;) do&lt;br /&gt;
		topic = mw.text.trim(topic)&lt;br /&gt;
		if topic ~= &#039;&#039; and not seen[topic] then&lt;br /&gt;
			seen[topic] = true&lt;br /&gt;
			-- A category name cannot carry these characters.&lt;br /&gt;
			local name = topic:gsub(&#039;[%[%]{}|#&amp;lt;&amp;gt;]&#039;, &#039;&#039;)&lt;br /&gt;
			if name ~= &#039;&#039; then&lt;br /&gt;
				table.insert(out, &#039;[[Category:Topic: &#039; .. name .. &#039;]]&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local year = tonumber((args.date or &#039;&#039;):match(&#039;(%d%d%d%d)&#039;))&lt;br /&gt;
	if year and year &amp;gt;= 1000 and year &amp;lt;= 2100 then&lt;br /&gt;
		table.insert(out, &#039;[[Category:Decade: &#039; .. (year - year % 10) .. &#039;s]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143732</id>
		<title>Advanced Search/Preview</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143732"/>
		<updated>2026-10-02T23:52:35Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Preview published to Advanced Search&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Advanced Search]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Library/Preview&amp;diff=143731</id>
		<title>Library/Preview</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Library/Preview&amp;diff=143731"/>
		<updated>2026-10-02T23:52:33Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Preview published to Library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Library]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Advanced_Search&amp;diff=143730</id>
		<title>Advanced Search</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Advanced_Search&amp;diff=143730"/>
		<updated>2026-10-02T23:52:32Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Advanced Search: new site search (approved preview); classic form still linked&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION____NOGLOSSARY__{{RemoveFirstHeading}}&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Search&lt;br /&gt;
	|subtitle=Everything on the Bodhicitta website&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:BcaSearch}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;bcas-start&amp;quot; class=&amp;quot;bcas-start&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Start panel: shown until a search runs (Widget:BcaSearch hides it). A map of the&lt;br /&gt;
	site for someone who does not yet know what to type.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__grid&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Doorways&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Discover|&amp;lt;b&amp;gt;Discover&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;What bodhicitta is, and why it matters&amp;lt;/span&amp;gt;]][[Explore|&amp;lt;b&amp;gt;Explore&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Stories, key concepts, texts and people&amp;lt;/span&amp;gt;]][[Study|&amp;lt;b&amp;gt;Study&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The core texts and their traditions&amp;lt;/span&amp;gt;]][[Practice|&amp;lt;b&amp;gt;Practice&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Bringing bodhicitta into practice&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;The library&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Library/Books|Books &amp;lt;span&amp;gt;{{#ask:[[Category:Books]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Articles|Articles &amp;lt;span&amp;gt;{{#ask:[[Category:Articles]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Classical Works|Classical works &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Sutras|Sūtras &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]][[TextClass::Sutra]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Dissertations|Dissertations &amp;lt;span&amp;gt;{{#ask:[[Category:Dissertations]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Tibetan Publications|Tibetan publications &amp;lt;span&amp;gt;{{#ask:[[Category:Tibetan Publications]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Multimedia|Media &amp;lt;span&amp;gt;{{#ask:[[Category:Multimedia]]|format=count}}&amp;lt;/span&amp;gt;]][[Listening Room|Listening Room &amp;lt;span&amp;gt;{{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}}&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more bcas-start__more--stack&amp;quot;&amp;gt;[[Library|The whole library →]][[Bibliography|The bibliography →]][[Timelines|Timelines →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Most-covered topics&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Topics/Mind Training|Mind Training]][[Topics/Compassion|Compassion]][[Topics/Equalizing and Exchanging Self and Others|Exchanging self and others]][[Topics/Tonglen|Tonglen]][[Topics/Six Perfections|Six Perfections]][[Topics/Emptiness|Emptiness]][[Topics/Madhyamaka|Madhyamaka]][[Topics/Two Truths|Two Truths]][[Topics/Buddha-Nature|Buddha-Nature]][[Topics/Four Immeasurables|Four Immeasurables]][[Topics/The Concept of Bodhicitta|The concept of bodhicitta]][[Topics/Buddhist Ethics|Buddhist Ethics]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;[[Topics|All topics →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Śāntideva&#039;s texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Bodhicaryāvatāra|&amp;lt;b&amp;gt;Bodhicaryāvatāra&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Way of the Bodhisattva, verse by verse&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__sub&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Chapters&amp;lt;/span&amp;gt;[[Texts/Bodhicaryāvatāra/Chapter 1|1]][[Texts/Bodhicaryāvatāra/Chapter 2|2]][[Texts/Bodhicaryāvatāra/Chapter 3|3]][[Texts/Bodhicaryāvatāra/Chapter 4|4]][[Texts/Bodhicaryāvatāra/Chapter 5|5]][[Texts/Bodhicaryāvatāra/Chapter 6|6]][[Texts/Bodhicaryāvatāra/Chapter 7|7]][[Texts/Bodhicaryāvatāra/Chapter 8|8]][[Texts/Bodhicaryāvatāra/Chapter 9|9]][[Texts/Bodhicaryāvatāra/Chapter 10|10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__note&amp;quot;&amp;gt;Looking for a verse? Type its number in the search box, e.g. 9.1.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Śikṣāsamuccaya|&amp;lt;b&amp;gt;Śikṣāsamuccaya&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Compendium of Training and the works it cites&amp;lt;/span&amp;gt;]][[Śāntideva|&amp;lt;b&amp;gt;Śāntideva&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;His life and works&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;text-center text-80 my-4&amp;quot; style=&amp;quot;color:#666&amp;quot;&amp;gt;Prefer the earlier form (person, topic and verse fields)? [[Special:RunQuery/Search|Open the classic search form]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#set:&lt;br /&gt;
	|Description=Search everything on the Bodhicitta website: the library, passages in the aligned translations and commentaries, essays, topics and people, with class filters and shareable searches.&lt;br /&gt;
	|Title=Advanced Search: Research &amp;amp; Filter Bodhicitta Resources&lt;br /&gt;
	|AllTopics=Advanced Search; Buddhist Research Tool; Search by BCA Verse; Bodhicitta Database; Śāntideva Search; Shantideva; Bodhisattvacaryāvatāra Index; Śikṣāsamuccaya Search; Mahāyāna Resource Search; Buddhist Bibliography Search; Scriptural Verse Locator; Scholar Search; Tibetan Text Search; Research Database; Tsadra Foundation Search; Find Buddhist Teachings; Filter by Topic; Filter by Person&lt;br /&gt;
	|FrontCoverImg=File:Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Library&amp;diff=143729</id>
		<title>Library</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Library&amp;diff=143729"/>
		<updated>2026-10-02T23:52:29Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Library: bibliographic rows with title lines, filters and live counts (approved preview)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RemoveFirstHeading}}__NOEDITSECTION__&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-header-container my-3 my-md-5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;main-header-title mt-5 line13&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-110 pb-1&amp;quot;&amp;gt;Library&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Jumbo&lt;br /&gt;
	|full-width=yes&lt;br /&gt;
	|image=Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
	|text=This curated digital library brings together books, articles, dissertations, sūtras, commentaries, Tibetan and Sanskrit publications, and multimedia resources on bodhicitta—the mind of awakening. Each entry includes detailed abstracts, tables of contents, and cross-references showing how works connect to other sources. Dedicated author pages provide biographical information and complete bibliographies for scholars, translators, and historical figures. Discover how centuries of wisdom on the awakened mind interconnect across Buddhist cultures and traditions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please note that many items in our library are simply pages that represent a detailed library catalog entry and citation of someone else&#039;s work, presentation, or performance. [[Project:General disclaimer|Read our General Disclaimer for more information]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Listening_Room|Also available]]&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;[[Listening_Room|Listening Room]]: A library of audio content from the website and other sources currently in development.&#039;&#039;&#039; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;ssb-content row mt-5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;LibraryContent&amp;quot; class=&amp;quot;col-md-9 filterableContent&amp;quot;&amp;gt;{{#invoke:LibraryRows|controls&lt;br /&gt;
		|classes=Books;Articles;Dissertations;Classical Works;Tibetan Publications;Sanskrit Publications;Other Classical Publications;Multimedia&lt;br /&gt;
		|q:Multimedia=[[Category:Multimedia]][[Volumenumber::&amp;lt;1]]&lt;br /&gt;
	}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Books|link=Library/Books|query=[[Category:Books]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Articles|link=Library/Articles|query=[[Category:Articles]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Dissertations|link=Library/Dissertations|query=[[Category:Dissertations]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Sutras|link=Library/Sutras|query=[[Category:Classical Works]][[TextClass::Sutra]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Classical Works|link=Library/Classical Works|query=[[Category:Classical Works]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Tibetan Publications|link=Library/Tibetan Publications|query=[[Category:Tibetan Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Sanskrit Publications|link=Library/Sanskrit Publications|query=[[Category:Sanskrit Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Other Classical Publications|link=Library/Other Classical Publications|query=[[Category:Other Classical Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Multimedia|link=Library/Multimedia|query=[[Category:Multimedia]][[Volumenumber::&amp;lt;1]]|title=yes}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-3 ssb&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner toc-level-1-only&amp;quot; style=&amp;quot;top: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mb-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
			{{ScrollToTop}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#set:&lt;br /&gt;
    |Description=A curated digital library of Bodhicitta resources, featuring books, articles, dissertations, sūtras, and classical commentaries in Tibetan and Sanskrit with detailed abstracts and cross-references.&lt;br /&gt;
    |Title=Bodhicitta Library: Research, Scriptures, and Multimedia Resources&lt;br /&gt;
    |AllTopics=Bodhicitta Library; Buddhist Bibliography; Mahāyāna Sūtras; Śāntideva Studies; Bodhisattvacaryāvatāra Commentaries; Tibetan Publications; Sanskrit Buddhist Texts; Buddhist Dissertations; Classical Buddhist Works; Multimedia Buddhist Resources; Buddhist Scholarship; Translation Studies; Indo-Tibetan Literature; Buddhist Research Tools; Digital Dharma Library; Tsadra Foundation Library; Bodhicitta Research; Scriptural Commentaries&lt;br /&gt;
	|FrontCoverImg=File:Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Resources]]&lt;br /&gt;
[[Category:Bodhicitta Project]]&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143726</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143726"/>
		<updated>2026-10-02T23:48:20Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search: example links look like links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a,.bcas__hint a{cursor:pointer;color:#0645AD;text-decoration:none;border-bottom:1px dotted rgba(6,69,173,.4)}&lt;br /&gt;
.bcas__tips a:hover,.bcas__hint a:hover{color:#001028}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.6rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		return (cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		// The results come first; the counts follow once they are on screen, so the&lt;br /&gt;
		// first page is not queued behind eleven count searches (and a class button&lt;br /&gt;
		// clicked early does not wait behind them either).&lt;br /&gt;
		var listDone = loadList(false) || $.Deferred().resolve().promise();&lt;br /&gt;
		listDone.always(function () { $.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		}); });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143724</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143724"/>
		<updated>2026-10-02T23:47:33Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search: results first, counts after&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__hint a{cursor:pointer}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a{cursor:pointer}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.6rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		return (cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		// The results come first; the counts follow once they are on screen, so the&lt;br /&gt;
		// first page is not queued behind eleven count searches (and a class button&lt;br /&gt;
		// clicked early does not wait behind them either).&lt;br /&gt;
		var listDone = loadList(false) || $.Deferred().resolve().promise();&lt;br /&gt;
		listDone.always(function () { $.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		}); });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143723</id>
		<title>Advanced Search/Preview</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143723"/>
		<updated>2026-10-02T23:45:44Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search preview: chapters under the Bodhicaryāvatāra, stacked library links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX____NOTOC____NOEDITSECTION____NOGLOSSARY__{{RemoveFirstHeading}}&amp;lt;div class=&amp;quot;alert alert-warning mt-3&amp;quot;&amp;gt;Preview of the new site search. The current form is still at [[Advanced Search]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Search&lt;br /&gt;
	|subtitle=Everything on the Bodhicitta website&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:BcaSearch}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;bcas-start&amp;quot; class=&amp;quot;bcas-start&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Start panel: shown until a search runs (Widget:BcaSearch hides it). A map of the&lt;br /&gt;
	site for someone who does not yet know what to type.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__grid&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Doorways&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Discover|&amp;lt;b&amp;gt;Discover&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;What bodhicitta is, and why it matters&amp;lt;/span&amp;gt;]][[Explore|&amp;lt;b&amp;gt;Explore&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Stories, key concepts, texts and people&amp;lt;/span&amp;gt;]][[Study|&amp;lt;b&amp;gt;Study&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The core texts and their traditions&amp;lt;/span&amp;gt;]][[Practice|&amp;lt;b&amp;gt;Practice&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Bringing bodhicitta into practice&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;The library&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Library/Books|Books &amp;lt;span&amp;gt;{{#ask:[[Category:Books]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Articles|Articles &amp;lt;span&amp;gt;{{#ask:[[Category:Articles]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Classical Works|Classical works &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Sutras|Sūtras &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]][[TextClass::Sutra]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Dissertations|Dissertations &amp;lt;span&amp;gt;{{#ask:[[Category:Dissertations]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Tibetan Publications|Tibetan publications &amp;lt;span&amp;gt;{{#ask:[[Category:Tibetan Publications]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Multimedia|Media &amp;lt;span&amp;gt;{{#ask:[[Category:Multimedia]]|format=count}}&amp;lt;/span&amp;gt;]][[Listening Room|Listening Room &amp;lt;span&amp;gt;{{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}}&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more bcas-start__more--stack&amp;quot;&amp;gt;[[Library|The whole library →]][[Bibliography|The bibliography →]][[Timelines|Timelines →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Most-covered topics&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Topics/Mind Training|Mind Training]][[Topics/Compassion|Compassion]][[Topics/Equalizing and Exchanging Self and Others|Exchanging self and others]][[Topics/Tonglen|Tonglen]][[Topics/Six Perfections|Six Perfections]][[Topics/Emptiness|Emptiness]][[Topics/Madhyamaka|Madhyamaka]][[Topics/Two Truths|Two Truths]][[Topics/Buddha-Nature|Buddha-Nature]][[Topics/Four Immeasurables|Four Immeasurables]][[Topics/The Concept of Bodhicitta|The concept of bodhicitta]][[Topics/Buddhist Ethics|Buddhist Ethics]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;[[Topics|All topics →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Śāntideva&#039;s texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Bodhicaryāvatāra|&amp;lt;b&amp;gt;Bodhicaryāvatāra&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Way of the Bodhisattva, verse by verse&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__sub&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bcas-start__label&amp;quot;&amp;gt;Chapters&amp;lt;/span&amp;gt;[[Texts/Bodhicaryāvatāra/Chapter 1|1]][[Texts/Bodhicaryāvatāra/Chapter 2|2]][[Texts/Bodhicaryāvatāra/Chapter 3|3]][[Texts/Bodhicaryāvatāra/Chapter 4|4]][[Texts/Bodhicaryāvatāra/Chapter 5|5]][[Texts/Bodhicaryāvatāra/Chapter 6|6]][[Texts/Bodhicaryāvatāra/Chapter 7|7]][[Texts/Bodhicaryāvatāra/Chapter 8|8]][[Texts/Bodhicaryāvatāra/Chapter 9|9]][[Texts/Bodhicaryāvatāra/Chapter 10|10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__note&amp;quot;&amp;gt;Looking for a verse? Type its number in the search box, e.g. 9.1.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Śikṣāsamuccaya|&amp;lt;b&amp;gt;Śikṣāsamuccaya&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Compendium of Training and the works it cites&amp;lt;/span&amp;gt;]][[Śāntideva|&amp;lt;b&amp;gt;Śāntideva&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;His life and works&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143722</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143722"/>
		<updated>2026-10-02T23:45:43Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search: passages open in the bilingual view, faster class buttons, search tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__hint a{cursor:pointer}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
.bcas__tips{font-size:.88rem;color:#555;margin:-.4rem 0 .8rem}&lt;br /&gt;
.bcas__tips summary{cursor:pointer;color:#41607D;display:inline-block}&lt;br /&gt;
.bcas__tips ul{margin:.4rem 0 0 1.2rem}&lt;br /&gt;
.bcas__tips li{margin:.15rem 0}&lt;br /&gt;
.bcas__tips a{cursor:pointer}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.6rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__more--stack a{display:block;padding:.15rem 0}&lt;br /&gt;
.bcas-start__sub{margin:.1rem 0 .6rem .6rem;padding-left:.8rem;border-left:2px solid rgba(191,150,89,.35)}&lt;br /&gt;
.bcas-start__label{font-size:.78rem;color:#888;margin-right:.2rem;align-self:center}&lt;br /&gt;
.bcas-start__note{font-size:.82rem;color:#666;margin-top:.45rem}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;details class=&amp;quot;bcas__tips&amp;quot;&amp;gt;&amp;lt;summary&amp;gt;Search tips&amp;lt;/summary&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;quot;exact phrase&amp;quot;&amp;lt;/b&amp;gt; in quotes finds the words together: &amp;lt;a data-q=&amp;quot;&amp;amp;quot;wish-fulfilling jewel&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;wish-fulfilling jewel&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;-word&amp;lt;/b&amp;gt; leaves a word out: &amp;lt;a data-q=&amp;quot;compassion -dalai&amp;quot;&amp;gt;compassion -dalai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt; finds either word: &amp;lt;a data-q=&amp;quot;tonglen OR lojong&amp;quot;&amp;gt;tonglen OR lojong&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;word*&amp;lt;/b&amp;gt; matches any ending: &amp;lt;a data-q=&amp;quot;meditat*&amp;quot;&amp;gt;meditat*&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;intitle:&amp;lt;/b&amp;gt; searches titles only: &amp;lt;a data-q=&amp;quot;intitle:bodhisattva&amp;quot;&amp;gt;intitle:bodhisattva&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;Accents are optional (&amp;lt;a data-q=&amp;quot;santideva&amp;quot;&amp;gt;santideva&amp;lt;/a&amp;gt; finds Śāntideva); Tibetan script and Wylie work too.&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;A verse number such as &amp;lt;a data-q=&amp;quot;8.120&amp;quot;&amp;gt;8.120&amp;lt;/a&amp;gt; offers that Bodhicaryāvatāra verse page.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&amp;lt;/details&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	// First page of results per class, fetched with the class counts, so a class&lt;br /&gt;
	// button shows its rows without waiting for another search.&lt;br /&gt;
	var firstPages = {};&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	// Where a passage sits in its bilingual layout: the same rules as the&lt;br /&gt;
	// citations panel (Module:SscCitations bilingualLink).&lt;br /&gt;
	var SINGLE_PAGE_BILINGUAL = { &#039;013-Tsadra-BCA-Com-Minyak-Ch9&#039;: 1, &#039;011-Tsadra-BCA-Com-Pawo&#039;: 1 };&lt;br /&gt;
	var NAMED_BILINGUAL_SUBPAGE = { &#039;020-Tsadra-BC-Root-Bhavanakrama-1&#039;: &#039;Bhavanakrama-1&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-2&#039;: &#039;Bhavanakrama-2&#039;, &#039;020-Tsadra-BC-Root-Bhavanakrama-3&#039;: &#039;Bhavanakrama-3&#039; };&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var tm = first(po, &#039;TransMemID&#039;) || title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;);&lt;br /&gt;
		var ord = String(first(po, &#039;SegmentOrder&#039;) || first(po, &#039;SourceSegmentOrder&#039;) || &#039;&#039;).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		if (!base) { base = first(po, &#039;SourceWikiPage&#039;); return base ? mw.util.getUrl(base) : &#039;&#039;; }&lt;br /&gt;
		if (!ord) return mw.util.getUrl(base + &#039;/Bilingual&#039;);&lt;br /&gt;
		if (NAMED_BILINGUAL_SUBPAGE[tm]) return mw.util.getUrl(base + &#039;/Bilingual/&#039; + NAMED_BILINGUAL_SUBPAGE[tm]) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		if (SINGLE_PAGE_BILINGUAL[tm] || !ch) return mw.util.getUrl(base + &#039;/Bilingual&#039;) + &#039;#seg-&#039; + ord;&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual/&#039; + ch) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&#039; + (href ? &#039;&amp;lt;span&amp;gt;bilingual view&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		var key = state.q + &#039;|&#039; + state.cls;&lt;br /&gt;
		var cached = (g.id === &#039;library&#039; &amp;amp;&amp;amp; state.cls &amp;amp;&amp;amp; state.offset === 0 &amp;amp;&amp;amp; firstPages[key]);&lt;br /&gt;
		(cached ? $.Deferred().resolve(cached).promise() : search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE)).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				// Covers load lazily from Special:Redirect, so the rows do not wait on an&lt;br /&gt;
				// image lookup (the files live on Commons, which can be slow).&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var th = {};&lt;br /&gt;
					titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) th[f] = mw.util.getUrl(&#039;Special:Redirect/file/&#039; + f.replace(/^File:/, &#039;&#039;), { width: 120 }); });&lt;br /&gt;
					return renderLibrary(hits, data, th);&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder|?SourceSegmentOrder|?TransMemID|?SourceWikiPage&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		var my = token + 1;&lt;br /&gt;
		// Counts for every group, then for each library class, all in parallel.&lt;br /&gt;
		$.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, PAGE).then(function (r) { cc[c] = r.searchinfo.totalhits; firstPages[state.q + &#039;|&#039; + c] = r; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		loadList(false);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;.bcas__tips&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Library/Preview&amp;diff=143720</id>
		<title>Library/Preview</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Library/Preview&amp;diff=143720"/>
		<updated>2026-10-02T23:41:11Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Preview: default placeholder with the total&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX__&amp;lt;div class=&amp;quot;alert alert-warning mt-3&amp;quot;&amp;gt;Preview of the new Library layout (rows instead of tiles). The live page is [[Library]].&amp;lt;/div&amp;gt;&lt;br /&gt;
{{RemoveFirstHeading}}__NOEDITSECTION__&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-header-container my-3 my-md-5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;main-header-title mt-5 line13&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;text-110 pb-1&amp;quot;&amp;gt;Library&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Jumbo&lt;br /&gt;
	|full-width=yes&lt;br /&gt;
	|image=Jason-leung-D4YrzSwyIEc-unsplash.jpg&lt;br /&gt;
	|text=This curated digital library brings together books, articles, dissertations, sūtras, commentaries, Tibetan and Sanskrit publications, and multimedia resources on bodhicitta—the mind of awakening. Each entry includes detailed abstracts, tables of contents, and cross-references showing how works connect to other sources. Dedicated author pages provide biographical information and complete bibliographies for scholars, translators, and historical figures. Discover how centuries of wisdom on the awakened mind interconnect across Buddhist cultures and traditions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Please note that many items in our library are simply pages that represent a detailed library catalog entry and citation of someone else&#039;s work, presentation, or performance. [[Project:General disclaimer|Read our General Disclaimer for more information]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Listening_Room|Also available]]&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;[[Listening_Room|Listening Room]]: A library of audio content from the website and other sources currently in development.&#039;&#039;&#039; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;ssb-content row mt-5&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;LibraryContent&amp;quot; class=&amp;quot;col-md-9 filterableContent&amp;quot;&amp;gt;{{#invoke:LibraryRows|controls&lt;br /&gt;
		|classes=Books;Articles;Dissertations;Classical Works;Tibetan Publications;Sanskrit Publications;Other Classical Publications;Multimedia&lt;br /&gt;
		|q:Multimedia=[[Category:Multimedia]][[Volumenumber::&amp;lt;1]]&lt;br /&gt;
	}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Books|link=Library/Books|query=[[Category:Books]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Articles|link=Library/Articles|query=[[Category:Articles]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Dissertations|link=Library/Dissertations|query=[[Category:Dissertations]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Sutras|link=Library/Sutras|query=[[Category:Classical Works]][[TextClass::Sutra]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Classical Works|link=Library/Classical Works|query=[[Category:Classical Works]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Tibetan Publications|link=Library/Tibetan Publications|query=[[Category:Tibetan Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Sanskrit Publications|link=Library/Sanskrit Publications|query=[[Category:Sanskrit Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Other Classical Publications|link=Library/Other Classical Publications|query=[[Category:Other Classical Publications]]|title=yes}}&lt;br /&gt;
		{{#invoke:LibraryRows|section|heading=Multimedia|link=Library/Multimedia|query=[[Category:Multimedia]][[Volumenumber::&amp;lt;1]]|title=yes}}&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col-md-3 ssb&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;sidebar ssb__inner toc-level-1-only&amp;quot; style=&amp;quot;top: 100px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;mb-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
			{{ScrollToTop}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143719</id>
		<title>Module:LibraryRows</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Module:LibraryRows&amp;diff=143719"/>
		<updated>2026-10-02T23:41:10Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Placeholder carries the total&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Bibliographic rows for the library hub pages (Library, Library/Books, ...).&lt;br /&gt;
--&lt;br /&gt;
-- The same rows the topic pages use (Template:TopicBiblioRow): cover, citation,&lt;br /&gt;
-- class and date, an &amp;quot;About this item&amp;quot; disclosure. They replace the tile grid,&lt;br /&gt;
-- which was heavier to render and showed less.&lt;br /&gt;
--&lt;br /&gt;
--   {{#invoke:LibraryRows|controls|classes=Books;Articles;Classical Works|q:Multimedia=[[...]]}}&lt;br /&gt;
--       text filter plus class pills, as on topic pages (tws.js drives both)&lt;br /&gt;
--   {{#invoke:LibraryRows|section|heading=Books|link=Library/Books|query=[[Category:Books]]|title=yes}}&lt;br /&gt;
--       one class: a counted heading, then the rows (title=yes: title line above the citation)&lt;br /&gt;
--&lt;br /&gt;
-- Rows load in deferred chunks of CHUNK, so a long class does not hold up the&lt;br /&gt;
-- page; the number of chunks comes from the count, so nothing is truncated (the&lt;br /&gt;
-- old tile chunks stopped at a fixed 1,100).&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local CHUNK = 100&lt;br /&gt;
&lt;br /&gt;
-- Printout names must match Template:TopicBiblioRow&#039;s parameters (named args).&lt;br /&gt;
-- BcaAuthor is taken raw (#) so the row can build the link itself.&lt;br /&gt;
local PRINTOUTS = &#039;|?Citation|?BcaAuthor#=BcaAuthor|?Class|?Title|?FrontCoverImg|?Pubdate|?TileDescription|?Description&#039;&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	s = mw.text.trim(s or &#039;&#039;)&lt;br /&gt;
	return s ~= &#039;&#039; and s or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function count(frame, query)&lt;br /&gt;
	local n = frame:preprocess(&#039;{{#ask:&#039; .. query .. &#039;|format=count}}&#039;)&lt;br /&gt;
	return tonumber((n or &#039;&#039;):match(&#039;%d+&#039;)) or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.controls(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local classes = trim(args.classes) or &#039;&#039;&lt;br /&gt;
	local base = trim(args.base) or &#039;[[Category:Library Items]]&#039;&lt;br /&gt;
	local pills = {}&lt;br /&gt;
	local total = 0&lt;br /&gt;
	for class in mw.text.gsplit(classes, &#039;%s*;%s*&#039;) do&lt;br /&gt;
		if class ~= &#039;&#039; then&lt;br /&gt;
			-- A pill counts what its section lists: pass q:&amp;lt;Class&amp;gt;=&amp;lt;query&amp;gt; when the&lt;br /&gt;
			-- section uses a narrower query than &amp;quot;every item of this class&amp;quot;.&lt;br /&gt;
			local n = count(frame, trim(args[&#039;q:&#039; .. class]) or (base .. &#039;[[Class::&#039; .. class .. &#039;]]&#039;))&lt;br /&gt;
			if n &amp;gt; 0 then&lt;br /&gt;
				total = total + n&lt;br /&gt;
				table.insert(pills, &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&amp;quot; data-filter-class=&amp;quot;&#039; .. mw.text.encode(class) ..&lt;br /&gt;
					&#039;&amp;quot;&amp;gt;&#039; .. class .. &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; .. mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local all = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill is-active&amp;quot; data-filter-class=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		mw.language.getContentLanguage():formatNum(total) .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	-- No whitespace between the containers and their children: a newline there&lt;br /&gt;
	-- makes MediaWiki wrap the run in a &amp;lt;p&amp;gt;, which then becomes the only flex child.&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;topic-biblio-controls&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-filter&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
		frame:preprocess(&#039;{{#widget:filterInput|placeholder=&#039; .. (trim(args.placeholder) or&lt;br /&gt;
			(&#039;Filter &#039; .. mw.language.getContentLanguage():formatNum(total) .. &#039; items…&#039;)) .. &#039;}}&#039;) ..&lt;br /&gt;
		&#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-pills&amp;quot;&amp;gt;&#039; .. all .. table.concat(pills) .. &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.section(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local query = trim(args.query)&lt;br /&gt;
	if not query then return &#039;&#039; end&lt;br /&gt;
	local heading = trim(args.heading)&lt;br /&gt;
	local link = trim(args.link)&lt;br /&gt;
	local sort = trim(args.sort) or &#039;Citation&#039;&lt;br /&gt;
	local order = trim(args.order) or &#039;asc&#039;&lt;br /&gt;
	-- title=yes: each row leads with the work&#039;s title above the citation.&lt;br /&gt;
	local userparam = (trim(args.title) == &#039;yes&#039;) and &#039;|userparam=title&#039; or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local n = count(frame, query)&lt;br /&gt;
	if n == 0 then return &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
	local out = { &#039;&amp;lt;div class=&amp;quot;topic-biblio-section&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
	if heading then&lt;br /&gt;
		local label = link and (&#039;[[&#039; .. link .. &#039;|&#039; .. heading .. &#039;]]&#039;) or heading&lt;br /&gt;
		table.insert(out, &#039;&amp;lt;h2 class=&amp;quot;link-no-border&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; ..&lt;br /&gt;
			mw.language.getContentLanguage():formatNum(n) .. &#039;&amp;lt;/span&amp;gt; &#039; .. label .. &#039;&amp;lt;/h2&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;div class=&amp;quot;topic-biblio-list&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
	for offset = 0, n - 1, CHUNK do&lt;br /&gt;
		table.insert(out, frame:preprocess(&#039;{{#ask:&#039; .. query .. PRINTOUTS ..&lt;br /&gt;
			&#039;|format=template|template=TopicBiblioRow|named args=yes|link=none&#039; ..&lt;br /&gt;
			&#039;|sort=&#039; .. sort .. &#039;|order=&#039; .. order ..&lt;br /&gt;
			userparam ..&lt;br /&gt;
			&#039;|limit=&#039; .. CHUNK .. &#039;|offset=&#039; .. offset ..&lt;br /&gt;
			-- Each deferred chunk is parsed on its own, so the page&#039;s __NOGLOSSARY__&lt;br /&gt;
			-- would not reach it: the glossary would mark up every chunk (~2,300&lt;br /&gt;
			-- terms across the Library). A wrapper whose class is exactly&lt;br /&gt;
			-- &amp;quot;noglossary&amp;quot; keeps it out: measured 800 -&amp;gt; 440 ms and 388 -&amp;gt; 285 KB&lt;br /&gt;
			-- for a chunk of 100 rows.&lt;br /&gt;
			&#039;|intro=&amp;lt;div class=&amp;quot;noglossary&amp;quot;&amp;gt;|outro=&amp;lt;/div&amp;gt;&#039; ..&lt;br /&gt;
			&#039;|searchlabel=|default=|@deferred}}&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143712</id>
		<title>Widget:BcaSearch</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Widget:BcaSearch&amp;diff=143712"/>
		<updated>2026-10-02T23:21:57Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Start panel: two columns&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Site search for the Bodhicitta wiki (preview). Used on [[Advanced Search/Preview]]. Full-text search through CirrusSearch, results grouped (library, passages in the aligned texts, essays, topics, people), class filters with counts, the library&#039;s bibliographic rows, and the search kept in the page address so it can be shared.&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bcas{max-width:1100px;margin:1rem auto 3rem}&lt;br /&gt;
.bcas__bar{display:flex;gap:.6rem;align-items:stretch;margin-bottom:.8rem}&lt;br /&gt;
.bcas__input{flex:1;font-size:1.2rem;padding:.7rem 1rem;border:1px solid #c9c2b2;border-radius:6px;background:#fffcf5;box-shadow:inset 0 1px 2px rgba(0,0,0,.05)}&lt;br /&gt;
.bcas__input:focus{outline:2px solid #41607D;outline-offset:1px}&lt;br /&gt;
.bcas__go{padding:0 1.3rem;border:1px solid #BA1B1D;border-radius:6px;background:#fffcf5;color:#24231F;font-size:1rem;cursor:pointer}&lt;br /&gt;
.bcas__go:hover{background:#fff}&lt;br /&gt;
.bcas__hint{font-size:.85rem;color:#666;margin:.2rem 0 1rem}&lt;br /&gt;
.bcas__hint a{cursor:pointer}&lt;br /&gt;
.bcas__tabs{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid rgba(17,54,81,.15);margin:1rem 0 .8rem}&lt;br /&gt;
.bcas__tab{padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0;cursor:pointer;color:#41607D;font-size:.95rem;margin-bottom:-1px;background:none}&lt;br /&gt;
.bcas__tab.is-active{background:#fffcf5;border-color:rgba(17,54,81,.15);color:#24231F;font-weight:600}&lt;br /&gt;
.bcas__tab .n{opacity:.7;margin-left:.3rem;font-weight:400}&lt;br /&gt;
.bcas__status{font-size:.9rem;color:#666;margin:.4rem 0 .8rem}&lt;br /&gt;
.bcas__shortcut{background:#fffcf5;border-left:3px solid #BA1B1D;padding:.6rem .9rem;margin:.6rem 0 1rem;border-radius:0 6px 6px 0}&lt;br /&gt;
.bcas__list{background:#fffcf5;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06)}&lt;br /&gt;
.bcas .searchmatch{background:rgba(201,162,74,.28);border-radius:2px;padding:0 1px;font-weight:600}&lt;br /&gt;
.bcas__snip{font-size:.92rem;color:#444;margin-top:.3rem;line-height:1.45}&lt;br /&gt;
.bcas__hit{padding:.85rem 1.15rem;border-top:1px solid rgba(177,175,169,.35)}&lt;br /&gt;
.bcas__hit:first-child{border-top:0}&lt;br /&gt;
.bcas__hit-title{font-size:1.3rem;font-weight:500;font-family:&#039;Cormorant Garamond&#039;,serif}&lt;br /&gt;
.bcas__hit-meta{font-size:.82rem;color:#666;margin-top:.15rem}&lt;br /&gt;
.bcas__hit-meta &amp;gt; span + span::before{content:&#039;·&#039;;margin:0 .4rem;opacity:.45}&lt;br /&gt;
.bcas__more{display:block;margin:1rem auto 0;padding:.5rem 1.2rem;border:1px solid #c9c2b2;border-radius:999px;background:#fffcf5;cursor:pointer}&lt;br /&gt;
.bcas__pills{margin:.2rem 0 .8rem}&lt;br /&gt;
.bcas__empty{padding:1.2rem;color:#666}&lt;br /&gt;
/* Start panel (in the page below the widget) */&lt;br /&gt;
.bcas-start{max-width:1100px;margin:1.5rem auto 3rem}&lt;br /&gt;
.bcas-start__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:1.2rem}&lt;br /&gt;
.bcas-start__card{background:#fffcf5;border-radius:8px;border-top:2px solid #BA1B1D;padding:1rem 1.2rem 1.1rem;box-shadow:0 1px 2px rgba(0,0,0,.06),0 6px 16px rgba(60,40,10,.08)}&lt;br /&gt;
.bcas-start__h{font-family:&#039;Cormorant Garamond&#039;,serif;font-size:1.45rem;font-weight:500;margin:0 0 .6rem}&lt;br /&gt;
.bcas-start__links a{display:block;padding:.45rem .6rem;margin:0 -.6rem;border-radius:6px;color:#113651;text-decoration:none}&lt;br /&gt;
.bcas-start__links a:hover{background:rgba(191,150,89,.1)}&lt;br /&gt;
.bcas-start__links b{font-weight:600;display:block}&lt;br /&gt;
.bcas-start__links span{font-size:.85rem;color:#666}&lt;br /&gt;
.bcas-start__chips{display:flex;flex-wrap:wrap;gap:.4rem}&lt;br /&gt;
.bcas-start__chips a{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .8rem;border:1px solid #d6d0c2;border-radius:999px;background:#fff;color:#113651;font-size:.9rem;text-decoration:none}&lt;br /&gt;
.bcas-start__chips a:hover{border-color:#bf9659;background:rgba(191,150,89,.08)}&lt;br /&gt;
.bcas-start__chips a span{color:#888;font-size:.8rem}&lt;br /&gt;
.bcas-start__chips--small{margin-top:.6rem}&lt;br /&gt;
.bcas-start__chips--small a{padding:.15rem .6rem;font-size:.82rem}&lt;br /&gt;
.bcas-start__more{margin-top:.7rem;font-size:.85rem;color:#666}&lt;br /&gt;
/* Whole row is the link: hover tint and a gold edge, as on PLL&#039;s lists */&lt;br /&gt;
.bcas__list .topic-biblio-row,.bcas__hit{cursor:pointer;position:relative;transition:background-color .15s ease,box-shadow .15s ease}&lt;br /&gt;
.bcas__list .topic-biblio-row:hover,.bcas__hit:hover{background:rgba(191,150,89,.09);box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__list .topic-biblio-row:focus-within,.bcas__hit:focus-within{box-shadow:inset 3px 0 0 #bf9659}&lt;br /&gt;
.bcas__refine{display:flex;align-items:center;gap:.8rem;margin:.2rem 0 .6rem}&lt;br /&gt;
.bcas__refine input{flex:0 1 22rem;padding:.45rem 1rem;border:1px solid #d6d0c2;border-radius:2em;background:#fffcf5;font-size:.92rem}&lt;br /&gt;
.bcas__refine input:focus{outline:none;border-color:#bf9659;box-shadow:0 0 0 3px rgba(191,150,89,.22)}&lt;br /&gt;
.bcas__refine .bcas__status{margin:0}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas noglossary&amp;quot; id=&amp;quot;bcas&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;form class=&amp;quot;bcas__bar&amp;quot; id=&amp;quot;bcas-form&amp;quot; role=&amp;quot;search&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;input class=&amp;quot;bcas__input&amp;quot; id=&amp;quot;bcas-q&amp;quot; type=&amp;quot;search&amp;quot; autocomplete=&amp;quot;off&amp;quot; placeholder=&amp;quot;Search everything on bodhicitta: books, texts, passages, essays, topics, people…&amp;quot; aria-label=&amp;quot;Search the site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button class=&amp;quot;bcas__go&amp;quot; type=&amp;quot;submit&amp;quot;&amp;gt;Search&amp;lt;/button&amp;gt;&lt;br /&gt;
	&amp;lt;/form&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__hint&amp;quot; id=&amp;quot;bcas-hint&amp;quot;&amp;gt;Try &amp;lt;a data-q=&amp;quot;tonglen&amp;quot;&amp;gt;tonglen&amp;lt;/a&amp;gt;, &amp;lt;a data-q=&amp;quot;Santideva&amp;quot;&amp;gt;Santideva&amp;lt;/a&amp;gt; (accents optional), &amp;lt;a data-q=&amp;quot;9.1&amp;quot;&amp;gt;9.1&amp;lt;/a&amp;gt; (a verse), &amp;lt;a data-q=&amp;quot;&amp;amp;quot;bodhicitta of aspiration&amp;amp;quot;&amp;quot;&amp;gt;&amp;quot;bodhicitta of aspiration&amp;quot;&amp;lt;/a&amp;gt; (exact phrase) or &amp;lt;a data-q=&amp;quot;བྱང་ཆུབ་སེམས&amp;quot;&amp;gt;བྱང་ཆུབ་སེམས&amp;lt;/a&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;bcas-shortcut&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__tabs&amp;quot; id=&amp;quot;bcas-tabs&amp;quot; role=&amp;quot;tablist&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__pills topic-biblio-pills&amp;quot; id=&amp;quot;bcas-pills&amp;quot; hidden&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__refine&amp;quot; id=&amp;quot;bcas-refine&amp;quot; hidden&amp;gt;&amp;lt;input id=&amp;quot;bcas-filter&amp;quot; type=&amp;quot;search&amp;quot; placeholder=&amp;quot;Filter these results…&amp;quot; aria-label=&amp;quot;Filter the results shown&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__status&amp;quot; id=&amp;quot;bcas-status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;bcas__list&amp;quot; id=&amp;quot;bcas-list&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;button class=&amp;quot;bcas__more&amp;quot; id=&amp;quot;bcas-more&amp;quot; type=&amp;quot;button&amp;quot; hidden&amp;gt;Show more results&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
// Inline scripts run before ResourceLoader has loaded jQuery and mediawiki.util,&lt;br /&gt;
// so the search starts from the RLQ queue once those modules are ready.&lt;br /&gt;
(window.RLQ = window.RLQ || []).push([[&#039;mediawiki.util&#039;, &#039;jquery&#039;], function () {&lt;br /&gt;
	var $ = jQuery;&lt;br /&gt;
	var API = mw.util.wikiScript(&#039;api&#039;);&lt;br /&gt;
	var PAGE = 20;&lt;br /&gt;
&lt;br /&gt;
	// Each group is one CirrusSearch query. prefix: must come last in a query.&lt;br /&gt;
	var GROUPS = [&lt;br /&gt;
		{ id: &#039;library&#039;, label: &#039;Library&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Library Items&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;passages&#039;, label: &#039;Passages in the texts&#039;, ns: &#039;3100&#039;, extra: &#039;&#039; },&lt;br /&gt;
		{ id: &#039;essays&#039;, label: &#039;Essays &amp;amp; guides&#039;, ns: &#039;0&#039;, extra: &#039;incategory:&amp;quot;Editorial Content&amp;quot;&#039; },&lt;br /&gt;
		{ id: &#039;topics&#039;, label: &#039;Topics&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;Topics/&#039; },&lt;br /&gt;
		{ id: &#039;people&#039;, label: &#039;People&#039;, ns: &#039;0&#039;, extra: &#039;&#039;, prefix: &#039;People/&#039; }&lt;br /&gt;
	];&lt;br /&gt;
	var CLASSES = [&#039;Books&#039;, &#039;Articles&#039;, &#039;Dissertations&#039;, &#039;Classical Works&#039;, &#039;Tibetan Publications&#039;, &#039;Multimedia&#039;];&lt;br /&gt;
&lt;br /&gt;
	var state = { q: &#039;&#039;, tab: &#039;library&#039;, cls: &#039;&#039;, offset: 0 };&lt;br /&gt;
	var counts = {};&lt;br /&gt;
	var token = 0;&lt;br /&gt;
&lt;br /&gt;
	function esc(s) { return mw.html.escape(String(s == null ? &#039;&#039; : s)); }&lt;br /&gt;
	function link(title, text) { return &#039;&amp;lt;a href=&amp;quot;&#039; + esc(mw.util.getUrl(title)) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;; }&lt;br /&gt;
	function fmt(n) { return Number(n || 0).toLocaleString(&#039;en&#039;); }&lt;br /&gt;
&lt;br /&gt;
	function cirrus(group, cls) {&lt;br /&gt;
		var q = state.q;&lt;br /&gt;
		if (group.extra) q += &#039; &#039; + group.extra;&lt;br /&gt;
		if (cls) q += &#039; incategory:&amp;quot;&#039; + cls + &#039;&amp;quot;&#039;;&lt;br /&gt;
		if (group.prefix) q += &#039; prefix:&#039; + group.prefix;&lt;br /&gt;
		return q;&lt;br /&gt;
	}&lt;br /&gt;
	function search(group, cls, offset, limit) {&lt;br /&gt;
		return $.getJSON(API, {&lt;br /&gt;
			action: &#039;query&#039;, list: &#039;search&#039;, format: &#039;json&#039;, formatversion: 2,&lt;br /&gt;
			srsearch: cirrus(group, cls), srnamespace: group.ns, srlimit: limit,&lt;br /&gt;
			sroffset: offset || 0, srprop: &#039;snippet|titlesnippet&#039;, srinfo: &#039;totalhits&#039;&lt;br /&gt;
		}).then(function (d) {&lt;br /&gt;
			if (!d || !d.query) throw new Error(&#039;search failed&#039;);&lt;br /&gt;
			return d.query;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function ask(titles, printouts) {&lt;br /&gt;
		if (!titles.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		var q = titles.map(function (t) { return &#039;[[&#039; + t + &#039;]]&#039;; }).join(&#039; OR &#039;) + printouts + &#039;|limit=&#039; + titles.length;&lt;br /&gt;
		return $.getJSON(API, { action: &#039;ask&#039;, format: &#039;json&#039;, query: q }).then(function (d) {&lt;br /&gt;
			return (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.results) || {};&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function covers(files) {&lt;br /&gt;
		if (!files.length) return $.Deferred().resolve({}).promise();&lt;br /&gt;
		return $.getJSON(API, { action: &#039;query&#039;, format: &#039;json&#039;, formatversion: 2, titles: files.join(&#039;|&#039;), prop: &#039;imageinfo&#039;, iiprop: &#039;url&#039;, iiurlwidth: 120 })&lt;br /&gt;
			.then(function (d) {&lt;br /&gt;
				var out = {};&lt;br /&gt;
				((d.query &amp;amp;&amp;amp; d.query.pages) || []).forEach(function (p) { if (p.imageinfo &amp;amp;&amp;amp; p.imageinfo[0]) out[p.title] = p.imageinfo[0].thumburl || p.imageinfo[0].url; });&lt;br /&gt;
				((d.query &amp;amp;&amp;amp; d.query.normalized) || []).forEach(function (n) { if (out[n.to]) out[n.from] = out[n.to]; });&lt;br /&gt;
				return out;&lt;br /&gt;
			}, function () { return {}; });&lt;br /&gt;
	}&lt;br /&gt;
	function first(po, k) { var v = po &amp;amp;&amp;amp; po[k]; if (!v || !v.length) return &#039;&#039;; v = v[0]; return typeof v === &#039;object&#039; ? (v.fulltext || v.raw || &#039;&#039;) : v; }&lt;br /&gt;
&lt;br /&gt;
	// ---------- rendering ----------&lt;br /&gt;
	function renderLibrary(hits, data, thumbs) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var cit = first(po, &#039;Citation&#039;), cls = first(po, &#039;Class&#039;), date = first(po, &#039;Pubdate&#039;), title = first(po, &#039;Title&#039;) || h.title.replace(/^[^\/]*\//, &#039;&#039;);&lt;br /&gt;
			var cover = first(po, &#039;FrontCoverImg&#039;), src = cover &amp;amp;&amp;amp; thumbs[cover];&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;topic-biblio-row topic-biblio-row--titled&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
				(src ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + esc(src) + &#039;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; style=&amp;quot;width:100%;height:100%;object-fit:cover&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; : &#039;&amp;lt;div class=&amp;quot;topic-biblio-thumb topic-biblio-thumb-empty&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-body&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;topic-biblio-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(title)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(cit ? &#039;&amp;lt;div class=&amp;quot;topic-biblio-citation&amp;quot;&amp;gt;&#039; + link(h.title, cit) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;topic-biblio-meta&amp;quot;&amp;gt;&#039; + (cls ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-class&amp;quot;&amp;gt;&#039; + esc(cls) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + (date ? &#039;&amp;lt;span class=&amp;quot;topic-biblio-date&amp;quot;&amp;gt;&#039; + esc(date) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function bilingual(po, title) {&lt;br /&gt;
		var base = first(po, &#039;TranslationWikiPage&#039;), ch = first(po, &#039;TranslationChapter&#039;), ord = first(po, &#039;SegmentOrder&#039;);&lt;br /&gt;
		if (!base || !ord) return &#039;&#039;;&lt;br /&gt;
		ord = String(ord).replace(/,/g, &#039;&#039;);&lt;br /&gt;
		return mw.util.getUrl(base + &#039;/Bilingual&#039; + (ch ? &#039;/&#039; + ch : &#039;&#039;)) + &#039;#seg-&#039; + ord;&lt;br /&gt;
	}&lt;br /&gt;
	function renderPassages(hits, data) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var po = (data[h.title] || {}).printouts || {};&lt;br /&gt;
			var work = first(po, &#039;TranslationWikiPage&#039;) || h.title.split(&#039;/&#039;)[0].replace(&#039;Translation Memory:&#039;, &#039;&#039;);&lt;br /&gt;
			var ch = first(po, &#039;TranslationChapter&#039;), href = bilingual(po, h.title);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + (href ? &#039;&amp;lt;a href=&amp;quot;&#039; + esc(href) + &#039;&amp;quot;&amp;gt;&#039; : &#039;&#039;) + esc(String(work).replace(/^(Books|Articles|Dissertations)\//, &#039;&#039;)) + (href ? &#039;&amp;lt;/a&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				&#039;&amp;lt;div class=&amp;quot;bcas__hit-meta&amp;quot;&amp;gt;&#039; + (ch ? &#039;&amp;lt;span&amp;gt;Chapter &#039; + esc(ch) + &#039;&amp;lt;/span&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;span&amp;gt;passage &#039; + esc(h.title.split(&#039;/&#039;).pop()) + &#039;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&#039; + link(h.title, &#039;segment record&#039;) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPlain(hits) {&lt;br /&gt;
		return hits.map(function (h) {&lt;br /&gt;
			var name = h.title.replace(/^(Topics|People|Explore|Study|Discover|Practice)\//, &#039;&#039;);&lt;br /&gt;
			return &#039;&amp;lt;div class=&amp;quot;bcas__hit&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas__hit-title&amp;quot;&amp;gt;&#039; + link(h.title, esc(name)) + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
				(h.snippet ? &#039;&amp;lt;div class=&amp;quot;bcas__snip&amp;quot;&amp;gt;…&#039; + h.snippet + &#039;…&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function renderTabs() {&lt;br /&gt;
		var html = GROUPS.map(function (g) {&lt;br /&gt;
			return &#039;&amp;lt;button type=&amp;quot;button&amp;quot; role=&amp;quot;tab&amp;quot; class=&amp;quot;bcas__tab&#039; + (g.id === state.tab ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-tab=&amp;quot;&#039; + g.id + &#039;&amp;quot;&amp;gt;&#039; + esc(g.label) + &#039;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;&#039; + (counts[g.id] == null ? &#039;…&#039; : fmt(counts[g.id])) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
		}).join(&#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function renderPills(classCounts) {&lt;br /&gt;
		if (state.tab !== &#039;library&#039;) { $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); return; }&lt;br /&gt;
		var html = &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls ? &#039;&#039; : &#039; is-active&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&amp;quot;&amp;gt;All &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(counts.library) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		CLASSES.forEach(function (c) {&lt;br /&gt;
			var n = classCounts[c]; if (!n) return;&lt;br /&gt;
			html += &#039;&amp;lt;span class=&amp;quot;topic-biblio-pill&#039; + (state.cls === c ? &#039; is-active&#039; : &#039;&#039;) + &#039;&amp;quot; data-cls=&amp;quot;&#039; + esc(c) + &#039;&amp;quot;&amp;gt;&#039; + esc(c) + &#039; &amp;lt;span class=&amp;quot;rel-count&amp;quot;&amp;gt;&#039; + fmt(n) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).html(html).prop(&#039;hidden&#039;, false);&lt;br /&gt;
	}&lt;br /&gt;
	function shortcut() {&lt;br /&gt;
		var m = state.q.trim().match(/^(\d{1,2})\.(\d{1,3})$/);&lt;br /&gt;
		if (!m) { $(&#039;#bcas-shortcut&#039;).empty(); return; }&lt;br /&gt;
		var v = m[1] + &#039;.&#039; + m[2];&lt;br /&gt;
		$(&#039;#bcas-shortcut&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__shortcut&amp;quot;&amp;gt;Looking for Bodhicaryāvatāra verse &#039; + esc(v) + &#039;? &#039; +&lt;br /&gt;
			link(&#039;Texts/Bodhicaryāvatāra/Verses/&#039; + v, &#039;Open the verse page&#039;) + &#039; (sources, translations, commentaries) or the &#039; +&lt;br /&gt;
			link(&#039;Topics/BCA &#039; + v, &#039;topic page for BCA &#039; + v) + &#039; (works on this verse).&amp;lt;/div&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function writeUrl() {&lt;br /&gt;
		var u = new URL(location.href);&lt;br /&gt;
		[&#039;q&#039;, &#039;tab&#039;, &#039;class&#039;].forEach(function (k) { u.searchParams.delete(k); });&lt;br /&gt;
		if (state.q) u.searchParams.set(&#039;q&#039;, state.q);&lt;br /&gt;
		if (state.q &amp;amp;&amp;amp; state.tab !== &#039;library&#039;) u.searchParams.set(&#039;tab&#039;, state.tab);&lt;br /&gt;
		if (state.cls) u.searchParams.set(&#039;class&#039;, state.cls);&lt;br /&gt;
		history.replaceState(null, &#039;&#039;, u.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadList(append) {&lt;br /&gt;
		var my = ++token;&lt;br /&gt;
		var g = GROUPS.filter(function (x) { return x.id === state.tab; })[0];&lt;br /&gt;
		if (!append) { state.offset = 0; $(&#039;#bcas-list&#039;).empty(); }&lt;br /&gt;
		$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, true);&lt;br /&gt;
		$(&#039;#bcas-status&#039;).text(&#039;Searching…&#039;);&lt;br /&gt;
		search(g, g.id === &#039;library&#039; ? state.cls : &#039;&#039;, state.offset, PAGE).then(function (r) {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			var hits = r.search || [];&lt;br /&gt;
			if (g.id === &#039;passages&#039;) hits = hits.filter(function (h) { return h.title.indexOf(&#039;/&#039;) &amp;gt; -1; });&lt;br /&gt;
			var total = r.searchinfo ? r.searchinfo.totalhits : hits.length;&lt;br /&gt;
			var titles = hits.map(function (h) { return h.title; });&lt;br /&gt;
			var p;&lt;br /&gt;
			if (g.id === &#039;library&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?Citation|?Class|?Pubdate|?Title|?FrontCoverImg&#039;).then(function (data) {&lt;br /&gt;
					var files = []; titles.forEach(function (t) { var f = first(((data[t] || {}).printouts) || {}, &#039;FrontCoverImg&#039;); if (f) files.push(f); });&lt;br /&gt;
					return covers(files).then(function (th) { return renderLibrary(hits, data, th); });&lt;br /&gt;
				});&lt;br /&gt;
			} else if (g.id === &#039;passages&#039;) {&lt;br /&gt;
				p = ask(titles, &#039;|?TranslationWikiPage|?TranslationChapter|?SegmentOrder&#039;).then(function (data) { return renderPassages(hits, data); });&lt;br /&gt;
			} else {&lt;br /&gt;
				p = $.Deferred().resolve(renderPlain(hits)).promise();&lt;br /&gt;
			}&lt;br /&gt;
			return p.then(function (html) {&lt;br /&gt;
				if (my !== token) return;&lt;br /&gt;
				if (!total) { $(&#039;#bcas-list&#039;).html(&#039;&amp;lt;div class=&amp;quot;bcas__empty&amp;quot;&amp;gt;Nothing found in &#039; + esc(g.label.toLowerCase()) + &#039;. Try another group above, fewer words, or a different spelling.&amp;lt;/div&amp;gt;&#039;); $(&#039;#bcas-status&#039;).text(&#039;&#039;); return; }&lt;br /&gt;
				$(&#039;#bcas-list&#039;).append(html);&lt;br /&gt;
				state.offset += PAGE;&lt;br /&gt;
				window.setTimeout(refine, 0);&lt;br /&gt;
				var shown = Math.min(state.offset, total);&lt;br /&gt;
				$(&#039;#bcas-status&#039;).text(&#039;Showing &#039; + fmt(shown) + &#039; of &#039; + fmt(total) + &#039; in &#039; + g.label.toLowerCase() + (state.cls ? &#039; · &#039; + state.cls : &#039;&#039;) + &#039;.&#039;);&lt;br /&gt;
				$(&#039;#bcas-more&#039;).prop(&#039;hidden&#039;, state.offset &amp;gt;= total);&lt;br /&gt;
			});&lt;br /&gt;
		}).fail(function () {&lt;br /&gt;
			if (my !== token) return;&lt;br /&gt;
			$(&#039;#bcas-status&#039;).text(&#039;The search could not run just now. Please try again in a moment.&#039;);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Narrow the rows already shown, without a new search (accents ignored).&lt;br /&gt;
	function fold(s) { return String(s).normalize(&#039;NFD&#039;).replace(/[\u0300-\u036f]/g, &#039;&#039;).toLowerCase(); }&lt;br /&gt;
	function refine() {&lt;br /&gt;
		var v = fold($(&#039;#bcas-filter&#039;).val().trim()), shown = 0, all = 0;&lt;br /&gt;
		$(&#039;#bcas-list&#039;).children(&#039;.topic-biblio-row, .bcas__hit&#039;).each(function () {&lt;br /&gt;
			var ok = !v || fold($(this).text()).indexOf(v) &amp;gt; -1;&lt;br /&gt;
			$(this).toggle(ok); all++; if (ok) shown++;&lt;br /&gt;
		});&lt;br /&gt;
		$(&#039;#bcas-filtered&#039;).remove();&lt;br /&gt;
		if (v) $(&#039;#bcas-status&#039;).append(&#039;&amp;lt;span id=&amp;quot;bcas-filtered&amp;quot;&amp;gt; &#039; + fmt(shown) + &#039; of the &#039; + fmt(all) + &#039; shown match the filter.&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function run() {&lt;br /&gt;
		state.q = $(&#039;#bcas-q&#039;).val().trim();&lt;br /&gt;
		writeUrl();&lt;br /&gt;
		shortcut();&lt;br /&gt;
		if (!state.q) { $(&#039;#bcas-tabs,#bcas-pills,#bcas-more,#bcas-refine&#039;).prop(&#039;hidden&#039;, true); $(&#039;#bcas-list,#bcas-status&#039;).empty(); $(&#039;#bcas-hint, #bcas-start&#039;).show(); return; }&lt;br /&gt;
		$(&#039;#bcas-hint, #bcas-start&#039;).hide();&lt;br /&gt;
		$(&#039;#bcas-refine&#039;).prop(&#039;hidden&#039;, false); $(&#039;#bcas-filter&#039;).val(&#039;&#039;);&lt;br /&gt;
		counts = {};&lt;br /&gt;
		renderTabs();&lt;br /&gt;
		var my = token + 1;&lt;br /&gt;
		// Counts for every group, then for each library class, all in parallel.&lt;br /&gt;
		$.when.apply($, GROUPS.map(function (g) {&lt;br /&gt;
			return search(g, &#039;&#039;, 0, 1).then(function (r) { counts[g.id] = r.searchinfo.totalhits; }, function () { counts[g.id] = 0; });&lt;br /&gt;
		})).always(function () {&lt;br /&gt;
			renderTabs();&lt;br /&gt;
			if (state.tab === &#039;library&#039;) {&lt;br /&gt;
				var cc = {};&lt;br /&gt;
				$.when.apply($, CLASSES.map(function (c) {&lt;br /&gt;
					return search(GROUPS[0], c, 0, 1).then(function (r) { cc[c] = r.searchinfo.totalhits; }, function () {});&lt;br /&gt;
				})).always(function () { renderPills(cc); });&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		loadList(false);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(function () {&lt;br /&gt;
		var params = new URL(location.href).searchParams;&lt;br /&gt;
		state.tab = params.get(&#039;tab&#039;) || &#039;library&#039;;&lt;br /&gt;
		state.cls = params.get(&#039;class&#039;) || &#039;&#039;;&lt;br /&gt;
		$(&#039;#bcas-q&#039;).val(params.get(&#039;q&#039;) || &#039;&#039;);&lt;br /&gt;
		$(&#039;#bcas-form&#039;).on(&#039;submit&#039;, function (e) { e.preventDefault(); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-hint&#039;).on(&#039;click&#039;, &#039;a[data-q]&#039;, function () { $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = &#039;&#039;; run(); });&lt;br /&gt;
		$(&#039;#bcas-tabs&#039;).on(&#039;click&#039;, &#039;.bcas__tab&#039;, function () { state.tab = $(this).data(&#039;tab&#039;); state.cls = &#039;&#039;; writeUrl(); renderTabs(); $(&#039;#bcas-pills&#039;).prop(&#039;hidden&#039;, true); if (state.tab === &#039;library&#039;) run(); else loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-pills&#039;).on(&#039;click&#039;, &#039;.topic-biblio-pill&#039;, function () { state.cls = $(this).attr(&#039;data-cls&#039;) || &#039;&#039;; $(&#039;#bcas-pills .topic-biblio-pill&#039;).removeClass(&#039;is-active&#039;); $(this).addClass(&#039;is-active&#039;); writeUrl(); loadList(false); });&lt;br /&gt;
		$(&#039;#bcas-more&#039;).on(&#039;click&#039;, function () { loadList(true); });&lt;br /&gt;
		$(&#039;#bcas-filter&#039;).on(&#039;input&#039;, refine);&lt;br /&gt;
		// Whole row opens its first link, unless a link inside it was clicked or text selected.&lt;br /&gt;
		$(&#039;#bcas-list&#039;).on(&#039;click&#039;, &#039;.topic-biblio-row, .bcas__hit&#039;, function (e) {&lt;br /&gt;
			if ($(e.target).closest(&#039;a&#039;).length || String(window.getSelection())) return;&lt;br /&gt;
			var a = $(this).find(&#039;a&#039;).get(0); if (!a) return;&lt;br /&gt;
			if (e.metaKey || e.ctrlKey) window.open(a.href, &#039;_blank&#039;); else location.href = a.href;&lt;br /&gt;
		});&lt;br /&gt;
		// The start panel (in the page) can launch searches too.&lt;br /&gt;
		$(document).on(&#039;click&#039;, &#039;#bcas-start [data-q]&#039;, function (e) { e.preventDefault(); $(&#039;#bcas-q&#039;).val($(this).attr(&#039;data-q&#039;)); state.cls = $(this).attr(&#039;data-class&#039;) || &#039;&#039;; state.tab = $(this).attr(&#039;data-tab&#039;) || &#039;library&#039;; run(); window.scrollTo({ top: $(&#039;#bcas&#039;).offset().top - 90, behavior: &#039;smooth&#039; }); });&lt;br /&gt;
		if ($(&#039;#bcas-q&#039;).val()) run(); else { $(&#039;#bcas-start&#039;).show(); $(&#039;#bcas-q&#039;).trigger(&#039;focus&#039;); }&lt;br /&gt;
	});&lt;br /&gt;
}]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
	<entry>
		<id>https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143711</id>
		<title>Advanced Search/Preview</title>
		<link rel="alternate" type="text/html" href="https://bodhicitta.tsadra.org/index.php?title=Advanced_Search/Preview&amp;diff=143711"/>
		<updated>2026-10-02T23:20:12Z</updated>

		<summary type="html">&lt;p&gt;Jeremi: Search preview: start panel (doorways, library, topics, texts)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX____NOTOC____NOEDITSECTION____NOGLOSSARY__{{RemoveFirstHeading}}&amp;lt;div class=&amp;quot;alert alert-warning mt-3&amp;quot;&amp;gt;Preview of the new site search. The current form is still at [[Advanced Search]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{KeyPageHeader&lt;br /&gt;
	|title=Search&lt;br /&gt;
	|subtitle=Everything on the Bodhicitta website&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:BcaSearch}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;bcas-start&amp;quot; class=&amp;quot;bcas-start&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	Start panel: shown until a search runs (Widget:BcaSearch hides it). A map of the&lt;br /&gt;
	site for someone who does not yet know what to type.&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__grid&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Doorways&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Discover|&amp;lt;b&amp;gt;Discover&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;What bodhicitta is, and why it matters&amp;lt;/span&amp;gt;]][[Explore|&amp;lt;b&amp;gt;Explore&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Stories, key concepts, texts and people&amp;lt;/span&amp;gt;]][[Study|&amp;lt;b&amp;gt;Study&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The core texts and their traditions&amp;lt;/span&amp;gt;]][[Practice|&amp;lt;b&amp;gt;Practice&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;Bringing bodhicitta into practice&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;The library&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Library/Books|Books &amp;lt;span&amp;gt;{{#ask:[[Category:Books]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Articles|Articles &amp;lt;span&amp;gt;{{#ask:[[Category:Articles]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Classical Works|Classical works &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Sutras|Sūtras &amp;lt;span&amp;gt;{{#ask:[[Category:Classical Works]][[TextClass::Sutra]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Dissertations|Dissertations &amp;lt;span&amp;gt;{{#ask:[[Category:Dissertations]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Tibetan Publications|Tibetan publications &amp;lt;span&amp;gt;{{#ask:[[Category:Tibetan Publications]]|format=count}}&amp;lt;/span&amp;gt;]][[Library/Multimedia|Media &amp;lt;span&amp;gt;{{#ask:[[Category:Multimedia]]|format=count}}&amp;lt;/span&amp;gt;]][[Listening Room|Listening Room &amp;lt;span&amp;gt;{{#ask:[[Category:Tsadra Bodhicitta Audio]]|format=count}}&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;[[Library|The whole library →]] · [[Bibliography|Bibliography →]] · [[Timelines|Timelines →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Most-covered topics&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips&amp;quot;&amp;gt;[[Topics/Mind Training|Mind Training]][[Topics/Compassion|Compassion]][[Topics/Equalizing and Exchanging Self and Others|Exchanging self and others]][[Topics/Tonglen|Tonglen]][[Topics/Six Perfections|Six Perfections]][[Topics/Emptiness|Emptiness]][[Topics/Madhyamaka|Madhyamaka]][[Topics/Two Truths|Two Truths]][[Topics/Buddha-Nature|Buddha-Nature]][[Topics/Four Immeasurables|Four Immeasurables]][[Topics/The Concept of Bodhicitta|The concept of bodhicitta]][[Topics/Buddhist Ethics|Buddhist Ethics]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;[[Topics|All topics →]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;bcas-start__card&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__h&amp;quot;&amp;gt;Śāntideva&#039;s texts&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__links&amp;quot;&amp;gt;[[Bodhicaryāvatāra|&amp;lt;b&amp;gt;Bodhicaryāvatāra&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Way of the Bodhisattva, verse by verse&amp;lt;/span&amp;gt;]][[Śikṣāsamuccaya|&amp;lt;b&amp;gt;Śikṣāsamuccaya&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;The Compendium of Training and the works it cites&amp;lt;/span&amp;gt;]][[Śāntideva|&amp;lt;b&amp;gt;Śāntideva&amp;lt;/b&amp;gt; &amp;lt;span&amp;gt;His life and works&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__chips bcas-start__chips--small&amp;quot;&amp;gt;[[Texts/Bodhicaryāvatāra/Chapter 1|Ch. 1]][[Texts/Bodhicaryāvatāra/Chapter 2|2]][[Texts/Bodhicaryāvatāra/Chapter 3|3]][[Texts/Bodhicaryāvatāra/Chapter 4|4]][[Texts/Bodhicaryāvatāra/Chapter 5|5]][[Texts/Bodhicaryāvatāra/Chapter 6|6]][[Texts/Bodhicaryāvatāra/Chapter 7|7]][[Texts/Bodhicaryāvatāra/Chapter 8|8]][[Texts/Bodhicaryāvatāra/Chapter 9|9]][[Texts/Bodhicaryāvatāra/Chapter 10|10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bcas-start__more&amp;quot;&amp;gt;Looking for a verse? Type its number above, e.g. 9.1.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeremi</name></author>
	</entry>
</feed>