- // ==UserScript==
- // @name Animeforce premium
- // @description Permette di godere in maniera ottimale della piattaforma Animeforce, skippando alcune pagine intermedie e avendo il download diretto delle puntate
- // @author Maxeo | maxeo.net
- // @license https://creativecommons.org/licenses/by-sa/4.0/
- // @include http://*.animeforce.org/*
- // @include https://*.animeforce.org/*
- // @homepageURL https://greasyfork.org/it/scripts/25912-animeforce-premium
- // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js
- // @require https://greasyfork.org/scripts/372499-bootstrap-tooltip-js-v2-3-2/code/bootstrap-tooltipjs%20v232.js?version=631225
- // @require https://greasyfork.org/scripts/26454-jquery-cookie/code/jQuery%20Cookie.user.js
- // @version 2.4.6
- // @grant none
- // @namespace https://greasyfork.org/users/88678
- // @icon https://www.maxeo.net/imgs/icon/greasyfork/animeforcePremium.png
- // ==/UserScript==
-
- function AFP_index() {
- var $ = jQuery;
- var AFPremium = {
- menu: {
- functions: {
- addPremiumMenu: {
- enable: true,
- title: "Aggiungi menu premium",
- description: "Aggiunge il menu premium nelle pagine non di streaming",
- warning: "Disabilitando questa voce sarà necessario andare su https://ww1.animeforce.org/premium per per modificare le impostazioni"
- },
- animeDownloadIstant: {
- enable: true,
- title: "Download istantaneo",
- description: "Aggiunge il download istantaneo nella lista degli episodi dell'anime",
- dependances: ['removeAdflyInPageAnime'],
- },
- decreaseAD: {
- enable: true,
- title: "DecreaseAD",
- description: "Riduce la pubblicità nel sito. Senza che sia necessario l'utilizzo di AdBlock o simili.",
- },
- dontBlocADblock: {
- enable: true,
- title: "Non bloccare AdBlock",
- description: "Su alcune pagine AdBlock non verrà 'bloccato'",
- },
- linkDirettoHomePage: {
- enable: true,
- title: "Link diretto in HomePage",
- description: "Nella homepage i link agli episodi saranno diretti <br> PS. Pagine secondarie non ancora supportate",
- dependances: ['loadAnimeList'],
- },
- miglioraUtilizzoMenu: {
- enable: true,
- title: "Menu percettivo",
- description: 'Il menu principale apparirà ogni volta che si passa il mouse sulla barra dei menu',
- },
- premiumSearchHomePage: {
- enable: true,
- title: "Ricerca Anime in homepage",
- description: 'Nella homepage sarà possibile utilizzare il form di ricerca per cercare direttamente dalla lista degli episodi',
- dependances: ['loadAnimeList'],
- },
- searchInList: {
- enable: true,
- title: "Ricerca aggiuntiva nelle liste",
- description: "In 'lista episodi' e 'Anime in corso' aggiunge una ricerca testuale",
- },
- },
-
- },
- cvar: {},
- customElements: {
- afphechbox: '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;width: 30px;height: 30px;border: 2px solid #000;" xml:space="preserve"><path style="fill:none;stroke:#000000;stroke-dashoffset: 73px;stroke-width: 6px;transition: 1s cubic-bezier(.63,.41,.04,.61);" d="M14.8,58.5c0,0,13.9,23.7,21.8,28.9c7.9,5.2,48.6-75.1,48.6-75.1"></path></svg>'
- },
- pagetype: undefined,
- logs: 1,
- loadPageType: function () {
- if ($('body').hasClass('home')) {
- this.setPageType('home')
- } else
- if ($('body').hasClass('error404')) {
- if (location.pathname == '/premium') {
- this.setPageType('premium-menu')
- } else {
- this.setPageType('error404')
- }
- } else if (($('body').attr('class') == undefined || $('body').attr('class') == '') && $('#menu-menu-2').length == 0) {
- this.setPageType('streaming-page')
- } else if ($('body').hasClass('single-post')) {
- if ($('table img[src="/DDL/download.png"], table img[src="/DDL/streaming.png').length) {
- this.setPageType('episode-list')
- } else {
- this.setPageType('episode-preview')
- }
- } else if (location.pathname == '/lista-anime/' || location.pathname == '/lista-anime-in-corso/') {
- this.setPageType('lista-anime');
- } else if ($('body').hasClass('archive')) {
- this.setPageType('archive');
- } else if (location.pathname == '/lista-anime-hentai/') {
- this.setPageType('hentai');
- }
-
- return this.pagetype;
- },
- setPageType: function (pagename) {
- this.pagetype = pagename;
- },
- getPageType: function () {
- return this.pagetype;
- },
- executeFunctionality: function (funct_name) {
- var dependenceLoaded = [];
- for (var index in arguments) {
- this.fComponents.loadAnimeList();
- if (this.menu.functions[arguments[index]].dependances != undefined) {
- var requiredF = this.menu.functions[arguments[index]].dependances;
- for (var subindex in requiredF) {
- if (!(dependenceLoaded.indexOf(requiredF[subindex]) + 1)) {
- dependenceLoaded.push(requiredF[subindex])
- this.fComponents[requiredF[subindex]]();
-
- }
- }
- }
-
- if (this.menu.functions[arguments[index]].enable) {
- this.functionalities[arguments[index]]();
- }
-
- }
- },
- loadFunctionalities: function () {
- //Eseguo dipendenze
- for (var index in this.requiredFuntions) {
- this.requiredFuntions[index]();
- }
-
- //funzionalità globali
- this.executeFunctionality('decreaseAD', 'miglioraUtilizzoMenu');
-
-
- //funzionalità specifiche
- switch (this.getPageType()) {
- case 'home':
- this.executeFunctionality('addPremiumMenu', 'premiumSearchHomePage', 'linkDirettoHomePage');
- break;
- case 'premium-menu':
- this.functionalities.premiumMenu();
- this.executeFunctionality('addPremiumMenu');
- break;
- case 'episode-list':
- this.executeFunctionality('addPremiumMenu', 'animeDownloadIstant');
- break;
- case 'episode-preview':
- this.executeFunctionality('addPremiumMenu');
- break;
- case 'lista-anime':
- this.executeFunctionality('addPremiumMenu', 'searchInList');
- break;
- case 'archive':
- this.executeFunctionality('addPremiumMenu', 'searchInList');
- break;
- case 'hentai':
- this.executeFunctionality('addPremiumMenu');
- break;
- case 'error404':
- this.executeFunctionality('addPremiumMenu');
- break;
- case 'streaming-page':
- this.executeFunctionality('dontBlocADblock');
- break;
- default:
-
- }
- },
- functionalities: {
- /*
- * Aggiunge il menu premium alle pagine
- */
- addPremiumMenu: function () {
- $('#menu-menu-2').append('<li class="menu-item"><a href="/premium">Menu Premium</a></li>')
- },
- decreaseAD: function () {
- /*** PAGINA DI STREAMING ***/
- if (AFPremium.getPageType() == 'streaming-page') {
- var disableFunction = setInterval(function () {
- if ($("body > center + *").length) {
- $('footer').remove();
- while ($("body > center + *").length) {
- $("body > center + *").remove();
- }
- }
- }, 300)
-
- } else {
- /*** PAGINE NON DI STREAMING ***/
- $('[style^="position: fixed; top: 0px; bottom: 0px; left: 0px; right: 0px; z-index: 2147483647;"]')
- .attr('style', "position:fixed;right:200vw")
- .css('display', 'none')
- $('.tp-loader').remove()
- $('#menu-menu-2 a').each(function () {
- $(this).attr('href', $(this).attr('href').replace('//adf.ly/16031519', ''))
- })
- $('.widget-unwrapped iframe').parent().addClass('fb-container').removeClass('widget-unwrapped')
- $('.widget-unwrapped').remove()
- if (AFPremium.getPageType() == 'episode-list') {
- $('.code-block.code-block-3').remove();
- }
-
- }
- },
- dontBlocADblock: function () {
- var disableFunction = setInterval(function () {
- if ($('[href="http://www.animeforce.org/block/guida.html"]').parents('[id]').length) {
- $('[href="http://www.animeforce.org/block/guida.html"]').parents('[id]').remove();
- clearInterval(disableFunction);
- }
- }, 300);
-
- },
- searchInList: function () {
- var src_input = '<input id="filtro" type="text" placeholder="Scrivi qui per cercare tra gli anime" style="width: 100%">'
- $('.the-content p').eq(0).append(src_input);
- $('#filtro').on('keyup', function () {
- if ($('#filtro').val().length >= 1) {
- $('.the-content h2').css('display', 'none');
- $('.the-content').find('li').each(function () {
- if ($(this).is(':icontains(\'' + $('#filtro').val() + '\')'))
- $(this).css('display', '');
- else
- $(this).css('display', 'none');
- });
- } else {
- $('.the-content li,.the-content h2').css('display', '');
- }
- });
- },
- miglioraUtilizzoMenu: function () {
- if (AFPremium.getPageType() != 'streaming-page') {
- $('#menu-menu-2 .sub-menu').css('display', 'none')
- $('#menu-menu-2').on('mouseover', function () {
- $('#menu-menu-2 #menu-item-21035 .sub-menu').css('display', 'block').css('visibility', 'visible')
- })
- $('#menu-menu-2').on('mouseout', function () {
- $('#menu-menu-2 .sub-menu').css('display', 'none')
- })
- }
- },
- animeDownloadIstant: function () {
- $('body').append('<div class="w8-afp-download" style="position: fixed;right: 0;top: 0;background: rgba(0, 120, 255, 0.63);padding: 18px;z-index: 3000;color: #FFF;font-size: 20px;text-align: right;font-family: Verdana;">Analizzo la pagina per il download diretto.<br>Attendere...</div>')
- if ($('img[src="/DDL/download.png"]').length) {
- var animeDownloadIstantInt = setInterval(function () {
- if (AFPremium.cvar.adflyRemoveUpdated != undefined && AFPremium.cvar.adflyRemoveUpdated == true) {
- var url = 'https:' + $('img[src="/DDL/download.png"]').eq(0).parent().attr('href');
- $.get('//url-redirect.maxeo.net/?url=' + encodeURI(url), function (data) {
- if (data.length > 12) {
- var filecode = url.match(/\?file=(.*)/)[1];
- var longData = data.match(/file=(.*)/)[1].substr();
- var basedata = longData.substr(0, longData.indexOf(filecode))
- $('img[src="/DDL/download.png"]').each(function () {
- url = $(this).parent().attr('href');
- var filecode = url.match(/\?file=(.*)/);
- if (filecode != null && filecode.length >= 2) {
- filecode = filecode[1];
- var downloadLink = 'http://' + basedata + filecode;
- $(this).parent().attr('href', downloadLink)
- } else {
- var piano_b = $(this).parents('tr').eq(0).find('td strong').eq(0).html().replace(/ <span.*$/, '').match(/[0-9]*$/);
- if (piano_b.length && piano_b[0].length) {
- //console.log('PIANO B');
- piano_b = piano_b[0] + '';
- if (piano_b.length == 1) {
- piano_b = '0' + piano_b;
- }
- var newLong = longData.match(/(.*\_)([0-9]{1,})\_(.*)$/);
- if (newLong != null) {
- var downloadLink = 'http://' + newLong[1] + piano_b + '_' + newLong[3];
- $(this).parent().attr('href', downloadLink)
- }
-
- }
-
- }
- })
- $('.w8-afp-download').remove();
-
- }
- });
- clearInterval(animeDownloadIstantInt);
- }
- }
- , 100)
- } else {
- $('.w8-afp-download').remove();
- }
-
- },
- premiumSearchHomePage: function () {
- var animeList = AFPremium.cvar.animeList;
-
- $('#searchform input[type="text"]').on('keyup', function () {
- var animeList = AFPremium.cvar.animeList;
- if ($(this).val().length > 2) {
- var positionBox = $('#searchform input').offset()
- var input_ricerca = $('#searchform input')
- var listaRisultati = [];
- if (!$('#box_di_ricerca').length) {
- $('body').append('<div class="box-di-ricerca" id="box_di_ricerca"></div>')
- $('#box_di_ricerca')
- .css('width', input_ricerca.width())
- .css('top', (positionBox.top + 10 + input_ricerca.height()) + 'px')
- .css('left', (positionBox.left + 10) + 'px')
- .css('position', 'absolute')
- .css('background', '#FFF')
- .css('z-index', 10000);
- }
- $('#box_di_ricerca').html('<ul style="list-style: none;margin: 0;"></ul>');
- for (var index in animeList) {
- if (animeList[index].name.toUpperCase().indexOf($(this).val().toUpperCase()) + 1 > 0) {
- listaRisultati.push(animeList[index]);
- }
- }
- for (var index in listaRisultati) {
- $('#box_di_ricerca ul').append('<li style="padding: 4px;background: #009cff;margin: 2px 0;font-family: Verdana;"><a href="' + listaRisultati[index].link + '">' + listaRisultati[index].name + '</a></li>');
- }
-
- }
- })
-
- $('body').on('click', 'div', function () {
- if (!$(this).hasClass('box_di_ricerca')) {
- $('#box_di_ricerca').remove();
- }
- })
-
-
- },
- linkDirettoHomePage: function () {
- var linkDirettoInt = setInterval(function () {
- if (AFPremium.cvar.animeList != undefined) {
- $('.main-loop-inner .panel-wrapper a').each(function () {
- var search = $(this).attr('href').match(/(.*)(episodio(-[0-9]{1,}){1,}-)/)
- if (search != null && search.length >= 2) {
- search = search[1];
- var res = AFPremium.functionalities.searchInAnimelist(search, 'link');
- if (res != false) {
- $(this).attr('href', res).addClass('fixed-link-afp');
- }
- }
- })
- clearInterval(linkDirettoInt);
- }
- }, 100)
- },
-
- searchInAnimelist: function (what, type_search) {
- type_search = type_search = undefined ? 'link' : type_search;
- var animeList = AFPremium.cvar.animeList;
- for (var index in animeList) {
- if (animeList[index][type_search].indexOf(what) + 1) {
- return (animeList[index])[type_search]
- }
- }
- return false
-
- },
- premiumMenu: function () {
- var slug = $('.sortbar-title')
- var h1 = $('.main-content h1')
- var mainContent = $('.main-content')
- var searchBox = $('.form-search');
-
- $('body').append('<style>input:checked + svg > path {stroke-dasharray: 200,200;}input + svg > path {stroke-dasharray: 70,200;}</style>')
-
- if (!$('.content-premium').length) {
- mainContent.append('<div class="content-premium"></div>')
- }
- var contentPremium = $('.content-premium');
- slug.html('Menu Premium')
- h1.html('Impostazioni Premium')
- searchBox.find('input[type="text"]').attr('placeholder', 'Cerca tra le impostazioni')
- searchBox.on('submit keyup', function (e) {
- e.preventDefault()
- $('.content-premium > label').each(function () {
- if ($(this).is(':icontains(\'' + searchBox.find('input[type="text"]').val() + '\')'))
- $(this).css('display', 'flex');
- else
- $(this).css('display', 'none');
- });
- })
- var docFunction = AFPremium.menu.functions;
- var formAFP = "";
-
-
- /** Funzionalità da abilitare/disabilitare **/
- formAFP += "<h2>Funzionalità</h2>"
- formAFP += '<div class="afp-funct">'
- for (var funxtion_name in docFunction) {
- var labW = docFunction[funxtion_name].warning == undefined ? '' : 'ATTENZIONE: ' + docFunction[funxtion_name].warning;
- formAFP += '<label style="display: flex"><input name="' + funxtion_name + '" style="display:none" type="checkbox"' + (docFunction[funxtion_name].enable ? ' checked=""' : '') +
- ' name="' + funxtion_name + '">' + AFPremium.customElements.afphechbox +
- ' <p data-html="true" data-toggle="tooltip" ' +
- ' data-title="' + docFunction[funxtion_name].description + '" ' +
- ' data-warning="' + labW + '" ' +
- ' style="font-size: 18px;margin: 7px;padding: 0;">' +
- docFunction[funxtion_name].title +
- '</p></label>';
- }
- formAFP += '</div>'
-
- contentPremium.html(formAFP);
-
-
- $('[data-toggle="tooltip"]').each(function () {
- var dataTooltip = $(this).data('title');
- if ($(this).data('warning').length) {
- dataTooltip += '<br><br><span style="background:red">' + $(this).data('warning') + '</span>';
- }
- $(this).tooltip({'title': dataTooltip, 'placement': 'top'});
-
- })
-
- $('.afp-funct input').on('change', function () {
- AFPremium.updateSettings($(this).attr('name'), $(this).is(':checked'))
- })
-
-
-
- },
-
- },
- fComponents: {
- loadAnimeList: function () {
- var animeList = AFPremium.cvar.animeList;
- $.get('https://ww1.animeforce.org/lista-anime/').done(function (data) {
- var bxcontainer = data.match(/(\<div\ class\=\"the\-content\"\>.*(.*\n)*\<script\ type=\"text\/javascript\"\>)+/g) [0]
- bxcontainer = bxcontainer.match(/\<li\>\<strong\>\<a\ href=.*\<\/a\>/g)
- animeList = [
- ];
- for (var index in bxcontainer) {
- var link = bxcontainer[index].match(/.*">/)[0].match(/\".*\//)[0].replace(/\"/g, '')
- var nameAnime = bxcontainer[index].match(/\"\>.*Sub Ita/i)[0].replace(/\"|\/|\>|\</g, '').replace(/\ Sub\ Ita/i)
-
- animeList.push({'name': nameAnime, 'link': link})
- }
- AFPremium.cvar.animeList = animeList;
- })
- },
- removeAdflyInPageAnime: function () {
- $.get('#').done(function (data) {
- $('table[style="width: 100%;"]').html(data.match(/\<table\ style\=\"width\:\ 100\%\;\"\>\n(.*\n)*\<\/tbody\>\n<\/table>/)[0])
- AFPremium.cvar.adflyRemoveUpdated = true
- })
- },
- },
- requiredFuntions: {
- /*
- * Funzione necessaria per ricercare in modo incase sensitive
- *
- */
- icontainsJQuery: function () {
- jQuery.expr[':'].icontains = function (a, i, m) {
- return jQuery(a).text().toUpperCase()
- .indexOf(m[3].toUpperCase()) >= 0;
- };
- },
- /*
- * Risolve errori interni al sito
- *
- */
- jQueryAFfix: function () {
- jQuery.easing[0] = function () {}
- jQuery.easing.def = 0;
- jQuery.timer = 0;
- (function ($) {
- $.fn.jflickrfeed = function () {};
- $.fn.tabs = function () {};
- })(jQuery);
- },
- loadSettings: function () {
- var settings = {};
- if ($.cookie('AFP') != undefined) {
- settings = JSON.parse($.cookie('AFP'))
- }
- for (var index in AFPremium.menu.functions) {
- if (settings[index] == undefined) {
- settings[index] = AFPremium.menu.functions[index].enable;
- }
- }
- $.cookie('AFP', JSON.stringify(settings), {expires: 3650, path: '/'});
- AFPremium.cvar.settings = settings;
- for (var index in settings) {
- if (AFPremium.menu.functions[index] != undefined) {
- AFPremium.menu.functions[index].enable = settings[index];
- }
-
- }
- },
-
- },
- updateSettings: function (functionality, is_active) {
- AFPremium.cvar.settings[functionality] = is_active;
- $.cookie('AFP', JSON.stringify(AFPremium.cvar.settings), {expires: 3650, path: '/'});
- }
-
- };
- AFPremium.loadPageType();
- AFPremium.loadFunctionalities();
- jQuery.test = AFPremium;
-
- }
-
- AFP_index(); //$('#featured-wrapper #featured img.wp-post-image')
-
- // https://url-redirect.maxeo.net/youtube-get-download/?id=xfynvZ8sZRY