// ==UserScript== // @name bangumi sort // @name:zh-CN Bangumi 番组计划 - 排序 // @namespace http://ladio.me/ // @version 0.1 // @description sort items in alphabet order so you won't confuse any more // @description:zh-CN 按字母顺序排序观看中的节目单, 不再晕菜了 // @author Xuefer // @include http://bangumi.tv/* // @include http://bgm.tv/* // @include http://chii.in/* // @run-at document-start // @downloadURL none // ==/UserScript== function childsByTagName(element, tagName) { var childs = element.childNodes; var result = []; for (var i in childs) { if (childs[i].nodeName == tagName) { result.push(childs[i]); } } return result; } function updateClassName(object, add, remove) { var classNames = object.className.split(/ /g); var index = classNames.indexOf(remove); if (index != -1) { classNames.splice(index, 1); } if (classNames.indexOf(add) == -1) { classNames.push(add); } object.className = classNames.join(' '); } function sortElements(list, childs, compareFunction) { for (var i in childs) { list.removeChild(childs[i]); } childs.sort(compareFunction); for (var i in childs) { list.appendChild(childs[i]); } } function localeCompare(a, b) { return a.sortId.localeCompare(b.sortId); } function changeLayout() { // wait for element to finish if (!unsafeWindow.loadXML) { setTimeout(changeLayout, 1); return; } var list = document.getElementById("cloumnSubjectInfo"); list = childsByTagName(list, 'DIV')[0]; var subjects = childsByTagName(list, 'DIV'); for (var i in subjects) { subjects[i].sortId = childsByTagName(subjects[i], 'A')[0].title; } sortElements(list, subjects, localeCompare); list = childsByTagName(list, 'DIV')[0]; for (var i in subjects) { updateClassName(subjects[i], i % 2 == 0 ? 'odd' : 'even', i % 2 == 0 ? 'even' : 'odd'); } var list = document.getElementById("prgSubjectList"); var subjects = childsByTagName(list, 'LI'); for (var i in subjects) { var links = childsByTagName(subjects[i], 'A'); subjects[i].sortId = links[links.length - 1].title; } sortElements(list, subjects, localeCompare); } changeLayout();