From a598dbed094ab59a8b844a8b0b99517614cd37be Mon Sep 17 00:00:00 2001 From: Yarden Shoham Date: Fri, 22 Mar 2024 19:31:05 +0000 Subject: [PATCH 1/2] Remove jQuery from the citation modal (except fomantic) - Switched to plain JavaScript - Tested the citation modal functionality and it works as before Signed-off-by: Yarden Shoham --- web_src/js/features/citation.js | 40 +++++++++++++++++---------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/web_src/js/features/citation.js b/web_src/js/features/citation.js index 49992b225fdda..0b2e93070f6da 100644 --- a/web_src/js/features/citation.js +++ b/web_src/js/features/citation.js @@ -1,8 +1,9 @@ import $ from 'jquery'; +import {getCurrentLocale} from '../utils.js'; const {pageData} = window.config; -async function initInputCitationValue($citationCopyApa, $citationCopyBibtex) { +async function initInputCitationValue(citationCopyApa, citationCopyBibtex) { const [{Cite, plugins}] = await Promise.all([ import(/* webpackChunkName: "citation-js-core" */'@citation-js/core'), import(/* webpackChunkName: "citation-js-formats" */'@citation-js/plugin-software-formats'), @@ -14,11 +15,11 @@ async function initInputCitationValue($citationCopyApa, $citationCopyBibtex) { config.constants.fieldTypes.doi = ['field', 'literal']; config.constants.fieldTypes.version = ['field', 'literal']; const citationFormatter = new Cite(citationFileContent); - const lang = document.documentElement.lang || 'en-US'; + const lang = getCurrentLocale() || 'en-US'; const apaOutput = citationFormatter.format('bibliography', {template: 'apa', lang}); const bibtexOutput = citationFormatter.format('bibtex', {lang}); - $citationCopyBibtex.attr('data-text', bibtexOutput); - $citationCopyApa.attr('data-text', apaOutput); + citationCopyBibtex.setAttribute('data-text', bibtexOutput); + citationCopyApa.setAttribute('data-text', apaOutput); } export async function initCitationFileCopyContent() { @@ -26,44 +27,45 @@ export async function initCitationFileCopyContent() { if (!pageData.citationFileContent) return; - const $citationCopyApa = $('#citation-copy-apa'); - const $citationCopyBibtex = $('#citation-copy-bibtex'); - const $inputContent = $('#citation-copy-content'); + const citationCopyApa = document.getElementById('citation-copy-apa'); + const citationCopyBibtex = document.getElementById('citation-copy-bibtex'); + const inputContent = document.getElementById('citation-copy-content'); + + if ((!citationCopyApa && !citationCopyBibtex) || !inputContent) return; - if ((!$citationCopyApa.length && !$citationCopyBibtex.length) || !$inputContent.length) return; const updateUi = () => { const isBibtex = (localStorage.getItem('citation-copy-format') || defaultCitationFormat) === 'bibtex'; - const copyContent = (isBibtex ? $citationCopyBibtex : $citationCopyApa).attr('data-text'); - - $inputContent.val(copyContent); - $citationCopyBibtex.toggleClass('primary', isBibtex); - $citationCopyApa.toggleClass('primary', !isBibtex); + const copyContent = (isBibtex ? citationCopyBibtex : citationCopyApa).getAttribute('data-text'); + inputContent.setAttribute('value', copyContent); + citationCopyBibtex.classList.toggle('primary', isBibtex); + citationCopyApa.classList.toggle('primary', !isBibtex); }; - $('#cite-repo-button').on('click', async (e) => { + document.getElementById('cite-repo-button')?.addEventListener('click', async (e) => { const dropdownBtn = e.target.closest('.ui.dropdown.button'); dropdownBtn.classList.add('is-loading'); try { try { - await initInputCitationValue($citationCopyApa, $citationCopyBibtex); + await initInputCitationValue(citationCopyApa, citationCopyBibtex); } catch (e) { console.error(`initCitationFileCopyContent error: ${e}`, e); return; } updateUi(); - $citationCopyApa.on('click', () => { + citationCopyApa.addEventListener('click', () => { localStorage.setItem('citation-copy-format', 'apa'); updateUi(); }); - $citationCopyBibtex.on('click', () => { + + citationCopyBibtex.addEventListener('click', () => { localStorage.setItem('citation-copy-format', 'bibtex'); updateUi(); }); - $inputContent.on('click', () => { - $inputContent.trigger('select'); + inputContent.addEventListener('click', () => { + inputContent.select(); }); } finally { dropdownBtn.classList.remove('is-loading'); From 8bee2f84a69a96149d43adcbb0f3810f79c1eb09 Mon Sep 17 00:00:00 2001 From: Yarden Shoham Date: Fri, 22 Mar 2024 21:58:32 +0200 Subject: [PATCH 2/2] Update web_src/js/features/citation.js Co-authored-by: silverwind --- web_src/js/features/citation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/features/citation.js b/web_src/js/features/citation.js index 0b2e93070f6da..918a4671364c2 100644 --- a/web_src/js/features/citation.js +++ b/web_src/js/features/citation.js @@ -36,7 +36,7 @@ export async function initCitationFileCopyContent() { const updateUi = () => { const isBibtex = (localStorage.getItem('citation-copy-format') || defaultCitationFormat) === 'bibtex'; const copyContent = (isBibtex ? citationCopyBibtex : citationCopyApa).getAttribute('data-text'); - inputContent.setAttribute('value', copyContent); + inputContent.value = copyContent; citationCopyBibtex.classList.toggle('primary', isBibtex); citationCopyApa.classList.toggle('primary', !isBibtex); };