2022-11-11 20:02:50 +03:00
import $ from 'jquery' ;
2024-07-07 18:32:30 +03:00
import { getCurrentLocale } from '../utils.ts' ;
2022-11-11 20:02:50 +03:00
const { pageData } = window . config ;
2024-03-23 02:17:28 +03:00
async function initInputCitationValue ( citationCopyApa , citationCopyBibtex ) {
2022-11-11 20:02:50 +03:00
const [ { Cite , plugins } ] = await Promise . all ( [
import ( /* webpackChunkName: "citation-js-core" */ '@citation-js/core' ) ,
import ( /* webpackChunkName: "citation-js-formats" */ '@citation-js/plugin-software-formats' ) ,
import ( /* webpackChunkName: "citation-js-bibtex" */ '@citation-js/plugin-bibtex' ) ,
2022-11-13 23:10:58 +03:00
import ( /* webpackChunkName: "citation-js-csl" */ '@citation-js/plugin-csl' ) ,
2022-11-11 20:02:50 +03:00
] ) ;
const { citationFileContent } = pageData ;
const config = plugins . config . get ( '@bibtex' ) ;
config . constants . fieldTypes . doi = [ 'field' , 'literal' ] ;
config . constants . fieldTypes . version = [ 'field' , 'literal' ] ;
const citationFormatter = new Cite ( citationFileContent ) ;
2024-03-23 02:17:28 +03:00
const lang = getCurrentLocale ( ) || 'en-US' ;
2022-11-11 20:02:50 +03:00
const apaOutput = citationFormatter . format ( 'bibliography' , { template : 'apa' , lang } ) ;
const bibtexOutput = citationFormatter . format ( 'bibtex' , { lang } ) ;
2024-03-23 02:17:28 +03:00
citationCopyBibtex . setAttribute ( 'data-text' , bibtexOutput ) ;
citationCopyApa . setAttribute ( 'data-text' , apaOutput ) ;
2023-12-12 14:31:11 +03:00
}
2022-11-11 20:02:50 +03:00
2023-12-12 14:31:11 +03:00
export async function initCitationFileCopyContent() {
2022-11-11 20:02:50 +03:00
const defaultCitationFormat = 'apa' ; // apa or bibtex
if ( ! pageData . citationFileContent ) return ;
2024-06-10 23:49:33 +03:00
const citationCopyApa = document . querySelector ( '#citation-copy-apa' ) ;
const citationCopyBibtex = document . querySelector ( '#citation-copy-bibtex' ) ;
const inputContent = document . querySelector ( '#citation-copy-content' ) ;
2024-03-23 02:17:28 +03:00
if ( ( ! citationCopyApa && ! citationCopyBibtex ) || ! inputContent ) return ;
2022-11-11 20:02:50 +03:00
const updateUi = ( ) = > {
const isBibtex = ( localStorage . getItem ( 'citation-copy-format' ) || defaultCitationFormat ) === 'bibtex' ;
2024-03-23 02:17:28 +03:00
const copyContent = ( isBibtex ? citationCopyBibtex : citationCopyApa ) . getAttribute ( 'data-text' ) ;
inputContent . value = copyContent ;
citationCopyBibtex . classList . toggle ( 'primary' , isBibtex ) ;
citationCopyApa . classList . toggle ( 'primary' , ! isBibtex ) ;
2022-11-11 20:02:50 +03:00
} ;
2023-12-12 14:31:11 +03:00
2024-06-10 23:49:33 +03:00
document . querySelector ( '#cite-repo-button' ) ? . addEventListener ( 'click' , async ( e ) = > {
2024-03-17 13:04:59 +03:00
const dropdownBtn = e . target . closest ( '.ui.dropdown.button' ) ;
dropdownBtn . classList . add ( 'is-loading' ) ;
2022-11-11 20:02:50 +03:00
2024-03-17 13:04:59 +03:00
try {
try {
2024-03-23 02:17:28 +03:00
await initInputCitationValue ( citationCopyApa , citationCopyBibtex ) ;
2024-03-17 13:04:59 +03:00
} catch ( e ) {
console . error ( ` initCitationFileCopyContent error: ${ e } ` , e ) ;
return ;
}
updateUi ( ) ;
2022-11-11 20:02:50 +03:00
2024-03-23 02:17:28 +03:00
citationCopyApa . addEventListener ( 'click' , ( ) = > {
2024-03-17 13:04:59 +03:00
localStorage . setItem ( 'citation-copy-format' , 'apa' ) ;
updateUi ( ) ;
} ) ;
2024-03-23 02:17:28 +03:00
citationCopyBibtex . addEventListener ( 'click' , ( ) = > {
2024-03-17 13:04:59 +03:00
localStorage . setItem ( 'citation-copy-format' , 'bibtex' ) ;
updateUi ( ) ;
} ) ;
2024-03-23 02:17:28 +03:00
inputContent . addEventListener ( 'click' , ( ) = > {
inputContent . select ( ) ;
2024-03-17 13:04:59 +03:00
} ) ;
} finally {
dropdownBtn . classList . remove ( 'is-loading' ) ;
}
2022-11-11 20:02:50 +03:00
$ ( '#cite-repo-modal' ) . modal ( 'show' ) ;
} ) ;
}