您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Will fix many things that are wrong with AnimeUltima.io
// ==UserScript== // @name AU Global Fix // @namespace AUVTF // @version 2.1.0 // @description Will fix many things that are wrong with AnimeUltima.io // @author Jopitan // @match http://www.animeultima.io/* // @exclude http://www.animeultima.io/forums/* // @exclude http://www.animeultima.io/[a-zA-Z0-9-].php // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js // ==/UserScript== 'use strict'; (function ($) { const STORAGE_VARIABLE_SETTINGS = 'au_settings'; const STORAGE_VARIABLE_THUMBNAIL = 'au_thumbnails'; const STORAGE_VARIABLE_FAVORITES = 'au_favorites'; function _storage() { var _get = function (item) { return JSON.parse(localStorage.getItem(item)); }; var _set = function (item, obj) { localStorage.setItem(item, JSON.stringify(obj)); }; var _create = function (items) { if (items instanceof Array) { for (var item in items) { if (items.hasOwnProperty(item)) _create(items[item]); } return; } var storageItem = _get(items); if (storageItem === null) _set(items, {}); }; return { 'create': _create, 'get': _get, 'set': _set }; } function _favorites() { var favorites = {}; var _save = function () { window.au.storage.set(STORAGE_VARIABLE_FAVORITES, favorites); }; var _load = function () { var favoritesList = window.au.storage.get(STORAGE_VARIABLE_FAVORITES); if (favoritesList !== null) favorites = favoritesList; }; var _new = function (id, obj) { var key = btoa(id); favorites[key] = obj; _save(); }; var _get = function (id) { var key = btoa(id); return favorites[key] || null; }; var _exists = function (id) { return _get(id) !== null; }; var _list = function () { return favorites; }; var _remove = function (id) { var key = btoa(id); favorites.splice(key); _save(); }; _load(); return { 'new': _new, 'remove': _remove, 'get': _get, 'list': _list, 'exists': _exists }; } function _settings() { var settings = {}; var _list = function () { return settings; }; var _save = function () { window.au.storage.set(STORAGE_VARIABLE_SETTINGS, settings); }; var _get = function (id) { var key = btoa(id); return settings[key]; }; var _set = function (id, value) { var key = btoa(id); settings[key] = value; _save(); }; var _load = function () { var settingsList = window.au.storage.get(STORAGE_VARIABLE_SETTINGS); if (settingsList !== null) settings = settingsList; }; _load(); return { 'list': _list, 'get': _get, 'set': _set }; } function _thumbnails() { const DOWNLOAD_URL = 'http://topdev.xyz/thumb.php'; var thumbnails = {}; var _list = function () { return thumbnails; }; var _save = function () { window.au.storage.set(STORAGE_VARIABLE_THUMBNAIL, thumbnails); }; var _get = function (id) { var key = btoa(id); return thumbnails[key] || null; }; var _set = function (id, value) { var key = btoa(id); thumbnails[key] = value; _save(); }; var _addRelative = function (parentUrl, relativeUrl) { var parentObj = _get(parentUrl); if (typeof parentObj.relatives === 'undefined') parentObj.relatives = []; parentObj.relatives.push(btoa(relativeUrl)); _set(parentUrl, parentObj); }; var _hasRelative = function (parentObj, relativeUrl) { if (typeof parentObj.relatives === 'undefined') return false; var key = btoa(relativeUrl); return parentObj.relatives.indexOf(key) >= 0; }; var _getParent = function (url) { var key = btoa(url); for (var thumbnail in thumbnails) { if (thumbnails.hasOwnProperty(thumbnail)) { var obj = thumbnails[thumbnail]; if (typeof obj.relatives !== 'undefined') { if (obj.relatives.indexOf(key) !== -1) { return obj; } } } } return null; }; var _download = function (id, url, applyTo) { $.get(DOWNLOAD_URL + '?id=0&url=' + encodeURIComponent(btoa(url))) .done(function (xhr) { var imgUrl = xhr.data[0]; _set(id, { 'relatives': [], 'img': imgUrl }); if (typeof applyTo !== 'undefined') { if (typeof applyTo === 'function') { applyTo(); } else { $(applyTo).attr('src', imgUrl); } } }); }; var _load = function () { var thumbnailsList = window.au.storage.get(STORAGE_VARIABLE_THUMBNAIL); if (thumbnailsList !== null) thumbnails = thumbnailsList; }; _load(); return { 'list': _list, 'get': _get, 'set': _set, 'download': _download, 'addRelative': _addRelative, 'hasRelative': _hasRelative, 'getParent': _getParent }; } function _router() { const PAGE_NAME_VIDEO_OVERVIEW = 'video_overview'; const PAGE_NAME_UPLOAD_PAGE = 'upload_page'; const PAGE_NAME_VIDEO_PAGE = 'video_page'; const PAGE_NAME_ANIME_LIST = 'anime_list'; const PAGE_NAME_SEARCH = 'search'; const PAGE_NAME_DEFAULT = 'home'; const PAGE_NAME_NONE = 'none'; var _path = function () { return window.location.pathname; }; var _whoAmI = function () { var pathSplit = _path().split('/'); if (pathSplit[1] == 'watch') { return PAGE_NAME_VIDEO_OVERVIEW; } else if (pathSplit[1] == 'search.html') { return PAGE_NAME_SEARCH; } else if (typeof pathSplit[2] !== 'undefined') { if (pathSplit[1] == 'upload') { return PAGE_NAME_UPLOAD_PAGE; } else if (pathSplit[1] == 'watch-anime') { return PAGE_NAME_ANIME_LIST; } return PAGE_NAME_VIDEO_PAGE; } else if (pathSplit[0] == '' && pathSplit[1] == '') { return PAGE_NAME_DEFAULT; } else { return PAGE_NAME_NONE; } }; var _const = { 'PAGE_NAME_VIDEO_OVERVIEW': PAGE_NAME_VIDEO_OVERVIEW, 'PAGE_NAME_UPLOAD_PAGE': PAGE_NAME_UPLOAD_PAGE, 'PAGE_NAME_VIDEO_PAGE': PAGE_NAME_VIDEO_PAGE, 'PAGE_NAME_ANIME_LIST': PAGE_NAME_ANIME_LIST, 'PAGE_NAME_SEARCH': PAGE_NAME_SEARCH, 'PAGE_NAME_DEFAULT': PAGE_NAME_DEFAULT, 'PAGE_NAME_NONE': PAGE_NAME_NONE }; return { 'path': _path, 'whoAmI': _whoAmI, 'const': _const }; } function _behaviour() { var _home = function () { $('div.nr-top a').on('click', function () { var rel = $(this).attr('rel'); $('div.nr-top a').removeClass('nr-toggle-view-active'); $(this).addClass('nr-toggle-view-active'); $('.switch').hide(); $('.switch.' + rel).show(); }); $('<div id="calendar-view" style="display: none;" class="switch calendar"></div>') .insertAfter('#new-episodes'); $('#new-episodes').addClass('switch default'); $('#calendar-view').css({ 'width': '100%', 'height': '650px' }); $("#new-episodes .thumb a").each(function (index, object) { var episodeObject = $(object); var episodeLink = episodeObject.attr('href'); var cachedObject = window.au.thumbnails.get(episodeLink); if (cachedObject === null) { $.get(episodeLink) .done(function (data) { var html = $(data); var link = html.find('#pembed iframe').attr('src'); window.au.thumbnails.download(episodeLink, link, episodeObject.find('img')); }); } else { episodeObject.find('img').attr('src', cachedObject.img); } }); $.get('/ajax.php?method=newrelease_calendarview&standalone=0') .done(function (html) { $('#calendar-view').html(html); $('#calendar-view').show(); var height = $('#fp_calendarview').height(); $('#calendar-view').hide().height(height); }); }; var _videoOverview = function () { $('div.inline-top a:contains(Reviews)').remove(); var path = window.au.router.path(); if (!window.au.favorites.exists(path)) { $('div.inline-top a:contains(Add to Favorites)').on('click', function () { var href = $(this).attr('href'); $.get(href) .done(function (data) { if (data !== 'Already on your favorites...') { alert(data); } window.au.favorites.new(window.au.router.path(), { 'date': (new Date()).toUTCString() }); $('div.inline-top a:contains(Add to Favorites)').remove(); }); return false; }); } else { $('div.inline-top a:contains(Add to Favorites)').remove(); } }; var _checkRelatedVideos = function (url, obj) { $('#related-videos .thumb a').each(function (index, object) { var obj = $(object); var href = obj.attr('href'); if (!window.au.thumbnails.hasRelative(obj, href)) { window.au.thumbnails.addRelative(url, href); } }); }; var _videoPage = function () { var currentPath = window.au.router.path(); var parentThumbnail = window.au.thumbnails.getParent(currentPath); var getThumbnail = window.au.thumbnails.get(currentPath); if (parentThumbnail !== null) { $('#related-videos .thumb .bg-image').attr('src', parentThumbnail.img); } else if (getThumbnail !== null) { _checkRelatedVideos(currentPath, getThumbnail); $('#related-videos .thumb .bg-image').attr('src', getThumbnail.img); } else { var link = $('#pembed iframe').attr('src'); window.au.thumbnails.download(currentPath, link, function () { var thumbnail = window.au.thumbnails.get(currentPath); $('#related-videos .thumb .bg-image').attr('src', thumbnail.img); _checkRelatedVideos(currentPath, thumbnail); }); } }; return { 'home': _home, 'videoOverview': _videoOverview, 'videoPage': _videoPage }; } function _css() { var _removeUselessCrap = function () { $("h3:contains(Popular Episodes in the past 7 days)").next().remove(); $("h3:contains(Popular Episodes in the past 7 days)").remove(); $("h2:contains(Episode Tracker)").next().remove(); $("h2:contains(Episode Tracker)").remove(); $("#hp-ads").remove(); }; var _restyleSearch = function () { var searchField = $('#search').find('input[name="searchquery"]'); $('#search button').remove(); searchField.css({'width': '248px','line-height':'22px'}).attr({'placeholder': searchField.val(),'autocomplete': 'off'}).val('').attr('onclick', ''); $('#search').append('<div class="searchify"></div>'); $('.searchify').css({ 'background-color': '#fff', 'position': 'absolute', 'width': '250px', 'border': '1px solid #000' }).hide().append('<div class="container"></div>'); $('.searchify .container').append('<ul id="searchResults"></ul>'); $('#searchResults').css({'padding':'5px'}); }; var _moveBlocks = function () { $("#new-anime-div").css({'float': 'left'}).after('<div id="ongoing-anime"></div>'); var ongoingParent = $('h3:contains("On-Going Anime")').parent(); var ongoingAnimeSelector = ongoingParent.html(); $('#ongoing-anime').css({'float':'right', 'width': '320px'}).html(ongoingAnimeSelector) ongoingParent.remove(); }; $('body').on('keyup', function(event) { if(event.keyCode === 27) { $('.searchify').hide(); } }); $('input[name="searchquery"]').on('input', function() { var searchQuery = $(this).val(); if(searchQuery.length >= 3) { $.ajax({ url: '/search.html?searchquery=' + searchQuery.trim(), dataType: 'html', method: 'GET' }).done(function(data) { $('.searchify').show(); $('#searchResults').html(''); var html = $(data); var results = html.find('#searchresult li'); results.each(function(index, obj) { $('#searchResults').append($(obj).prop('outerHTML').replace('h2>', 'h3>')); }); $('#searchResults li p').remove(); $('#searchResults li').css({ 'border-right': '0', 'width': '94%' }); }); } else { $('.searchify').hide(); } return false; }); return { 'removeUselessCrap': _removeUselessCrap, 'restyleSearch': _restyleSearch, 'moveBlocks': _moveBlocks }; } window.au = {}; window.au.storage = _storage(); window.au.settings = _settings(); window.au.favorites = _favorites(); window.au.thumbnails = _thumbnails(); window.au.router = _router(); window.au.behaviour = _behaviour(); window.au.css = _css(); $(document).ready(function () { window.au.storage.create([ STORAGE_VARIABLE_SETTINGS, STORAGE_VARIABLE_THUMBNAIL, STORAGE_VARIABLE_FAVORITES ]); switch (window.au.router.whoAmI()) { case window.au.router.const.PAGE_NAME_VIDEO_OVERVIEW: window.au.behaviour.videoOverview(); break; case window.au.router.const.PAGE_NAME_VIDEO_PAGE: window.au.behaviour.videoPage(); break; case window.au.router.const.PAGE_NAME_DEFAULT: window.au.behaviour.home(); window.au.css.removeUselessCrap(); window.au.css.moveBlocks(); break; case window.au.router.const.PAGE_NAME_NONE: default: } window.au.css.restyleSearch(); }); })(jQuery);