You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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