Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add research projects #513

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions src/common/Breadcrumbs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ export class SectionCrumb implements Crumb {
['About', '/about'],
['Projects', '/projects'],
['CAIC', '/projects/CAIC'],
['AMPS', '/projects/AMPS'],
['aluGeneva', '/projects/aluGeneva'],
])

readonly text: string
Expand Down
27 changes: 19 additions & 8 deletions src/fragmentarium/ui/info/ResearchProjects.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,37 @@ import { ProjectList } from './ResearchProjects'
import { ResearchProjects } from 'research-projects/researchProject'

let fragment: Fragment
const project = ResearchProjects.CAIC
const projects = [
ResearchProjects.CAIC,
ResearchProjects.AMPS,
ResearchProjects.aluGeneva,
]

beforeEach(async () => {
fragment = fragmentFactory.build(
{},
{
associations: {
projects: [project],
projects,
},
}
)
render(<ProjectList projects={fragment.projects} />)
})

it('Renders logo', () => {
expect(screen.getByAltText(project.name)).toHaveAttribute('src', project.logo)
it('Renders logos for all projects', () => {
projects.forEach((project) => {
expect(screen.getByAltText(project.name)).toHaveAttribute(
'src',
project.logo
)
})
})

it('Links to project website', () => {
expect(
screen.getByLabelText(`Link to ${project.name} project`)
).toHaveAttribute('href', project.url)
it('Links to all project websites', () => {
projects.forEach((project) => {
expect(
screen.getByLabelText(`Link to ${project.name} project`)
).toHaveAttribute('href', project.url)
})
})
10 changes: 10 additions & 0 deletions src/research-projects/ResearchProjectsOverview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ export default function ResearchProjectsOverview(): JSX.Element {
<ResearchProjectLink project={ResearchProjects.CAIC} />
</Container>
</section>
<section>
<Container>
<ResearchProjectLink project={ResearchProjects.aluGeneva} />
</Container>
</section>
<section>
<Container>
<ResearchProjectLink project={ResearchProjects.AMPS} />
</Container>
</section>
</AppContent>
)
}
Binary file added src/research-projects/logos/AMPS.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions src/research-projects/researchProject.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import _ from 'lodash'
import caicLogo from './logos/CAIC Briefkopf 2023.png'
import aluLogo from './logos/Alu.png'
import ampsLogo from './logos/AMPS.png'

export interface ResearchProject {
name: string
Expand All @@ -24,6 +25,13 @@ export const ResearchProjects = {
logo: aluLogo,
url: 'https://data.snf.ch/grants/grant/175970',
},
AMPS: {
name:
'Ancient Mesopotamian Priestly Scholasticism in the First Millennium BCE',
abbreviation: 'AMPS',
logo: ampsLogo,
url: 'https://amps.huji.ac.il/',
},
}

export const researchProjects = Object.values(ResearchProjects)
Expand Down
80 changes: 80 additions & 0 deletions src/research-projects/subpages/aluGeneva/Home.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import React from 'react'
import { Container } from 'react-bootstrap'
import SearchForm, { SearchFormProps } from 'fragmentarium/ui/SearchForm'
import { SearchResult } from 'fragmentarium/ui/search/FragmentariumSearchResult'
import PageContent from 'research-projects/subpages/aluGeneva/PageContent'
import ExternalLink from 'common/ExternalLink'

export default function Home({
fragmentService,
fragmentSearchService,
bibliographyService,
wordService,
fragmentQuery,
}: Pick<
SearchFormProps,
| 'fragmentService'
| 'fragmentSearchService'
| 'bibliographyService'
| 'wordService'
| 'fragmentQuery'
>): JSX.Element {
return (
<PageContent title={'Introduction'} menuTitle={'Home'}>
<p>
The editions of *Šumma ālu* presented here were prepared in the context
of the projects “Edition of the Omen Series Šumma Alu” (2017–2021;{' '}
<ExternalLink href={'http://p3.snf.ch/project-175970'}>
http://p3.snf.ch/project-175970
</ExternalLink>{' '}
), “Typology and potential of the excerpt tablets of Šumma alu”
(2022–2023;{' '}
<ExternalLink href={'http://p3.snf.ch/project-205122'}>
http://p3.snf.ch/project-205122
</ExternalLink>{' '}
), and “Edition of Nabû-zuqup-kēnu’s Šumma Alu series” (2024–2028;{' '}
<ExternalLink href={'https://data.snf.ch/grants/grant/10000955'}>
https://data.snf.ch/grants/grant/10000955
</ExternalLink>{' '}
), directed by Prof. Catherine Mittermayer at the University of Geneva
and funded by the Swiss National Science Foundation. The complete score
editions can be downloaded (PDF) at the “Archive ouverte” of the
University of Geneva ({' '}
<ExternalLink href={'https://archive-ouverte.unige.ch/'}>
https://archive-ouverte.unige.ch/
</ExternalLink>{' '}
; search for “Shumma alu”).
</p>
<p>
Search for Ālu Geneva texts below or{' '}
<ExternalLink
href={
'https://www.unige.ch/lettres/antic/unites/mesopotamie/projets/projet-fns-10000955-edition-de-la-version-nabu-zuqup-kenu-de-summa-alu'
}
>
click here
</ExternalLink>{' '}
to learn more about the project.
</p>
<div className={'project-page__search'}>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 3 locations. Consider refactoring.

<h3>Search in Ālu Geneva</h3>
<Container>
<SearchForm
fragmentSearchService={fragmentSearchService}
fragmentService={fragmentService}
wordService={wordService}
bibliographyService={bibliographyService}
fragmentQuery={fragmentQuery}
project={'aluGeneva'}
/>
</Container>
</div>
{fragmentQuery && (
<SearchResult
fragmentService={fragmentService}
fragmentQuery={fragmentQuery}
/>
)}
</PageContent>
)
}
39 changes: 39 additions & 0 deletions src/research-projects/subpages/aluGeneva/PageContent.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import React, { PropsWithChildren } from 'react'
import AppContent from 'common/AppContent'
import { ProjectCrumb, SectionCrumb, TextCrumb } from 'common/Breadcrumbs'
import { Container, Row, Col } from 'react-bootstrap'
import { ResearchProjects } from 'research-projects/researchProject'
import TableOfContents from 'research-projects/subpages/aluGeneva/TableOfContents'

export default function PageContent({
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 3 locations. Consider refactoring.

title,
menuTitle,
children,
}: { title: string; menuTitle?: string } & PropsWithChildren<
unknown
>): JSX.Element {
return (
<AppContent
title={ResearchProjects.aluGeneva.name}
crumbs={[
new SectionCrumb('Projects'),
new ProjectCrumb(ResearchProjects.aluGeneva),
new TextCrumb(menuTitle || title),
]}
>
<Container fluid>
<Row>
<Col>
<h3>{title}</h3>
</Col>
</Row>
<Row>
<Col>{children}</Col>
<Col sm={2}>
<TableOfContents />
</Col>
</Row>
</Container>
</AppContent>
)
}
43 changes: 43 additions & 0 deletions src/research-projects/subpages/aluGeneva/Search.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import React from 'react'
import { Container } from 'react-bootstrap'
import SearchForm, { SearchFormProps } from 'fragmentarium/ui/SearchForm'
import { SearchResult } from 'fragmentarium/ui/search/FragmentariumSearchResult'
import PageContent from 'research-projects/subpages/aluGeneva/PageContent'

export default function Search({
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 3 locations. Consider refactoring.

fragmentService,
fragmentSearchService,
bibliographyService,
wordService,
fragmentQuery,
}: Pick<
SearchFormProps,
| 'fragmentService'
| 'fragmentSearchService'
| 'bibliographyService'
| 'wordService'
| 'fragmentQuery'
>): JSX.Element {
return (
<PageContent title={'Search'}>
<div className={'project-page__search'}>
<Container>
<SearchForm
fragmentSearchService={fragmentSearchService}
fragmentService={fragmentService}
wordService={wordService}
bibliographyService={bibliographyService}
fragmentQuery={fragmentQuery}
project={'aluGeneva'}
/>
</Container>
</div>
{fragmentQuery && (
<SearchResult
fragmentService={fragmentService}
fragmentQuery={fragmentQuery}
/>
)}
</PageContent>
)
}
33 changes: 33 additions & 0 deletions src/research-projects/subpages/aluGeneva/TableOfContents.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import _ from 'lodash'
import React from 'react'
import { Nav } from 'react-bootstrap'
import { ResearchProjects } from 'research-projects/researchProject'
import TocLink from 'research-projects/subpages/TocLink'
import 'research-projects/ResearchProjects.sass'

function AluGenevaTocLink({
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 3 locations. Consider refactoring.

isHome,
path,
...props
}: { isHome?: boolean; path?: string } & React.ComponentProps<
typeof Nav.Link
>): JSX.Element {
const suffix = isHome ? '' : path || props.children?.toString().toLowerCase()
const href = _.compact([
'/projects',
ResearchProjects.aluGeneva.abbreviation,
suffix,
]).join('/')
return <TocLink {...props} href={href} />
}

export default function TableOfContents(): JSX.Element {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 3 locations. Consider refactoring.

return (
<Nav className={'project-page__sidebar'}>
<AluGenevaTocLink isHome>Home</AluGenevaTocLink>
<AluGenevaTocLink path={'search'}>
Search Ālu Geneva Texts
</AluGenevaTocLink>
</Nav>
)
}
88 changes: 88 additions & 0 deletions src/research-projects/subpages/amps/Home.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import React from 'react'
import { Container } from 'react-bootstrap'
import SearchForm, { SearchFormProps } from 'fragmentarium/ui/SearchForm'
import { SearchResult } from 'fragmentarium/ui/search/FragmentariumSearchResult'
import PageContent from 'research-projects/subpages/amps/PageContent'
import ExternalLink from 'common/ExternalLink'

export default function Home({
fragmentService,
fragmentSearchService,
bibliographyService,
wordService,
fragmentQuery,
}: Pick<
SearchFormProps,
| 'fragmentService'
| 'fragmentSearchService'
| 'bibliographyService'
| 'wordService'
| 'fragmentQuery'
>): JSX.Element {
return (
<PageContent title={'Introduction'} menuTitle={'Home'}>
<p>
The scholarly texts of ancient Mesopotamia in the first millennium BCE,
specifically commentaries written in Akkadian on cuneiform tablets, were
the work of priests who also performed cultic activities in the temple.
The proposed project seeks to demonstrate how these scholarly and cultic
activities were interrelated and how they shaped the self-identity of
the priestly-scholarly community that was in charge of both. The project
thus aims to bridge the gap between the study of intellectual history
and the study of priesthood in ancient Mesopotamia, which are treated as
two separate fields in Assyriology.
</p>
<p>
The project innovatively treats Mesopotamian scholarship and
Mesopotamian priesthood as complementary aspects of one phenomenon:
“scholasticism.” This concept, which originally referred to the
scholarly activities of Catholic priests in the Middle Ages, has
recently been applied to the study of non-European communities of
priestly scholars with great success. Using the scholastic model to
study the priestly-scholarly community of ancient Mesopotamia will
reveal the intricate connections between the ritual and textual
activities of this community and illuminate the holistic and systematic
worldview of its members.
</p>
<p>
Combining traditional philology and the comparative approach, the
project investigates how, like other scholastic communities, the
scholar-priests of ancient Mesopotamia “internalized” the liturgical
texts they studied and performed, how they attributed authority to these
texts, and how their study of the liturgical corpus generated new
exegetical texts. Key points of comparison between the scholar-priests
of ancient Mesopotamia and various ancient and contemporary scholastic
communities include their interest in language, textual authority,
commentaries, and rituals. By applying the comparative method to the
study of cuneiform tablets, the project aims to reconstruct the social,
religious, and intellectual reality in which they were written.
</p>
<p>
Search for AMPS texts below or{' '}
<ExternalLink href={'https://amps.huji.ac.il/'}>
click here
</ExternalLink>{' '}
to learn more about the project.
</p>
<div className={'project-page__search'}>
zsomborfoldi marked this conversation as resolved.
Show resolved Hide resolved
<h3>Search in AMPS</h3>
<Container>
<SearchForm
fragmentSearchService={fragmentSearchService}
fragmentService={fragmentService}
wordService={wordService}
bibliographyService={bibliographyService}
fragmentQuery={fragmentQuery}
project={'AMPS'}
/>
</Container>
</div>
{fragmentQuery && (
<SearchResult
fragmentService={fragmentService}
fragmentQuery={fragmentQuery}
/>
)}
</PageContent>
)
}
Loading
Loading