MediaWiki:Common.js: Difference between revisions
Deduplicate research notes after splitting mashed CSV bullets |
Join date-only research notes and collapse duplicates |
||
| Line 195: | Line 195: | ||
text = text.replace(/[^\w\s\-/]/g, ' '); | text = text.replace(/[^\w\s\-/]/g, ' '); | ||
return text.replace(/\s+/g, ' ').trim(); | return text.replace(/\s+/g, ' ').trim(); | ||
} | |||
function dateOnlyFragment(text) { | |||
var m = $.trim(text || '').match(/^(\d{1,2}\/\d{1,2}\/\d{2,4})\.?$/); | |||
return m ? m[1] : ''; | |||
} | |||
function joinDateFollowons(parts) { | |||
var out = []; | |||
$.each(parts, function (_, clause) { | |||
clause = $.trim(clause || ''); | |||
if (!clause) { | |||
return; | |||
} | |||
var date = dateOnlyFragment(clause); | |||
if (date && out.length) { | |||
var prev = out[out.length - 1].replace(/[ ,;]+$/, ''); | |||
if (prev.slice(-date.length) !== date) { | |||
out[out.length - 1] = prev + ', ' + date; | |||
} | |||
return; | |||
} | |||
out.push(clause); | |||
}); | |||
return out; | |||
} | } | ||
| Line 228: | Line 253: | ||
}); | }); | ||
}); | }); | ||
return parts; | return joinDateFollowons(parts); | ||
} | } | ||
| Line 237: | Line 262: | ||
} | } | ||
var items = []; | var items = []; | ||
$ul.find('li').each(function () { | $ul.find('li').each(function () { | ||
$.each(splitNotes($(this).text()), function (_, clause) { | $.each(splitNotes($(this).text()), function (_, clause) { | ||
if (clause) { | |||
if (clause | |||
items.push(clause); | items.push(clause); | ||
} | } | ||
}); | }); | ||
}); | }); | ||
items = joinDateFollowons(items); | |||
var unique = []; | |||
var seen = {}; | |||
$.each(items, function (_, clause) { | |||
var key = normalizeNoteKey(clause); | |||
if (clause && key && !negative.test(clause) && !seen[key]) { | |||
seen[key] = true; | |||
unique.push(clause); | |||
} | |||
}); | |||
items = unique; | |||
$ul.empty(); | $ul.empty(); | ||
$.each(items, function (_, clause) { | $.each(items, function (_, clause) { | ||