(function() { Array.from(document.querySelectorAll('textarea')).map(function(ta) { var container = document.createElement('div'); var asc = document.createElement('button'); asc.textContent = '↑'; asc.addEventListener("click", function(e) { e.preventDefault(); ta.value = Array.from(new Set(ta.value .split(/\n(?==.+=$)/m) .map(section => { const [heading, body] = section.split(/(?<==)\n/); return `${heading}\n${body.split('\n').sort().join('\n')}`; }) .join('\n');}); var dsc = document.createElement('button'); dsc.textContent = '↓'; dsc.addEventListener("click", function(e) { e.preventDefault(); ta.value = Array.from(new Set(ta.value .split(/\n(?==.+=$)/m) .map(section => { const [heading, body] = section.split(/(?<==)\n/); return `${heading}\n${body.split('\n').sort().reverse().join('\n')}`; }) .join('\n');}); container.appendChild(asc); container.appendChild(dsc); ta.parentNode.insertBefore(container, ta); }) })()