function mySort(type, sortFunc) {
var types = ['number', 'name']
type = types.indexOf(type)
var trs = document.querySelectorAll('table tbody tr')
var cols = types.map((_, i) => trs.map(tr => tr.querySelectorAll('td')[i]))
var rows = trs.map(tr => tr.querySelectorAll('td'))
var texts = rows.map(tds => tds.map(td => td.textContent))
function observer(recs) {
recs.forEach(rec => cols.forEach((tds, i) => tds[rec.name].textContent = texts[rec.name][i]))
}
Object.observe(texts, observer)
texts.sort((a, b) => {
Object.deliverChangeRecords(observer)
return sortFunc(a[type], b[type]))
}
}
ZnVuY3Rpb24gbXlTb3J0KHR5cGUsIHNvcnRGdW5jKSB7CgoJdmFyIHR5cGVzICA9IFsnbnVtYmVyJywgJ25hbWUnXQoJdHlwZSA9IHR5cGVzLmluZGV4T2YodHlwZSkKCgl2YXIgdHJzICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZSB0Ym9keSB0cicpCgl2YXIgY29scyAgPSB0eXBlcy5tYXAoKF8sIGkpID0+IHRycy5tYXAodHIgPT4gdHIucXVlcnlTZWxlY3RvckFsbCgndGQnKVtpXSkpCgl2YXIgcm93cyAgPSB0cnMubWFwKHRyID0+IHRyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJykpIAoJdmFyIHRleHRzID0gcm93cy5tYXAodGRzID0+IHRkcy5tYXAodGQgPT4gdGQudGV4dENvbnRlbnQpKQoKCWZ1bmN0aW9uIG9ic2VydmVyKHJlY3MpIHsKCQlyZWNzLmZvckVhY2gocmVjID0+CWNvbHMuZm9yRWFjaCgodGRzLCBpKSA9PiB0ZHNbcmVjLm5hbWVdLnRleHRDb250ZW50ID0gdGV4dHNbcmVjLm5hbWVdW2ldKSkKCX0KCglPYmplY3Qub2JzZXJ2ZSh0ZXh0cywgb2JzZXJ2ZXIpCgoJdGV4dHMuc29ydCgoYSwgYikgPT4gewoJCU9iamVjdC5kZWxpdmVyQ2hhbmdlUmVjb3JkcyhvYnNlcnZlcikKCQlyZXR1cm4gc29ydEZ1bmMoYVt0eXBlXSwgYlt0eXBlXSkpCgl9Cgp9Cg==