From 95f1340722ab24c0f701b20697f04fc454fc8f49 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 18 Sep 2018 09:08:43 -0500 Subject: [PATCH 01/33] =?UTF-8?q?=E2=AC=86=20Update=20for=20new=20layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- amaz.giveaway.user.js | 91 +++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/amaz.giveaway.user.js b/amaz.giveaway.user.js index 7969356..2708b93 100644 --- a/amaz.giveaway.user.js +++ b/amaz.giveaway.user.js @@ -4,59 +4,66 @@ // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://smile.amazon.com/ga/giveaways* // @include https://www.amazon.com/ga/giveaways* -// @version 1.8.0 +// @version 1.9.0 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== -var checked = false; -var regex_hide; +/* global jQuery */ -var getSmallUrl = function(fullUrl) { - return fullUrl.split('?')[0]; -}; +(function ($) { + 'use strict'; -var hideOne = function(el) { - $(el).parents('.giveawayItemContainer').css('display', checked ? 'none' : 'block'); -}; + var checked = false; + var regex_hide; -var hideVisited = function(evt) { - checked = $(this).prop('checked'); - var $links = $('#giveaway-grid a[href*="amazon.com/ga"]'); + var getSmallUrl = function(fullUrl) { + return fullUrl.split('?')[0]; + }; - var hide = regex_hide ? new RegExp(regex_hide, 'i') : null; + var hideOne = function(el) { + $(el).parents('.listing-item').css('display', checked ? 'none' : 'block'); + }; - $links.each(function() { - var href = getSmallUrl($(this).attr('href')); - if (localStorage.getItem(href)) { + var hideVisited = function(evt) { + checked = $(this).prop('checked'); + var $links = $('.listing-info-container a[href*="/ga"]'); + + var hide = regex_hide ? new RegExp(regex_hide, 'i') : null; + + $links.each(function() { + var href = getSmallUrl($(this).attr('href')); + if (localStorage.getItem(href)) { + hideOne(this); + } + + var title = $(this).find('.prize-title').text(); + if (hide && title && hide.test(title)) { + hideOne(this); + } + }); + }; + + $(document).ready(function() { + //$('head').append(''); + + $('.listing-info-container').on('click', 'a[href*="/ga"]', function(evt) { + + var href = getSmallUrl($(this).attr('href')); + localStorage[href] = "visited"; hideOne(this); - } + }); - var title = $(this).find('.giveawayPrizeNameContainer').text(); - if (hide && title && hide.test(title)) { - hideOne(this); - } - }); -}; + regex_hide = localStorage.getItem('regex_hide') || ''; -$(document).ready(function() { - $('head').append(''); + $('#giveaway-numbers-container') + .append('') + .append(``); - $('#giveaway-grid').on('click', 'a[href*="amazon.com/ga"]', function(evt) { - - var href = getSmallUrl($(this).attr('href')); - localStorage[href] = "visited"; - hideOne(this); + $('#hide_visited').on('click', hideVisited); + $('#hide_regex').on('change', function() { + regex_hide = $(this).val(); + localStorage.regex_hide = regex_hide; + }); }); - regex_hide = localStorage.getItem('regex_hide') || ''; - - $('#giveaway-result-info-bar-content') - .append('') - .append(``); - - $('#hide_visited').on('click', hideVisited); - $('#hide_regex').on('change', function() { - regex_hide = $(this).val(); - localStorage.regex_hide = regex_hide; - }); -}); +})(jQuery); From 29af9ccc56d542fc90bba61af6daa15e044b2eb0 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 18 Sep 2018 09:16:39 -0500 Subject: [PATCH 02/33] Open only prize links in new tabs --- amaz.giveaway.user.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/amaz.giveaway.user.js b/amaz.giveaway.user.js index 2708b93..90fe911 100644 --- a/amaz.giveaway.user.js +++ b/amaz.giveaway.user.js @@ -4,7 +4,7 @@ // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://smile.amazon.com/ga/giveaways* // @include https://www.amazon.com/ga/giveaways* -// @version 1.9.0 +// @version 1.9.1 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== @@ -44,15 +44,14 @@ }; $(document).ready(function() { - //$('head').append(''); - $('.listing-info-container').on('click', 'a[href*="/ga"]', function(evt) { - var href = getSmallUrl($(this).attr('href')); localStorage[href] = "visited"; hideOne(this); }); + $('.listing-info-container a[href*="/ga"]').attr('target', '_blank'); + regex_hide = localStorage.getItem('regex_hide') || ''; $('#giveaway-numbers-container') From a3699fb7898d5bd07fb8b032333a2cafadee8ee8 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 3 Oct 2018 08:25:05 -0500 Subject: [PATCH 03/33] Auto Cookie Clicker --- cookie.clicker.user.js | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 cookie.clicker.user.js diff --git a/cookie.clicker.user.js b/cookie.clicker.user.js new file mode 100644 index 0000000..caf1625 --- /dev/null +++ b/cookie.clicker.user.js @@ -0,0 +1,43 @@ +// ==UserScript== +// @name Auto Cookie Clicker +// @namespace danielrayjones +// @description Plays Cookie Clicker for you +// @include http://orteil.dashnet.org/cookieclicker/ +// @version 0.0.2 +// ==/UserScript== + +let AutoClicker = {stop: false}; +unsafeWindow.AutoClicker = AutoClicker; + +document.addEventListener('load', function () { + 'use strict'; + + let cookie = document.getElementById('bigCookie'); + let shimmers = document.getElementById('shimmers'); + + function clickCookie() { + AutoClicker.cookie.click(); + if (!AutoClicker.stop) { + setTimeout(clickCookie, 5); + } + } + + let shimmerObserver = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + mutation.addedNodes.forEach(function (shimmer) { + console.log('clicking', shimmer); + shimmer.click(); + }); + }) + }); + shimmerObserver.observe(shimmers, { childList: true}); + + AutoClicker.cookie = cookie; + AutoClicker.shimmers = shimmers; + AutoClicker.clickCookie = clickCookie; + AutoClicker.shimmerObserver = shimmerObserver; + + for (let i = 0; i < 20; i++) { + clickCookie(); + } +}); From 69c85131f095d99069b39736466cd3e0a1805e64 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 3 Oct 2018 08:26:09 -0500 Subject: [PATCH 04/33] =?UTF-8?q?=F0=9F=9A=91=20Update=20cookie=20clicker?= =?UTF-8?q?=20to=20listen=20on=20window?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cookie.clicker.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cookie.clicker.user.js b/cookie.clicker.user.js index caf1625..c126745 100644 --- a/cookie.clicker.user.js +++ b/cookie.clicker.user.js @@ -3,13 +3,13 @@ // @namespace danielrayjones // @description Plays Cookie Clicker for you // @include http://orteil.dashnet.org/cookieclicker/ -// @version 0.0.2 +// @version 0.0.3 // ==/UserScript== let AutoClicker = {stop: false}; unsafeWindow.AutoClicker = AutoClicker; -document.addEventListener('load', function () { +window.addEventListener('load', function () { 'use strict'; let cookie = document.getElementById('bigCookie'); From 3ceb2d5f6061f651968a3e9231d0f9d823a17549 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Thu, 4 Oct 2018 21:25:06 -0500 Subject: [PATCH 05/33] =?UTF-8?q?=F0=9F=92=AA=20Download=20single=20cbz=20?= =?UTF-8?q?instead=20of=20all=20the=20jpgs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves #1 --- viewcomic.scraper.user.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/viewcomic.scraper.user.js b/viewcomic.scraper.user.js index 4ced591..2634910 100644 --- a/viewcomic.scraper.user.js +++ b/viewcomic.scraper.user.js @@ -2,16 +2,17 @@ // ==UserScript== // @name Viewcomic Scraper // @namespace danielrayjones -// @version 0.0.6 +// @version 0.0.7 // @description Scrape comics from viewcomic.com // @author Dan Jones // @match http://viewcomic.com/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js // @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js // ==/UserScript== -/* global jQuery */ +/* global jQuery, JSZip */ (function($) { 'use strict'; @@ -36,23 +37,38 @@ let imgs = $('div.pinbin-copy img.picture, div.pinbin-copy img.hoverZoomLink').toArray(); console.log(imgs); + let cbz = new JSZip(); + + function downloadCbz() { + cbz.generateAsync({type: 'blob'}) + .then(blob => { + let title = name.replace(/-/g, ' ').replace(/\b([0-9]{4})\b/, '($1)'); + + let $el = $(''); + $(document.body).append($el); + $el.attr('href', URL.createObjectURL(blob)); + $el.attr('download', `${title} (viewcomic) (Danjones).cbz`); + $el.get(0).click(); + }); + } + function getOne() { - if (!imgs) return; + if (!imgs || !imgs.length) { + downloadCbz(); + return; + } + let img = imgs.shift(); console.log(img.src); fetch(img.src).then(resp => resp.blob()).then(blob => { - let $el = $(''); - $(document.body).append($el); - $el.attr('href', URL.createObjectURL(blob)); - $el.attr('download', name + '-' + (i < 10 ? '00' : '0' ) + i + '.jpg'); - $el.get(0).click(); + cbz.file(name + '-' + (i < 10 ? '00' : '0' ) + i + '.jpg', blob); i = i+1; - setTimeout(getOne, 1000); + setTimeout(getOne, 0); }); } + getOne(); } - })(jQuery); From 9263e238d8fe32db88e25e000902693907ed4921 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 13 Nov 2018 09:07:36 -0600 Subject: [PATCH 06/33] Add WhenIWork Total Worked --- wheniwork.hours.user.js | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 wheniwork.hours.user.js diff --git a/wheniwork.hours.user.js b/wheniwork.hours.user.js new file mode 100644 index 0000000..45cae33 --- /dev/null +++ b/wheniwork.hours.user.js @@ -0,0 +1,63 @@ +// ==UserScript== +// @name WhenIWork True Total Worked +// @namespace danielrayjones +// @description Adds the Total hours worked, including today +// @include https://app.wheniwork.com/payroll/ +// @version 0.2 +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js +// ==/UserScript== + +/* global $ */ + +$(document).ready(function() { + 'use strict'; + + // Filter out this event from iframes + if (!this.body.classList.contains("controller-payroll")) { + return; + } + + let currentHourSum = 0; + + function updateHours(hours) { + currentHourSum = hours; + + let weekPlusDayTotal = $('#week-plus-day-total'); + let span = `Total with Today${hours}` + + if (weekPlusDayTotal.length === 0) { + $('#header-summary-container .stats').append( + `
${span}
` + ); + } else { + weekPlusDayTotal.html(span); + } + + // In case this ran while the page was loading, let's try again in two seconds. + setTimeout(addHours, 2000); + } + + function addHours() { + let hourSum = 0; + $('.times-list .col-worked .text-input[data-total]').each(function () { + hourSum += parseFloat($(this).text()) || 0; + }); + + // Adjust for floating point errors + hourSum = Math.round(hourSum*100)/100; + + console.log(`got ${hourSum} hours`); + + // AJAX request hasn't finished yet. Let's wait some more. + if (currentHourSum === 0 && hourSum === 0) return setTimeout(addHours, 2000); + + if (currentHourSum !== hourSum && hourSum > 0) { + updateHours(hourSum); + } + } + + // The hours don't show up until after an AJAX request completes. + // Let's wait two seconds for it to finish. + setTimeout(addHours, 2000); + +}); From 076edd0aa3820e15c596ea7aa5f35555b497e179 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 26 Feb 2019 08:43:36 -0600 Subject: [PATCH 07/33] Add comicextra scraper --- comicextra.user.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 comicextra.user.js diff --git a/comicextra.user.js b/comicextra.user.js new file mode 100644 index 0000000..4a6be8a --- /dev/null +++ b/comicextra.user.js @@ -0,0 +1,90 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Comic Extra Scraper +// @namespace danielrayjones +// @version 0.0.2 +// @description Scrape comics from comicextra.com +// @author Dan Jones +// @match https://www.comicextra.com/* +// @grant none +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js +// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js +// ==/UserScript== + +/* global jQuery, JSZip */ + +console.log('will scrape comics'); + +(function($) { + 'use strict'; + + $(window).konami({ + code: [71,69,84], + eventName: 'konami.get' + }); + + $(window).on('konami.get', getStuff); + + function getStuff() { + let i = 0; + + let path = location.pathname.split('/'); + let end = path.pop(); + while (!end && path.length) { + end = path.pop(); + } + + if (end !== 'full') { + alert('Must have the full comic'); + return; + } + + let chapter = path.pop(); + let match; + if ((match = chapter.match(/^chapter-([0-9])+/))) { + chapter = match[1]; + } + + let name = path.pop(); + + console.log(`Getting ${name} ${chapter}`); + + let imgs = $('.chapter-main .chapter_img').toArray(); + console.log(imgs); + + let cbz = new JSZip(); + + function downloadCbz() { + cbz.generateAsync({type: 'blob'}) + .then(blob => { + let title = name.replace(/-/g, ' ') + ' ' + chapter; + + let $el = $('
'); + $(document.body).append($el); + $el.attr('href', URL.createObjectURL(blob)); + $el.attr('download', `${title} (comicextra) (Danjones).cbz`); + $el.get(0).click(); + }); + } + + function getOne() { + if (!imgs || !imgs.length) { + downloadCbz(); + return; + } + + let img = imgs.shift(); + console.log(img.src); + + fetch(`//cors-anywhere.herokuapp.com/${img.src}`).then(resp => resp.blob()).then(blob => { + cbz.file(name + '-' + (i < 10 ? '00' : '0' ) + i + '.jpg', blob); + + i = i+1; + setTimeout(getOne, 0); + }); + } + + getOne(); + } +})(jQuery); From 78dfa16b5373f3d5ab584f886606abfb0c30a92a Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 26 Feb 2019 08:45:41 -0600 Subject: [PATCH 08/33] comicextra: get full chapter --- comicextra.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/comicextra.user.js b/comicextra.user.js index 4a6be8a..94a4b88 100644 --- a/comicextra.user.js +++ b/comicextra.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Comic Extra Scraper // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Scrape comics from comicextra.com // @author Dan Jones // @match https://www.comicextra.com/* @@ -42,7 +42,7 @@ console.log('will scrape comics'); let chapter = path.pop(); let match; - if ((match = chapter.match(/^chapter-([0-9])+/))) { + if ((match = chapter.match(/^chapter-([0-9]+)/))) { chapter = match[1]; } From 944b1e85b1fd7595fa2c9ed7929fa431fc3c6f53 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Thu, 28 Feb 2019 08:29:23 -0600 Subject: [PATCH 09/33] Add more comic scrapers --- fullcomic.user.js | 86 ++++++++++++++++++++++++++++++++++++++ readcomiconline.user.js | 92 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 fullcomic.user.js create mode 100644 readcomiconline.user.js diff --git a/fullcomic.user.js b/fullcomic.user.js new file mode 100644 index 0000000..9176d9c --- /dev/null +++ b/fullcomic.user.js @@ -0,0 +1,86 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Full Comic Scraper +// @namespace danielrayjones +// @version 0.0.2 +// @description Scrape comics from fullcomic.pro +// @author Dan Jones +// @match http://fullcomic.pro/* +// @grant none +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js +// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js +// ==/UserScript== + +/* global jQuery, JSZip */ + +console.log('will scrape comics'); + +(function($) { + 'use strict'; + + $(window).konami({ + code: [71,69,84], + eventName: 'konami.get' + }); + + $(window).on('konami.get', getStuff); + + function getStuff() { + let i = 0; + + let title = $('.title h1').text(); + + let regex = /Issue #([0-9]+)/; + let match; + if ((match = title.match(regex))) { + let issue = match[1]; + while (issue.length < 3) { + issue = '0' + issue; + } + + title = title.replace(regex, issue); + } + + console.log(`Getting ${title}`); + + let imgs = $('#imgPages img').toArray(); + console.log(imgs); + + let cbz = new JSZip(); + + function downloadCbz() { + cbz.generateAsync({type: 'blob'}) + .then(blob => { + let fileTitle = title.replace(/: /g, ' - '); + + let $el = $(''); + $(document.body).append($el); + $el.attr('href', URL.createObjectURL(blob)); + $el.attr('download', `${fileTitle} (fullcomic) (Danjones).cbz`); + $el.get(0).click(); + }); + } + + function getOne() { + if (!imgs || !imgs.length) { + downloadCbz(); + return; + } + + let img = imgs.shift(); + console.log(img.src); + + fetch(`//cors-anywhere.herokuapp.com/${img.src}`).then(resp => resp.blob()).then(blob => { + let name = title.replace(/[^A-Za-z0-9]+/g, '-'); + + cbz.file(name + '-' + (i < 10 ? '00' : '0' ) + i + '.jpg', blob); + + i = i+1; + setTimeout(getOne, 0); + }); + } + + getOne(); + } +})(jQuery); diff --git a/readcomiconline.user.js b/readcomiconline.user.js new file mode 100644 index 0000000..cacae01 --- /dev/null +++ b/readcomiconline.user.js @@ -0,0 +1,92 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Read Comic Online Scraper +// @namespace danielrayjones +// @version 0.0.1 +// @description Scrape comics from readcomiconline.to +// @author Dan Jones +// @match https://readcomiconline.to/* +// @grant none +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js +// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js +// ==/UserScript== + +/* global jQuery, JSZip */ + +//console.log('will scrape comics'); + +(function($) { + 'use strict'; + + console.log('This does not work'); + return; + + $(window).konami({ + code: [71,69,84], + eventName: 'konami.get' + }); + + $(window).on('konami.get', getStuff); + + function getStuff() { + let i = 0; + + let path = location.pathname.split('/'); + let chapter = path.pop(); + while (!chapter && path.length) { + chapter = path.pop(); + } + + let match; + if ((match = chapter.match(/^Issue-([0-9]+)/))) { + chapter = match[1]; + } + + let name = path.pop(); + + if (path.pop() !== 'Comic') { + alert('Not on a comic page'); + return; + } + + console.log(`Getting ${name} ${chapter}`); + + let imgs = $('#divImage img').toArray(); + console.log(imgs); + + let cbz = new JSZip(); + + function downloadCbz() { + cbz.generateAsync({type: 'blob'}) + .then(blob => { + let title = name.replace(/-/g, ' ') + ' ' + chapter; + + let $el = $(''); + $(document.body).append($el); + $el.attr('href', URL.createObjectURL(blob)); + $el.attr('download', `${title} (readcomiconline) (Danjones).cbz`); + $el.get(0).click(); + }); + } + + function getOne() { + if (!imgs || !imgs.length) { + downloadCbz(); + return; + } + + let img = imgs.shift(); + console.log(img.src); + + fetch(`//cors-anywhere.herokuapp.com/${img.src}`).then(resp => resp.blob()).then(blob => { + cbz.file(name + '-' + (i < 10 ? '00' : '0' ) + i + '.jpg', blob); + + i = i+1; + setTimeout(getOne, 0); + }); + } + + getOne(); + } +})(jQuery); From 5a95d4a17ae27bc4febc3336843eb2c4eb438673 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 15 Oct 2019 09:40:04 -0500 Subject: [PATCH 10/33] =?UTF-8?q?=E2=9C=A8=20Add=20released=20to=20trakt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.scraper.user.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index c5c6fff..641ef69 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -10,6 +10,8 @@ // @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js // ==/UserScript== +/* global $, compressedCache, localStorage */ + (function() { 'use strict'; @@ -50,6 +52,11 @@ $ep_title = $ep.find('[itemprop="name"]'); } + let released = $ep.data('released') || null; + if (released) { + released = (new Date(released)).getTime()/1000; + } + let ep_title = $ep_title.attr('content'); let ep_number = $ep.find('[itemprop="episodeNumber"]').attr('content'); let season_number = $ep.data('season-number'); @@ -63,6 +70,7 @@ episode_id: ep, title, url, + released, watches: watched ? watched[1] : 0, last_watched: watched ? watched[0] : null, }; From 788efc9e90381ccb15d07e1825ccdd02dab4e50b Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 15 Oct 2019 09:41:40 -0500 Subject: [PATCH 11/33] =?UTF-8?q?=F0=9F=94=96=200.0.3=20of=20trakt.scraper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.scraper.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index 641ef69..a2d78dc 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* From 28bad459705159b5a6d2ad4d4c86a6a472fdba2a Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 10 Feb 2020 15:57:46 -0600 Subject: [PATCH 12/33] =?UTF-8?q?=F0=9F=90=9B=20Fix=20trakt=20scraper=20wh?= =?UTF-8?q?en=20season=20is=20missing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.scraper.user.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index a2d78dc..56e3714 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.3 +// @version 0.0.4 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* @@ -24,8 +24,9 @@ String.prototype.lpad = function(padString, length) { let str = this; - while (str.length < length) + while (str.length < length) { str = padString + str; + } return str; }; @@ -42,7 +43,6 @@ let series = $ep.data('show-id'); let ep = $ep.data('episode-id'); - //let url = $ep.data('url'); let url = $ep.children('[itemprop="url"]').attr('content'); let series_title = $series.children('[itemprop="name"]').attr('content'); @@ -60,8 +60,22 @@ let ep_title = $ep_title.attr('content'); let ep_number = $ep.find('[itemprop="episodeNumber"]').attr('content'); let season_number = $ep.data('season-number'); - //let title = $ep.data('title'); - let title = series_title + " " + season_number + "x" + String(ep_number).lpad("0", 2) + ' "' + ep_title + '"'; + + if (!season_number) { + let $title_ep = $ep.find('.main-title-sxe'); + if ($title_ep.length && $title_ep.text()) { + let match = /([0-9+])x[0-9]+/.exec($title_ep.text()); + if (match) { + season_number = match[1]; + } + } + } + + if (!season_number) { + season_number = 0; + } + + let title = series_title + " " + String(season_number) + "x" + String(ep_number).lpad("0", 2) + ' "' + ep_title + '"'; let watched = watched_shows[series] ? watched_shows[series].e[ep] : null; From 3d9a36abfbd7e221ebee48c04738d2ed6ab86670 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 11:49:56 -0500 Subject: [PATCH 13/33] =?UTF-8?q?=E2=9C=A8=20Add=20trakt=20show=20picker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 trakt.pick-show.js diff --git a/trakt.pick-show.js b/trakt.pick-show.js new file mode 100644 index 0000000..ac127dc --- /dev/null +++ b/trakt.pick-show.js @@ -0,0 +1,68 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Trakt Show Picker +// @namespace danielrayjones +// @version 0.0.1 +// @description Pick a show from progress page +// @author Dan Jones +// @match https://trakt.tv/users/*/progress* +// @grant none +// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// ==/UserScript== + +/* global $, compressedCache, localStorage */ + +(function() { + 'use strict'; + + $(window).konami({ + code: [80, 73, 67, 75], + eventName: 'konami.pick' + }); + + $(window).on('konami.pick', pickShow); + + let watched_shows; + + function pickShow() { + + if ('compressedCache' in window) { + watched_shows = compressedCache.get('watched_shows'); + } else { + watched_shows = JSON.parse(localStorage.watched_shows); + } + + let $shows = $('div[data-type="show"]'); + $shows.removeClass('sortable-ghost'); + $shows = filterShows($shows); + + let picked = Math.floor(Math.random() * $shows.length); + + $shows.addClass('sortable-ghost'); + $shows.eq(picked).removeClass('sortable-ghost'); + + } + + function filterShows($shows) { + + // Milliseconds in two days + let twoDays = 2 * 24 * 60 * 60 * 1000; + let twoDaysAgo = (new Date()) - twoDays; + + $shows.each(function (i, show) { + + let showId = Number.parseInt(show.dataset.showId); + let showInfo = watched_shows[showId]; + if (!showInfo) return; + + let lastWatch = showInfo.ts*1000; + // Skip ones we've watched in the last two days + if (lastWatch > twoDaysAgo) { + show.classList.add('sortable-ghost'); + } + }); + + return $shows.filter(':not(.sortable-ghost)'); + } + +})(); From 6941f880ae537a6c405353f7a7c67b13db14fdd3 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 11:51:40 -0500 Subject: [PATCH 14/33] =?UTF-8?q?=F0=9F=9A=9A=20Make=20script=20user=20scr?= =?UTF-8?q?ipt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.js => trakt.pick-show.user.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename trakt.pick-show.js => trakt.pick-show.user.js (100%) diff --git a/trakt.pick-show.js b/trakt.pick-show.user.js similarity index 100% rename from trakt.pick-show.js rename to trakt.pick-show.user.js From 941da9e4eb8fd7f359a344e3628d7979accb32fb Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 11:59:25 -0500 Subject: [PATCH 15/33] =?UTF-8?q?=E2=9C=A8=20Move=20picked=20show=20to=20t?= =?UTF-8?q?op?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index ac127dc..2836cdd 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.1 +// @version 0.0.2 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -37,9 +37,10 @@ $shows = filterShows($shows); let picked = Math.floor(Math.random() * $shows.length); + let $picked = $shows.eq(picked); $shows.addClass('sortable-ghost'); - $shows.eq(picked).removeClass('sortable-ghost'); + $picked.removeClass('sortable-ghost').insertAfter($picked.parent().find('.pagination-top')); } From 10d7bbc64aeec4c5448cf6bb260b6bda123e5951 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 14:09:47 -0500 Subject: [PATCH 16/33] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Require=20jquery-kon?= =?UTF-8?q?ami=20from=20bowercdn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comicextra.user.js | 4 ++-- fullcomic.user.js | 4 ++-- readcomiconline.user.js | 4 ++-- trakt.pick-show.user.js | 4 ++-- trakt.scraper.user.js | 4 ++-- viewcomic.scraper.user.js | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/comicextra.user.js b/comicextra.user.js index 94a4b88..b31925a 100644 --- a/comicextra.user.js +++ b/comicextra.user.js @@ -2,13 +2,13 @@ // ==UserScript== // @name Comic Extra Scraper // @namespace danielrayjones -// @version 0.0.3 +// @version 0.0.4 // @description Scrape comics from comicextra.com // @author Dan Jones // @match https://www.comicextra.com/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js // ==/UserScript== diff --git a/fullcomic.user.js b/fullcomic.user.js index 9176d9c..2ec5102 100644 --- a/fullcomic.user.js +++ b/fullcomic.user.js @@ -2,13 +2,13 @@ // ==UserScript== // @name Full Comic Scraper // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Scrape comics from fullcomic.pro // @author Dan Jones // @match http://fullcomic.pro/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js // ==/UserScript== diff --git a/readcomiconline.user.js b/readcomiconline.user.js index cacae01..87c276e 100644 --- a/readcomiconline.user.js +++ b/readcomiconline.user.js @@ -2,13 +2,13 @@ // ==UserScript== // @name Read Comic Online Scraper // @namespace danielrayjones -// @version 0.0.1 +// @version 0.0.2 // @description Scrape comics from readcomiconline.to // @author Dan Jones // @match https://readcomiconline.to/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js // ==/UserScript== diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 2836cdd..7ee5315 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,12 +2,12 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* // @grant none -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // ==/UserScript== /* global $, compressedCache, localStorage */ diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index 56e3714..dfada34 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,12 +2,12 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.4 +// @version 0.0.5 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* // @grant none -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // ==/UserScript== /* global $, compressedCache, localStorage */ diff --git a/viewcomic.scraper.user.js b/viewcomic.scraper.user.js index 2634910..3945755 100644 --- a/viewcomic.scraper.user.js +++ b/viewcomic.scraper.user.js @@ -2,13 +2,13 @@ // ==UserScript== // @name Viewcomic Scraper // @namespace danielrayjones -// @version 0.0.7 +// @version 0.0.8 // @description Scrape comics from viewcomic.com // @author Dan Jones // @match http://viewcomic.com/* // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js -// @require https://raw.githubusercontent.com/tommcfarlin/konami-code/master/src/jquery.konami.min.js +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // @require https://bowercdn.net/c/jszip-3.1.5/dist/jszip.min.js // ==/UserScript== From 8766d09bc0c142b86ea8f2bb6622f9d24e8601b6 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 14:48:01 -0500 Subject: [PATCH 17/33] =?UTF-8?q?=F0=9F=92=A1=20Add=20jshint=20to=20all=20?= =?UTF-8?q?user=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- amaz.giveaway.user.js | 3 ++- comicextra.user.js | 3 ++- cookie.clicker.user.js | 6 ++++-- fullcomic.user.js | 3 ++- giveaway.hide.crap.user.js | 3 ++- giveaway.user.js | 4 +++- readcomiconline.user.js | 5 ++--- trakt.pick-show.user.js | 3 ++- trakt.scraper.user.js | 3 ++- trakt.simplifier.user.js | 4 +++- viewcomic.scraper.user.js | 3 ++- wheniwork.hours.user.js | 12 ++++++++---- 12 files changed, 34 insertions(+), 18 deletions(-) diff --git a/amaz.giveaway.user.js b/amaz.giveaway.user.js index 90fe911..3d3b308 100644 --- a/amaz.giveaway.user.js +++ b/amaz.giveaway.user.js @@ -4,11 +4,12 @@ // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://smile.amazon.com/ga/giveaways* // @include https://www.amazon.com/ga/giveaways* -// @version 1.9.1 +// @version 1.9.2 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== /* global jQuery */ +/* jshint esversion: 6 */ (function ($) { 'use strict'; diff --git a/comicextra.user.js b/comicextra.user.js index b31925a..61e2e00 100644 --- a/comicextra.user.js +++ b/comicextra.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Comic Extra Scraper // @namespace danielrayjones -// @version 0.0.4 +// @version 0.0.5 // @description Scrape comics from comicextra.com // @author Dan Jones // @match https://www.comicextra.com/* @@ -13,6 +13,7 @@ // ==/UserScript== /* global jQuery, JSZip */ +/* jshint esversion: 6 */ console.log('will scrape comics'); diff --git a/cookie.clicker.user.js b/cookie.clicker.user.js index c126745..27dbfe5 100644 --- a/cookie.clicker.user.js +++ b/cookie.clicker.user.js @@ -3,9 +3,11 @@ // @namespace danielrayjones // @description Plays Cookie Clicker for you // @include http://orteil.dashnet.org/cookieclicker/ -// @version 0.0.3 +// @version 0.0.4 // ==/UserScript== +/* jshint esversion: 6 */ + let AutoClicker = {stop: false}; unsafeWindow.AutoClicker = AutoClicker; @@ -28,7 +30,7 @@ window.addEventListener('load', function () { console.log('clicking', shimmer); shimmer.click(); }); - }) + }); }); shimmerObserver.observe(shimmers, { childList: true}); diff --git a/fullcomic.user.js b/fullcomic.user.js index 2ec5102..e3f9217 100644 --- a/fullcomic.user.js +++ b/fullcomic.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Full Comic Scraper // @namespace danielrayjones -// @version 0.0.3 +// @version 0.0.4 // @description Scrape comics from fullcomic.pro // @author Dan Jones // @match http://fullcomic.pro/* @@ -13,6 +13,7 @@ // ==/UserScript== /* global jQuery, JSZip */ +/* jshint esversion: 6 */ console.log('will scrape comics'); diff --git a/giveaway.hide.crap.user.js b/giveaway.hide.crap.user.js index 85ca0a6..6d8646c 100644 --- a/giveaway.hide.crap.user.js +++ b/giveaway.hide.crap.user.js @@ -3,11 +3,12 @@ // @namespace danielrayjones // @description Remove stuff I don't like from Amazon Giveaway Listing // @include https://giveawaylisting.com/ -// @version 1.0 +// @version 1.0.1 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== /* global $ */ +/* jshint esversion: 6 */ var hide = function(text) { $('#giveaways a:contains("' + text +'")') diff --git a/giveaway.user.js b/giveaway.user.js index a07fba6..406e7f2 100644 --- a/giveaway.user.js +++ b/giveaway.user.js @@ -3,10 +3,12 @@ // @namespace danielrayjones // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://giveawaylisting.com/ -// @version 1.3 +// @version 1.3.1 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== +/* jshint esversion: 6 */ + var checked = false; var hideOne = function(el) { diff --git a/readcomiconline.user.js b/readcomiconline.user.js index 87c276e..17c959f 100644 --- a/readcomiconline.user.js +++ b/readcomiconline.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Read Comic Online Scraper // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Scrape comics from readcomiconline.to // @author Dan Jones // @match https://readcomiconline.to/* @@ -13,8 +13,7 @@ // ==/UserScript== /* global jQuery, JSZip */ - -//console.log('will scrape comics'); +/* jshint esversion: 6 */ (function($) { 'use strict'; diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 7ee5315..1aa8727 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.3 +// @version 0.0.4 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -11,6 +11,7 @@ // ==/UserScript== /* global $, compressedCache, localStorage */ +/* jshint esversion: 6 */ (function() { 'use strict'; diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index dfada34..82d10bc 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.5 +// @version 0.0.6 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* @@ -11,6 +11,7 @@ // ==/UserScript== /* global $, compressedCache, localStorage */ +/* jshint esversion: 6 */ (function() { 'use strict'; diff --git a/trakt.simplifier.user.js b/trakt.simplifier.user.js index 4e04746..455372f 100644 --- a/trakt.simplifier.user.js +++ b/trakt.simplifier.user.js @@ -2,13 +2,15 @@ // ==UserScript== // @name Trakt Simplifier // @namespace danielrayjones -// @version 0.0.2 +// @version 0.0.3 // @description Strip out eps/movies from trakt lists based on a query string // @author Dan Jones // @match https://trakt.tv/* // @grant none // ==/UserScript== +/* jshint esversion: 6 */ + (function() { 'use strict'; diff --git a/viewcomic.scraper.user.js b/viewcomic.scraper.user.js index 3945755..1a67aec 100644 --- a/viewcomic.scraper.user.js +++ b/viewcomic.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Viewcomic Scraper // @namespace danielrayjones -// @version 0.0.8 +// @version 0.0.9 // @description Scrape comics from viewcomic.com // @author Dan Jones // @match http://viewcomic.com/* @@ -13,6 +13,7 @@ // ==/UserScript== /* global jQuery, JSZip */ +/* jshint esversion: 6 */ (function($) { 'use strict'; diff --git a/wheniwork.hours.user.js b/wheniwork.hours.user.js index 45cae33..41d49af 100644 --- a/wheniwork.hours.user.js +++ b/wheniwork.hours.user.js @@ -1,13 +1,15 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- // ==UserScript== // @name WhenIWork True Total Worked // @namespace danielrayjones // @description Adds the Total hours worked, including today // @include https://app.wheniwork.com/payroll/ -// @version 0.2 +// @version 0.2.1 // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== /* global $ */ +/* jshint esversion: 6 */ $(document).ready(function() { 'use strict'; @@ -23,7 +25,7 @@ $(document).ready(function() { currentHourSum = hours; let weekPlusDayTotal = $('#week-plus-day-total'); - let span = `Total with Today${hours}` + let span = `Total with Today${hours}`; if (weekPlusDayTotal.length === 0) { $('#header-summary-container .stats').append( @@ -34,7 +36,7 @@ $(document).ready(function() { } // In case this ran while the page was loading, let's try again in two seconds. - setTimeout(addHours, 2000); + return setTimeout(addHours, 2000); } function addHours() { @@ -52,8 +54,10 @@ $(document).ready(function() { if (currentHourSum === 0 && hourSum === 0) return setTimeout(addHours, 2000); if (currentHourSum !== hourSum && hourSum > 0) { - updateHours(hourSum); + return updateHours(hourSum); } + + return null; } // The hours don't show up until after an AJAX request completes. From ed63fc120642352919c99559a4bee99694d6ed48 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 5 Jun 2020 19:46:36 -0500 Subject: [PATCH 18/33] =?UTF-8?q?=E2=AC=87=EF=B8=8F=20Downgraded=20konami?= =?UTF-8?q?=20so=20that=20we=20could=20use=20version=20from=20bower?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comicextra.user.js | 6 ++---- fullcomic.user.js | 6 ++---- readcomiconline.user.js | 6 ++---- trakt.pick-show.user.js | 6 ++---- trakt.scraper.user.js | 6 ++---- viewcomic.scraper.user.js | 6 ++---- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/comicextra.user.js b/comicextra.user.js index 61e2e00..fe17dd5 100644 --- a/comicextra.user.js +++ b/comicextra.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Comic Extra Scraper // @namespace danielrayjones -// @version 0.0.5 +// @version 0.0.6 // @description Scrape comics from comicextra.com // @author Dan Jones // @match https://www.comicextra.com/* @@ -22,11 +22,9 @@ console.log('will scrape comics'); $(window).konami({ code: [71,69,84], - eventName: 'konami.get' + cheat: getStuff }); - $(window).on('konami.get', getStuff); - function getStuff() { let i = 0; diff --git a/fullcomic.user.js b/fullcomic.user.js index e3f9217..aa8cd87 100644 --- a/fullcomic.user.js +++ b/fullcomic.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Full Comic Scraper // @namespace danielrayjones -// @version 0.0.4 +// @version 0.0.5 // @description Scrape comics from fullcomic.pro // @author Dan Jones // @match http://fullcomic.pro/* @@ -22,11 +22,9 @@ console.log('will scrape comics'); $(window).konami({ code: [71,69,84], - eventName: 'konami.get' + cheat: getStuff }); - $(window).on('konami.get', getStuff); - function getStuff() { let i = 0; diff --git a/readcomiconline.user.js b/readcomiconline.user.js index 17c959f..14dbfdb 100644 --- a/readcomiconline.user.js +++ b/readcomiconline.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Read Comic Online Scraper // @namespace danielrayjones -// @version 0.0.3 +// @version 0.0.4 // @description Scrape comics from readcomiconline.to // @author Dan Jones // @match https://readcomiconline.to/* @@ -23,11 +23,9 @@ $(window).konami({ code: [71,69,84], - eventName: 'konami.get' + cheat: getStuff }); - $(window).on('konami.get', getStuff); - function getStuff() { let i = 0; diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 1aa8727..e3fe44b 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.4 +// @version 0.0.5 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -18,11 +18,9 @@ $(window).konami({ code: [80, 73, 67, 75], - eventName: 'konami.pick' + cheat: pickShow }); - $(window).on('konami.pick', pickShow); - let watched_shows; function pickShow() { diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index 82d10bc..8d1df0d 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.6 +// @version 0.0.7 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* @@ -18,11 +18,9 @@ $(window).konami({ code: [71,69,84], - eventName: 'konami.get' + cheat: getStuff }); - $(window).on('konami.get', getStuff); - String.prototype.lpad = function(padString, length) { let str = this; while (str.length < length) { diff --git a/viewcomic.scraper.user.js b/viewcomic.scraper.user.js index 1a67aec..7a0ac98 100644 --- a/viewcomic.scraper.user.js +++ b/viewcomic.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Viewcomic Scraper // @namespace danielrayjones -// @version 0.0.9 +// @version 0.0.10 // @description Scrape comics from viewcomic.com // @author Dan Jones // @match http://viewcomic.com/* @@ -20,11 +20,9 @@ $(window).konami({ code: [71,69,84], - eventName: 'konami.get' + cheat: getStuff }); - $(window).on('konami.get', getStuff); - function getStuff() { let i = 0; From 057e728111658cabfeb23bd6ac583b365e120fab Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 22 Jul 2020 13:49:36 -0500 Subject: [PATCH 19/33] =?UTF-8?q?=E2=9C=A8=20Weight=20picked=20shows=20nea?= =?UTF-8?q?r=20top=20of=20list.=20Also=20show=20ghosted=20show=20on=20clic?= =?UTF-8?q?k.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index e3fe44b..2a8ae13 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.5 +// @version 0.0.6 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -21,8 +21,26 @@ cheat: pickShow }); + $('div[data-type="show"]').on('click', function () { + $(this).removeClass('sortable-ghost'); + }); + let watched_shows; + function getWeightedIndex(total) { + const opts = []; + for ( let idx = 0; idx < total; idx++) { + for (let idxInst = 0; idxInst < total - idx; idxInst++) { + opts.push(idx); + } + } + + const totalWeights = opts.length; + const which = Math.floor(Math.random() * totalWeights); + + return opts[which]; + } + function pickShow() { if ('compressedCache' in window) { @@ -35,7 +53,7 @@ $shows.removeClass('sortable-ghost'); $shows = filterShows($shows); - let picked = Math.floor(Math.random() * $shows.length); + let picked = getWeightedIndex($shows.length); let $picked = $shows.eq(picked); $shows.addClass('sortable-ghost'); From 606bba9c5596d45c6d6f928a2d13401f5cc09644 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 3 Aug 2020 14:01:25 -0500 Subject: [PATCH 20/33] =?UTF-8?q?=E2=9C=A8=20Add=20pick=20show=20button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 2a8ae13..79a1903 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.6 +// @version 0.0.7 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -21,6 +21,10 @@ cheat: pickShow }); + $('.subnav-wrapper .container .left') + .append('') + .find('.pick-episode').on('click', pickShow); + $('div[data-type="show"]').on('click', function () { $(this).removeClass('sortable-ghost'); }); From ab659cfc89febd1e415e3a9fd92c88f32944d814 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 3 Aug 2020 19:03:09 -0500 Subject: [PATCH 21/33] =?UTF-8?q?=E2=9C=A8=20Add=20observer=20for=20picker?= =?UTF-8?q?=20to=20ensure=20picker=20button=20is=20added=20when=20page=20i?= =?UTF-8?q?s=20rebuilt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 79a1903..60e53d6 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.7 +// @version 0.0.8 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -10,7 +10,7 @@ // @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js // ==/UserScript== -/* global $, compressedCache, localStorage */ +/* global $, compressedCache, localStorage, MutationObserver */ /* jshint esversion: 6 */ (function() { @@ -21,9 +21,17 @@ cheat: pickShow }); - $('.subnav-wrapper .container .left') - .append('') - .find('.pick-episode').on('click', pickShow); + function addPickButton() { + const $leftNav = $('.subnav-wrapper .container .left'); + const $found = $leftNav.find('.pick-episode'); + if (!$found.length) { + $leftNav.append('') + .find('.pick-episode').on('click', pickShow); + } + } + addPickButton(); + const observer = new MutationObserver(addPickButton); + observer.observe(document.head.parentElement, {childList: true}); $('div[data-type="show"]').on('click', function () { $(this).removeClass('sortable-ghost'); From 409d0de43f846b4e7158709f52c228800ccbfbe9 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 3 Aug 2020 19:48:33 -0500 Subject: [PATCH 22/33] =?UTF-8?q?=F0=9F=92=84=20Enlarge=20pick=20icon=20an?= =?UTF-8?q?d=20make=20it=20a=20wand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 60e53d6..9b776fb 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.8 +// @version 0.0.9 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* @@ -25,7 +25,7 @@ const $leftNav = $('.subnav-wrapper .container .left'); const $found = $leftNav.find('.pick-episode'); if (!$found.length) { - $leftNav.append('') + $leftNav.append('') .find('.pick-episode').on('click', pickShow); } } From 6de306fd36082969343c37579699e64549114795 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 28 Aug 2020 16:27:17 -0500 Subject: [PATCH 23/33] =?UTF-8?q?=F0=9F=90=9B=20pick-show=20Always=20add?= =?UTF-8?q?=20click=20event=20when=20page=20is=20reloaded?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 9b776fb..d17c02e 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -21,6 +21,10 @@ cheat: pickShow }); + function unghost() { + $(this).removeClass('sortable-ghost'); + } + function addPickButton() { const $leftNav = $('.subnav-wrapper .container .left'); const $found = $leftNav.find('.pick-episode'); @@ -28,15 +32,13 @@ $leftNav.append('') .find('.pick-episode').on('click', pickShow); } + + $('div[data-type="show"]').on('click', unghost); } addPickButton(); const observer = new MutationObserver(addPickButton); observer.observe(document.head.parentElement, {childList: true}); - $('div[data-type="show"]').on('click', function () { - $(this).removeClass('sortable-ghost'); - }); - let watched_shows; function getWeightedIndex(total) { From 6c64213999cbf685ff1ad4201604095d164b69ec Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 28 Aug 2020 16:28:07 -0500 Subject: [PATCH 24/33] =?UTF-8?q?=E2=9C=A8=20pick-show:=20Skip=20completed?= =?UTF-8?q?=20shows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index d17c02e..f4701ae 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -78,20 +78,26 @@ function filterShows($shows) { // Milliseconds in two days - let twoDays = 2 * 24 * 60 * 60 * 1000; - let twoDaysAgo = (new Date()) - twoDays; + const twoDays = 2 * 24 * 60 * 60 * 1000; + const twoDaysAgo = (new Date()) - twoDays; $shows.each(function (i, show) { - let showId = Number.parseInt(show.dataset.showId); - let showInfo = watched_shows[showId]; + const showId = Number.parseInt(show.dataset.showId); + const showInfo = watched_shows[showId]; if (!showInfo) return; - let lastWatch = showInfo.ts*1000; + const lastWatch = showInfo.ts*1000; // Skip ones we've watched in the last two days if (lastWatch > twoDaysAgo) { show.classList.add('sortable-ghost'); } + + const percentage = show.dataset.percentage; + + if (percentage == 100) { + show.classList.add('sortable-ghost'); + } }); return $shows.filter(':not(.sortable-ghost)'); From 89e31c5006559dc0dfa631e03b0bdc0ed61ba2cf Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 28 Aug 2020 16:58:29 -0500 Subject: [PATCH 25/33] =?UTF-8?q?=F0=9F=94=96=20New=20version=20of=20pick-?= =?UTF-8?q?show?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index f4701ae..28005b6 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Show Picker // @namespace danielrayjones -// @version 0.0.9 +// @version 0.0.10 // @description Pick a show from progress page // @author Dan Jones // @match https://trakt.tv/users/*/progress* From e9a6ffd2b80e1a0098ce17f9c9713727780b8875 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 1 Sep 2020 11:35:45 -0500 Subject: [PATCH 26/33] =?UTF-8?q?=F0=9F=8E=A8=20pick-show:=20Add=20refresh?= =?UTF-8?q?Page=20function=20to=20encapsulate=20page=20refresh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.pick-show.user.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/trakt.pick-show.user.js b/trakt.pick-show.user.js index 28005b6..b425424 100644 --- a/trakt.pick-show.user.js +++ b/trakt.pick-show.user.js @@ -16,6 +16,8 @@ (function() { 'use strict'; + let watched_shows; + $(window).konami({ code: [80, 73, 67, 75], cheat: pickShow @@ -32,14 +34,17 @@ $leftNav.append('') .find('.pick-episode').on('click', pickShow); } - - $('div[data-type="show"]').on('click', unghost); } - addPickButton(); - const observer = new MutationObserver(addPickButton); - observer.observe(document.head.parentElement, {childList: true}); - let watched_shows; + function refreshPage() { + addPickButton(); + $('div[data-type="show"]') + .on('click', unghost); + } + + refreshPage(); + const observer = new MutationObserver(refreshPage); + observer.observe(document.head.parentElement, {childList: true}); function getWeightedIndex(total) { const opts = []; From 0b85f0b053af17a9f40096debb18b40c709d1e2c Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Thu, 10 Sep 2020 20:26:59 -0500 Subject: [PATCH 27/33] =?UTF-8?q?=E2=9C=A8=20Add=20more=20data=20from=20sc?= =?UTF-8?q?raper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.scraper.user.js | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/trakt.scraper.user.js b/trakt.scraper.user.js index 8d1df0d..c2b81dd 100644 --- a/trakt.scraper.user.js +++ b/trakt.scraper.user.js @@ -2,7 +2,7 @@ // ==UserScript== // @name Trakt Scraper // @namespace danielrayjones -// @version 0.0.7 +// @version 0.0.8 // @description Scrape lists of shows/movies from Trakt and download a JSON file // @author Dan Jones // @match https://trakt.tv/* @@ -36,6 +36,8 @@ let $ep = $(that); let $series = $ep.find('[itemtype="http://schema.org/TVSeries"]'); + let this_ep = $ep.data(); + if ($series.length < 1) { $series = $('[itemtype="http://schema.org/TVSeries"]'); } @@ -78,34 +80,41 @@ let watched = watched_shows[series] ? watched_shows[series].e[ep] : null; - let this_ep = { - series_id: series, - episode_id: ep, - title, - url, - released, - watches: watched ? watched[1] : 0, - last_watched: watched ? watched[0] : null, - }; + let $img = $ep.find('[itemprop="image"]'); + if ($img.length > 0) { + this_ep['image'] = $img.attr('content'); + } + + this_ep['series_id'] = series; + this_ep['episode_id'] = ep; + this_ep['title'] = title; + this_ep['url'] = url; + this_ep['released'] = released; + this_ep['watches'] = watched ? watched[1] : 0; + this_ep['last_watched'] = watched ? watched[0] : null; return this_ep; } function processMovie(that) { let $mov = $(that); + let this_mov = $mov.data(); let id = $mov.data('movie-id'); let title = $mov.children('[itemprop="name"]').attr('content'); let url = $mov.children('[itemprop="url"]').attr('content'); let watched = watched_movies[id]; - let this_mov = { - id, - title, - url, - watches: watched ? watched[1] : 0, - last_watched: watched ? watched[0] : null, - }; + let $img = $mov.find('[itemprop="image"]'); + if ($img.length > 0) { + this_mov['image'] = $img.attr('content'); + } + + this_mov['id'] = id; + this_mov['title'] = title; + this_mov['url'] = url; + this_mov['watches'] = watched ? watched[1] : 0; + this_mov['last_watched'] = watched ? watched[0] : null; return this_mov; } From d7dfdba8dda34744ef973e0f2b724fe02a4c867e Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 1 Oct 2021 22:34:01 -0500 Subject: [PATCH 28/33] =?UTF-8?q?=E2=9C=A8=20clear-store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.clear-store.user.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 trakt.clear-store.user.js diff --git a/trakt.clear-store.user.js b/trakt.clear-store.user.js new file mode 100644 index 0000000..83b177b --- /dev/null +++ b/trakt.clear-store.user.js @@ -0,0 +1,37 @@ +// -*- tab-width: 4; js-indent-level: 4; -*- +// ==UserScript== +// @name Trakt Storage Clearer +// @namespace danielrayjones +// @version 0.0.1 +// @description +// @author Dan Jones +// @match https://trakt.tv/users/*/progress* +// @grant none +// @require https://bowercdn.net/c/konami-code-1.3.2/src/jquery.konami.min.js +// ==/UserScript== + +/* global $, compressedCache, localStorage, MutationObserver */ +/* jshint esversion: 6 */ + +(function() { + 'use strict'; + + const clearStorage = () => localStorage.clear(); + + /* todo + $(window).konami({ + code: [80, 73, 67, 75], + cheat: clearStorage + }); + */ + + function addPickButton() { + const $leftNav = $('.subnav-wrapper .container .left'); + const $found = $leftNav.find('.clear-store'); + if (!$found.length) { + $leftNav.append('') + .find('.clear-store').on('click', clearStorage); + } + } + +})(); From 89ef621228ba15d6f9ae6f8a6a4072f4f54413dd Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 1 Oct 2021 22:38:05 -0500 Subject: [PATCH 29/33] =?UTF-8?q?=F0=9F=90=9B=20clear-store:=20make=20butt?= =?UTF-8?q?on=20visible,=20maybe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trakt.clear-store.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trakt.clear-store.user.js b/trakt.clear-store.user.js index 83b177b..9a4ad94 100644 --- a/trakt.clear-store.user.js +++ b/trakt.clear-store.user.js @@ -29,7 +29,7 @@ const $leftNav = $('.subnav-wrapper .container .left'); const $found = $leftNav.find('.clear-store'); if (!$found.length) { - $leftNav.append('') + $leftNav.append('X') .find('.clear-store').on('click', clearStorage); } } From 5db7867f46e25d5301bcffd1c591dca47d7b0017 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 20 Sep 2024 15:16:24 -0500 Subject: [PATCH 30/33] =?UTF-8?q?=E2=9C=A8=20Add=20Old=20Reddit=20Image=20?= =?UTF-8?q?Expander?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- old-reddit-expando.user.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 old-reddit-expando.user.js diff --git a/old-reddit-expando.user.js b/old-reddit-expando.user.js new file mode 100644 index 0000000..0bf1702 --- /dev/null +++ b/old-reddit-expando.user.js @@ -0,0 +1,33 @@ +// ==UserScript== +// @name Old Reddit Image Expander +// @namespace danielrayjones +// @description Allow removal of visited links on Amazon Giveaway Listing +// @include https://old.reddit.com* +// @version 1.0.0 +// ==/UserScript== + +(function() { + const listing = document.getElementById('siteTable'); + + if (!listing) { + return; + } + + let para = document.createElement('p'); + //para.innerHtml = ''; + let exButton = document.createElement('button'); + exButton.id = 'expander'; + exButton.innerText = 'Expand images'; + exButton = para.appendChild(exButton); + + let deButton = document.createElement('button'); + deButton.id = 'depand'; + deButton.innerText = 'Collapse images'; + deButton = para.appendChild(deButton); + + para = listing.insertBefore(para, listing.firstChild); + + exButton.addEventListener('click', () => document.querySelectorAll('.expando-button.collapsed').forEach(e => e.click())); + deButton.addEventListener('click', () => document.querySelectorAll('.expando-button.expanded').forEach(e => e.click())); +})(); + From e61fdbdbd3c752df751d29df094563061f52730c Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 20 Sep 2024 16:00:18 -0500 Subject: [PATCH 31/33] =?UTF-8?q?=E2=9C=A8=20Add=20button=20to=20make=20th?= =?UTF-8?q?umb=20clickable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- old-reddit-expando.user.js | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/old-reddit-expando.user.js b/old-reddit-expando.user.js index 0bf1702..c88ff39 100644 --- a/old-reddit-expando.user.js +++ b/old-reddit-expando.user.js @@ -3,7 +3,7 @@ // @namespace danielrayjones // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://old.reddit.com* -// @version 1.0.0 +// @version 1.0.2 // ==/UserScript== (function() { @@ -14,20 +14,36 @@ } let para = document.createElement('p'); - //para.innerHtml = ''; let exButton = document.createElement('button'); - exButton.id = 'expander'; exButton.innerText = 'Expand images'; exButton = para.appendChild(exButton); + exButton.addEventListener('click', () => document.querySelectorAll('.expando-button.collapsed').forEach(e => e.click())); let deButton = document.createElement('button'); - deButton.id = 'depand'; deButton.innerText = 'Collapse images'; deButton = para.appendChild(deButton); + deButton.addEventListener('click', () => document.querySelectorAll('.expando-button.expanded').forEach(e => e.click())); + + const proxyThumbClicks = function(evt) { + let thing = evt.target; + while (!thing.classList.contains('thing') && thing != document.body) { + thing = thing.parentElement; + } + if (!thing.classList.contains('thing')) { + console.log("Couldn't find thing"); + return true; + } + evt.preventDefault(); + + thing.querySelector('.expando-button')?.click(); + + return false; + }; + + let icoButton = document.createElement('button'); + icoButton.innerText = 'Thumb expands'; + icoButton = para.appendChild(icoButton); + icoButton.addEventListener('click', () => listing.querySelectorAll('.thumbnail').forEach(e => e.addEventListener('click', proxyThumbClicks))); para = listing.insertBefore(para, listing.firstChild); - - exButton.addEventListener('click', () => document.querySelectorAll('.expando-button.collapsed').forEach(e => e.click())); - deButton.addEventListener('click', () => document.querySelectorAll('.expando-button.expanded').forEach(e => e.click())); })(); - From 0e9e91bf60d24ddc5da7652b0efea81dd5213a0d Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Sat, 21 Sep 2024 09:41:01 -0500 Subject: [PATCH 32/33] =?UTF-8?q?=F0=9F=94=96=20Reddit=20expando:=20auto?= =?UTF-8?q?=20make=20thumbs=20expandable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- old-reddit-expando.user.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/old-reddit-expando.user.js b/old-reddit-expando.user.js index c88ff39..1eea2a4 100644 --- a/old-reddit-expando.user.js +++ b/old-reddit-expando.user.js @@ -3,7 +3,7 @@ // @namespace danielrayjones // @description Allow removal of visited links on Amazon Giveaway Listing // @include https://old.reddit.com* -// @version 1.0.2 +// @version 1.0.3 // ==/UserScript== (function() { @@ -15,15 +15,17 @@ let para = document.createElement('p'); let exButton = document.createElement('button'); - exButton.innerText = 'Expand images'; + exButton.innerText = 'Expand'; exButton = para.appendChild(exButton); exButton.addEventListener('click', () => document.querySelectorAll('.expando-button.collapsed').forEach(e => e.click())); let deButton = document.createElement('button'); - deButton.innerText = 'Collapse images'; + deButton.innerText = 'Collapse'; deButton = para.appendChild(deButton); deButton.addEventListener('click', () => document.querySelectorAll('.expando-button.expanded').forEach(e => e.click())); + para = listing.insertBefore(para, listing.firstChild); + const proxyThumbClicks = function(evt) { let thing = evt.target; while (!thing.classList.contains('thing') && thing != document.body) { @@ -40,10 +42,5 @@ return false; }; - let icoButton = document.createElement('button'); - icoButton.innerText = 'Thumb expands'; - icoButton = para.appendChild(icoButton); - icoButton.addEventListener('click', () => listing.querySelectorAll('.thumbnail').forEach(e => e.addEventListener('click', proxyThumbClicks))); - - para = listing.insertBefore(para, listing.firstChild); + listing.querySelectorAll('.thumbnail').forEach(e => e.addEventListener('click', proxyThumbClicks)); })(); From 63048a34eaa2fdb8e326af77b7fe3472da737828 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 6 Jan 2025 16:26:29 -0600 Subject: [PATCH 33/33] =?UTF-8?q?=F0=9F=8E=89=20Infinite=20Craft=20Plus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infinite-craft-plus.user.js | 143 ++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 infinite-craft-plus.user.js diff --git a/infinite-craft-plus.user.js b/infinite-craft-plus.user.js new file mode 100644 index 0000000..ec95fde --- /dev/null +++ b/infinite-craft-plus.user.js @@ -0,0 +1,143 @@ +// ==UserScript== +// @name Infinite Craft Plus +// @namespace danielrayjones +// @match https://neal.fun/infinite-craft/ +// @grant none +// @version 0.0.1 +// @author Dan Jones +// @description 2024-01-06T14:13:00-0500 +// ==/UserScript== + +/* global window, localStorage, FileReader */ + +(function () { + const key = "infinite-craft-data"; + + function getData() { + return localStorage.getItem(key); + } + + function downloadData() { + const data = getData(); + + const dl = document.createElement('a'); + dl.href = 'data:application/json,' + data; + dl.download = 'infinite-craft.json'; + + dl.click(); + } + + function getParsedData() { + return JSON.parse(getData()); + } + + function getElements() { + return getParsedData().elements; + } + + function overwriteElements(newElements) { + const data = getParsedData(); + const old = data.elements; + data.elements = newElements; + + localStorage.setItem(key, JSON.stringify(data)); + + return old; + } + + function addElements(newElements) { + const els = getElements(); + + for (let i = 0; i < newElements.length; i++) { + const newEl = newElements[i]; + const found = els.find(el => el.text === newEl.text); + if (found) { + continue; + } + + console.log('Adding', newEl); + + els.push(newEl); + } + + return overwriteElements(els); + } + + function uploadElements(evt) { + evt.preventDefault(); + const files = evt.target.uploads.files; + + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const read = new FileReader(); + read.addEventListener('load', function () { + const body = read.result; + const els = JSON.parse(body)?.elements; + addElements(els); + }); + read.readAsText(file); + } + + const sub = evt.target.lastChild; + sub.disabled = true; + sub.setAttribute('value', '✅'); + } + + function getUploadButton() { + const f = document.createElement('form'); + f.style.display = 'inline'; + + const ups = document.createElement('input'); + ups.setAttribute('type', 'file'); + ups.setAttribute('name', 'uploads'); + ups.setAttribute('accept', '.json'); + ups.setAttribute('required', true); + f.appendChild(ups); + + f.addEventListener('submit', uploadElements); + + const sub = document.createElement('input'); + sub.setAttribute('type', 'submit'); + sub.setAttribute('value', 'Upload'); + f.appendChild(sub); + + return f; + } + + function getDownloadButton() { + const butt = document.createElement('button'); + butt.innerText = '⤵️'; + butt.addEventListener('click', downloadData); + + return butt; + } + + function addButtons() { + const target = document.querySelector('.site-title')?.parentElement; + if (!target) { + console.log("Can't find .site-title"); + return null; + } + + const span = document.createElement('span'); + const down = getDownloadButton(); + const up = getUploadButton(); + span.appendChild(down); + span.appendChild(up); + + const next = target.nextElementSibling; + console.log('inserting', span, 'before', next); + target.style.display = 'none'; + + return target.parentElement.insertBefore(span, next); + } + + window.Game = window.Game || {}; + + window.Game.getData = getElements; + window.Game.download = downloadData; + + window.addEventListener('load', () => console.log(addButtons())); + +})(); +