diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c6afe768eea4a80a11bda178a98a0700237424e5..c12d8712d3419c52bbe882cc3edc32a4a948789a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -272,10 +272,10 @@ get-zotero: extends: .df-wiki-cli-run stage: get-data script: - - df-wiki-cli articles --key ${ZOTERO_API_KEY} --output public/articles.json + - df-wiki-cli articles --key ${ZOTERO_API_KEY} --output content/_data/_articles.json artifacts: paths: - - public/articles.json + - content/_data/_articles.json rules: - if: $CI_COMMIT_BRANCH == "main" diff --git a/components/content/ArticleDoi.vue b/components/content/ArticleDoi.vue index c2bfa9e370386efb0cd1f88ee35fdd84de093169..f37e93fada781559f521e3795dd23a9301f1697d 100644 --- a/components/content/ArticleDoi.vue +++ b/components/content/ArticleDoi.vue @@ -1,5 +1,6 @@ <script setup lang="ts"> import { useDisplay } from "vuetify"; +import { useArticlesStore } from '@/stores/articles' export interface Props { index?: number; @@ -14,10 +15,27 @@ const props = withDefaults(defineProps<Props>(), { enumerate: true, divider: false, }); + + +// onBeforeMount(async () => { +// await useArticlesStore().initialize() +// }) + const { article } = useFetchArticle(props.doi); const { mobile } = useDisplay(); const show = ref(false); +// const computedArticle = computed(() => { return { ...article.value } }) + + +// watch(article, (newArticle) => { +// console.log("article updated") +// }, { deep: true }) + + +console.log("aritcle dans composant") +console.log(article) + const articleTitle = computed(() => { return props?.title ?? article?.value?.title ?? props.doi; }); @@ -26,8 +44,8 @@ const articleAbstract = computed(() => { }); </script> <template> - <v-list-item :href="article?.href" :id="props.doi" :target="article?.target" density="compact" color="transparent" - class="px-1"> + <v-list-item :href="article?.href" :id="props.doi" :target="article?.target" density="compact" + color="transparent" class="px-1"> <template #prepend v-if="!mobile && enumerate"> <v-avatar color="primary" size="small" density="compact" variant="tonal"> {{ props?.index ?? "#" }} diff --git a/composables/useFetchArticle.ts b/composables/useFetchArticle.ts index a89adcac5d2ed8b0308989bb020bb0122d7f4ce1..59c1e51851cd53369ccd27d4db85c17b86508d28 100644 --- a/composables/useFetchArticle.ts +++ b/composables/useFetchArticle.ts @@ -2,17 +2,19 @@ import { useArticlesStore, type CslJson } from '../stores/articles' import { ref, computed, watchEffect, toValue } from "vue" // import { useFetch } from '#app'; // import { useFetch } from "nuxt" -import { useFetch } from '#imports' +import { type MaybeRef, useFetch } from '#imports' +import article from "@/public/articles.json" - -export interface ArticleMessage { +export interface CrossrefArticle { DOI: string; issue: number; - title: string | string[]; + type: string; + title: string[]; author: Array<{ family: string; given: string }>; - "container-title-short": string; + // "container-title-short": string; + "short-container-title": string; "container-title": string; - abstract: string; + abstract?: string; published: { "date-parts": string[]; }; @@ -23,7 +25,7 @@ export interface ArticleMessage { -export interface Article { +export interface WikiArticle { DOI: string title: string subtitle: string @@ -36,115 +38,125 @@ export interface Article { prependIcon: string } export interface RawArticle { - message: ArticleMessage + message: CrossrefArticle } -type SrcArticle = ArticleMessage | CslJson +type SrcArticle = CrossrefArticle | CslJson -export function useFetchArticle(doi: string) { +export function useFetchArticle(doi: MaybeRef<string> = ref("")) { // const article = ref<Article>() // const rawArticle = ref<RawArticle>() const srcArticle = ref<SrcArticle | null>(null) const store = useArticlesStore() const pending = ref(false) const doiBaseUrl = ref(new URL("https://doi.org/")); - const url = ref(new URL(`/works/${doi}`, " https://api.crossref.org/").href); - const article = computed(() => { - if (srcArticle.value != undefined) { + const url = ref(new URL(`/works/${toValue(doi)}`, " https://api.crossref.org/").href); + const article = ref() + const zoteroArticles = ref() + + function toAuthorsString(authors: Array<{ family: string; given: string }>) { + return authors + .map((curr) => { + return `${curr.family} ${curr.given}`; + }) + .join(", "); + } + + function getReferenceUrl(doi: string) { + return new URL(doi, doiBaseUrl.value).href; + } + + function zoteroArticleToArticle(zoteroArticle: CslJson) { + if (zoteroArticle != undefined) { const { DOI, title, - "container-title-short": cts, "container-title": ct, - journalAbbreviation, abstract, - published, issued, author, ...rest - } = srcArticle.value; - let sanitizedAbstract = abstract - if (sanitizedAbstract) { - - sanitizedAbstract = /(?:\<jats\:p\>)?(.*)(?:\<\/jats\:p\>)?/.exec(sanitizedAbstract)?.[1] ?? '' - } - - const sanitizedTitle = (Array.isArray(title)) ? title[0] : title - const sanitizedContainerTitle = (Array.isArray(ct)) ? cts?.length > 0 ? cts[0] : ct?.length > 0 ? ct[0] : "" : journalAbbreviation || ct + } = zoteroArticle; return { DOI, - title: sanitizedTitle, + title, subtitle: toAuthorsString(author || []), author, - containerTitle: sanitizedContainerTitle, - abstract: sanitizedAbstract, - year: published?.["date-parts"][0][0] ?? issued?.["date-parts"][0][0] ?? '', + containerTitle: ct, + abstract, + year: issued?.["date-parts"][0][0] ?? '', href: getReferenceUrl(DOI), target: "_blank", prependIcon: "mdi-newspaper-variant-outline", } - - } else { return srcArticle.value } - }) - const zoteroArticles = ref([]) - // const config = useRuntimeConfig() - // console.log(config.value) - - - const fetchLocalArticles = () => { - useFetch<RawArticle[]>( - "/articles.json", - { lazy: true, server: false } - ).then(({ data }) => { - zoteroArticles.value = data.value - }) // localPending.value = articlesPending.value - if (zoteroArticles.value?.length > 0) { - for (const article of zoteroArticles.value) { - // console.log("article files : ", article.DOI) - store.add(article) - } } - } - - const fetchCrossRef = () => { - useFetch<RawArticle>(toValue(url), { - lazy: true, server: false, - }).then(({ data, pending: pendingUseFetch }) => { - if (data.value?.message) { - srcArticle.value = data.value.message - } - pending.value = pendingUseFetch.value - }) } - - watchEffect(() => { - // no article in the store - if (store.articles.size === 0) { - fetchLocalArticles() + function crossrefToArticle(article: CrossrefArticle): WikiArticle { + const { title, DOI, type, "container-title": ct, "short-container-title": sct, abstract, author, issued } = article + // let sanitizedAbstract = abstract + const sanitizedAbstract = abstract ? /(?:\<jats\:p\>)?(.*)(?:\<\/jats\:p\>)?/.exec(abstract)?.[1] ?? '' : '' + const sanitizedContainerTitle = sct?.length > 0 ? sct[0] : ct?.length > 0 ? ct[0] : "" + return { + title: title?.length > 0 ? title[0] : "", + DOI, + abstract: sanitizedAbstract, + containerTitle: sanitizedContainerTitle, + subtitle: toAuthorsString(author || []), + author, + year: issued?.["date-parts"][0][0] ?? '', + href: getReferenceUrl(DOI), + target: "_blank", + prependIcon: "mdi-newspaper-variant-outline" } + } - if (store.articles.has(doi)) { - srcArticle.value = store.articles.get(doi) - return - } else { - fetchCrossRef() - } + function crossrefToCsl(article: CrossrefArticle): CslJson { + const { title, DOI, type, "container-title": ct, "short-container-title": sct, abstract, author, issued } = article + // let sanitizedAbstract = abstract + const sanitizedAbstract = abstract ? /(?:\<jats\:p\>)?(.*)(?:\<\/jats\:p\>)?/.exec(abstract)?.[1] ?? '' : '' + const sanitizedContainerTitle = sct?.length > 0 ? sct[0] : ct?.length > 0 ? ct[0] : "" + return { + title: title?.length > 0 ? title[0] : "", + type, + DOI, + abstract: sanitizedAbstract, + author, + "container-title": sanitizedContainerTitle, + issued - }) - function toAuthorsString(authors: Array<{ family: string; given: string }>) { - return authors - .map((curr) => { - return `${curr.family} ${curr.given}`; - }) - .join(", "); + } } - function getReferenceUrl(doi: string) { - return new URL(doi, doiBaseUrl.value).href; + if (store.articles.has(toValue(doi))) { + const cslArticle = store.articles.get(toValue(doi)) + article.value = cslArticle ? zoteroArticleToArticle(cslArticle) : undefined } + else { + useFetch<RawArticle>(toValue(url), { + lazy: true, server: false, + }).then(({ data, pending: pendingUseFetch }) => { + if (data.value?.message) { + article.value = crossrefToArticle(data.value.message) + store.add(crossrefToCsl(data.value.message)) + } + pending.value = pendingUseFetch.value + }) + } + // const fetchCrossRef = () => { + // useFetch<RawArticle>(toValue(url), { + // lazy: true, server: false, + // }).then(({ data, pending: pendingUseFetch }) => { + // if (data.value?.message) { + // srcArticle.value = data.value.message + // } + // pending.value = pendingUseFetch.value + // }) + + // } + return { article, pending } } diff --git a/public/articles.json b/content/_data/_articles.json similarity index 92% rename from public/articles.json rename to content/_data/_articles.json index 1c2b5c9c8632cafef2b2ede35fcd65278c70633a..5605d2f4cb78c48150efa22a30418c53c8a269f2 100644 --- a/public/articles.json +++ b/content/_data/_articles.json @@ -425,6 +425,45 @@ ] } }, + { + "id": "15342854/42JKZL7K", + "type": "article-journal", + "title": "A NON HEREDITARY, HOST-INDUCED VARIATION OF BACTERIAL VIRUSES", + "container-title": "Journal of Bacteriology", + "page": "557-569", + "volume": "64", + "issue": "4", + "URL": "https://journals.asm.org/doi/10.1128/jb.64.4.557-569.1952", + "DOI": "10.1128/jb.64.4.557-569.1952", + "journalAbbreviation": "J Bacteriol", + "language": "en", + "author": [ + { + "family": "Luria", + "given": "S. E." + }, + { + "family": "Human", + "given": "Mary L." + } + ], + "issued": { + "date-parts": [ + [ + "1952" + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 21 + ] + ] + } + }, { "id": "15342854/NUNPK7GW", "type": "article-journal", @@ -825,18 +864,18 @@ } }, { - "id": "15342854/YQTB9FM9", + "id": "15342854/XWLAVRDY", "type": "article-journal", - "title": "A widespread bacteriophage abortive infection system functions through a Type IV toxin-antitoxin mechanism", + "title": "A widespread bacteriophage abortive infection system functions through a Type IV toxin\u2013antitoxin mechanism", "container-title": "Nucleic Acids Research", "page": "4590-4605", "volume": "42", "issue": "7", - "abstract": "Bacterial abortive infection (Abi) systems are 'altruistic' cell death systems that are activated by phage infection and limit viral replication, thereby providing protection to the bacterial population. Here, we have used a novel approach of screening Abi systems as a tool to identify and characterize toxin-antitoxin (TA)-acting Abi systems. We show that AbiE systems are encoded by bicistronic operons and function via a non-interacting (Type IV) bacteriostatic TA mechanism. The abiE operon was negatively autoregulated by the antitoxin, AbiEi, a member of a widespread family of putative transcriptional regulators. AbiEi has an N-terminal winged-helix-turn-helix domain that is required for repression of abiE transcription, and an uncharacterized bi-functional C-terminal domain, which is necessary for transcriptional repression and sufficient for toxin neutralization. The cognate toxin, AbiEii, is a predicted nucleotidyltransferase (NTase) and member of the DNA polymerase \u03b2 family. AbiEii specifically bound GTP, and mutations in conserved NTase motifs (I-III) and a newly identified motif (IV), abolished GTP binding and subsequent toxicity. The AbiE systems can provide phage resistance and enable stabilization of mobile genetic elements, such as plasmids. Our study reveals molecular insights into the regulation and function of the widespread bi-functional AbiE Abi-TA systems and the biochemical properties of both toxin and antitoxin proteins.", + "abstract": "Bacterial abortive infection (Abi) systems are \u2018altruistic\u2019 cell death systems that are activated by phage infection and limit viral replication, thereby providing protection to the bacterial population. Here, we have used a novel approach of screening Abi systems as a tool to identify and characterize toxin\u2013antitoxin (TA)-acting Abi systems. We show that AbiE systems are encoded by bicistronic operons and function via a non-interacting (Type IV) bacteriostatic TA mechanism. The abiE operon was negatively autoregulated by the antitoxin, AbiEi, a member of a widespread family of putative transcriptional regulators. AbiEi has an N-terminal winged-helix-turn-helix domain that is required for repression of abiE transcription, and an uncharacterized bi-functional C-terminal domain, which is necessary for transcriptional repression and sufficient for toxin neutralization. The cognate toxin, AbiEii, is a predicted nucleotidyltransferase (NTase) and member of the DNA polymerase b family. AbiEii specifically bound GTP, and mutations in conserved NTase motifs (I-III) and a newly identified motif (IV), abolished GTP binding and subsequent toxicity. The AbiE systems can provide phage resistance and enable stabilization of mobile genetic elements, such as plasmids. Our study reveals molecular insights into the regulation and function of the widespread bi-functional AbiE Abi-TA systems and the biochemical properties of both toxin and antitoxin proteins.", + "URL": "https://academic.oup.com/nar/article/42/7/4590/2436634", "DOI": "10.1093/nar/gkt1419", - "note": "PMID: 24465005\nPMCID: PMC3985639", - "journalAbbreviation": "Nucleic Acids Res", - "language": "eng", + "note": "tex.ids= Dy2014a\nPMCID: PMC3985639\nPMID: 24465005", + "language": "en", "author": [ { "family": "Dy", @@ -852,7 +891,7 @@ }, { "family": "Salmond", - "given": "George P. C." + "given": "George P.C." }, { "family": "Fineran", @@ -863,7 +902,17 @@ "date-parts": [ [ 2014, - 4 + 4, + 1 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 8, + 31 ] ] } @@ -2187,6 +2236,168 @@ ] } }, + { + "id": "15342854/KBU3L4WT", + "type": "article-journal", + "title": "Complete Sequence of the New Lactococcal Abortive Phage Resistance Gene abiO", + "container-title": "Journal of Dairy Science", + "page": "1483-1485", + "volume": "81", + "issue": "6", + "URL": "https://www.sciencedirect.com/science/article/pii/S0022030298757133", + "DOI": "10.3168/jds.S0022-0302(98)75713-3", + "journalAbbreviation": "Journal of Dairy Science", + "author": [ + { + "family": "Prevots", + "given": "Fabien" + }, + { + "family": "Ritzenthaler", + "given": "Paul" + } + ], + "issued": { + "date-parts": [ + [ + 1998, + 6, + 1 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 22 + ] + ] + } + }, + { + "id": "15342854/MX2D8C95", + "type": "article-journal", + "title": "Core defense hotspots within Pseudomonas aeruginosa are a consistent and rich source of anti-phage defense systems", + "container-title": "Nucleic Acids Research", + "page": "4995-5005", + "volume": "51", + "issue": "10", + "abstract": "Bacteria use a diverse arsenal of anti-phage immune systems, including CRISPR-Cas and restriction enzymes. Recent advances in anti-phage system discovery and annotation tools have unearthed many unique systems, often encoded in horizontally transferred defense islands, which can be horizontally transferred. Here, we developed Hidden Markov Models (HMMs) for defense systems and queried microbial genomes on the NCBI database. Out of the 30 species with >200 completely sequenced genomes, our analysis found Pseudomonas aeruginosa exhibits the greatest diversity of anti-phage systems, as measured by Shannon entropy. Using network analysis to identify the common neighbors of anti-phage systems, we identified two core defense hotspot loci (cDHS1 and cDHS2). cDHS1 is up to 224 kb (median: 26 kb) with varied arrangements of more than 30 distinct immune systems across isolates, while cDHS2 has 24 distinct systems (median: 6 kb). Both cDHS regions are occupied in a majority of P. aeruginosa isolates. Most cDHS genes are of unknown function potentially representing new anti-phage systems, which we validated by identifying a novel anti-phage system (Shango) commonly encoded in cDHS1. Identifying core genes flanking immune islands could simplify immune system discovery and may represent popular landing spots for diverse MGEs carrying anti-phage systems.", + "URL": "https://doi.org/10.1093/nar/gkad317", + "DOI": "10.1093/nar/gkad317", + "journalAbbreviation": "Nucleic Acids Research", + "author": [ + { + "family": "Johnson", + "given": "Matthew C" + }, + { + "family": "Laderman", + "given": "Eric" + }, + { + "family": "Huiting", + "given": "Erin" + }, + { + "family": "Zhang", + "given": "Chi" + }, + { + "family": "Davidson", + "given": "Alan" + }, + { + "family": "Bondy-Denomy", + "given": "Joseph" + } + ], + "issued": { + "date-parts": [ + [ + 2023, + 6, + 9 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 27 + ] + ] + } + }, + { + "id": "15342854/D4ZQGIA3", + "type": "article-journal", + "title": "CRISPR Provides Acquired Resistance Against Viruses in Prokaryotes", + "container-title": "Science", + "page": "1709-1712", + "volume": "315", + "issue": "5819", + "abstract": "Clustered regularly interspaced short palindromic repeats (CRISPR) are a distinctive feature of the genomes of most Bacteria and Archaea and are thought to be involved in resistance to bacteriophages. We found that, after viral challenge, bacteria integrated new spacers derived from phage genomic sequences. Removal or addition of particular spacers modified the phage-resistance phenotype of the cell. Thus, CRISPR, together with associated cas genes, provided resistance against phages, and resistance specificity is determined by spacer-phage sequence similarity.", + "URL": "https://www.science.org/doi/full/10.1126/science.1138140", + "DOI": "10.1126/science.1138140", + "note": "Publisher: American Association for the Advancement of Science", + "author": [ + { + "family": "Barrangou", + "given": "Rodolphe" + }, + { + "family": "Fremaux", + "given": "Christophe" + }, + { + "family": "Deveau", + "given": "H\u00e9l\u00e8ne" + }, + { + "family": "Richards", + "given": "Melissa" + }, + { + "family": "Boyaval", + "given": "Patrick" + }, + { + "family": "Moineau", + "given": "Sylvain" + }, + { + "family": "Romero", + "given": "Dennis A." + }, + { + "family": "Horvath", + "given": "Philippe" + } + ], + "issued": { + "date-parts": [ + [ + 2007, + 3, + 23 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 16 + ] + ] + } + }, { "id": "15342854/7ZMD86BY", "type": "article-journal", @@ -2430,6 +2641,54 @@ ] } }, + { + "id": "15342854/QT3LWYX4", + "type": "article-journal", + "title": "Defense Islands in Bacterial and Archaeal Genomes and Prediction of Novel Defense Systems", + "container-title": "Journal of Bacteriology", + "page": "6039-6056", + "volume": "193", + "issue": "21", + "abstract": "ABSTRACT\n The arms race between cellular life forms and viruses is a major driving force of evolution. A substantial fraction of bacterial and archaeal genomes is dedicated to antivirus defense. We analyzed the distribution of defense genes and typical mobilome components (such as viral and transposon genes) in bacterial and archaeal genomes and demonstrated statistically significant clustering of antivirus defense systems and mobile genes and elements in genomic islands. The defense islands are enriched in putative operons and contain numerous overrepresented gene families. A detailed sequence analysis of the proteins encoded by genes in these families shows that many of them are diverged variants of known defense system components, whereas others show features, such as characteristic operonic organization, that are suggestive of novel defense systems. Thus, genomic islands provide abundant material for the experimental study of bacterial and archaeal antivirus defense. Except for the CRISPR-Cas systems, different classes of defense systems, in particular toxin-antitoxin and restriction-modification systems, show nonrandom clustering in defense islands. It remains unclear to what extent these associations reflect functional cooperation between different defense systems and to what extent the islands are genomic \u201csinks\u201d that accumulate diverse nonessential genes, particularly those acquired via horizontal gene transfer. The characteristics of defense islands resemble those of mobilome islands. Defense and mobilome genes are nonrandomly associated in islands, suggesting nonadaptive evolution of the islands via a preferential attachment-like mechanism underpinned by the addictive properties of defense systems such as toxins-antitoxins and an important role of horizontal mobility in the evolution of these islands.", + "URL": "https://journals.asm.org/doi/10.1128/JB.05535-11", + "DOI": "10.1128/JB.05535-11", + "journalAbbreviation": "J Bacteriol", + "language": "en", + "author": [ + { + "family": "Makarova", + "given": "Kira S." + }, + { + "family": "Wolf", + "given": "Yuri I." + }, + { + "family": "Snir", + "given": "Sagi" + }, + { + "family": "Koonin", + "given": "Eugene V." + } + ], + "issued": { + "date-parts": [ + [ + "2011" + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 4, + 5 + ] + ] + } + }, { "id": "15342854/LWM56CT7", "type": "article-journal", @@ -3251,6 +3510,45 @@ ] } }, + { + "id": "15342854/YJPKUAZ2", + "type": "article-journal", + "title": "Host controlled variation in bacterial viruses", + "container-title": "Journal of Bacteriology", + "page": "113-121", + "volume": "65", + "issue": "2", + "URL": "https://journals.asm.org/doi/10.1128/jb.65.2.113-121.1953", + "DOI": "10.1128/jb.65.2.113-121.1953", + "note": "Publisher: American Society for Microbiology", + "author": [ + { + "family": "Bertani", + "given": "G." + }, + { + "family": "Weigle", + "given": "J. J." + } + ], + "issued": { + "date-parts": [ + [ + 1953, + 2 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 21 + ] + ] + } + }, { "id": "15342854/J75JJ8W8", "type": "article-journal", @@ -3363,6 +3661,55 @@ ] } }, + { + "id": "15342854/Y3G7W7UX", + "type": "article-journal", + "title": "Isolation, cloning and characterisation of the abiI gene from Lactococcus lactis subsp. lactis M138 encoding abortive phage infection", + "container-title": "Journal of Biotechnology", + "page": "95-104", + "volume": "54", + "issue": "2", + "abstract": "Plasmid pND852 (56 kb) encodes nisin resistance and was isolated from Lactococcus lactis ssp lactis (L. lactis) M138 by conjugation to L. lactis LM0230. It conferred strong resistance to the isometric-headed phage \u03c6712 and partial resistance to the prolate-headed phage \u03c6c2. A 2.6 kb HpaII fragment encoding phage resistance was cloned into the streptococcal/Bacillus hybrid vector pGB301 to generate pND817. The mechanism of phage resistance encoded by pND817 involved abortive infection and this was illustrated by a reduction in burst size from 166 to 6 at 30\u00b0C and from 160 to 90 at 37\u00b0C. Partial resistance was therefore retained at 37\u00b0C. DNA sequencing revealed that the abortive infection was encoded by a single open reading frame (ORF), designated abiI, encoding a 332 amino acid protein. Neither abiI nor the predicted product showed significant homology to any existing sequence in the GenBank database. Frame shift mutation at the unique EcoRI site within the ORF resulted in loss of the Abi+ phenotype, confirming that the ORF is responsible for the encoded phage resistance.", + "URL": "https://www.sciencedirect.com/science/article/pii/S0168165697016921", + "DOI": "10.1016/S0168-1656(97)01692-1", + "journalAbbreviation": "Journal of Biotechnology", + "author": [ + { + "family": "Su", + "given": "Ping" + }, + { + "family": "Harvey", + "given": "Melissa" + }, + { + "family": "Im", + "given": "Hee J" + }, + { + "family": "Dunn", + "given": "Noel W" + } + ], + "issued": { + "date-parts": [ + [ + 1997, + 4, + 25 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 22 + ] + ] + } + }, { "id": "15342854/2ENY7AF5", "type": "article-journal", @@ -3711,7 +4058,7 @@ "issue": "4", "abstract": "Abortive infection (Abi) systems, also called phage exclusion, block phage multiplication and cause premature bacterial cell death upon phage infection. This decreases the number of progeny particles and limits their spread to other cells allowing the bacterial population to survive. Twenty Abi systems have been isolated in Lactococcus lactis, a bacterium used in cheese-making fermentation processes, where phage attacks are of economical importance. Recent insights in their expression and mode of action indicate that, behind diverse phenotypic and molecular effects, lactococcal Abis share common traits with the well-studied Escherichia coli systems Lit and Prr. Abis are widespread in bacteria, and recent analysis indicates that Abis might have additional roles other than conferring phage resistance.", "DOI": "10.1016/j.mib.2005.06.006", - "note": "PMID: 15979388", + "note": "tex.ids= Chopin2005\nPMID: 15979388", "shortTitle": "Phage abortive infection in lactococci", "journalAbbreviation": "Curr Opin Microbiol", "language": "eng", @@ -4045,6 +4392,66 @@ ] } }, + { + "id": "15342854/IHZP7M6I", + "type": "article-journal", + "title": "Phenotypic and genetic characterization of the bacteriophage abortive infection mechanism AbiK from Lactococcus lactis", + "container-title": "Applied and Environmental Microbiology", + "page": "1274-1283", + "volume": "63", + "issue": "4", + "abstract": "The natural plasmid pSRQ800 isolated from Lactococcus lactis subsp. lactis W1 conferred strong phage resistance against small isometric phages of the 936 and P335 species when introduced into phage-sensitive L. lactis strains. It had very limited effect on prolate phages of the c2 species. The phage resistance mechanism encoded on pSRQ800 is a temperature-sensitive abortive infection system (Abi). Plasmid pSRQ800 was mapped, and the Abi genetic determinant was localized on a 4.5-kb EcoRI fragment. Cloning and sequencing of the 4.5-kb fragment allowed the identification of two large open reading frames. Deletion mutants showed that only orf1 was needed to produce the Abi phenotype. orf1 (renamed abiK) coded for a predicted protein of 599 amino acids (AbiK) with an estimated molecular size of 71.4 kDa and a pI of 7.98. DNA and protein sequence alignment programs found no significant homology with databases. However, a database query based on amino acid composition suggested that AbiK might be in the same protein family as AbiA. No phage DNA replication nor phage structural protein production was detected in infected AbiK+ L. lactis cells. This system is believed to act at or prior to phage DNA replication. WHen cloned into a high-copy vector, AbiK efficiency increased 100-fold. AbiK provides another powerful tool that can be useful in controlling phages during lactococcal fermentations.", + "URL": "https://journals.asm.org/doi/10.1128/aem.63.4.1274-1283.1997", + "DOI": "10.1128/aem.63.4.1274-1283.1997", + "note": "Publisher: American Society for Microbiology", + "author": [ + { + "family": "Emond", + "given": "E" + }, + { + "family": "Holler", + "given": "B J" + }, + { + "family": "Boucher", + "given": "I" + }, + { + "family": "Vandenbergh", + "given": "P A" + }, + { + "family": "Vedamuthu", + "given": "E R" + }, + { + "family": "Kondo", + "given": "J K" + }, + { + "family": "Moineau", + "given": "S" + } + ], + "issued": { + "date-parts": [ + [ + 1997, + 4 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 22 + ] + ] + } + }, { "id": "15342854/UXQPXABE", "type": "article-journal", @@ -4340,7 +4747,7 @@ "abstract": "Viperin is an interferon-induced cellular protein that is conserved in animals1. It has\u00a0previously been shown to inhibit the replication of multiple viruses by producing the ribonucleotide 3\u2032-deoxy-3\u2032,4\u2032-didehydro (ddh)-cytidine triphosphate (ddhCTP), which acts as a chain terminator for viral RNA polymerase2. Here we show that eukaryotic viperin originated from a clade of bacterial and archaeal proteins that protect against phage infection. Prokaryotic viperins produce a set of modified ribonucleotides that include ddhCTP, ddh-guanosine triphosphate (ddhGTP) and ddh-uridine triphosphate (ddhUTP). We further show that prokaryotic viperins protect against T7 phage infection by inhibiting viral polymerase-dependent transcription, suggesting that it has an antiviral mechanism of action similar to that of animal viperin. Our results reveal a class of potential natural antiviral compounds produced by bacterial immune systems.", "URL": "https://www.nature.com/articles/s41586-020-2762-2", "DOI": "10.1038/s41586-020-2762-2", - "note": "Number: 7840\nPublisher: Nature Publishing Group", + "note": "tex.ids= Bernheim2021, Bernheim2021a\nnumber: 7840\npublisher: Nature Publishing Group", "language": "en", "author": [ { @@ -4455,7 +4862,7 @@ } }, { - "id": "15342854/SGKZUETF", + "id": "15342854/KYSKHP5G", "type": "article-journal", "title": "Prophage-mediated defence against viral attack and viral counter-defence", "container-title": "Nature Microbiology", @@ -4465,7 +4872,7 @@ "abstract": "Temperate phages are common, and prophages are abundant residents of sequenced bacterial genomes. Mycobacteriophages are viruses that infect mycobacterial hosts including Mycobacterium tuberculosis and Mycobacterium smegmatis, encompass substantial genetic diversity and are commonly temperate. Characterization of ten Cluster N temperate mycobacteriophages revealed at least five distinct prophage-expressed viral defence systems that interfere with the infection of lytic and temperate phages that are either closely related (homotypic defence) or unrelated (heterotypic defence) to the prophage. Target specificity is unpredictable, ranging from a single target phage to one-third of those tested. The defence systems include a single-subunit restriction system, a heterotypic exclusion system and a predicted (p)ppGpp synthetase, which blocks lytic phage growth, promotes bacterial survival and enables efficient lysogeny. The predicted (p)ppGpp synthetase coded by the Phrann prophage defends against phage Tweety infection, but Tweety codes for a tetrapeptide repeat protein, gp54, which acts as a highly effective counter-defence system. Prophage-mediated viral defence offers an efficient mechanism for bacterial success in host\u2013virus dynamics, and counter-defence promotes phage co-evolution.", "URL": "https://www.nature.com/articles/nmicrobiol2016251", "DOI": "10.1038/nmicrobiol.2016.251", - "note": "Number: 3\nPublisher: Nature Publishing Group", + "note": "tex.ids= Dedrick2017\nnumber: 3\npublisher: Nature Publishing Group", "journalAbbreviation": "Nat Microbiol", "language": "en", "author": [ @@ -4659,8 +5066,8 @@ "date-parts": [ [ 2023, - 1, - 18 + 9, + 27 ] ] } @@ -5374,6 +5781,50 @@ ] } }, + { + "id": "15342854/2WVG5C98", + "type": "article-journal", + "title": "Study of membrane attachment and in vivo co-localization of TerB protein from uropathogenic Escherichia coli KL53", + "container-title": "General Physiology and Biophysics", + "page": "286-292", + "volume": "30", + "issue": "3", + "abstract": "The tellurite resistance operon has been found in a wide range of bacteria. We have previously identi\ufb01ed the ter operon (terXYW and terZABCDEF) of the uropathogenic strain Escherichia coli KL53. In this study, we use an innovative approach to identify putative protein-protein interaction partners for one of the essential tellurite resistance proteins \u2013 TerB. We observe that N-terminus of TerB attaches to the periplasmic membrane, while the C-terminus is partly localized in the cytoplasm. Subsequently, by methods of in vivo cross-linking and mass-spectroscopic analysis, we have determined the proteins from both the membrane and cytoplasmic fractions, which can potentially interact with TerB.", + "URL": "http://www.elis.sk/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=2468&category_id=78&option=com_virtuemart&Itemid=11", + "DOI": "10.4149/gpb_2011_03_286", + "journalAbbreviation": "gpb", + "language": "en", + "author": [ + { + "family": "Alekhina", + "given": "O." + }, + { + "family": "Valkovicova", + "given": "L." + }, + { + "family": "Turna", + "given": "J." + } + ], + "issued": { + "date-parts": [ + [ + 2011 + ] + ] + }, + "accessed": { + "date-parts": [ + [ + 2023, + 11, + 30 + ] + ] + } + }, { "id": "15342854/LDQLNJ9U", "type": "article-journal", @@ -5384,7 +5835,7 @@ "issue": "6379", "abstract": "The arms race between bacteria and phages led to the development of sophisticated antiphage defense systems, including CRISPR-Cas and restriction-modification systems. Evidence suggests that known and unknown defense systems are located in \"defense islands\" in microbial genomes. Here, we comprehensively characterized the bacterial defensive arsenal by examining gene families that are clustered next to known defense genes in prokaryotic genomes. Candidate defense systems were systematically engineered and validated in model bacteria for their antiphage activities. We report nine previously unknown antiphage systems and one antiplasmid system that are widespread in microbes and strongly protect against foreign invaders. These include systems that adopted components of the bacterial flagella and condensin complexes. Our data also suggest a common, ancient ancestry of innate immunity components shared between animals, plants, and bacteria.", "DOI": "10.1126/science.aar4120", - "note": "PMID: 29371424\nPMCID: PMC6387622", + "note": "tex.ids= Doron2018, Doron2018a, Doron2018b\nPMCID: PMC6387622\nPMID: 29371424", "journalAbbreviation": "Science", "language": "eng", "author": [ diff --git a/layouts/article.vue b/layouts/article.vue index 415a26a707657557b6325fab8a603761e1dbc491..0837b5fa59db8c2970b03ec22749c8af105dde16 100644 --- a/layouts/article.vue +++ b/layouts/article.vue @@ -1,4 +1,18 @@ -<script setup lang="ts"></script> +<script setup lang="ts"> +import { useArticlesStore } from '@/stores/articles' +const store = useArticlesStore() + +const { data } = await useAsyncData('zotero-articles', async () => queryContent('_data/_articles').where({ _partial: true }).findOne()) +if (data.value) { + const dataValue = toValue(data)?.body + for (const cslArticle of dataValue) { + if (cslArticle?.DOI) { + store.add(cslArticle) + } + } +} + +</script> <template> <LayoutWrapper> <slot /> diff --git a/stores/articles.ts b/stores/articles.ts index b737ad7dd6af04377eeb6d1bd0ffbe8d6cb78c30..1ba95fd2d0584f76814bd6818b4ab794bf0f534a 100644 --- a/stores/articles.ts +++ b/stores/articles.ts @@ -1,19 +1,19 @@ import { defineStore } from 'pinia' import { ref } from 'vue' - +// import jsonArticles from '@/assets/articles.json' export interface CslJson { - id: string + // id: string type: string title: string "container-title": string - page: string, - volume: string, + // page: string, + // volume: string, abstract: string - URL: string + // URL: string DOI: string - journalAbbreviation: string - language: string + // journalAbbreviation: string + // language: string author: Array<{ family: string, given: string }> issued: { "date-parts": Array<string> @@ -21,12 +21,15 @@ export interface CslJson { } export const useArticlesStore = defineStore('articles', () => { - const articles = ref(new Map<string, CslJson>()) + const articleMap = new Map([]) + const articles = ref(articleMap) function add(article: CslJson) { const doi = article.DOI if (articles.value.has(doi)) return articles.value.set(article.DOI, article) } + + return { articles, add } }) \ No newline at end of file