User:Polygnotus/DuplicateReferences.js: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Line 181:
 
function checkDuplicateReferenceLinks() {
const referencesListduplicateInfo = document.querySelectorgetDuplicateInfo('ol.references');
const referenceItems = referencesList ? Array.from(referencesList.children) : [];
const urlMap = new Map();
const duplicates = new Map();
let totalLinks = 0;
referenceItems.forEachif ((item,duplicateInfo.length index) => 0) {
const refNumber = index + 1; // Calculate reference number based on position
const span = item.querySelector('span.reference-text');
const links = span.querySelectorAll('a');
const citeNote = item.id;
const refText = extractVisibleText(span.outerHTML);
let validLink = null;
for (let link of links) {
const url = link.href;
const linkText = link.textContent.trim();
if (
linkText !== "Archived" &&
(!url.includes("wikipedia.org/wiki/") || url.includes("Special:BookSources")) &&
!url.includes("_(identifier)")
) {
validLink = link;
break;
}
}
if (validLink) {
const url = validLink.href;
totalLinks++;
if (urlMap.has(url)) {
if (duplicates.has(url)) {
duplicates.get(url).push({ refNumber, citeNote, refText });
} else {
duplicates.set(url, [urlMap.get(url), { refNumber, citeNote, refText }]);
}
} else {
urlMap.set(url, { refNumber, citeNote, refText });
}
}
});
if (duplicates.size > 0) {
if (document.querySelector('table.box-Duplicated_citations') === null) {
const editSections = parentDiv.querySelectorAll('span.mw-editsection');
Line 251 ⟶ 210:
}
duplicatesduplicateInfo.forEach((refInfo,{ url, refs }) => {
let paragraphInfo = document.createElement('span');
Line 264 ⟶ 223:
paragraphInfo.appendChild(document.createTextNode(' in refs: '));
refInforefs.forEach((refrefNumber, index) => {
let link = document.createElement('a');
link.href = `#cite_note-${ref.citeNoterefNumber}`;
link.textContent = ref.refNumber;
paragraphInfo.appendChild(link);
 
// Highlight only the specific duplicates on hover
link.addEventListener('mouseover', () => {
refInforefs.forEach(duplicateref => {
const citationElement = document.getElementById(duplicate.citeNote`cite_note-${ref}`);
if (citationElement) {
if (duplicate.citeNoteref === ref.citeNoterefNumber) {
citationElement.classList.add('duplicate-citation-hover');
} else {
Line 284 ⟶ 243:
});
link.addEventListener('mouseout', () => {
refInforefs.forEach(duplicateref => {
const citationElement = document.getElementById(duplicate.citeNote`cite_note-${ref}`);
if (citationElement) {
citationElement.classList.remove('duplicate-citation-hover');
Line 300 ⟶ 259:
});
// Add new click highlights
refInforefs.forEach(duplicateref => {
const citationElement = document.getElementById(duplicate.citeNote`cite_note-${ref}`);
if (citationElement) {
citationElement.classList.add('duplicate-citation-clicked');
Line 309 ⟶ 268:
});
//if Calculate(index similarity< withrefs.length the- next1) reference{
if (index < refInfo.length - 1) {
const similarity = calculateSimilarity(ref.refText, refInfo[index + 1].refText);
const similarityPercentage = Math.round(similarity * 100);
paragraphInfo.appendChild(document.createTextNode(` (${similarityPercentage}%)`));
}
if (index < refInfo.length - 1) {
paragraphInfo.appendChild(document.createTextNode(', '));
}