Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions content/citations.extra.json
Original file line number Diff line number Diff line change
Expand Up @@ -765,47 +765,47 @@
"en": "Wikipedia, 'Via Egnatia'"
},
"url": "https://en.wikipedia.org/wiki/Via_Egnatia",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-via-appia",
"source": {
"en": "Wikipedia, 'Appian Way'"
},
"url": "https://en.wikipedia.org/wiki/Appian_Way",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-via-sebaste",
"source": {
"en": "Wikipedia, 'Via Sebaste'"
},
"url": "https://en.wikipedia.org/wiki/Via_Sebaste",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-cilician-gates",
"source": {
"en": "Wikipedia, 'Cilician Gates'"
},
"url": "https://en.wikipedia.org/wiki/Cilician_Gates",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-kings-highway",
"source": {
"en": "Wikipedia, 'King's Highway (ancient)'"
},
"url": "https://en.wikipedia.org/wiki/King%27s_Highway_(ancient)",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-acts-sea",
"source": {
"en": "Wikipedia, 'Acts 27' (the voyage and shipwreck sailing notices)"
},
"url": "https://en.wikipedia.org/wiki/Acts_27",
"kind": "secondary-scholarly"
"kind": "tertiary-popular"
},
{
"id": "cit-route-itinere",
Expand Down
6 changes: 4 additions & 2 deletions src/components/CreditsView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import { useBundle } from '../content/useBundle';
import { SourcingDisclosure } from './SourcingDisclosure';

function isWikiCredit(a: { name: string; url?: string }): boolean {
const blob = `${a.url ?? ''} ${a.name}`.toLowerCase();
return blob.includes('wikipedia') || blob.includes('wikimedia');
// Name only — KJV/ASV credit links point at Wikipedia articles but are not
// Wikipedia attributions; keep scripture/software credits above Wikimedia.
const name = a.name.toLowerCase();
return name.includes('wikipedia') || name.includes('wikimedia');
}

/** Scholarly / primary data credits above Wikipedia/Wikimedia in the list. */
Expand Down
23 changes: 23 additions & 0 deletions src/content/citations.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,27 @@ describe('sortCitationsForDisplay', () => {
});
expect(sortCitationsForDisplay([wiki, britannica]).map((c) => c.id)).toEqual(['b', 'w']);
});
it('puts Wikipedia last even when mis-tagged as secondary-scholarly', () => {
const wiki = cite({
id: 'w',
kind: 'secondary-scholarly',
source: { en: "Wikipedia, 'Via Egnatia'" },
url: 'https://en.wikipedia.org/wiki/Via_Egnatia',
});
const gazetteer = cite({
id: 'g',
kind: 'gazetteer',
source: { en: 'Pleiades' },
});
const scholar = cite({
id: 's',
kind: 'secondary-scholarly',
source: { en: 'Anchor Bible Dictionary' },
});
expect(sortCitationsForDisplay([wiki, gazetteer, scholar]).map((c) => c.id)).toEqual([
's',
'g',
'w',
]);
});
});
14 changes: 7 additions & 7 deletions src/content/citations.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@ export function RouteGeometryNote({
}


/** Display order for reference lists: scripture and scholarly work above
* tertiary/popular (Wikipedia, Britannica, study-Bible maps). Authored id
* order often put Wikipedia first; QC requires scholarly sources above it. */
/** Display order for reference lists: scripture / scholarly / gazetteer first;
* Wikipedia & Wikimedia always last (any kind). Authored id order often put
* Wikipedia first; every Citations surface uses this sort. */
const CITATION_KIND_RANK: Record<TCitationKind, number> = {
'primary-scripture': 0,
'primary-ancient': 1,
Expand All @@ -130,15 +130,15 @@ function isWikipediaish(c: Pick<TCitation, 'url' | 'source'>): boolean {
return blob.includes('wikipedia') || blob.includes('wikimedia');
}

/** Stable sort: kind rank, then Wikipedia-ish last within a kind, then source title. */
/** Stable sort: Wikipedia/Wikimedia last globally, then kind rank, then title. */
export function sortCitationsForDisplay(citations: TCitation[]): TCitation[] {
return [...citations].sort((a, b) => {
const ra = CITATION_KIND_RANK[a.kind] ?? 99;
const rb = CITATION_KIND_RANK[b.kind] ?? 99;
if (ra !== rb) return ra - rb;
const wa = isWikipediaish(a) ? 1 : 0;
const wb = isWikipediaish(b) ? 1 : 0;
if (wa !== wb) return wa - wb;
const ra = CITATION_KIND_RANK[a.kind] ?? 99;
const rb = CITATION_KIND_RANK[b.kind] ?? 99;
if (ra !== rb) return ra - rb;
return a.source.en.localeCompare(b.source.en);
});
}
Expand Down