2010-12-29 12 views
0

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; 
    }; 

Antwort

0

Ich fand es heraus. Der Code wurde erstellt, um das Array articles auf leer zu setzen. Es ist ein kleiner WTF, aber ich habe es mit ein paar kommentierten Zeilen behoben.

//var articlesStr = GM_getValue(articlesKey, '') || ''; 
//articlesStr = articlesStr.toUpperCase(); 
//articles = articlesStr.split(','); 

für alle, die diese Erweiterung verwendet, fest ich es durch die jQuery-Bibliothek auf die Erweiterung hinzufügen. Ich habe einen Verweis darauf in manifest.json hinzugefügt.

ersetzen Dann einfach die bestehende sortByGenre mit dieser Methode

function sortByGenre() { 
    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); 
} 

, wenn Sie tun, dass Sie in den Entwicklermodus in Chrom gehen und entweder laden Sie es entpackt oder als CRX packen, um die Datei in Chrom navigieren , und installieren Sie die Erweiterung.

Verwandte Themen