Skip to content
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
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ Copy the `/public/config.json` file into your content repository to `/content/se
| detail_pages.models.<modelname>.editioncrafter_config.faircopy_project_id | String | FairCopy Cloud project ID |
| detail_pages.models.<modelname>.editioncrafter_config.transcription_types | Array | List of objects of the form `{ "key": "<some key>", "label": "<some label>" }` that will be used as the transcription types fed to EditionCrafter. |
| detail_pages.models.<modelname>.editioncrafter_config.xml_id_field | String | UUID of the user defined field on the model that gives the FairCopy ID (xml:id) of the corresponding document |
| detail_pages.models.<modelname>.text_viewer_config | Object | Optional configuration for HTML document viewer |
| detail_pages.models.<modelname>.text_viewer_config.base_url | String | Base URL for HTML source for documents |
| detail_pages.models.<modelname>.text_viewer_config.opt_in_field | String | Optional UUID of FairData field to use to determine whether to display the viewer |
| detail_pages.models.<modelname>.text_viewer_config.file_path_field | String | UUID of FairData field to use for the specific path to the document (appended to `base_url`) |
| detail_pages.models.<modelname>.related_manifest | Object | Manifest to render in a IIIF Viewer at the top of the event detail page |
| detail_pages.models.<modelname>.related_manifest.model | String | Model to use for the related manifest |
| detail_pages.models.<modelname>.related_manifest.relationship | String | ID of the relationship to display in the viewer |
Expand Down
15,542 changes: 1,490 additions & 14,052 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
"react-dom": "^18.2.0",
"react-instantsearch": "^7.6.0",
"recharts": "^3.3.0",
"sanitize-html": "^2.17.1",
"serverless-http": "^3.2.0",
"swiper": "^11.2.6",
"tailwindcss": "^4.1.4",
Expand Down
38 changes: 38 additions & 0 deletions src/apps/detailPages/HtmlViewer.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
import Container from '@components/Container.astro';
import sanitizeHtml from 'sanitize-html';
import '@styles/tei.css';

interface Props {
header: string;
url: string;
};

const { header, url } = Astro.props;

const resp = await fetch(url).then((res) => (res.text()));
const text = resp.includes('<tei-text')
&& !resp.toLowerCase().includes('<script')
&& !resp.toLowerCase().includes('<style')
? '<tei-text' + resp.split('<tei-text')[1].split('</tei-text>')[0] + '</tei-text>'
: '';
const escapedText = sanitizeHtml(text, {
allowedTags: false,
allowedAttributes: false,
allowVulnerableTags: true
});
---

{ escapedText && (
<div class='w-full pb-6 relative h-[800px]'>
<div class='bg-primary h-[80px] w-full' />
<div class='absolute gap-6 w-full top-0 h-full'>
<Container className='h-full overflow-y-auto flex justify-center bg-layout-alt'>
<div class='md:w-3/4 m-auto py-4 md:py-16'>
<h4 class='mb-6'>{ header }</h4>
<Fragment set:html={escapedText} />
</div>
</Container>
</div>
</div>
)}
20 changes: 19 additions & 1 deletion src/apps/detailPages/RecordDetail.astro
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import RelatedWorks from '@apps/detailPages/RelatedWorks.astro';
import UserDefined from '@apps/detailPages/UserDefined.astro';
import { getTranslations } from '@backend/i18n';
import config from '@config';
import HtmlViewer from './HtmlViewer.astro';

interface Props {
excludes: string[];
Expand Down Expand Up @@ -50,6 +51,15 @@ if (ecViewer) {
}
}

const textViewer = config.detail_pages?.models[model]
? config.detail_pages?.models[model].text_viewer_config
: null;

const textUrl = textViewer
&& (!textViewer.opt_in_field || record.user_defined[textViewer.opt_in_field]?.value)
? `${textViewer.base_url}/${record.user_defined[textViewer.file_path_field]?.value}`
: null;

const faircopyId = ecViewer && record.user_defined ? record.user_defined[ecViewer.xml_id_field]?.value : null;
---

Expand All @@ -74,7 +84,15 @@ const faircopyId = ecViewer && record.user_defined ? record.user_defined[ecViewe
name={name}
/>
)}
{ !faircopyId && geometry && (
{
textUrl && !faircopyId && (
<HtmlViewer
url={textUrl}
header={t('transcription')}
/>
)
}
{ !faircopyId && !textUrl && geometry && (
<GeoHeader
geometry={geometry}
lang={lang}
Expand Down
6 changes: 5 additions & 1 deletion src/i18n/i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@
"filterResultsBy": {
"tinaLabel": "Filter Results by:",
"defaultValue": "Filter Results by:"
},
},
"allPosts": {
"tinaLabel": "All Posts",
"defaultValue": "All Posts"
Expand Down Expand Up @@ -490,5 +490,9 @@
"tags": {
"tinaLabel": "Tags",
"defaultValue": "Tags"
},
"transcription": {
"tinaLabel": "Transcription",
"defaultValue": "Transcription"
}
}
Loading