您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highlight a random episode in homepage
- // ==UserScript==
- // @name Random episode chooser
- // @description Highlight a random episode in homepage
- // @match https://www.tvtime.com/*
- // @version 1.2.2
- // @run-at document-end
- // @grant none
- // @license MIT
- // @author Morryx
- // @namespace https://greasyfork.org/users/807892
- // ==/UserScript==
- // Direct link (find a way to save it easily, some share place)
- random = function (max = 1, min = 0) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- };
- is_numeric = function (c) {
- return /^\d+$/.test(c);
- };
- toint_string = function (str) {
- var new_str = '';
- if (str == '' || str == null) return 0;
- for (i = 0; i < str.length; i++) {
- var char = str.charAt(i);
- if (is_numeric(char)) new_str += char;
- }
- return +new_str;
- };
- addCss = function (code, append) {
- if (code !== '') add_css += '' + code;
- if (typeof append != 'undefined' && append) appendCss();
- };
- appendCss = function () {
- $('#customStyle').remove();
- if (add_css !== '')
- $body.append($('<style id="customStyle">' + add_css + '</style>'));
- };
- // Settings
- var storage_key = 'RandomEpisode_Settings',
- default_settings = {
- filter: [],
- };
- save_settings = function (settings) {
- window.localStorage.setItem(storage_key, JSON.stringify(settings));
- };
- clear_settings = function () {
- window.localStorage.removeItem(storage_key);
- };
- get_settings = function () {
- var settings = window.localStorage.getItem(storage_key),
- default_settings_length = Object.keys(default_settings).length,
- last_added_settings = Object.keys(default_settings)[default_settings_length - 1],
- key = false;
- if (settings === null) settings = {};
- else settings = JSON.parse(settings);
- if (!settings.hasOwnProperty(last_added_settings) || default_settings_length != Object.keys(settings).length) {
- for (key in default_settings) {
- if (!settings.hasOwnProperty(key)) settings[key] = default_settings[key];
- }
- }
- for (key in settings) {
- if (!default_settings.hasOwnProperty(key)) delete settings[key];
- }
- save_settings(settings);
- return settings;
- };
- change_settings = function (key, value) {
- settings[key] = value;
- save_settings(settings);
- };
- var settings = get_settings(),
- add_css = '',
- $body = false;
- $(function () {
- $body = $('body[id]');
- if ($body.hasClass('home')) {
- var img_selector = '.image-crop img',
- $episodes = $('.to-watch-list').first().find('li[id]'),
- previous_show = '',
- tries = 0,
- get_id_show = function ($episode) {
- var id_show = '',
- url = $episode.find('.nb-reviews-link.secondary-link').attr('href'),
- regex = /\/[0-9]+/g,
- founds = url.match(regex);
- if (founds !== null && founds.length)
- id_show = toint_string(founds[0]);
- return id_show;
- },
- choose = function () {
- var random_episode = random($episodes.length - 1),
- $episode = $episodes.eq(random_episode),
- id_show = get_id_show($episode);
- if (settings.filter.includes(id_show) ||
- previous_show == id_show) {
- tries++;
- if (tries < 50)
- choose();
- return;
- }
- previous_show = id_show;
- $episodes
- .removeClass('ep_choosed')
- .find(img_selector).css('opacity', '0.75');
- $episode
- .addClass('ep_choosed')
- .find('.to-watch-icon').click(function () {
- $t = $(this);
- setInterval(function () {
- if ($t.parent().hasClass('watched'))
- location.reload();
- }, 2500);
- });
- },
- add_filter = function ($episode) {
- var id_show = get_id_show($episode),
- txt = 'Add to filter',
- filter_class = 'green',
- click = function () {
- settings.filter.push(id_show);
- change_settings('filter', settings.filter);
- add_filter($episode);
- };
- if (settings.filter.includes(id_show)) {
- txt = 'Remove to filter';
- filter_class = 'orange';
- click = function () {
- var index = settings.filter.indexOf(id_show);
- if (index > -1)
- settings.filter.splice(index, 1);
- change_settings('filter', settings.filter);
- add_filter($episode);
- };
- }
- var $nav = $episode.find('.nav'),
- $filter = $('<a class="filter ' + filter_class + '">' + txt + '</a>');
- $nav.find('.filter').remove();
- $filter.click(click);
- $nav.append($filter);
- };
- $('#home').dblclick(function () {
- tries = 0;
- $episodes = $('.to-watch-list').first().find('li[id]');
- choose();
- });
- choose();
- $episodes.each(function () {
- add_filter($(this));
- });
- addCss(
- '.nav .filter{' +
- ' float: left;' +
- ' cursor: pointer;' +
- '}' +
- '.nav .filter.orange{color:orange}' +
- '.nav .filter.green{color:green;font-weight:bold}' +
- '.ep_choosed{' +
- ' transform: translateY(-20px) scale(1.2);' +
- ' background-color: #ffd700;' +
- ' border-radius: 10px;' +
- ' box-shadow: 0 0 10px -5px black;' +
- '}' +
- '.ep_choosed ' + img_selector + '{opacity:1!important}'
- );
- }
- appendCss();
- });