User:Polygnotus/DuplicateReferences.js: Difference between revisions

Content deleted Content added
null edit, this works, now for v2
No edit summary
Tag: Reverted
Line 43:
var newContent = '{{Duplicate citations}}\n' + content;
 
// Create the edit summary.
let summary = '+{{Duplicate citations}}';
if (duplicateInfo.length > 0) {
Line 182:
const urlMap = new Map();
const duplicates = new Map();
const contentMap = new Map();
let totalLinks = 0;
Line 230 ⟶ 231:
} else {
urlMap.set(url, { refNumber, citeNote, refText });
}
 
// Check for similar content
let isDuplicate = false;
for (let [content, info] of contentMap) {
if (calculateSimilarity(refText, content) > 0.9) { // 90% similarity threshold
info.push({ refNumber, citeNote, refText, url });
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
contentMap.set(refText, [{ refNumber, citeNote, refText, url }]);
}
}
});
if (duplicates.size > 0 || Array.from(contentMap.values()).some(group => group.length > 1)) {
if (document.querySelector('table.box-Duplicated_citations') === null) {
const editSections = parentDiv.querySelectorAll('span.mw-editsection');
Line 338 ⟶ 352:
newParagraph.appendChild(paragraphInfo);
});
 
// Add information about similar content duplicates
contentMap.forEach((group, content) => {
if (group.length > 1) {
let paragraphInfo = document.createElement('span');
paragraphInfo.appendChild(document.createTextNode('Similar content in refs: '));
group.forEach((ref, index) => {
if (ref.citeNote) {
let link = document.createElement('a');
link.href = `#${ref.citeNote}`;
link.textContent = ref.refNumber;
paragraphInfo.appendChild(link);
 
// Highlight similar content on hover and click (same as URL duplicates)
link.addEventListener('mouseover', () => {
group.forEach(duplicate => {
const citationElement = document.getElementById(duplicate.citeNote);
if (citationElement) {
if (duplicate.citeNote === ref.citeNote) {
citationElement.classList.add('duplicate-citation-hover');
} else {
citationElement.classList.add('duplicate-citation-highlight');
}
}
});
});
link.addEventListener('mouseout', () => {
group.forEach(duplicate => {
const citationElement = document.getElementById(duplicate.citeNote);
if (citationElement) {
citationElement.classList.remove('duplicate-citation-hover');
citationElement.classList.remove('duplicate-citation-highlight');
}
});
});
 
link.addEventListener('click', () => {
document.querySelectorAll('.duplicate-citation-clicked').forEach(el => {
el.classList.remove('duplicate-citation-clicked');
});
group.forEach(duplicate => {
const citationElement = document.getElementById(duplicate.citeNote);
if (citationElement) {
citationElement.classList.add('duplicate-citation-clicked');
}
});
});
} else {
paragraphInfo.appendChild(document.createTextNode(ref.refNumber));
}
if (index < group.length - 1) {
paragraphInfo.appendChild(document.createTextNode(', '));
}
});
paragraphInfo.appendChild(document.createElement('br'));
newParagraph.appendChild(paragraphInfo);
}
});
parentDiv.after(newParagraph);