code.gitea.io/gitea@v1.22.3/web_src/js/features/citation.js (about) 1 import $ from 'jquery'; 2 import {getCurrentLocale} from '../utils.js'; 3 4 const {pageData} = window.config; 5 6 async function initInputCitationValue(citationCopyApa, citationCopyBibtex) { 7 const [{Cite, plugins}] = await Promise.all([ 8 import(/* webpackChunkName: "citation-js-core" */'@citation-js/core'), 9 import(/* webpackChunkName: "citation-js-formats" */'@citation-js/plugin-software-formats'), 10 import(/* webpackChunkName: "citation-js-bibtex" */'@citation-js/plugin-bibtex'), 11 import(/* webpackChunkName: "citation-js-csl" */'@citation-js/plugin-csl'), 12 ]); 13 const {citationFileContent} = pageData; 14 const config = plugins.config.get('@bibtex'); 15 config.constants.fieldTypes.doi = ['field', 'literal']; 16 config.constants.fieldTypes.version = ['field', 'literal']; 17 const citationFormatter = new Cite(citationFileContent); 18 const lang = getCurrentLocale() || 'en-US'; 19 const apaOutput = citationFormatter.format('bibliography', {template: 'apa', lang}); 20 const bibtexOutput = citationFormatter.format('bibtex', {lang}); 21 citationCopyBibtex.setAttribute('data-text', bibtexOutput); 22 citationCopyApa.setAttribute('data-text', apaOutput); 23 } 24 25 export async function initCitationFileCopyContent() { 26 const defaultCitationFormat = 'apa'; // apa or bibtex 27 28 if (!pageData.citationFileContent) return; 29 30 const citationCopyApa = document.getElementById('citation-copy-apa'); 31 const citationCopyBibtex = document.getElementById('citation-copy-bibtex'); 32 const inputContent = document.getElementById('citation-copy-content'); 33 34 if ((!citationCopyApa && !citationCopyBibtex) || !inputContent) return; 35 36 const updateUi = () => { 37 const isBibtex = (localStorage.getItem('citation-copy-format') || defaultCitationFormat) === 'bibtex'; 38 const copyContent = (isBibtex ? citationCopyBibtex : citationCopyApa).getAttribute('data-text'); 39 inputContent.value = copyContent; 40 citationCopyBibtex.classList.toggle('primary', isBibtex); 41 citationCopyApa.classList.toggle('primary', !isBibtex); 42 }; 43 44 document.getElementById('cite-repo-button')?.addEventListener('click', async (e) => { 45 const dropdownBtn = e.target.closest('.ui.dropdown.button'); 46 dropdownBtn.classList.add('is-loading'); 47 48 try { 49 try { 50 await initInputCitationValue(citationCopyApa, citationCopyBibtex); 51 } catch (e) { 52 console.error(`initCitationFileCopyContent error: ${e}`, e); 53 return; 54 } 55 updateUi(); 56 57 citationCopyApa.addEventListener('click', () => { 58 localStorage.setItem('citation-copy-format', 'apa'); 59 updateUi(); 60 }); 61 62 citationCopyBibtex.addEventListener('click', () => { 63 localStorage.setItem('citation-copy-format', 'bibtex'); 64 updateUi(); 65 }); 66 67 inputContent.addEventListener('click', () => { 68 inputContent.select(); 69 }); 70 } finally { 71 dropdownBtn.classList.remove('is-loading'); 72 } 73 74 $('#cite-repo-modal').modal('show'); 75 }); 76 }