Erome Sort by views + Infinite Scroll

Sort by views. Infinite scroll. Only videos mode. Hide photos. Tags below title

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Erome Sort by views + Infinite Scroll
// @namespace    http://tampermonkey.net/
// @version      1.0
// @license      MIT
// @description  Sort by views. Infinite scroll. Only videos mode. Hide photos. Tags below title
// @author       ricaroal
// @match        *://*.erome.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=erome.com
// @run-at       document-idle
// @grant        none

// ==/UserScript==
/* globals $ LazyLoad */

    $(document).ready(function() {
        // CSS que deseas añadir
        var css = `
.album .album-bottom-right, .album .album-bottom-views {
    text-shadow: 3px 0 #000, -3px 0 #000, 0 3px #000, 0 -3px #000,
             1px 1px #000, -1px -1px #000, 1px -1px #000, -1px 1px #000;
    font-size: 20px;
    font-weight: bold;
}

#tabs {
  display:none;
}

.page-content h1 {
  margin-bottom:30px;
}
        `;
        // Añadir el CSS al documento
        var style = $('<style></style>').text(css);
        $('head').append(style);
    });

  $("#tabs").first().css("display", "flex");
  $(".page-content h1").first().css("margin-bottom", "10px");

  const etiquetasBottom = $(".mt-10");
  const userprofileTop = $(".user-profile");
  if (etiquetasBottom.length && userprofileTop.length) {
    etiquetasBottom.insertAfter(userprofileTop);
  }
  const spanElement = $('<span>Tags: </span>');
  $('p.mt-10').prepend(spanElement);
  $('p.mt-10').css('font-size', '20px');

  if ($('.user-profile').length === 0) {
    const orderByViews = $('<button id="order-by-views">Order by views</button>').css({
      'float': 'right',
      'color': '#eb6395',
        'background-color': 'black',
        'padding': '7px',
        'font-size': '17px'
    });
    $('h1').append(orderByViews);
  }


setInterval(function() {
  $('div#page .page-content.row').addClass('albumes');
}, 1000);



    $(document).ready(function() {
      // Function to convert formatted views to complete numbers
      function convertViews(views) {
        if (views.includes('K')) {
          return parseFloat(views.replace('K', '').replace(',', '.')) * 1000;
        }
        return parseInt(views.replace(',', ''));
      }

      // Event listener for the button
      $('#order-by-views').click(function() {

// MODIFICACION SCRIPT
    // Select all albumes divs
    const albumesDivs = $('.albumes');
    // If there are no albumes divs or only one, no need to merge
    if (albumesDivs.length <= 1) {
        return;
    }
    // Get the first albumes div
    const mainAlbumesDiv = albumesDivs.first();
    // Loop through all albumes divs except the first one
    albumesDivs.slice(1).each(function() {
        // Get all album divs inside the current albumes div
        const albumDivs = $(this).find('.album');
        // Append each album div to the first albumes div
        albumDivs.appendTo(mainAlbumesDiv);
        // Remove the current albumes div
        $(this).remove();
    });
// MODIFICACION SCRIPT

        // Iterate over each span element with the class 'album-bottom-views' and convert views
        $('.album-bottom-views').each(function() {
          const $this = $(this);
          const viewsText = $this.text().trim().replace(/[^\d,K]/g, ''); // Extract the views text
          const completeViews = convertViews(viewsText); // Convert views to complete number
          $this.html('<i class="fa fa-eye"></i>' + completeViews.toLocaleString()); // Update the span content
        });

        // Get all child divs with the class 'album' and sort them based on the number of views
        const $albums = $('.albumes').children('.album').sort(function(a, b) {
          const viewsA = convertViews($(a).find('.album-bottom-views').text().trim().replace(/[^\d,k]/g, ''));
          const viewsB = convertViews($(b).find('.album-bottom-views').text().trim().replace(/[^\d,k]/g, ''));
          return viewsB - viewsA; // Sort in descending order
        });

        // Append the sorted albums back to the parent container
        $('.albumes').append($albums);
      });
    });


(function disableDisclaimer() {
    if (!$('#disclaimer').length) return;
    $.ajax({ type: 'POST', url: '/user/disclaimer', async: true });
    $('#disclaimer').remove();
    $('body').css('overflow', 'visible');
})();

const PINK = '#eb6395';
const GREY = '#a09f9d';

function isActiveColor(condition) { return condition ? PINK : GREY; };

function togglePhotoElements() {
    document.querySelectorAll('.media-group > div:last-child:not(.video)').forEach(a => {
        $(a.parentElement).toggle(config.showPhotos);
    });
    $('#togglePhotos').css('backgroundColor', isActiveColor(config.showPhotos));
    $('#togglePhotos').text(!config.showPhotos ? 'show photos' : 'hide photos');
}

function hidePhotoOnlyAlbums() {
    $('div[id^=album]').filter((_, e) => !$(e).find('.album-videos').length).toggle(config.showPhotoAlbums);
    $('#togglePhotoAlbums').css('color', isActiveColor(!config.showPhotoAlbums));
    window.dispatchEvent(new Event('scroll'));
}

function infiniteScrollAndLazyLoading() {
    if (!document.querySelector('.pagination')) return;

    const url = new URL(window.location.href);

    const nextPageUrl = () => {
        url.searchParams.set('page', nextPage);
        return url.href;
    }

    let nextPage = parseInt(url.searchParams.get('page')) || 2;
    const limit = parseInt($('.pagination li:last-child()').prev().text()) || 50;

    const infinite = $('#page').infiniteScroll({ path: nextPageUrl, append: '.page-content', scrollThreshold: 800 });

    $('#page').on('append.infiniteScroll', () => {
        hidePhotoOnlyAlbums();
        new LazyLoad();
        nextPage++;
        if (nextPage > limit) infinite.destroy();
    });
}

/******************************************* STATE ***********************************************/

const config = {
    showPhotos: true,
    showPhotoAlbums: false
}

function sync() {
    Object.assign(config, JSON.parse(localStorage.getItem("config")));
}

function save() {
    localStorage.setItem("config", JSON.stringify(config));
}

//=================================================================================================

const IS_ALBUM_PAGE = /^\/a\//.test(window.location.pathname);

function pageAction() {
    sync();
    if (IS_ALBUM_PAGE) {
        togglePhotoElements();
    } else {
        hidePhotoOnlyAlbums();
    }
}

if (IS_ALBUM_PAGE) {
    $('#user_name').parent().append('<button id="togglePhotos" class="btn btn-pink">show/hide photos</button>');
    $('#togglePhotos').on('click', () => {
        config.showPhotos = !config.showPhotos;
        togglePhotoElements();
        save();
    });
} else {
    infiniteScrollAndLazyLoading();
    $('.navbar-nav').append('<li><a href="#" id="togglePhotoAlbums">video only</span></a></li>');
    $('#togglePhotoAlbums').on('click', () => {
        config.showPhotoAlbums = !config.showPhotoAlbums;
        hidePhotoOnlyAlbums();
        save();
    });
}

window.addEventListener('focus', pageAction);
pageAction();