Ich habe die Netflix Queue sorter als Erweiterung installiert. Allerdings wird den Filmen innerhalb eines Genres zufällig eine Reihenfolge zugewiesen. Ich möchte, dass es innerhalb des Genres nach Namen sortiert wird.Netfix QueueSorter (chrome) - Hilfe mit dem Ändern von Skript zum Sortieren von Gruppen in alphabetischer Reihenfolge
Ich öffne C: \ Users \ MyUserName \ AppData \ Lokale \ Google \ Chrome \ User Data \ Default \ Erweiterungen \ ExtensionId \ 1.13_0 \ script.js und ich kann sehen, dass das Javascript noch etwas Arbeit braucht. Hier ist meine modifizierte Methode, die nach Titel und Genre sortiert.
function sortByTitleAndGenre() {
var articles;
sortInfo = [];
var pos = 1;
var articlesKey = 'sortByTitle.articles';
var ignoreArticlesKey = 'sortByTitle.ignoreArticles';
var ignoreArticles = GM_getValue(ignoreArticlesKey);
if (undefined === ignoreArticles) {
// Use true as default as Netflix ignores articles too.
ignoreArticles = true;
// Store keys so that users can change it via about:config.
GM_setValue(ignoreArticlesKey, ignoreArticles);
// The articles are used "as-is", so there must be a space after
// each one in most cases. To avoid typos in the default, use [].
articles = [
"A ",
"AN ",
"THE ",
"EL ",
"LA ",
"LE ",
"LES ",
"IL ",
"L'"
];
GM_setValue(articlesKey, articles.join(',').toUpperCase());
}
var elts = customGetElementsByClassName(document, 'input', 'o');
for (var idx = 0; idx < elts.length; idx++) {
var boxName = elts[idx].name;
var boxId = boxName.substring(2);
// If a movie is both at home and in the queue, or a movie has been
// watched but is still in the queue, there is both _0 and _1.
// Here we either one works.
var titleId = 'b0' + boxId + '_0';
var titleElt = document.getElementById(titleId);
var genre = $("tr[data-mid='" + boxId + "'] .gn .genre").text().toUpperCase();
var title = titleElt.innerHTML.toUpperCase();
if (ignoreArticles) {
// Get the articles, but default to empty string.
var articlesStr = GM_getValue(articlesKey, '') || '';
articlesStr = articlesStr.toUpperCase();
articles = articlesStr.split(',');
for (var aa = 0; aa < articles.length; aa++) {
var article = articles[aa].toUpperCase();
if (0 === title.indexOf(article)) {
// Move article to the end of the string.
title = title.substring(article.length) +
', ' + article;
break;
}
}
}
var record = {
"id": boxId,
"title": title,
"genre": genre,
"origPos": pos++
};
sortInfo.push(record);
}
var sortFn = function (a, b) {
if (a.genre == b.genre)
return a.title > b.title ? -1 : 1;
else
return a.genre > b.genre ? -1 : 1;
};
sortInfo.sort(sortFn);
setOrder("origPos", elts);
}
Mein Problem ist, dass, während es gut sortiert, es die Artikel nicht ignoriert. Ist meine Sortierfunktion ausgeschaltet? Ich denke, es kann prägnanter definiert werden (in einer Zeile).
var sortFn = function (a, b) {
if (a.genre == b.genre)
return a.title > b.title ? -1 : 1;
else
return a.genre > b.genre ? -1 : 1;
};