From 992e5a08d376f270e31819a0754c2a36dcaf85ad Mon Sep 17 00:00:00 2001 From: Georgeto Date: Fri, 9 Jun 2017 00:17:50 +0200 Subject: [PATCH 001/490] Fix 'GM_getValue('lastURL') is undefined' error Occurs on first use and renders the userscript useless, because execution never gets past this expression. Therefore lastURL remains undefined and the story repeats. Experienced this issue using Firefox with the Greasemonkey extension. --- BugMeNot/BugMeNot.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BugMeNot/BugMeNot.user.js b/BugMeNot/BugMeNot.user.js index 7681dac..0e8c464 100644 --- a/BugMeNot/BugMeNot.user.js +++ b/BugMeNot/BugMeNot.user.js @@ -6,7 +6,7 @@ // @include http://* // @include https://* // @exclude http://bugmenot.com/* -// @version 2016.10.27 +// @version 2017.06.09 // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue @@ -49,7 +49,7 @@ var domainname = myString.match(domainnameRE); domainname = domainname[2]; // If the current domain name doesn't match the stored lastURL, then reset the counter -if (GM_getValue('lastURL').indexOf(domainname) == -1){ +if (GM_getValue('lastURL', '').indexOf(domainname) == -1){ var counter = 0; GM_setValue('counter', 0); } else { From a81def2aaab122adf625d409e98770d945e50a90 Mon Sep 17 00:00:00 2001 From: darkred Date: Fri, 9 Jun 2017 18:34:58 +0300 Subject: [PATCH 002/490] (Google YouTube search link) Youtube --> YouTube --- Google_youtube_search_link/Google_youtube_search_link.user.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Google_youtube_search_link/Google_youtube_search_link.user.js b/Google_youtube_search_link/Google_youtube_search_link.user.js index fd4c0d5..b76fe81 100644 --- a/Google_youtube_search_link/Google_youtube_search_link.user.js +++ b/Google_youtube_search_link/Google_youtube_search_link.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Google YouTube search link // @description Adds a YouTube search link next to the Videos link (e.g. Web, Images, Videos, YouTube, News, Maps, Shopping, ...) -// @version 2017.6.8 +// @version 2017.6.9 // @author wOxxOm, darkred // @namespace darkred // @license MIT License @@ -47,7 +47,7 @@ function process(mutations) { var node = document.querySelector(`a[href*='tbm=vid']`); // selector for the 'Videos' link (works in any Google search page language) var text = '
' + - 'Youtube' + + 'YouTube' + '
'; node.parentElement.insertAdjacentHTML('afterend', text); // insert the YouTube link } From 4aa957c11c6a6c2d979386040d10ee98d04f648b Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 11 Jun 2017 21:30:24 +0300 Subject: [PATCH 003/490] (Metal Archives discography pages - Reviews column split and sortable tables) Converted the two @include rules into one with regex (and now incl. https) --- ...ages_-_Reviews_column_split_and_sortable_tables.user.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js b/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js index 999e904..df7787e 100644 --- a/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js +++ b/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js @@ -3,10 +3,9 @@ // @namespace darkred // @author RobG, Brock Adams, Mottie, darkred // @description Splits the Reviews column into Reviews(count) and Ratings and makes the tables in all discography tabs sortable. -// @include http://www.metal-archives.com/bands/* -// @include http://www.metal-archives.com/band/* -// @version 2.0 -// @date 2017.5.24 +// @include /^https?:\/\/www\.metal-archives\.com/bands?/.*$/ +// @version 2.0.1 +// @date 2017.6.11 // @grant none // @require https://greasyfork.org/scripts/12036-mutation-summary/code/Mutation%20Summary.js?version=70722 // @require https://greasyfork.org/scripts/5844-tablesorter/code/TableSorter.js?version=21758 From 1c1d221e8596542fa3e70d8cd742c31ee77107ae Mon Sep 17 00:00:00 2001 From: darkred Date: Wed, 21 Jun 2017 23:32:17 +0300 Subject: [PATCH 004/490] (SunXDCC - normalize values) Unified the @include rules --- .../SunXDCC_-_normalize_values.user.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js index 171b96f..22ac402 100644 --- a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js +++ b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js @@ -3,10 +3,8 @@ // @namespace darkred // @author darkred // @description It converts the values: in the 'Record' column from B/s to kB/s, and in the 'Size' column from e.g. G to GB. Also adds a space between the value and the unit, in both cases. -// @include http://sunxdcc.com/#search -// @include https://sunxdcc.com/#search -// @include https://sunxdcc.com/?searchterm=* -// @version 1 +// @include /^https?:\/\/(www\.)?sunxdcc\.com.*/ +// @version 2017.6.2 // @grant none // @require https://greasyfork.org/scripts/12036-mutation-summary/code/Mutation%20Summary.js?version=70722 // ==/UserScript== @@ -53,4 +51,5 @@ new MutationSummary({ callback: normalizeValues, rootNode: document.querySelector('#content'), queries: [{ element: '.table' }], + // queries: [{ element: '.results > .table:first-child' }], }); \ No newline at end of file From 5ea323decea5f66f30ca282e95293843d0ba9a47 Mon Sep 17 00:00:00 2001 From: darkred Date: Wed, 21 Jun 2017 23:33:36 +0300 Subject: [PATCH 005/490] (thepiratebay helper) Unified the @include rules --- thepiratebay_helper/thepiratebay_helper.user.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/thepiratebay_helper/thepiratebay_helper.user.js b/thepiratebay_helper/thepiratebay_helper.user.js index 1420286..50c20a5 100644 --- a/thepiratebay_helper/thepiratebay_helper.user.js +++ b/thepiratebay_helper/thepiratebay_helper.user.js @@ -4,15 +4,8 @@ // @authors emptyparad0x, darkred // @description Converts dates to local timezone on thepiratebay and optionally either highlight VIP/Trusted/Moderator/Helper torrents or hide non verified torrents altogether // @version 0.9.6l -// @date 2017.4.30 -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/search.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/browse/.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/user/.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/recent.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/torrent.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/tv.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/music.*$/ -// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/top.*$/ +// @date 2017.6.21 +// @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/(search|browse|user|recent|torrent|tv|music|top).*$/ // @grant none // @run-at document-idle // @require https://code.jquery.com/jquery-3.2.0.min.js From dd898c9e435206bef51f265cfec679c7d79e2a5b Mon Sep 17 00:00:00 2001 From: darkred Date: Wed, 21 Jun 2017 23:34:33 +0300 Subject: [PATCH 006/490] Revert "(SunXDCC - normalize values) Unified the @include rules" This reverts commit 1c1d221e8596542fa3e70d8cd742c31ee77107ae. --- .../SunXDCC_-_normalize_values.user.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js index 22ac402..171b96f 100644 --- a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js +++ b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js @@ -3,8 +3,10 @@ // @namespace darkred // @author darkred // @description It converts the values: in the 'Record' column from B/s to kB/s, and in the 'Size' column from e.g. G to GB. Also adds a space between the value and the unit, in both cases. -// @include /^https?:\/\/(www\.)?sunxdcc\.com.*/ -// @version 2017.6.2 +// @include http://sunxdcc.com/#search +// @include https://sunxdcc.com/#search +// @include https://sunxdcc.com/?searchterm=* +// @version 1 // @grant none // @require https://greasyfork.org/scripts/12036-mutation-summary/code/Mutation%20Summary.js?version=70722 // ==/UserScript== @@ -51,5 +53,4 @@ new MutationSummary({ callback: normalizeValues, rootNode: document.querySelector('#content'), queries: [{ element: '.table' }], - // queries: [{ element: '.results > .table:first-child' }], }); \ No newline at end of file From c5f988713bf815b0ab8d4fd72a04bd3afcf42614 Mon Sep 17 00:00:00 2001 From: darkred Date: Wed, 21 Jun 2017 23:35:52 +0300 Subject: [PATCH 007/490] (SunXDCC - normalize values) Unified the @include rules --- .../SunXDCC_-_normalize_values.user.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js index 171b96f..5aa8765 100644 --- a/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js +++ b/SunXDCC_-_normalize_values/SunXDCC_-_normalize_values.user.js @@ -3,10 +3,8 @@ // @namespace darkred // @author darkred // @description It converts the values: in the 'Record' column from B/s to kB/s, and in the 'Size' column from e.g. G to GB. Also adds a space between the value and the unit, in both cases. -// @include http://sunxdcc.com/#search -// @include https://sunxdcc.com/#search -// @include https://sunxdcc.com/?searchterm=* -// @version 1 +// @include /^https?:\/\/(www\.)?sunxdcc\.com.*/ +// @version 2017.6.21 // @grant none // @require https://greasyfork.org/scripts/12036-mutation-summary/code/Mutation%20Summary.js?version=70722 // ==/UserScript== @@ -53,4 +51,5 @@ new MutationSummary({ callback: normalizeValues, rootNode: document.querySelector('#content'), queries: [{ element: '.table' }], + // queries: [{ element: '.results > .table:first-child' }], }); \ No newline at end of file From e9de25d1d5a804afd9e82bdf81e4839f3d44de70 Mon Sep 17 00:00:00 2001 From: darkred Date: Sat, 28 Oct 2017 22:29:45 +0300 Subject: [PATCH 008/490] [RARBG - torrent and magnet links] Now it displays ML for all torrent entries: it gets the magnet link by retrieving the target torrent page via xhr. (Thanks to sxe for the suggestion) --- .../RARBG_-_torrent_and_magnet_links.user.js | 60 +++++++++++++++---- RARBG_-_torrent_and_magnet_links/README.md | 17 +++--- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js index 4c68347..5c7d937 100644 --- a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js +++ b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js @@ -3,35 +3,33 @@ // @namespace darkred // @description Adds a column with torrent and magnet links in RARBG lists // @include /^(https?:)?\/\/(www\.)?rarbg\.(to|com)\/(torrents\.php.*|catalog\/.*|top10)$/ -// @version 2017.4.27 +// @version 2017.10.28 // @grant none // ==/UserScript== - function appendColumn(title) { - var entries = document.querySelectorAll('.lista2t > tbody > tr > td:nth-child(2) '); // the initial column 'Files' after of which the extra column will be appended + var entries = document.querySelectorAll('.lista2t > tbody > tr > td:nth-child(2) '); // the initial column 'Files' after of which the extra column will be appended - for (let i = 0; i < entries.length; i++) { // creation of the extra column + for (let i = 0; i < entries.length; i++) { // creation of the extra column entries[i].insertAdjacentHTML('afterend', `` + title + ``); } - var header = document.querySelector('.lista2t > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3)'); // the first cell (the header cell) of the new column + var header = document.querySelector('.lista2t > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3)'); // the first cell (the header cell) of the new column header.innerHTML = title; header.setAttribute('class', 'header6'); header.setAttribute('align', 'center'); - var cells = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(3)'); // the rest cells of the new column + var cells = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(3)'); // the rest cells of the new column for (let i = 0; i < cells.length; i++) { cells[i].setAttribute('class', 'lista'); cells[i].setAttribute('width', '50px'); cells[i].setAttribute('align', 'center'); } - var newColumn = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(3)'); // new column - var oldColumn = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(2)'); // old column - + var newColumn = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(3)'); // new column + var oldColumn = document.querySelectorAll('.lista2t > tbody > tr[class="lista2"] > td:nth-child(2)'); // old column // populate the cells in the new column with DL and ML links for (let i = 0; i < newColumn.length; i++) { @@ -42,15 +40,53 @@ function appendColumn(title) { } let title = oldColumn[i].firstChild.innerText; var trackers = 'http%3A%2F%2Ftracker.trackerfix.com%3A80%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2710&tr=udp%3A%2F%2F9.rarbg.to%3A2710'; - newColumn[i].innerHTML = '' + ''; + // if the torrent hash is contained in the filenames of the thumbnail image if (hash !== undefined){ + // then generate magnet link from preview thumbnail if available newColumn[i].innerHTML += ' '; } else { - newColumn[i].innerHTML += '    '; + // else generate it via an ajax request + let href = oldColumn[i].firstChild.href; + newColumn[i].innerHTML += ' '; + newColumn[i].lastChild.title = 'ML generated via an ajax request'; } } - } appendColumn('DL ML'); + +var xhrMagnetLinks = document.querySelectorAll('.xhrMagnetLink'); + +for(let i=0; i < xhrMagnetLinks.length; i++) { + + xhrMagnetLinks[i].addEventListener('mouseover', function(event){ + + event.preventDefault(); + let href = this.getAttribute('href'); + if (href === '#') { + let tLink = this.getAttribute('data-href'); + + var xhr = new XMLHttpRequest(); + xhr.open('GET', tLink, true); // XMLHttpRequest.open(method, url, async) + xhr.onload = function () { + + let container = document.implementation.createHTMLDocument().documentElement; + container.innerHTML = xhr.responseText; + let magnetLink = container.querySelector('a[href^="magnet:"]'); // the 'magnet link' element in the retrieved page + + if (magnetLink) { + let magnetHref = magnetLink.href; + this.href = magnetHref; + let currentMagnetLink = document.querySelector('a[data-href^="' + tLink + '"]'); // the current magnet link element + currentMagnetLink.setAttribute('href', magnetHref); + } + + }; + xhr.send(); + + } + + }, false); + +} \ No newline at end of file diff --git a/RARBG_-_torrent_and_magnet_links/README.md b/RARBG_-_torrent_and_magnet_links/README.md index 2e3c01c..785fa12 100644 --- a/RARBG_-_torrent_and_magnet_links/README.md +++ b/RARBG_-_torrent_and_magnet_links/README.md @@ -1,11 +1,14 @@ Adds a column with torrent and magnet links in RARBG lists: -![](https://i.imgur.com/qmxoJyi.jpg) +![](https://i.imgur.com/JpNCgIe.jpg) Notes: -- the script generates the magnet links based on the filenames of the thumbnail images -that appear when you mouseover on a torrent title -(because these filenames are the same as the relevant torrent hash). -But for some torrents the thumbnail filename is generic (and not equal to the torrent hash) -therefore the magnet link cannot be generated. -- Also, in the Catalog section of the site there are not thumbnails, therefore the magnet link there cannot be generated either. +- the script generates the magnet links in two ways: + - for most torrent entries, it generates it from the filename of the thumbnail images that appears when you mouseover on the torrent title +*(because these filenames are the same as the relevant torrent hash)*. + - For some torrents however, the thumbnail filename is generic (i.e. it doesn't contain the torrent hash), so the magnet link cannot be generated directly. +In such cases the target torrent page is retrieved via xhr, in order to get the magnet link: +as you mouseover on the ML icon for such entries, initially it will have the current page's URL in the status bar +and the following tooltip will be displayed: "`ML generated via an ajax request`". +During that time the target page will be retrieved via xhr in the background, +and so if you click the ML icon (or just move the mouse away and re-mouseover), it will now have the magnet link. From 0f814450d3f43e478cdfdb2415e70b9f338ad89d Mon Sep 17 00:00:00 2001 From: darkred Date: Sat, 4 Nov 2017 01:26:43 +0200 Subject: [PATCH 009/490] Updated README.md --- .../README.md | 11 ++++++++--- RARBG_-_torrent_and_magnet_links/README.md | 15 ++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/RARBG_-_convert_torrent_timestamps_to_relative_format/README.md b/RARBG_-_convert_torrent_timestamps_to_relative_format/README.md index aafe81f..8caf4cc 100644 --- a/RARBG_-_convert_torrent_timestamps_to_relative_format/README.md +++ b/RARBG_-_convert_torrent_timestamps_to_relative_format/README.md @@ -1,4 +1,9 @@ -This script applies to rarbg.com. It converts torrent timestamps to relative time. -(Since v.2 the timestamps converted to local timezone are also available as tooltips: just hover mouse on a relative date to view). +This script applies to rarbg.to. -It uses [moment.js](http://momentjs.com/), [moment-timezone.js](http://momentjs.com/timezone/) and [jsTimezoneDetect](https://bitbucket.org/pellepim/jstimezonedetect) \ No newline at end of file +It converts torrent timestamps to relative format. + +*Note: if you use it in conjunction with my script: [RARBG - torrent and magnet links](https://greasyfork.org/scripts/23493) +make sure in your script manager that that this script runs* **before** *that one*. + + +It uses [moment.js](http://momentjs.com/), [moment-timezone.js](http://momentjs.com/timezone/) and [jsTimezoneDetect](https://bitbucket.org/pellepim/jstimezonedetect) \ No newline at end of file diff --git a/RARBG_-_torrent_and_magnet_links/README.md b/RARBG_-_torrent_and_magnet_links/README.md index 785fa12..15fd0c7 100644 --- a/RARBG_-_torrent_and_magnet_links/README.md +++ b/RARBG_-_torrent_and_magnet_links/README.md @@ -1,14 +1,15 @@ -Adds a column with torrent and magnet links in RARBG lists: +Adds a column with torrent and magnet links in RARBG lists: ![](https://i.imgur.com/JpNCgIe.jpg) Notes: - the script generates the magnet links in two ways: - - for most torrent entries, it generates it from the filename of the thumbnail images that appears when you mouseover on the torrent title -*(because these filenames are the same as the relevant torrent hash)*. - - For some torrents however, the thumbnail filename is generic (i.e. it doesn't contain the torrent hash), so the magnet link cannot be generated directly. -In such cases the target torrent page is retrieved via xhr, in order to get the magnet link: -as you mouseover on the ML icon for such entries, initially it will have the current page's URL in the status bar + - for most torrent entries, it generates it directly from the current page *(i.e. from the filename of the thumbnail image that appears when you mouseover on the torrent title, and that's because these filenames are the same as the relevant torrent hash)* . + - For some torrent entries however, the thumbnail filename is generic (i.e. it doesn't contain the torrent hash), so the magnet link cannot be generated directly. + In such cases, in order to get the magnet link, the target torrent page is retrieved via xhr: +as you mouseover on the ML icon for such entries, +initially it will have the current page's URL in the status bar with a `#` in its end (e.g. `https://rarbg.to/torrents.php#` ) and the following tooltip will be displayed: "`ML generated via an ajax request`". During that time the target page will be retrieved via xhr in the background, -and so if you click the ML icon (or just move the mouse away and re-mouseover), it will now have the magnet link. +and so if you click the ML icon (or just move the mouse away and re-mouseover), it will now have the magnet link. +*(thanks for sxe [for the suggestion](https://greasyfork.org/en/forum/discussion/30691/x))*. From eddfeac6dc2834b88097203255bcd896c838e43e Mon Sep 17 00:00:00 2001 From: darkred Date: Sat, 4 Nov 2017 01:44:52 +0200 Subject: [PATCH 010/490] GreasyFork - add a 'send PM to user' button in Greasyfork profile pages - for Citrus GFork' Fixed a selector, renamed a variable, and temporarily (until GM 4.0 is out) replaced GM_getResourceURL('icon') with a direct URL because it's displaying "Submit Query" text, instead of the pm icon, in GM 3.17 (this is obviously a GM regression - this was fixed in GM 3.7) --- ...n_Greasyfork_profile_pages_-_for_Cik.user.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js index 92c88a3..cba3e5e 100644 --- a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js +++ b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js @@ -4,7 +4,7 @@ // @description It adds a 'send PM to user' button in Greasyfork profile pages // @include https://greasyfork.org/*/users/* // @include https://greasyfork.org/*/forum/messages/add -// @version 2016.12.16 +// @version 2017.11.4 // @grant GM_getResourceURL // @resource icon http://i.imgur.com/ZU0xS0c.jpg // @run-at document-idle @@ -19,20 +19,21 @@ if (document.querySelector('.user-profile-link > a:nth-child(1)') !== null) { var yourProfileName = document.querySelector('.user-profile-link > a:nth-child(1)').innerHTML; } -if (document.querySelector('#user-profile > h1:nth-child(1)') !== null) { - var currentProfileName = document.querySelector('#user-profile > h1:nth-child(1)').textContent.replace('\'s Profile', ''); +if (document.querySelector('.text-content > h2:nth-child(1)') !== null) { + var targetProfileName = document.querySelector('.text-content > h2:nth-child(1)').textContent.replace('\'s Profile', ''); } if (window.location.href.indexOf('users') !== -1 // if current URL is a profile page - && yourProfileName !== currentProfileName) { // ... and this profile page is not yours - sessionStorage.setItem('recipient', currentProfileName); // store in sessionStorage the profileName (it will be inserted in the 'Recipients' textbox ) -after you press the button- - var referenceNode = document.querySelector('#user-profile > h1:nth-child(1)'); + && yourProfileName !== targetProfileName) { // ... and this profile page is not yours + sessionStorage.setItem('recipient', targetProfileName); // store in sessionStorage the profileName (it will be inserted in the 'Recipients' textbox ) -after you press the button- + var referenceNode = document.querySelector('.text-content > h2:nth-child(1)'); var a = document.createElement('input'); referenceNode.appendChild(a); a.style.padding = '0px 12px'; a.setAttribute('type', 'image'); - a.setAttribute('src', GM_getResourceURL('icon')); + // a.setAttribute('src', GM_getResourceURL('icon')); // the GM_getResourceURL('icon') results in displaying a "Submit Query" text, instead of the pm icon in GM 3.17 (https://github.com/greasemonkey/greasemonkey/issues/2341) + a.setAttribute('src', 'http://i.imgur.com/ZU0xS0c.jpg'); a.id = 'pmButton'; - a.title = 'Send PM to ' + currentProfileName; + a.title = 'Send PM to ' + targetProfileName; var lang = String(window.location).match(/^https:\/\/greasyfork\.org\/([a-zA-Z-]+)\/.*$/)[1]; document.getElementById('pmButton').addEventListener('click', function() { window.open('https://greasyfork.org/' + lang + '/forum/messages/add', '_self'); From 065b0170f801b963ec1ccfba269860ddb49b82ce Mon Sep 17 00:00:00 2001 From: darkred Date: Sat, 4 Nov 2017 18:52:20 +0200 Subject: [PATCH 011/490] (GreasyFork - add a 'send PM to user' button in Greasyfork profile pages) Now compatible with Greasemonkey 4.0 --- ...button_in_Greasyfork_profile_pages.user.js | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js index 4bae36d..9b04018 100644 --- a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js +++ b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js @@ -1,33 +1,37 @@ -īģŋ// ==UserScript== +// ==UserScript== // @name GreasyFork - add a 'send PM to user' button in Greasyfork profile pages // @namespace darkred // @description It adds a 'send PM to user' button in Greasyfork profile pages // @include https://greasyfork.org/*/users/* // @include https://greasyfork.org/*/forum/messages/add -// @version 2016.10.03 -// @grant GM_getResourceURL +// @version 2016.11.4 +// @grant GM.getResourceUrl // @resource icon http://i.imgur.com/ZU0xS0c.jpg +// @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js // ==/UserScript== if (window.location.href.indexOf('users') > -1 // if current URL is a profile page - && document.querySelector('.user-profile-link > a:nth-child(1)').innerHTML != document.querySelector('div.width-constraint:nth-child(2) > h2:nth-child(1)').innerHTML) { // ... and this profile page is not yours + && document.querySelector('.user-profile-link > a:nth-child(1)').innerHTML != document.querySelector('section.text-content:nth-child(1) > h2:nth-child(1)').innerHTML) { // ... and this profile page is not yours - var profileName = document.querySelector('div.width-constraint:nth-child(2) > h2:nth-child(1)').innerHTML; - sessionStorage.setItem('recipient', profileName); // store in sessionStorage the profileName (it will be inserted in the 'Recipients' textbox ) -after you press the button- + var profileName = document.querySelector('section.text-content:nth-child(1) > h2:nth-child(1)'); + sessionStorage.setItem('recipient', profileName); // store in sessionStorage the profileName (it will be inserted in the 'Recipients' textbox ) -after you press the button- - var referenceNode = document.querySelector('div.width-constraint:nth-child(2) > h2:nth-child(1)'); - var a = document.createElement('input'); - referenceNode.appendChild(a); + var referenceNode = document.querySelector('section.text-content:nth-child(1) > h2:nth-child(1)'); + var a = document.createElement('input'); - a.style.padding = '0px 12px'; - a.setAttribute('type', 'image'); - a.setAttribute('src', GM_getResourceURL('icon') ); - a.id = 'pmButton'; - a.title = 'Send PM to ' + profileName; + a.style.padding = '0px 12px'; + a.setAttribute('type', 'image'); + a.id = 'pmButton'; + a.title = 'Send PM to ' + profileName; + (async function() { + a.src = await GM.getResourceUrl('icon'); + })(); + referenceNode.appendChild(a); - document.getElementById('pmButton').addEventListener('click', function() { - window.open('https://greasyfork.org/en/forum/messages/add', '_self'); - }); + + document.getElementById('pmButton').addEventListener('click', function() { + window.open('https://greasyfork.org/en/forum/messages/add', '_self'); + }); } @@ -35,5 +39,5 @@ if (window.location.href.indexOf('users') > -1 // if current URL is a profile pa if (window.location.href.indexOf('messages') > -1) { // if current URL is a 'send PM' page - document.querySelector('#Form_To').innerHTML = sessionStorage.getItem('recipient'); // .. then insert the stored value of 'recipient' in the 'Recipients' textbox + document.querySelector('#Form_To').innerHTML = sessionStorage.getItem('recipient'); // .. then insert the stored value of 'recipient' in the 'Recipients' textbox } From 94a6fa64135ebb875bf2af4fa9a75c79ff51cc8e Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 21:15:05 +0200 Subject: [PATCH 012/490] New script: 'OpenSubtitles - direct download links' --- ...nSubtitles_-_direct_download_links.user.js | 43 +++++++++++++++++++ .../README.md | 8 ++++ 2 files changed, 51 insertions(+) create mode 100644 OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js create mode 100644 OpenSubtitles_-_direct_download_links/README.md diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js new file mode 100644 index 0000000..a19264e --- /dev/null +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -0,0 +1,43 @@ +// ==UserScript== +// @name OpenSubtitles - direct download links +// @namespace darkred +// @description Converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. +// @include https://www.opensubtitles.org/*/search/* +// @include https://www.opensubtitles.org/*/subtitles/* +// @version 1 +// @grant none +// @require https://code.jquery.com/jquery-3.2.1.min.js +// ==/UserScript== + + +// cases for the selectors: +// 1. https://www.opensubtitles.org/en/search/subs +// 2.https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313 +// 3. https://www.opensubtitles.website/en/opensubtitles-player.subtitles-download/subtitles/7150264 + +var allLinks = document.querySelectorAll(` + html body div.content fieldset table.smalltable tbody tr.change td:nth-child(4) a, + html body div.content form#submultiedit table#search_results tbody tr td:nth-child(5) a, + #bt-dwl-bt + `); + +for (var i = 0; i < allLinks.length; i++) { + allLinks[i].href = allLinks[i].href.replace('subtitleserve/', 'download/vrf-108d030f/'); +} + +var old_element = document.querySelector('#bt-dwl-bt'); +if (old_element){ + var new_element = old_element.cloneNode(true); + old_element.parentNode.replaceChild(new_element, old_element); +} + + + +// in order to avoid the redirections when you click the "Download" button on a subtitle page. +document.querySelector('#bt-dwl-bt').addEventListener('click', function(){ + $('#bt-dwl-bt').off(); +}); + +$('#bt-dwl-bt').on('click', function(){ + window.location.href = document.querySelector('#bt-dwl-bt').href; +}); diff --git a/OpenSubtitles_-_direct_download_links/README.md b/OpenSubtitles_-_direct_download_links/README.md new file mode 100644 index 0000000..8b12a6e --- /dev/null +++ b/OpenSubtitles_-_direct_download_links/README.md @@ -0,0 +1,8 @@ +This userscript converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. + +It applies to pages like: +1. https://www.opensubtitles.org/en/search/subs +2. https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313 +3. https://www.opensubtitles.website/en/opensubtitles-player.subtitles-download/subtitles/7150264 + +Note: it uses jQuery. From bf8cacf7d283b752546815a0c24e75e39da61e3a Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 21:31:58 +0200 Subject: [PATCH 013/490] (Instagram - visible images counter) updated the selector for when navigating/leaving a profile page. --- ...Instagram_-_visible_images_counter.user.js | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js b/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js index 1a049ed..143ac31 100644 --- a/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js +++ b/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js @@ -3,13 +3,21 @@ // @namespace darkred // @description Shows (in instagram profile pages) how many images out of total (as a number and as a percentage) are currently visible, as you scroll down the page // @include https://www.instagram.com/* -// @version 2016.11.18 -// @grant none -// @require https://code.jquery.com/jquery-3.0.0.min.js +// @version 2017.11.5 +// @grant GM_addStyle +// @require https://code.jquery.com/jquery-3.2.1.min.js // @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 // ==/UserScript== +GM_addStyle(` + +.counter { + color: #D9D9D9 !important; + } + +`); + // If you scroll down, beyond the first 12 images, then the "LOAD MORE" button(to show more images) will be automatically clicked @@ -44,6 +52,7 @@ function createDiv(){ div.style.top = '1px'; div.style.right = '1px'; div.style.position = 'fixed'; + div.className = 'counter'; } @@ -82,15 +91,15 @@ if (document.URL !== 'https://www.instagram.com/' && -$(document).arrive('article ._5axto', function() { // 'article .5axto' +$(document).arrive('article._mesn5', function() { // the avatar in the profile page createDiv(); observer(); }); -$(document).leave('article ._5axto', function() { - if (!document.querySelector('article ._5axto')) { +$(document).leave('article._mesn5', function() { + if (!document.querySelector('article._mesn5')) { div.remove(); observer1.disconnect(); } From 3041aeab20ac78d106d3d79b0da9854f0efbc984 Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 22:54:50 +0200 Subject: [PATCH 014/490] README.md correction --- OpenSubtitles_-_direct_download_links/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenSubtitles_-_direct_download_links/README.md b/OpenSubtitles_-_direct_download_links/README.md index 8b12a6e..2780319 100644 --- a/OpenSubtitles_-_direct_download_links/README.md +++ b/OpenSubtitles_-_direct_download_links/README.md @@ -1,8 +1,8 @@ This userscript converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. -It applies to pages like: -1. https://www.opensubtitles.org/en/search/subs -2. https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313 -3. https://www.opensubtitles.website/en/opensubtitles-player.subtitles-download/subtitles/7150264 +It applies to: +1. search results, e.g. `https://www.opensubtitles.org/en/search/subs` +2. movie pages e.g `https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313` +3. subtitle pages e.g. `https://www.opensubtitles.org/en/subtitles/7149428/transformers-the-last-knight-sv` Note: it uses jQuery. From feb334388fb386d7b4a5f09ade951356276464e0 Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 22:55:56 +0200 Subject: [PATCH 015/490] New userscript (fork): 'userstyles.org css highlighter' --- userstyles.org_css_highlighter/README.md | 6 + userstyles.org_css_highlighter/arrivejs.js | 450 ++++++++++++++++++ .../userstylesorg_css_highlighter.user.js | 309 ++++++++++++ 3 files changed, 765 insertions(+) create mode 100644 userstyles.org_css_highlighter/README.md create mode 100644 userstyles.org_css_highlighter/arrivejs.js create mode 100644 userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js diff --git a/userstyles.org_css_highlighter/README.md b/userstyles.org_css_highlighter/README.md new file mode 100644 index 0000000..914e47e --- /dev/null +++ b/userstyles.org_css_highlighter/README.md @@ -0,0 +1,6 @@ +It's modified version of https://greasyfork.org/en/scripts/41-userstyles-org-css-highlighter (by trespassersW) +in order to work with the new userstyles.org layout. + +Notes: +- It uses the [arrive.js](https://github.com/uzairfarooq/arrive) library. +- Thanks to trespassersW for a very useful script! diff --git a/userstyles.org_css_highlighter/arrivejs.js b/userstyles.org_css_highlighter/arrivejs.js new file mode 100644 index 0000000..25c6b9d --- /dev/null +++ b/userstyles.org_css_highlighter/arrivejs.js @@ -0,0 +1,450 @@ +/* + * arrive.js + * v2.3.1 + * https://github.com/uzairfarooq/arrive + * MIT licensed + * + * Copyright (c) 2014-2016 Uzair Farooq + */ + +var Arrive = (function(window, $, undefined) { + + "use strict"; + + if(!window.MutationObserver || typeof HTMLElement === 'undefined'){ + return; //for unsupported browsers + } + + var arriveUniqueId = 0; + + var utils = (function() { + var matches = HTMLElement.prototype.matches || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector + || HTMLElement.prototype.msMatchesSelector; + + return { + matchesSelector: function(elem, selector) { + return elem instanceof HTMLElement && matches.call(elem, selector); + }, + // to enable function overloading - By John Resig (MIT Licensed) + addMethod: function (object, name, fn) { + var old = object[ name ]; + object[ name ] = function(){ + if ( fn.length == arguments.length ) + return fn.apply( this, arguments ); + else if ( typeof old == 'function' ) + return old.apply( this, arguments ); + }; + }, + callCallbacks: function(callbacksToBeCalled) { + for (var i = 0, cb; cb = callbacksToBeCalled[i]; i++) { + cb.callback.call(cb.elem); + } + }, + // traverse through all descendants of a node to check if event should be fired for any descendant + checkChildNodesRecursively: function(nodes, registrationData, matchFunc, callbacksToBeCalled) { + // check each new node if it matches the selector + for (var i=0, node; node = nodes[i]; i++) { + if (matchFunc(node, registrationData, callbacksToBeCalled)) { + callbacksToBeCalled.push({ callback: registrationData.callback, elem: node }); + } + + if (node.childNodes.length > 0) { + utils.checkChildNodesRecursively(node.childNodes, registrationData, matchFunc, callbacksToBeCalled); + } + } + }, + mergeArrays: function(firstArr, secondArr){ + // Overwrites default options with user-defined options. + var options = {}, + attrName; + for (attrName in firstArr) { + options[attrName] = firstArr[attrName]; + } + for (attrName in secondArr) { + options[attrName] = secondArr[attrName]; + } + return options; + }, + toElementsArray: function (elements) { + // check if object is an array (or array like object) + // Note: window object has .length property but it's not array of elements so don't consider it an array + if (typeof elements !== "undefined" && (typeof elements.length !== "number" || elements === window)) { + elements = [elements]; + } + return elements; + } + }; + })(); + + + // Class to maintain state of all registered events of a single type + var EventsBucket = (function() { + var EventsBucket = function() { + // holds all the events + + this._eventsBucket = []; + // function to be called while adding an event, the function should do the event initialization/registration + this._beforeAdding = null; + // function to be called while removing an event, the function should do the event destruction + this._beforeRemoving = null; + }; + + EventsBucket.prototype.addEvent = function(target, selector, options, callback) { + var newEvent = { + target: target, + selector: selector, + options: options, + callback: callback, + firedElems: [] + }; + + if (this._beforeAdding) { + this._beforeAdding(newEvent); + } + + this._eventsBucket.push(newEvent); + return newEvent; + }; + + EventsBucket.prototype.removeEvent = function(compareFunction) { + for (var i=this._eventsBucket.length - 1, registeredEvent; registeredEvent = this._eventsBucket[i]; i--) { + if (compareFunction(registeredEvent)) { + if (this._beforeRemoving) { + this._beforeRemoving(registeredEvent); + } + this._eventsBucket.splice(i, 1); + } + } + }; + + EventsBucket.prototype.beforeAdding = function(beforeAdding) { + this._beforeAdding = beforeAdding; + }; + + EventsBucket.prototype.beforeRemoving = function(beforeRemoving) { + this._beforeRemoving = beforeRemoving; + }; + + return EventsBucket; + })(); + + + /** + * @constructor + * General class for binding/unbinding arrive and leave events + */ + var MutationEvents = function(getObserverConfig, onMutation) { + var eventsBucket = new EventsBucket(), + me = this; + + var defaultOptions = { + fireOnAttributesModification: false + }; + + // actual event registration before adding it to bucket + eventsBucket.beforeAdding(function(registrationData) { + var + target = registrationData.target, + selector = registrationData.selector, + callback = registrationData.callback, + observer; + + // mutation observer does not work on window or document + if (target === window.document || target === window) + target = document.getElementsByTagName("html")[0]; + + // Create an observer instance + observer = new MutationObserver(function(e) { + onMutation.call(this, e, registrationData); + }); + + var config = getObserverConfig(registrationData.options); + + observer.observe(target, config); + + registrationData.observer = observer; + registrationData.me = me; + }); + + // cleanup/unregister before removing an event + eventsBucket.beforeRemoving(function (eventData) { + eventData.observer.disconnect(); + }); + + this.bindEvent = function(selector, options, callback) { + options = utils.mergeArrays(defaultOptions, options); + + var elements = utils.toElementsArray(this); + + for (var i = 0; i < elements.length; i++) { + eventsBucket.addEvent(elements[i], selector, options, callback); + } + }; + + this.unbindEvent = function() { + var elements = utils.toElementsArray(this); + eventsBucket.removeEvent(function(eventObj) { + for (var i = 0; i < elements.length; i++) { + if (this === undefined || eventObj.target === elements[i]) { + return true; + } + } + return false; + }); + }; + + this.unbindEventWithSelectorOrCallback = function(selector) { + var elements = utils.toElementsArray(this), + callback = selector, + compareFunction; + + if (typeof selector === "function") { + compareFunction = function(eventObj) { + for (var i = 0; i < elements.length; i++) { + if ((this === undefined || eventObj.target === elements[i]) && eventObj.callback === callback) { + return true; + } + } + return false; + }; + } + else { + compareFunction = function(eventObj) { + for (var i = 0; i < elements.length; i++) { + if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector) { + return true; + } + } + return false; + }; + } + eventsBucket.removeEvent(compareFunction); + }; + + this.unbindEventWithSelectorAndCallback = function(selector, callback) { + var elements = utils.toElementsArray(this); + eventsBucket.removeEvent(function(eventObj) { + for (var i = 0; i < elements.length; i++) { + if ((this === undefined || eventObj.target === elements[i]) && eventObj.selector === selector && eventObj.callback === callback) { + return true; + } + } + return false; + }); + }; + + return this; + }; + + + /** + * @constructor + * Processes 'arrive' events + */ + var ArriveEvents = function() { + var mutationEvents, + me = this; + + // Default options for 'arrive' event + var arriveDefaultOptions = { + fireOnAttributesModification: false, + onceOnly: false, + existing: false + }; + + function getArriveObserverConfig(options) { + var config = { + attributes: false, + childList: true, + subtree: true + }; + + if (options.fireOnAttributesModification) { + config.attributes = true; + } + + return config; + } + + function onArriveMutation(mutations, registrationData) { + mutations.forEach(function( mutation ) { + var newNodes = mutation.addedNodes, + targetNode = mutation.target, + callbacksToBeCalled = []; + + // If new nodes are added + if( newNodes !== null && newNodes.length > 0 ) { + utils.checkChildNodesRecursively(newNodes, registrationData, nodeMatchFunc, callbacksToBeCalled); + } + else if (mutation.type === "attributes") { + if (nodeMatchFunc(targetNode, registrationData, callbacksToBeCalled)) { + callbacksToBeCalled.push({ callback: registrationData.callback, elem: node }); + } + } + + utils.callCallbacks(callbacksToBeCalled); + }); + } + + function nodeMatchFunc(node, registrationData, callbacksToBeCalled) { + // check a single node to see if it matches the selector + if (utils.matchesSelector(node, registrationData.selector)) { + if(node._id === undefined) { + node._id = arriveUniqueId++; + } + // make sure the arrive event is not already fired for the element + if (registrationData.firedElems.indexOf(node._id) == -1) { + + if (registrationData.options.onceOnly) { + if (registrationData.firedElems.length === 0) { + // On first callback, unbind event. + registrationData.me.unbindEventWithSelectorAndCallback.call( + registrationData.target, registrationData.selector, registrationData.callback); + } else { + // Ignore multiple mutations which may have been queued before the event was unbound. + return; + } + } + + registrationData.firedElems.push(node._id); + callbacksToBeCalled.push({ callback: registrationData.callback, elem: node }); + } + } + } + + arriveEvents = new MutationEvents(getArriveObserverConfig, onArriveMutation); + + var mutationBindEvent = arriveEvents.bindEvent; + + // override bindEvent function + arriveEvents.bindEvent = function(selector, options, callback) { + + if (typeof callback === "undefined") { + callback = options; + options = arriveDefaultOptions; + } else { + options = utils.mergeArrays(arriveDefaultOptions, options); + } + + var elements = utils.toElementsArray(this); + + if (options.existing) { + var existing = []; + + for (var i = 0; i < elements.length; i++) { + var nodes = elements[i].querySelectorAll(selector); + for (var j = 0; j < nodes.length; j++) { + existing.push({ callback: callback, elem: nodes[j] }); + } + } + + // no need to bind event if the callback has to be fired only once and we have already found the element + if (options.onceOnly && existing.length) { + return callback.call(existing[0].elem); + } + + setTimeout(utils.callCallbacks, 1, existing); + } + + mutationBindEvent.call(this, selector, options, callback); + }; + + return arriveEvents; + }; + + + /** + * @constructor + * Processes 'leave' events + */ + var LeaveEvents = function() { + var mutationEvents, + me = this; + + // Default options for 'leave' event + var leaveDefaultOptions = {}; + + function getLeaveObserverConfig(options) { + var config = { + childList: true, + subtree: true + }; + + return config; + } + + function onLeaveMutation(mutations, registrationData) { + mutations.forEach(function( mutation ) { + var removedNodes = mutation.removedNodes, + targetNode = mutation.target, + callbacksToBeCalled = []; + + if( removedNodes !== null && removedNodes.length > 0 ) { + utils.checkChildNodesRecursively(removedNodes, registrationData, nodeMatchFunc, callbacksToBeCalled); + } + + utils.callCallbacks(callbacksToBeCalled); + }); + } + + function nodeMatchFunc(node, registrationData) { + return utils.matchesSelector(node, registrationData.selector); + } + + leaveEvents = new MutationEvents(getLeaveObserverConfig, onLeaveMutation); + + var mutationBindEvent = leaveEvents.bindEvent; + + // override bindEvent function + leaveEvents.bindEvent = function(selector, options, callback) { + + if (typeof callback === "undefined") { + callback = options; + options = leaveDefaultOptions; + } else { + options = utils.mergeArrays(leaveDefaultOptions, options); + } + + mutationBindEvent.call(this, selector, options, callback); + }; + + return leaveEvents; + }; + + + var arriveEvents = new ArriveEvents(), + leaveEvents = new LeaveEvents(); + + function exposeUnbindApi(eventObj, exposeTo, funcName) { + // expose unbind function with function overriding + utils.addMethod(exposeTo, funcName, eventObj.unbindEvent); + utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorOrCallback); + utils.addMethod(exposeTo, funcName, eventObj.unbindEventWithSelectorAndCallback); + } + + /*** expose APIs ***/ + function exposeApi(exposeTo) { + exposeTo.arrive = arriveEvents.bindEvent; + exposeUnbindApi(arriveEvents, exposeTo, "unbindArrive"); + + exposeTo.leave = leaveEvents.bindEvent; + exposeUnbindApi(leaveEvents, exposeTo, "unbindLeave"); + } + + if ($) { + exposeApi($.fn); + } + exposeApi(HTMLElement.prototype); + exposeApi(NodeList.prototype); + exposeApi(HTMLCollection.prototype); + exposeApi(HTMLDocument.prototype); + exposeApi(Window.prototype); + + var Arrive = {}; + // expose functions to unbind all arrive/leave events + exposeUnbindApi(arriveEvents, Arrive, "unbindAllArrive"); + exposeUnbindApi(leaveEvents, Arrive, "unbindAllLeave"); + + return Arrive; + +})(window, typeof jQuery === 'undefined' ? null : jQuery, undefined); diff --git a/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js new file mode 100644 index 0000000..3f875de --- /dev/null +++ b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js @@ -0,0 +1,309 @@ +// ==UserScript== +// @name userstyles.org css highlighter +// @namespace trespassersW +// @version 2017.10.21 +// @description Formats and highlights CSS code shown after [Show CSS] clicking. +// @author trespassersW +// @contributor darkred +// +// @license MIT License +// @released 2013-11-20 +// @updated 2017-10-20 +// +// 17.10.19 Modified by darkred to work in the new userstyles.org layout. +// 16.08.28 + keeps highliting status between sessions; 16.08.28.1 - some instead of each +// 2.1.1 2016-01-04 + ctrl-clik copies CSS code to clipboard +// 2.0.1 cut extra empty lines +// 2.0 dark grey background; +// 1.3 icons for toggle button; tiny optimization +// 1.1 fresh versions of formater/hiliter; switching butifying on/off; fixed </& issue +// +// @include http://userstyles.org/styles/* +// @include https://userstyles.org/styles/* +// /include file:///E:/userscripts.org/styles/* +// @include http://web.archive.org/web/20170222172435/https://userstyles.org/styles/118959/darksearch-for-google +// @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 +// @grant GM_setClipboard +// ==/UserScript== + +/* globals Prism, cssbeautify */ + +document.arrive('#button_middle > .css_button', function() { + + + + (function() { + 'use strict'; + + + var Light = 0, + Dark = 1; + // choose color scheme according to your taste: + var scheme = 1; // 0 for light; 1 for dark + + //function _L(s){console.log(s);} + var sb; + + if (location.href.indexOf('s.org/styles/') < 0 || + !(sb = document.querySelector('#button_middle > .css_button')) + ) { return; } // else alert(); + + + + + var bt, tc, sc, vc, highlighted; + var hiId = ''; + + // CSSBeautify (C) 2013 Sencha Inc. Author: Ariya Hidayat. + (function(){function a(s,f){var h,m=0,i=s.length,t,e='',p,g,q,k,o,y,u,d,r=true,j=false,n;h=arguments.length>1?f:{};if(typeof h.indent==='undefined'){h.indent=' ';}if(typeof h.openbrace==='string'){r=(h.openbrace==='end-of-line');}if(typeof h.autosemicolon==='boolean'){j=h.autosemicolon;}function l(z){return(z===' ')||(z==='\n')||(z==='\t')||(z==='\r')||(z==='\f');}function b(z){return(z==='\'')||(z==='"');}function c(z){return(p>='a'&&p<='z')||(p>='A'&&p<='Z')||(p>='0'&&p<='9')||'-_*.:#[]'.indexOf(z)>=0;}function x(){var z;for(z=y;z>0;z-=1){e+=h.indent;}}function w(){e=n(e);if(r){e+=' {';}else{e+='\n';x();e+='{';}if(g!=='\n'){e+='\n';}y+=1;}function v(){var z;y-=1;e=n(e);if(e.length>0&&j){z=e.charAt(e.length-1);if(z!==';'&&z!=='{'){e+=';';}}e+='\n';x();e+='}';t.push(e);e='';}if(String.prototype.trimRight){n=function(z){return z.trimRight();};}else{n=function(z){return z.replace(/\s+$/,'');};}o={Start:0,AtRule:1,Block:2,Selector:3,Ruleset:4,Property:5,Separator:6,Expression:7,URL:8};y=0;k=o.Start;d=false;t=[];s=s.replace(/\r\n/g,'\n');while(m=128){k=o.Start;e+=p;continue;}if(c(p)||(p==='@')){q=n(e);if(q.length===0){if(t.length>0){e='\n\n';}}else{if(q.charAt(q.length-1)==='}'||q.charAt(q.length-1)===';'){e=q+'\n\n';}else{while(true){g=e.charAt(e.length-1);if(g!==' '&&g.charCodeAt(0)!==9){break;}e=e.substr(0,e.length-1);}}}e+=p;k=(p==='@')?o.AtRule:o.Selector;continue;}}if(k===o.AtRule){if(p===';'){e+=p;k=o.Start;continue;}if(p==='{'){q=n(e);w();k=(q==='@font-face')?o.Ruleset:o.Block;continue;}e+=p;continue;}if(k===o.Block){if(c(p)){q=n(e);if(q.length===0){if(t.length>0){e='\n\n';}}else{if(q.charAt(q.length-1)==='}'){e=q+'\n\n';}else{while(true){g=e.charAt(e.length-1);if(g!==' '&&g.charCodeAt(0)!==9){break;}e=e.substr(0,e.length-1);}}}x();e+=p;k=o.Selector;continue;}if(p==='}'){v();k=o.Start;continue;}e+=p;continue;}if(k===o.Selector){if(p==='{'){w();k=o.Ruleset;continue;}if(p==='}'){v();k=o.Start;continue;}e+=p;continue;}if(k===o.Ruleset){if(p==='}'){v();k=o.Start;if(y>0){k=o.Block;}continue;}if(p==='\n'){e=n(e);e+='\n';continue;}if(!l(p)){e=n(e);e+='\n';x();e+=p;k=o.Property;continue;}e+=p;continue;}if(k===o.Property){if(p===':'){e=n(e);e+=': ';k=o.Expression;if(l(g)){k=o.Separator;}continue;}if(p==='}'){v();k=o.Start;if(y>0){k=o.Block;}continue;}e+=p;continue;}if(k===o.Separator){if(!l(p)){e+=p;k=o.Expression;continue;}if(b(g)){k=o.Expression;}continue;}if(k===o.Expression){if(p==='}'){v();k=o.Start;if(y>0){k=o.Block;}continue;}if(p===';'){e=n(e);e+=';\n';k=o.Ruleset;continue;}e+=p;if(p==='('){if(e.charAt(e.length-2)==='l'&&e.charAt(e.length-3)==='r'&&e.charAt(e.length-4)==='u'){k=o.URL;continue;}}continue;}if(k===o.URL){if(p===')'&&e.charAt(e.length-1!=='\\')){e+=p;k=o.Expression;continue;}}e+=p;}e=t.join('')+e;return e;}if(typeof exports!=='undefined'){module.exports=exports=a;}else{if(typeof window==='object'){window.cssbeautify=a;}}}()); + // Prism (c) Lea Verou, MIT License + (function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1];},clone:function(e){var n=t.util.type(e);switch(n){case'Object':var r={};for(var i in e){e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));}return r;case'Array':return e.slice();}return e;}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n){r[i]=n[i];}return r;},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s){if(s.hasOwnProperty(u)){if(u==n){for(var a in r){r.hasOwnProperty(a)&&(o[a]=r[a]);}}o[u]=s[u];}}return i[e]=o;},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==='Object'&&t.languages.DFS(e[r],n);}}},highlight:function(e,r){return n.stringify(t.tkize(e,r));},tkize:function(e,n){var r=t.tk,i=[e],s=n.rest;if(s){for(var o in s){n[o]=s[o];}delete n.rest;}e:for(var o in n){if(!n.hasOwnProperty(o)||!n[o]){continue;}var u=n[o],a=u.inside,f=!!u.lookbehind||0;u=u.pattern||u;for(var l=0;le.length){break e;}if(c instanceof r){continue;}u.lastIndex=0;var h=u.exec(c);if(h){f&&(f=h[1].length);var p=h.index-1+f,h=h[0].slice(f),d=h.length,v=p+d,m=c.slice(0,p+1),g=c.slice(v+1),y=[l,1];m&&y.push(m);var b=new r(o,a?t.tkize(h,a):h);y.push(b);g&&y.push(g);Array.prototype.splice.apply(i,y);}}}return i;},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n);},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length){return;}for(var i=0,s;s=r[i++];){s(n);}}}},n=t.tk=function(e,t){this.type=e;this.content=t;};n.stringify=function(e){if(typeof e==='string'){return e;}if(Object.prototype.toString.call(e)=='[object Array]'){return e.map(n.stringify).join('');}var r={type:e.type,content:n.stringify(e.content),tag:'span',classes:['tk',e.type],attributes:{}};t.hooks.run('wrap',r);var i='';for(var s in r.attributes){i+=s+'="'+(r.attributes[s]||'')+'"';}return'<'+r.tag+' class="'+r.classes.join(' ')+'" '+i+'>'+r.content+'';};})(); + + Prism.languages.css = { + com: /\/\*[\w\W]*?\*\//g, // whose guilt? + atr: /@[\w-]+?(\s+[^;{]+)?(?=\s*{|\s*;)/gi, + url: /url\((["']?).*?\1\)/gi, + sel: /[^{}\s][^{}]*(?=\s*\{)/g, + pro: /(\b|\B)[a-z-]+(?=\s*:)/ig, + str: /("|')(\\?.)*?\1/g, + imp: /!important\b/gi, + pun: /[{};:]/g + }; + + /* + .com comment, .atr at-rule, .sel selector, .imp !important, + .pun punctuation, .url url, .str string + */ + var prismCSS; + if (scheme === Dark) { + prismCSS = ` + .tk.com { + color:#69A; + } + .tk.pun { + color:#8FC; + } + .tk.pro { + color:#5cf; + } + .tk.sel { + color:#7F5; + } + .tk.str { + color:#F63; + } + .tk.atr { + color:#F8C; + } + .tk.imp { + color:#e90; + } + .tk.url{ + color:#B87; + } + #css_text_area_div.hiBeautted { + background-color:#293134 !important; + color: #e0e2e4 !important;} + `; + } else { + prismCSS = ` + .tk.com { + color:slategray; + } + .tk.pun { + color:#488; + } + .tk.pro { + color:#05A; + } + .tk.sel { + color:#470; + } + .tk.str { + color:#E30; + } + .tk.atr { + color:#905; + } + .tk.imp { + color:#e90; + /*font-weight:bold;*/ + } + .tk.url{ + color:#a75; + } + `;} + + prismCSS += ` + #css_text_area_div { + padding: 1.2em .8em !important; + } + #css_text_area_div.hiBeautted { + white-space: pre-wrap !important; + word-wrap: break-word!important; + } + #hiBeauty:before{ + content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAACjklEQVR42pXTz0/TYBgH8Nf/gaMJhoAXZzx7NhJviiZ6wmiWXRbRxBjjSYEQN8PPjbGxsWwgOjQYCVHWQoQM2IYDYbCta1e6tfvRTRMVjffnsW9HFkGzuMPnfd68ab79vk1KfD7fYrlcxv8lCAJWKhWUZVnfh8PhXwaD4TLxer2LqqoCRR88vv/zjFIUBXmeh0P6fmRkhCETExOsWiyAkt6jMC+k6gb962Xj4+MM8Xg8bCnowwNrh+6bpQOLyS1s5Loul4shbrebLc874EdPO4V0FncjDTVyOp0M0Wqx6pshOHh0nsLv2izurDceRGup2yH4/KJH042VQB+ostRQ0NjYWDVISb7H3LK5aqULC1kO0+5V5B0hnbS0W/cb6UF0KcSeQeXdOQrplOPLIN5dwOw9BjQouSN1GzkcjmqQEu3D0tvWGnlnCfnbcyga56vsa3UbjY6OMoSmybFhkAInKZRmTkGe24BE5ywmb7wGDWac63Ub6UF0kQoShDNrFEbFMJTUEixnshjkJdBgUslDWlAgFN2nMLol/R1kt9uZQHoazbvGmlUxhmciGTTEsrr7cRGHn+fwVndRd/NxDmWlVLuazWYLEvqf+FNe6Ny6TiGdH4QItK0ksC3EwekQh12bPDz15uDaQ4XCqw+ykJVLtUYDAwMsGRwcZNx7TrgSuUQhnUv8OjQHN7F5cRs0aI4m4IlTgvY7OQovmvePBFkslgXS39/PxpUdnOYmdQFuGvOlPHr2BLTFeV1oX8bIpwL65xTdq6CiBeghKEkSmkymIWK1WllRFIHjOEilUphMpuAQHptHzhOJJIUbGx9/NjU1nSVGo2nW73/5dWpqpiGTk4Evvb3WtZaW1guEkBO/ARQgDsZ2Sv7VAAAAAElFTkSuQmCC); + opacity:.75; + display: block; + position: absolute; + top: 0px; + left: 33%; + z-index: 1; + } + #hiBeauty.hiBeautted:before{ + content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAACf0lEQVR42qWSW09aURCF9x9srJd6ARGqtf0nVUHkJreDtCrIRX/AjlFjQjUxISpXNdZ7DeC7rX1a0xm6TU6IjQ99+DIz+8xayVl7q06nox8eHoiBqb29fX5xRzxUu93WDJqNBj5NTeLjew8+TLgwOe6ExzEG9+gIXMNDcA4NwDHwFo16DbLfg1atVkszxMgBGey9fYbZ7e7beq3u7+81QxcXF9goFmmjWKD1Qh7r+TwVczkq5NaosJZFPpulfDaDXGaVcqsrtLayzH9RJ9GKh7q7u9MMzs7OsJxO4+vSEr6kUoyFtJXEUjKBVCKOVDwGKxZFMrrIRJBYjOD46AiiFQ91c3Ojb29viYGpvb19fnFHPNTV1ZW+vr7G4eEhpj3ubsgTHLBzaBDTbhfk22uIh+Js9OXlJTEwtbe3zy/uiIc6Pz/XDNVqNcmIOCOSjNKWRZwRcUYkGVnxGCX/ZkSNep1YA9EZtOKQNUOV42MYEzawOOQkG7BJPE5sAjahBAfNIVO1WiG5HNEZtGo2m/rk5AT/g3ioer2uGfpWKmHKPUGTrnHyOB1wj42Sa2SYnO8GyTHYj9H+PhrpeyOvXGIg1kB0Bq0qlYpmiEG1WiWDvbfP3fq8b6qgFV+7PuKHtb+/j0gwiHAwgFBgAaEFP4L+eQTmfQj4vFjweuH3zsE/N4v52Rn4Zj5jZ3sLohUPVS6XNUN7e3tImYAtvqVk95ZilOiGHAUHTXF+zbFImGLhEEXDIezsbJNoxUMdHBxohhiY2tvb53/taLW5uekrlUqPzE/mF/PE/H6FJ7MrmkfxUNlsdpcpZzKZU67fmR/ct7i2mY7A83OVs5bZkd1To939A6wgCBc2cNwFAAAAAElFTkSuQmCC); + } + #css_text_area_div { + position: relative !important; + } + #hiBeauty { + padding: 0; + margin: 0; + width: auto; + cursor: pointer; + border: none + } + `; + + function hiStat(x) { + vc.className = bt.className = x; + bt.setAttribute('title', x ? 'raw text' : 'highlight'); + if (locStor) locStor.setItem('HiliteUsoCod', !!x); + } + + function isBeauty() { + sc = document.getElementById('stylish-code'); + if (!sc || !(sc.textContent)) return -1; + if (sc.innerHTML.substr(0, hiId.length) === hiId) { + if (bt.className) { + sc.innerHTML = ''; + sc.textContent = tc; + hiStat(''); + } else hiStat('hiBeautted'); + return 1; + } + hiStat(''); + return 0; + } + + function hiBeauty(e) { + sc = document.getElementById('stylish-code'); + if (e) { + e.preventDefault(), e.stopPropagation(); + if (e.shiftKey || e.altKey) return; + if (e.ctrlKey) { // 2016-01-04 + GM_setClipboard(sc.textContent); + window.status = 'CSS copied to clipboard'; + return; + } + } + if (isBeauty() !== 0) return; + if (!(highlighted && tc && tc === sc.textContent)) { + tc = sc.textContent; + // console.log(tc); + highlighted = cssbeautify(tc, { + // autosemicolon: true , + // openbrace: "newline", + indent: '\u0020\u0020' // 14-02-26 o_0 + // indent: " " // 14-02-26 o_0 + // indent: "\u00a0\u00a0" + }); + // console.log(highlighted); + + highlighted = highlighted.replace(/\n(\s*)@\s+/g, '\n$1@'); // 2014-03-12 dirty patch + highlighted = highlighted.replace(/,\n\n+/g, ',\n'); // 2014-03-12 4freecyber + highlighted = highlighted.replace(/\n\n+/g, '\n\n'); // 2014-02-25 + highlighted = highlighted.replace(/&/g, '&').replace(/ %FFpath%\webappstore.sqlite -> find -> key -> contains HiliteUso + } catch (e) { locStor = false; } + + + + document.arrive('#stylish-code', function() { + var toggle = document.querySelector('#hiBeauty'); + if (toggle.title === 'Highlight' && localStorage.getItem('HiliteUsoCod') === 'true') { + toggle.click(); + } + }); + + + document.querySelector('.css_button').addEventListener('click', function() { + if (document.querySelector('.css_button').firstChild.className === 'css_open') { + document.querySelector('#stylish-code').style.display = 'none'; + document.querySelector('#hiBeauty').style.display = 'none'; + } else { + document.querySelector('#stylish-code').style.display = 'block'; + document.querySelector('#hiBeauty').style.display = 'initial'; + } + }); + + + + + })(); + + + +}); \ No newline at end of file From 3d9ed6f5004094bac61211c23b2d032cab08058e Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 23:00:06 +0200 Subject: [PATCH 016/490] (userstyles.org css highlighter) Updated description. --- .../userstylesorg_css_highlighter.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js index 3f875de..ca5dab8 100644 --- a/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js +++ b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js @@ -2,7 +2,7 @@ // @name userstyles.org css highlighter // @namespace trespassersW // @version 2017.10.21 -// @description Formats and highlights CSS code shown after [Show CSS] clicking. +// @description Formats and highlights CSS code shown after [Show CSS] clicking. (works with the new userstyles.org layout). // @author trespassersW // @contributor darkred // From 32b1b55e9cdd7e799f1334afcf42568b139d3636 Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 5 Nov 2017 23:07:24 +0200 Subject: [PATCH 017/490] Updated the main README.md. --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9234de5..8764409 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This repo contains my userscripts. ### Userscripts - [Bugzilla - reveal the Depends, Blocks, See Also and Duplicates bug titles](https://github.com/darkred/Userscripts/tree/master/Bugzilla_-_reveal_the_Depends%2C_Blocks%2C_See_Also_and_Duplicates_bug_titles#readme) - Reveal the Depends, Blocks, See Also and Duplicates bug titles in bugzilla.mozilla.org via keyboard shortcuts. -- [BugMeNot](https://github.com/darkred/Userscripts/blob/master/BugMeNot/README.md) - It fetches logins from bugmenot.com and autofills the login form. +- [BugMeNot](https://github.com/darkred/Userscripts/tree/master/BugMeNot/README.md) - It fetches logins from bugmenot.com and autofills the login form. - [Firefox for desktop - list fixed bugs in Mercurial](https://github.com/darkred/Userscripts/tree/master/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial#readme) - It generates lists of fixed bugs related to Firefox for desktop in Mozilla Mercurial pushlogs. - [Firefox for desktop - list fixed bugs in Mercurial as sortable table](https://github.com/darkred/Userscripts/tree/master/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table#readme) - It generates a list of recently fixed bugs related to Firefox for desktop in Mozilla Mercurial pushlogs. - [Firefox for desktop - list modified bugs in Mercurial as sortable table](https://github.com/darkred/Userscripts/tree/master/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table#readme) - It generates lists of bugs related to Firefox for desktop for which patches have landed in Mozilla Mercurial pushlogs. @@ -21,17 +21,19 @@ This repo contains my userscripts. - [Markdown toolbar for reddit.com](https://github.com/darkred/Userscripts/tree/master/Markdown_toolbar_for_reddit.com#readme) - Creates a Markdown toolbar whenever you make/edit text posts or comments in reddit.com. - [Metal Archives (discography pages) - Reviews column split and sortable tables](https://github.com/darkred/Userscripts/tree/master/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables#readme) - Splits the Reviews column into Reviews(count) - and Ratings and makes the tables in all discography tabs sortable. - [mozillaZine Forums - insert titles to bug links](https://github.com/darkred/Userscripts/tree/master/mozillaZine_Forums_-_insert_titles_to_bug_links#readme) - Inserts titles to bug links that are plain URLs, in forums.mozillazine.org. +- [OpenSubtitles - direct download links](https://github.com/darkred/Userscripts/tree/master/OpenSubtitles_-_direct_download_links#readme) - Converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. - [OpenUserJS Bullshit Filter](https://github.com/darkred/Userscripts/tree/master/OpenUserJS_Bullshit_Filter#readme) - Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. - [RARBG - convert torrent timestamps to relative format](https://github.com/darkred/Userscripts/tree/master/RARBG_-_convert_torrent_timestamps_to_relative_format#readme) - Convert torrent upload timestamps to local timezone or to relative format. - [RARBG - torrent and magnet links](https://github.com/darkred/Userscripts/tree/master/RARBG_-_torrent_and_magnet_links#readme) - Adds a column in search results for direct torrent or magnet link downloading. - [Reddit Infinite Scrolling](https://github.com/darkred/Userscripts/tree/master/Reddit_Infinite_Scrolling#readme) - Adds infinite scrolling to subreddits and to comments. - [Rotten Tomatoes Decimal Rating](https://github.com/darkred/Userscripts/tree/master/Rotten_Tomatoes_Decimal_Rating#readme) - Changes base-5 Rating of Rotten Tomatoes to base-10. - [StackExchange sites - convert dates to local timezone](https://github.com/darkred/Userscripts/tree/master/StackExchange_sites_-_convert_dates_to_local_timezone#readme) - Converts dates to your local timezone. -- [SunXDCC - normalize values](https://github.com/darkred/Userscripts/blob/master/SunXDCC_-_normalize_values#readme) - It converts the values: in the 'Record' column from B/s to kB/s, and in the 'Size' column from e.g. G to GB. Also adds a space between the value and the unit, in both cases. +- [SunXDCC - normalize values](https://github.com/darkred/Userscripts/tree/master/SunXDCC_-_normalize_values#readme) - It converts the values: in the 'Record' column from B/s to kB/s, and in the 'Size' column from e.g. G to GB. Also adds a space between the value and the unit, in both cases. - [thepiratebay - add a sortable Ratio column](https://github.com/darkred/Userscripts/tree/master/thepiratebay_-_add_a_sortable_Ratio_column#readme) - Adds a sortable "Ratio" column. - [thepiratebay helper](https://github.com/darkred/Userscripts/tree/master/thepiratebay_helper#readme) - Converts dates to local timezone on thepiratebay and optionally either highlight VIP/Trusted/Moderator/Helper torrents or hide non verified torrents altogether. - [Twitter - add unread notifications count in the tab title](https://github.com/darkred/Userscripts/tree/master/Twitter_-_add_unread_notifications_count_in_the_tab_title#readme) - Adds unread notifications count in the tab title. - [Userstyles Bullshit Filter](https://github.com/darkred/Userscripts/tree/master/Userstyles_Bullshit_Filter#readme) - Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. +- [userstyles.org css highlighter](https://github.com/darkred/Userscripts/blob/master/userstyles.org_css_highlighter/README.md) - Formats and highlights CSS code shown after [Show CSS] clicking *(It's modified version of https://greasyfork.org/en/scripts/41-userstyles-org-css-highlighter (by trespassersW) in order to work with the new userstyles.org layout)*. ## External profiles From 4d2dd6589f6bbdda45fb0932d3a13d4c48ec50fa Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 6 Nov 2017 01:46:09 +0200 Subject: [PATCH 018/490] (OpenSubtitles - direct download links) removed unnecesairy @require for jQuery, the script may use the page's jQuery version --- .../OpenSubtitles_-_direct_download_links.user.js | 7 +++---- OpenSubtitles_-_direct_download_links/README.md | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js index a19264e..4f9f4b0 100644 --- a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -4,9 +4,8 @@ // @description Converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. // @include https://www.opensubtitles.org/*/search/* // @include https://www.opensubtitles.org/*/subtitles/* -// @version 1 +// @version 2017.11.6 // @grant none -// @require https://code.jquery.com/jquery-3.2.1.min.js // ==/UserScript== @@ -35,9 +34,9 @@ if (old_element){ // in order to avoid the redirections when you click the "Download" button on a subtitle page. document.querySelector('#bt-dwl-bt').addEventListener('click', function(){ - $('#bt-dwl-bt').off(); + $('#bt-dwl-bt').off(); // the script uses the page's jQuery, v1.12.2 (https://static.opensubtitles.org/libs/js/jquery/jquery.min.js) }); -$('#bt-dwl-bt').on('click', function(){ +document.querySelector('#bt-dwl-bt').addEventListener('click', function(){ window.location.href = document.querySelector('#bt-dwl-bt').href; }); diff --git a/OpenSubtitles_-_direct_download_links/README.md b/OpenSubtitles_-_direct_download_links/README.md index 2780319..391bd51 100644 --- a/OpenSubtitles_-_direct_download_links/README.md +++ b/OpenSubtitles_-_direct_download_links/README.md @@ -1,8 +1,6 @@ -This userscript converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. +This userscript converts the subtitles download links to direct ones, in order to avoid gettings redirections to download pages that display ads. It applies to: 1. search results, e.g. `https://www.opensubtitles.org/en/search/subs` 2. movie pages e.g `https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313` 3. subtitle pages e.g. `https://www.opensubtitles.org/en/subtitles/7149428/transformers-the-last-knight-sv` - -Note: it uses jQuery. From a5b3a70efe4c0b785051739cad85013d5d451ffd Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 6 Nov 2017 01:53:25 +0200 Subject: [PATCH 019/490] (OpenSubtitles - direct download links) additions to README.md --- OpenSubtitles_-_direct_download_links/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSubtitles_-_direct_download_links/README.md b/OpenSubtitles_-_direct_download_links/README.md index 391bd51..9014af2 100644 --- a/OpenSubtitles_-_direct_download_links/README.md +++ b/OpenSubtitles_-_direct_download_links/README.md @@ -1,6 +1,6 @@ This userscript converts the subtitles download links to direct ones, in order to avoid gettings redirections to download pages that display ads. It applies to: -1. search results, e.g. `https://www.opensubtitles.org/en/search/subs` -2. movie pages e.g `https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313` -3. subtitle pages e.g. `https://www.opensubtitles.org/en/subtitles/7149428/transformers-the-last-knight-sv` +1. search results, (the links in the column `Downloaded`) e.g. `https://www.opensubtitles.org/en/search/subs` +2. movie pages (the links in the column `Downloaded`) e.g `https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313` +3. subtitle pages (the button `Download`) e.g. `https://www.opensubtitles.org/en/subtitles/7149428/transformers-the-last-knight-sv` From e34d321bd646d733dab75358cc49517dffa53815 Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 6 Nov 2017 01:57:20 +0200 Subject: [PATCH 020/490] whitespace --- .../OpenSubtitles_-_direct_download_links.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js index 4f9f4b0..df93a17 100644 --- a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -11,7 +11,7 @@ // cases for the selectors: // 1. https://www.opensubtitles.org/en/search/subs -// 2.https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313 +// 2. https://www.opensubtitles.org/en/search/sublanguageid-all/idmovie-513313 // 3. https://www.opensubtitles.website/en/opensubtitles-player.subtitles-download/subtitles/7150264 var allLinks = document.querySelectorAll(` From f43ad36aba3f47c8940035da78f69316c1d14ee6 Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 6 Nov 2017 02:09:46 +0200 Subject: [PATCH 021/490] (OpenSubtitles - direct download links)) combined the two click listeners --- .../OpenSubtitles_-_direct_download_links.user.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js index df93a17..520dbae 100644 --- a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -35,8 +35,5 @@ if (old_element){ // in order to avoid the redirections when you click the "Download" button on a subtitle page. document.querySelector('#bt-dwl-bt').addEventListener('click', function(){ $('#bt-dwl-bt').off(); // the script uses the page's jQuery, v1.12.2 (https://static.opensubtitles.org/libs/js/jquery/jquery.min.js) -}); - -document.querySelector('#bt-dwl-bt').addEventListener('click', function(){ window.location.href = document.querySelector('#bt-dwl-bt').href; }); From 5e49ee443116c3def4ce63d564d7d5576e504527 Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 6 Nov 2017 02:17:18 +0200 Subject: [PATCH 022/490] (OpenSubtitles - direct download links) description --- .../OpenSubtitles_-_direct_download_links.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js index 520dbae..3cd84ed 100644 --- a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name OpenSubtitles - direct download links // @namespace darkred -// @description Converts the subtitles download links to direct ones, in order to avoid the redirection to download pages that display ads. +// @description Converts the subtitles download links to direct ones, in order to avoid redirection to download pages that display ads. // @include https://www.opensubtitles.org/*/search/* // @include https://www.opensubtitles.org/*/subtitles/* // @version 2017.11.6 From d2c0971e1f2316755b1dc1807812a2f17659115d Mon Sep 17 00:00:00 2001 From: darkred Date: Sat, 11 Nov 2017 16:30:24 +0200 Subject: [PATCH 023/490] (RARBG - torrent and magnet links) shorter tooltip text --- .../RARBG_-_torrent_and_magnet_links.user.js | 6 +++--- RARBG_-_torrent_and_magnet_links/README.md | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js index 5c7d937..81d21e2 100644 --- a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js +++ b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js @@ -1,9 +1,9 @@ -īģŋ// ==UserScript== +// ==UserScript== // @name RARBG - torrent and magnet links // @namespace darkred // @description Adds a column with torrent and magnet links in RARBG lists // @include /^(https?:)?\/\/(www\.)?rarbg\.(to|com)\/(torrents\.php.*|catalog\/.*|top10)$/ -// @version 2017.10.28 +// @version 2017.11.11 // @grant none // ==/UserScript== @@ -49,7 +49,7 @@ function appendColumn(title) { // else generate it via an ajax request let href = oldColumn[i].firstChild.href; newColumn[i].innerHTML += ' '; - newColumn[i].lastChild.title = 'ML generated via an ajax request'; + newColumn[i].lastChild.title = 'ML via XHR'; } } } diff --git a/RARBG_-_torrent_and_magnet_links/README.md b/RARBG_-_torrent_and_magnet_links/README.md index 15fd0c7..eae16f5 100644 --- a/RARBG_-_torrent_and_magnet_links/README.md +++ b/RARBG_-_torrent_and_magnet_links/README.md @@ -4,12 +4,12 @@ Adds a column with torrent and magnet links in RARBG lists: Notes: - the script generates the magnet links in two ways: - - for most torrent entries, it generates it directly from the current page *(i.e. from the filename of the thumbnail image that appears when you mouseover on the torrent title, and that's because these filenames are the same as the relevant torrent hash)* . - - For some torrent entries however, the thumbnail filename is generic (i.e. it doesn't contain the torrent hash), so the magnet link cannot be generated directly. - In such cases, in order to get the magnet link, the target torrent page is retrieved via xhr: -as you mouseover on the ML icon for such entries, -initially it will have the current page's URL in the status bar with a `#` in its end (e.g. `https://rarbg.to/torrents.php#` ) -and the following tooltip will be displayed: "`ML generated via an ajax request`". -During that time the target page will be retrieved via xhr in the background, -and so if you click the ML icon (or just move the mouse away and re-mouseover), it will now have the magnet link. + - for most torrent entries, it generates it directly from the current page + *(i.e. from the filename of the thumbnail image that appears when you mouseover on the torrent title, and that's because these filenames are the same as the relevant torrent hash)* . + - For some torrent entries however, the thumbnail filename is generic (i.e. it doesn't contain the torrent hash), + therefore the magnet link cannot be generated directly. + In such cases, in order to get the magnet link, the target torrent page is retrieved via XHR : +initially the ML links will have as its destination(`href`) the current page's URL with a `#` in its end (e.g. `https://rarbg.to/torrents.php#` ) +and as you mouseover on any such ML icon, the following tooltip will be displayed: "`ML via XHR`", and the relevant target page will be retrieved via XHR in the background. +So at the time you click the ML icon (or just move the mouse away and re-mouseover), it will now have the magnet link. *(thanks for sxe [for the suggestion](https://greasyfork.org/en/forum/discussion/30691/x))*. From c1d69dc18845bac4cc7f9bc33537826e7dc22555 Mon Sep 17 00:00:00 2001 From: Marti Martz Date: Sat, 11 Nov 2017 16:45:36 -0700 Subject: [PATCH 024/490] A fix for OUJS A fix for you on this script. Presuming you still want `MIT`. Thanks. You will need to do this for every script. If you have a choice on different SPDX codes please see the Add new script page where the description of `@license` is fully documented. Ref: * OpenUserJS/OpenUserJS.org#1247 --- .../RARBG_-_torrent_and_magnet_links.user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js index 81d21e2..d7d842a 100644 --- a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js +++ b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js @@ -2,6 +2,7 @@ // @name RARBG - torrent and magnet links // @namespace darkred // @description Adds a column with torrent and magnet links in RARBG lists +// @license MIT // @include /^(https?:)?\/\/(www\.)?rarbg\.(to|com)\/(torrents\.php.*|catalog\/.*|top10)$/ // @version 2017.11.11 // @grant none @@ -89,4 +90,4 @@ for(let i=0; i < xhrMagnetLinks.length; i++) { }, false); -} \ No newline at end of file +} From dac40442f5e86e045f0a5b1616fde630a3cc8ec1 Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 12 Nov 2017 05:05:25 +0200 Subject: [PATCH 025/490] Added '@licence MIT' (required by OUJS, in order to allow import and autoupdate of scripts from GitHub) --- BugMeNot/BugMeNot.user.js | 3 +- ...See_Also_and_Duplicates_bug_titles.user.js | 3 +- ...top_-_list_fixed_bugs_in_Mercurial.user.js | 3 +- ...ugs_in_Mercurial_as_sortable_table.user.js | 7 +- ...ugs_in_Mercurial_as_sortable_table.user.js | 7 +- ...ore_submitting_issues_and_comments.user.js | 3 +- .../Google_youtube_search_link.user.js | 6 +- ...button_in_Greasyfork_profile_pages.user.js | 19 +- ...Greasyfork_profile_pages_-_for_Cik.user.js | 31 ++-- ..._scripts_by_review_type_and_author.user.js | 31 ++-- ...ork_-_filter_libraries_in_profiles.user.js | 13 +- .../GreasyFork_Bullshit_Filter.user.js | 33 ++-- ...lshit_Filter_-_for_TS_Citrus_Gfork.user.js | 40 ++-- ...Instagram_-_visible_images_counter.user.js | 3 +- .../Markdown_toolbar_for_redditcom.user.js | 171 +++++++++--------- ...he_same_album_in_the_Reviews_sectn.user.js | 5 +- ...s_column_split_and_sortable_tables.user.js | 3 +- ...nSubtitles_-_direct_download_links.user.js | 3 +- .../OpenUserJS_Bullshit_Filter.user.js | 5 +- ...rent_timestamps_to_relative_format.user.js | 3 +- .../RARBG_-_torrent_and_magnet_links.user.js | 3 +- .../Reddit_Infinite_Scrolling.user.js | 31 ++-- .../Rotten_Tomatoes_Decimal_Rating.user.js | 21 ++- ..._-_convert_dates_to_local_timezone.user.js | 3 +- ...tifications_count_in_the_tab_title.user.js | 31 +++- ...orums_-_insert_titles_to_bug_links.user.js | 5 +- ...ebay_-_add_a_sortable_Ratio_column.user.js | 3 +- .../thepiratebay_helper.user.js | 3 +- .../userstylesorg_css_highlighter.user.js | 2 +- 29 files changed, 270 insertions(+), 224 deletions(-) diff --git a/BugMeNot/BugMeNot.user.js b/BugMeNot/BugMeNot.user.js index 0e8c464..9f244b7 100644 --- a/BugMeNot/BugMeNot.user.js +++ b/BugMeNot/BugMeNot.user.js @@ -2,11 +2,12 @@ // @name BugMeNot // @namespace darkred // @authors hosts, Matt McCarthy, darkred +// @license MIT // @description It integrates BugMeNot into any login form (it retrieves all matching logins from bugmenot.com and autofills the login form) +// @version 2017.06.09 // @include http://* // @include https://* // @exclude http://bugmenot.com/* -// @version 2017.06.09 // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue diff --git a/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles.user.js b/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles.user.js index e88ee95..f4b4581 100644 --- a/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles.user.js +++ b/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles/Bugzilla_-_reveal_the_Depends,_Blocks,_See_Also_and_Duplicates_bug_titles.user.js @@ -1,11 +1,12 @@ īģŋ// ==UserScript== // @name Bugzilla - reveal the Depends, Blocks, See Also and Duplicates bug titles // @namespace darkred +// @license MIT // @description Reveal the Depends, Blocks, See Also and Duplicates bug titles in bugzilla.mozilla.org via keyboard shortcuts // @include https://bugzilla.mozilla.org/show_bug.cgi?id=* // @version 2017.3.7 // @grant none -// @require https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.2/jquery.scrollTo.min.js +// @require https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.2/jquery.scrollTo.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.3/keypress.min.js // ==/UserScript== diff --git a/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial.user.js b/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial.user.js index 7dc9f6f..3bfa5b5 100644 --- a/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial.user.js +++ b/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial.user.js @@ -2,10 +2,11 @@ // @name Firefox for desktop - list fixed bugs in Mercurial // @namespace darkred // @authors darkred, johnp +// @license MIT // @description It generates a list of fixed bugs related to Firefox for desktop in Mozilla Mercurial pushlogs -// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ // @version 4.2.2 // @date 2017.3.25 +// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_setClipboard diff --git a/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table.user.js b/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table.user.js index aa7a06c..8c233ce 100644 --- a/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table.user.js +++ b/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_fixed_bugs_in_Mercurial_as_sortable_table.user.js @@ -2,9 +2,13 @@ // @name Firefox for desktop - list fixed bugs in Mercurial as sortable table // @namespace darkred // @authors darkred, johnp +// @license MIT // @description It generates a sortable table list of fixed bugs related to Firefox for desktop in Mozilla Mercurial pushlogs // @version 5.5.4 // @date 2017.3.25 +// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ +// @grant GM_addStyle +// @grant GM_getResourceText // @require https://code.jquery.com/jquery-2.1.4.min.js // @require https://code.jquery.com/ui/1.11.4/jquery-ui.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.24.3/js/jquery.tablesorter.min.js @@ -13,9 +17,6 @@ // @require https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.3/keypress.min.js -// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ -// @grant GM_addStyle -// @grant GM_getResourceText // @resource customCSS http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css // ==/UserScript== diff --git a/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table.user.js b/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table.user.js index a21254b..7952841 100644 --- a/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table.user.js +++ b/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table/Firefox_for_desktop_-_list_modified_bugs_in_Mercurial_as_sortable_table.user.js @@ -2,9 +2,13 @@ // @name Firefox for desktop - list modified bugs in Mercurial as sortable table // @namespace darkred // @authors darkred, johnp +// @license MIT // @description It generates a sortable table list of bugs related to Firefox for desktop for which patches have landed in Mozilla Mercurial pushlogs // @version 5.5.4 // @date 2017.3.25 +// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ +// @grant GM_addStyle +// @grant GM_getResourceText // @require https://code.jquery.com/jquery-2.1.4.min.js // @require https://code.jquery.com/ui/1.11.4/jquery-ui.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.24.3/js/jquery.tablesorter.min.js @@ -13,9 +17,6 @@ // @require https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.3/keypress.min.js -// @include /^https?:\/\/hg\.mozilla\.org.*pushloghtml.*/ -// @grant GM_addStyle -// @grant GM_getResourceText // @resource customCSS http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css // ==/UserScript== diff --git a/GitHub_Confirmations_before_submitting_issues_and_comments/GitHub_Confirmations_before_submitting_issues_and_comments.user.js b/GitHub_Confirmations_before_submitting_issues_and_comments/GitHub_Confirmations_before_submitting_issues_and_comments.user.js index 07edf5e..effd4ad 100644 --- a/GitHub_Confirmations_before_submitting_issues_and_comments/GitHub_Confirmations_before_submitting_issues_and_comments.user.js +++ b/GitHub_Confirmations_before_submitting_issues_and_comments/GitHub_Confirmations_before_submitting_issues_and_comments.user.js @@ -2,9 +2,10 @@ // @name GitHub - Confirmations before submitting issues and comments // @namespace darkred // @author darkred +// @license MIT // @description Creates a confirmation popup whenever attempting to create an issue or post comment via Ctrl+Enter in GitHub -// @include https://github.com/* // @version 2017.4.26 +// @include https://github.com/* // @grant none // ==/UserScript== diff --git a/Google_youtube_search_link/Google_youtube_search_link.user.js b/Google_youtube_search_link/Google_youtube_search_link.user.js index b76fe81..b753dda 100644 --- a/Google_youtube_search_link/Google_youtube_search_link.user.js +++ b/Google_youtube_search_link/Google_youtube_search_link.user.js @@ -1,10 +1,10 @@ // ==UserScript== // @name Google YouTube search link +// @namespace darkred +// @author wOxxOm, darkred +// @license MIT // @description Adds a YouTube search link next to the Videos link (e.g. Web, Images, Videos, YouTube, News, Maps, Shopping, ...) // @version 2017.6.9 -// @author wOxxOm, darkred -// @namespace darkred -// @license MIT License // @include https://www.google.com/* // @include /https?:\/\/(www\.)?google\.(com|(?:com?\.)?\w\w)\/.*/ // @grant none diff --git a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js index 9b04018..d2103b7 100644 --- a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js +++ b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages.user.js @@ -1,13 +1,14 @@ // ==UserScript== -// @name GreasyFork - add a 'send PM to user' button in Greasyfork profile pages -// @namespace darkred -// @description It adds a 'send PM to user' button in Greasyfork profile pages -// @include https://greasyfork.org/*/users/* -// @include https://greasyfork.org/*/forum/messages/add -// @version 2016.11.4 -// @grant GM.getResourceUrl -// @resource icon http://i.imgur.com/ZU0xS0c.jpg -// @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js +// @name GreasyFork - add a 'send PM to user' button in Greasyfork profile pages +// @namespace darkred +// @license MIT +// @description It adds a 'send PM to user' button in Greasyfork profile pages +// @version 2016.11.4 +// @include https://greasyfork.org/*/users/* +// @include https://greasyfork.org/*/forum/messages/add +// @grant GM.getResourceUrl +// @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js +// @resource icon http://i.imgur.com/ZU0xS0c.jpg // ==/UserScript== if (window.location.href.indexOf('users') > -1 // if current URL is a profile page diff --git a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js index cba3e5e..a9b8c3c 100644 --- a/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js +++ b/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik/GreasyFork_-_add_a_send_PM_to_user_button_in_Greasyfork_profile_pages_-_for_Cik.user.js @@ -1,19 +1,20 @@ // ==UserScript== -// @name GreasyFork - add a 'send PM to user' button in Greasyfork profile pages - for Citrus GFork -// @namespace darkred -// @description It adds a 'send PM to user' button in Greasyfork profile pages -// @include https://greasyfork.org/*/users/* -// @include https://greasyfork.org/*/forum/messages/add -// @version 2017.11.4 -// @grant GM_getResourceURL -// @resource icon http://i.imgur.com/ZU0xS0c.jpg -// @run-at document-idle -// @require https://greasyfork.org/scripts/24818-bililiterange/code/bililiteRange.js -// @require https://code.jquery.com/jquery-3.1.1.min.js -// @require https://greasyfork.org/scripts/24819-jquery-simulate/code/jquery-simulate.js -// @require https://greasyfork.org/scripts/24820-jquery-simulate-ext/code/jquery-simulate-ext.js -// @require https://greasyfork.org/scripts/24822-jquery-simulate-key-sequence-js/code/jquerysimulatekey-sequencejs.js -// @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 +// @name GreasyFork - add a 'send PM to user' button in Greasyfork profile pages - for Citrus GFork +// @namespace darkred +// @license MIT +// @description It adds a 'send PM to user' button in Greasyfork profile pages +// @version 2017.11.4 +// @include https://greasyfork.org/*/users/* +// @include https://greasyfork.org/*/forum/messages/add +// @grant GM_getResourceURL +// @require https://greasyfork.org/scripts/24818-bililiterange/code/bililiteRange.js +// @require https://code.jquery.com/jquery-3.1.1.min.js +// @require https://greasyfork.org/scripts/24819-jquery-simulate/code/jquery-simulate.js +// @require https://greasyfork.org/scripts/24820-jquery-simulate-ext/code/jquery-simulate-ext.js +// @require https://greasyfork.org/scripts/24822-jquery-simulate-key-sequence-js/code/jquerysimulatekey-sequencejs.js +// @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 +// @resource icon http://i.imgur.com/ZU0xS0c.jpg +// @run-at document-idle // ==/UserScript== if (document.querySelector('.user-profile-link > a:nth-child(1)') !== null) { diff --git a/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author.user.js b/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author.user.js index 42e58b0..576e0f0 100644 --- a/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author.user.js +++ b/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author/GreasyFork_-_filter_discussions_on_scripts_by_review_type_and_author.user.js @@ -1,19 +1,20 @@ īģŋ// ==UserScript== -// @name GreasyFork - filter discussions on scripts by review type and author -// @namespace darkred -// @author darkred -// @contributor decembre -// @description Filter discussions on scripts by review type and author via filter buttons, a hoverable dropdown menu or an autocomplete searchbox -// @include https://greasyfork.org/*/scripts/*/feedback* -// @include https://greasyfork.org/*/users/* -// @version 2017.4.19 -// @grant GM_addStyle -// @grant GM_getValue -// @grant GM_setValue -// @grant GM_getResourceText -// @resource jquery-ui.css http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css -// @require https://code.jquery.com/jquery-3.1.1.min.js -// @require https://code.jquery.com/ui/1.12.1/jquery-ui.min.js +// @name GreasyFork - filter discussions on scripts by review type and author +// @namespace darkred +// @author darkred +// @contributor decembre +// @license MIT +// @description Filter discussions on scripts by review type and author via filter buttons, a hoverable dropdown menu or an autocomplete searchbox +// @version 2017.4.19 +// @include https://greasyfork.org/*/scripts/*/feedback* +// @include https://greasyfork.org/*/users/* +// @grant GM_addStyle +// @grant GM_getValue +// @grant GM_setValue +// @grant GM_getResourceText +// @require https://code.jquery.com/jquery-3.1.1.min.js +// @require https://code.jquery.com/ui/1.12.1/jquery-ui.min.js +// @resource jquery-ui.css http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css // This is partially based on this script (http://userscripts-mirror.org/scripts/show/97145) by kuehlschrank. // Thanks a lot to kuehlschrank for making another great script. // ==/UserScript== diff --git a/GreasyFork_-_filter_libraries_in_profiles/GreasyFork_-_filter_libraries_in_profiles.user.js b/GreasyFork_-_filter_libraries_in_profiles/GreasyFork_-_filter_libraries_in_profiles.user.js index 02eac76..07b5c51 100644 --- a/GreasyFork_-_filter_libraries_in_profiles/GreasyFork_-_filter_libraries_in_profiles.user.js +++ b/GreasyFork_-_filter_libraries_in_profiles/GreasyFork_-_filter_libraries_in_profiles.user.js @@ -1,10 +1,11 @@ īģŋ// ==UserScript== -// @name GreasyFork - filter libraries in profiles -// @namespace darkred -// @description Filters libraries in GreasyFork profiles -// @include https://greasyfork.org/*/users/* -// @version 1 -// @grant none +// @name GreasyFork - filter libraries in profiles +// @namespace darkred +// @license MIT +// @description Filters libraries in GreasyFork profiles +// @version 1 +// @include https://greasyfork.org/*/users/* +// @grant none // ==/UserScript== var all = document.querySelectorAll('article').length; diff --git a/GreasyFork_Bullshit_Filter/GreasyFork_Bullshit_Filter.user.js b/GreasyFork_Bullshit_Filter/GreasyFork_Bullshit_Filter.user.js index 3f1b716..762b66b 100644 --- a/GreasyFork_Bullshit_Filter/GreasyFork_Bullshit_Filter.user.js +++ b/GreasyFork_Bullshit_Filter/GreasyFork_Bullshit_Filter.user.js @@ -1,20 +1,21 @@ // ==UserScript== -// @name GreasyFork Bullshit Filter -// @namespace darkred -// @author kuehlschrank, darkred -// @description Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. Applies to posts in Forum too. -// @version 2017.5.18 -// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png -// @grant none -// @include https://greasyfork.org/*/scripts* -// @exclude /^https:\/\/greasyfork.org\/.*\/scripts\/\d+.*/ -// @exclude https://greasyfork.org/*/scripts/by-site -// @exclude https://greasyfork.org/*/scripts/by-site?* -// @include https://greasyfork.org/*/forum* -// @exclude https://greasyfork.org/*/forum/discussion/* -// @exclude https://greasyfork.org/*/forum/profile* -// @exclude https://greasyfork.org/*/forum/messages* -// @exclude https://greasyfork.org/*/forum/categories +// @name GreasyFork Bullshit Filter +// @namespace darkred +// @author kuehlschrank, darkred +// @license MIT +// @description Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. Applies to posts in Forum too. +// @version 2017.5.18 +// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png +// @include https://greasyfork.org/*/scripts* +// @exclude /^https:\/\/greasyfork.org\/.*\/scripts\/\d+.*/ +// @exclude https://greasyfork.org/*/scripts/by-site +// @exclude https://greasyfork.org/*/scripts/by-site?* +// @include https://greasyfork.org/*/forum* +// @exclude https://greasyfork.org/*/forum/discussion/* +// @exclude https://greasyfork.org/*/forum/profile* +// @exclude https://greasyfork.org/*/forum/messages* +// @exclude https://greasyfork.org/*/forum/categories +// @grant none // This is an edited version of this script (http://userscripts-mirror.org/scripts/show/97145) by kuehlschrank. // Thanks a lot to kuehlschrank for making another great script. // ==/UserScript== diff --git a/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork.user.js b/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork.user.js index 9d89dac..bc6dc31 100644 --- a/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork.user.js +++ b/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork/GreasyFork_Bullshit_Filter_-_for_TS_Citrus_Gfork.user.js @@ -1,20 +1,30 @@ // ==UserScript== -// @name GreasyFork Bullshit Filter - for TS Citrus Gfork -// @namespace darkred -// @author kuehlschrank, darkred -// @description Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. Applies to posts in Forum too. -// @version 2017.5.18 -// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png +// @name GreasyFork Bullshit Filter - for TS Citrus Gfork +// @namespace darkred +// @author kuehlschrank, darkred +// @license MIT +// @description Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. Applies to posts in Forum too. +// @version 2017.5.18 +// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png +// @include https://greasyfork.org/*/scripts* +// @exclude /^https:\/\/greasyfork.org\/.*\/scripts\/\d+.*/ +// @exclude https://greasyfork.org/*/scripts/by-site +// @exclude https://greasyfork.org/*/scripts/by-site?* +// @include https://greasyfork.org/*/forum* +// @exclude https://greasyfork.org/*/forum/discussion/* +// @exclude https://greasyfork.org/*/forum/profile* +// @exclude https://greasyfork.org/*/forum/messages* +// @exclude https://greasyfork.org/*/forum/categories +// @include https://sleazyfork.org/*/scripts* +// @exclude /^https:\/\/sleazyfork.org\/.*\/scripts\/\d+.*/ +// @exclude https://sleazyfork.org/*/scripts/by-site +// @exclude https://sleazyfork.org/*/scripts/by-site?* +// @include https://sleazyfork.org/*/forum* +// @exclude https://sleazyfork.org/*/forum/discussion/* +// @exclude https://sleazyfork.org/*/forum/profile* +// @exclude https://sleazyfork.org/*/forum/messages* +// @exclude https://sleazyfork.org/*/forum/categories // @grant none -// @include https://greasyfork.org/*/scripts* -// @exclude /^https:\/\/greasyfork.org\/.*\/scripts\/\d+.*/ -// @exclude https://greasyfork.org/*/scripts/by-site -// @exclude https://greasyfork.org/*/scripts/by-site?* -// @include https://greasyfork.org/*/forum* -// @exclude https://greasyfork.org/*/forum/discussion/* -// @exclude https://greasyfork.org/*/forum/profile* -// @exclude https://greasyfork.org/*/forum/messages* -// @exclude https://greasyfork.org/*/forum/categories // @run-at document-idle // This is an edited version of this script (http://userscripts-mirror.org/scripts/show/97145) by kuehlschrank. // Thanks a lot to kuehlschrank for making another great script. diff --git a/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js b/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js index 143ac31..5ab321f 100644 --- a/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js +++ b/Instagram_-_visible_images_counter/Instagram_-_visible_images_counter.user.js @@ -1,9 +1,10 @@ īģŋ// ==UserScript== // @name Instagram - visible images counter // @namespace darkred +// @license MIT // @description Shows (in instagram profile pages) how many images out of total (as a number and as a percentage) are currently visible, as you scroll down the page -// @include https://www.instagram.com/* // @version 2017.11.5 +// @include https://www.instagram.com/* // @grant GM_addStyle // @require https://code.jquery.com/jquery-3.2.1.min.js // @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 diff --git a/Markdown_toolbar_for_reddit.com/Markdown_toolbar_for_redditcom.user.js b/Markdown_toolbar_for_reddit.com/Markdown_toolbar_for_redditcom.user.js index bd546c8..53da19d 100644 --- a/Markdown_toolbar_for_reddit.com/Markdown_toolbar_for_redditcom.user.js +++ b/Markdown_toolbar_for_reddit.com/Markdown_toolbar_for_redditcom.user.js @@ -1,13 +1,14 @@ -īģŋ// ==UserScript== +// ==UserScript== // @name Markdown toolbar for reddit.com // @namespace darkred // @author wOxxOm, darkred +// @license MIT // @description Creates a Markdown toolbar whenever you make/edit text posts or comments in reddit.com. +// @version 1.3 // @include https://www.reddit.com/*submit* // @include https://www.reddit.com/*comments* -// @icon https://raw.githubusercontent.com/dcurtis/markdown-mark/master/png/66x40-solid.png -// @version 1.3 // @grant GM_addStyle +// @icon https://raw.githubusercontent.com/dcurtis/markdown-mark/master/png/66x40-solid.png // // // This is a modified version of the script "Markdown toolbar for GreasyFork and UserStyles.org" ()https://greasyfork.org/en/scripts/6779-markdown-toolbar-for-greasyfork-and-userstyles-org) @@ -20,18 +21,18 @@ var x; // IF IT'S A SUBMIT PAGE if (window.location.href.indexOf('submit') > - 1) { - // THEN ADD TOOLBAR TO THE 'NEW POST' TEXTBOX - x = document.querySelectorAll('div.md > textarea:nth-child(1)')[0].parentNode; - addFeatures(x); + // THEN ADD TOOLBAR TO THE 'NEW POST' TEXTBOX + x = document.querySelectorAll('div.md > textarea:nth-child(1)')[0].parentNode; + addFeatures(x); } else { - var textareas = document.querySelectorAll('textarea'); + var textareas = document.querySelectorAll('textarea'); - // ADD TOOLBAR: TO EDITING YOUR POST, TO 'NEW COMMENT' FORM AND TO EDITING YOUR EXISTING COMMENT(S) - for (i = 0; i < textareas.length - 2; i++) { - x = document.querySelectorAll('textarea') [i].parentNode; - addFeatures(x); - } + // ADD TOOLBAR: TO EDITING YOUR POST, TO 'NEW COMMENT' FORM AND TO EDITING YOUR EXISTING COMMENT(S) + for (i = 0; i < textareas.length - 2; i++) { + x = document.querySelectorAll('textarea') [i].parentNode; + addFeatures(x); + } } @@ -40,96 +41,96 @@ else { function addFeatures(n) { - n.parentNode.textAreaNode = x.firstChild; - - GM_addStyle('\ - .Button {\ - display: inline-block;\ - cursor: pointer;\ - margin: 0px;\ - font-size: 12px;\ - line-height: 1;\ - font-weight: bold;\ - padding: 4px 6px;\ - background: -moz-linear-gradient(center bottom , #CCC 0%, #FAFAFA 100%) repeat scroll 0% 0% #F8F8F8;\ - border: 1px solid #999;\ - border-radius: 2px;\ - white-space: nowrap;\ - text-shadow: 0px 1px 0px #FFF;\ - box-shadow: 0px 1px 0px #FFF inset, 0px -1px 2px #BBB inset;\ - color: #333;}'); - - - // add buttons - btnMake(n, 'B', 'Bold', '**'); - btnMake(n, 'I', 'Italic', '*'); - // btnMake(n, 'U', 'Underline', '',''); - // btnMake(n, 'S', 'Strikethrough', '',''); - btnMake(n, 'S', 'Strikethrough', '~~'); - btnMake(n, '^', 'Superscript', '^','', true); - btnMake(n, '\\n', 'Line break', ' \n', '', true); - btnMake(n, '---', 'Horizontal line', '\n\n---\n\n', '', true); - btnMake(n, 'URL', 'Add URL to selected text', - function(e) { - try {edWrapInTag('[', ']('+prompt('URL'+':')+')', edInit(e.target))} - catch(e) {}; - }); - // btnMake(n, 'Image', 'Convert selected https://url to inline image', '!['+'image'+'](', ')'); - btnMake(n, 'Table', 'Insert table template', '\n| head1 | head2 |\n|-------|-------|\n| cell1 | cell2 |\n| cell3 | cell4 |\n', '', true); - btnMake(n, 'Code', 'Apply CODE markdown to selected text', - function(e){ - var ed = edInit(e.target); - if (ed.sel.indexOf('\n') < 0) - edWrapInTag('`', '`', ed); - else - edWrapInTag(((ed.sel1==0) || (ed.text.charAt(ed.sel1-1) == '\n') ? '' : '\n') + '```' + (ed.sel.charAt(0) == '\n' ? '' : '\n'), - (ed.sel.substr(-1) == '\n' ? '' : '\n') + '```' + (ed.text.substr(ed.sel2,1) == '\n' ? '' : '\n'), - ed); - }); + n.parentNode.textAreaNode = x.firstChild; + + GM_addStyle('\ + .Button {\ + display: inline-block;\ + cursor: pointer;\ + margin: 0px;\ + font-size: 12px;\ + line-height: 1;\ + font-weight: bold;\ + padding: 4px 6px;\ + background: -moz-linear-gradient(center bottom , #CCC 0%, #FAFAFA 100%) repeat scroll 0% 0% #F8F8F8;\ + border: 1px solid #999;\ + border-radius: 2px;\ + white-space: nowrap;\ + text-shadow: 0px 1px 0px #FFF;\ + box-shadow: 0px 1px 0px #FFF inset, 0px -1px 2px #BBB inset;\ + color: #333;}'); + + + // add buttons + btnMake(n, 'B', 'Bold', '**'); + btnMake(n, 'I', 'Italic', '*'); + // btnMake(n, 'U', 'Underline', '',''); + // btnMake(n, 'S', 'Strikethrough', '',''); + btnMake(n, 'S', 'Strikethrough', '~~'); + btnMake(n, '^', 'Superscript', '^','', true); + btnMake(n, '\\n', 'Line break', ' \n', '', true); + btnMake(n, '---', 'Horizontal line', '\n\n---\n\n', '', true); + btnMake(n, 'URL', 'Add URL to selected text', + function(e) { + try {edWrapInTag('[', ']('+prompt('URL'+':')+')', edInit(e.target));} + catch(e) {} + }); + // btnMake(n, 'Image', 'Convert selected https://url to inline image', '!['+'image'+'](', ')'); + btnMake(n, 'Table', 'Insert table template', '\n| head1 | head2 |\n|-------|-------|\n| cell1 | cell2 |\n| cell3 | cell4 |\n', '', true); + btnMake(n, 'Code', 'Apply CODE markdown to selected text', + function(e){ + var ed = edInit(e.target); + if (ed.sel.indexOf('\n') < 0) + edWrapInTag('`', '`', ed); + else + edWrapInTag(((ed.sel1==0) || (ed.text.charAt(ed.sel1-1) == '\n') ? '' : '\n') + '```' + (ed.sel.charAt(0) == '\n' ? '' : '\n'), + (ed.sel.substr(-1) == '\n' ? '' : '\n') + '```' + (ed.text.substr(ed.sel2,1) == '\n' ? '' : '\n'), + ed); + }); } function btnMake(afterNode, label, title, tag1, tag2, noWrap) { - var a = document.createElement('a'); - a.className = 'Button'; - a.innerHTML = label; - a.title = title; - a.style.setProperty('float','right'); - - a.addEventListener('click', - typeof(tag1) == 'function' - ? tag1 - : noWrap ? function(e){edInsertText(tag1, edInit(e.target))} - : function(e){edWrapInTag(tag1, tag2, edInit(e.target))}); - - var nparent = afterNode.parentNode; - a.textAreaNode = nparent.textAreaNode; - nparent.insertBefore(a, nparent.firstElementChild); + var a = document.createElement('a'); + a.className = 'Button'; + a.innerHTML = label; + a.title = title; + a.style.setProperty('float','right'); + + a.addEventListener('click', + typeof(tag1) === 'function' + ? tag1 + : noWrap ? function(e){edInsertText(tag1, edInit(e.target));} + : function(e){edWrapInTag(tag1, tag2, edInit(e.target));}); + + var nparent = afterNode.parentNode; + a.textAreaNode = nparent.textAreaNode; + nparent.insertBefore(a, nparent.firstElementChild); } function edInit(btn) { - var ed = {node: btn.parentNode.textAreaNode } ; + var ed = {node: btn.parentNode.textAreaNode } ; - ed.sel1 = ed.node.selectionStart; - ed.sel2 = ed.node.selectionEnd, - ed.text = ed.node.value; - ed.sel = ed.text.substring(ed.sel1, ed.sel2); - return ed; + ed.sel1 = ed.node.selectionStart; + ed.sel2 = ed.node.selectionEnd, + ed.text = ed.node.value; + ed.sel = ed.text.substring(ed.sel1, ed.sel2); + return ed; } function edWrapInTag(tag1, tag2, ed) { - ed.node.value = ed.text.substr(0, ed.sel1) + tag1 + ed.sel + (tag2?tag2:tag1) + ed.text.substr(ed.sel2); - ed.node.setSelectionRange(ed.sel1 + tag1.length, ed.sel1 + tag1.length + ed.sel.length); - ed.node.focus(); + ed.node.value = ed.text.substr(0, ed.sel1) + tag1 + ed.sel + (tag2?tag2:tag1) + ed.text.substr(ed.sel2); + ed.node.setSelectionRange(ed.sel1 + tag1.length, ed.sel1 + tag1.length + ed.sel.length); + ed.node.focus(); } function edInsertText(text, ed) { - ed.node.value = ed.text.substr(0, ed.sel2) + text + ed.text.substr(ed.sel2); - ed.node.setSelectionRange(ed.sel2 + text.length, ed.sel2 + text.length); - ed.node.focus(); + ed.node.value = ed.text.substr(0, ed.sel2) + text + ed.text.substr(ed.sel2); + ed.node.setSelectionRange(ed.sel2 + text.length, ed.sel2 + text.length); + ed.node.focus(); } \ No newline at end of file diff --git a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js b/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js index 85eb050..d62cdcd 100644 --- a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js +++ b/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js @@ -1,12 +1,13 @@ // ==UserScript== // @name Metal Archives - group together entries for the same album in the Reviews section // @namespace darkred +// @license MIT // @description Groups together entries for the same album in the Reviews section -// @include http://www.metal-archives.com/review/browse* // @version 1 +// @include http://www.metal-archives.com/review/browse* // @grant GM_addStyle -// @run-at document-idle // @require https://code.jquery.com/jquery-3.1.1.min.js +// @run-at document-idle // ==/UserScript== diff --git a/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js b/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js index df7787e..1b6b22d 100644 --- a/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js +++ b/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables/Metal_Archives_discography_pages_-_Reviews_column_split_and_sortable_tables.user.js @@ -2,10 +2,11 @@ // @name Metal Archives discography pages - Reviews column split and sortable tables // @namespace darkred // @author RobG, Brock Adams, Mottie, darkred +// @license MIT // @description Splits the Reviews column into Reviews(count) and Ratings and makes the tables in all discography tabs sortable. -// @include /^https?:\/\/www\.metal-archives\.com/bands?/.*$/ // @version 2.0.1 // @date 2017.6.11 +// @include /^https?:\/\/www\.metal-archives\.com/bands?/.*$/ // @grant none // @require https://greasyfork.org/scripts/12036-mutation-summary/code/Mutation%20Summary.js?version=70722 // @require https://greasyfork.org/scripts/5844-tablesorter/code/TableSorter.js?version=21758 diff --git a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js index 3cd84ed..d491cc1 100644 --- a/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js +++ b/OpenSubtitles_-_direct_download_links/OpenSubtitles_-_direct_download_links.user.js @@ -1,10 +1,11 @@ // ==UserScript== // @name OpenSubtitles - direct download links // @namespace darkred +// @license MIT // @description Converts the subtitles download links to direct ones, in order to avoid redirection to download pages that display ads. +// @version 2017.11.6 // @include https://www.opensubtitles.org/*/search/* // @include https://www.opensubtitles.org/*/subtitles/* -// @version 2017.11.6 // @grant none // ==/UserScript== diff --git a/OpenUserJS_Bullshit_Filter/OpenUserJS_Bullshit_Filter.user.js b/OpenUserJS_Bullshit_Filter/OpenUserJS_Bullshit_Filter.user.js index 47bc990..c659106 100644 --- a/OpenUserJS_Bullshit_Filter/OpenUserJS_Bullshit_Filter.user.js +++ b/OpenUserJS_Bullshit_Filter/OpenUserJS_Bullshit_Filter.user.js @@ -2,13 +2,14 @@ // @name OpenUserJS Bullshit Filter // @namespace darkred // @author kuehlschrank, darkred +// @license MIT // @description Hides scripts for popular browser games and social networks as well as scripts that use "foreign" characters in descriptions. // @version 1.2.3 -// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png -// @grant none // @include https://openuserjs.org/ // @include https://openuserjs.org/?*p=* // @include https://openuserjs.org/?*q=* +// @grant none +// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png // This is an edited version of this script (http://userscripts-mirror.org/scripts/show/97145) by kuehlschrank. // Thanks a lot to kuehlschrank for making another great script. // ==/UserScript== diff --git a/RARBG_-_convert_torrent_timestamps_to_relative_format/RARBG_-_convert_torrent_timestamps_to_relative_format.user.js b/RARBG_-_convert_torrent_timestamps_to_relative_format/RARBG_-_convert_torrent_timestamps_to_relative_format.user.js index 82042c6..4889f1e 100644 --- a/RARBG_-_convert_torrent_timestamps_to_relative_format/RARBG_-_convert_torrent_timestamps_to_relative_format.user.js +++ b/RARBG_-_convert_torrent_timestamps_to_relative_format/RARBG_-_convert_torrent_timestamps_to_relative_format.user.js @@ -1,10 +1,11 @@ // ==UserScript== // @name RARBG - convert torrent timestamps to relative format // @namespace darkred +// @license MIT // @description Converts torrent upload timestamps to relative format +// @version 2017.2.15 // @include /^https?:\/\/(www\.)?rarbg\.(to|com)\/torrents.php.*/ // @include /^https?:\/\/(www\.)?rarbg\.(to|com)\/top10$/ -// @version 2017.2.15 // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.6/moment-timezone-with-data-2010-2020.js diff --git a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js index 81d21e2..f6ebc75 100644 --- a/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js +++ b/RARBG_-_torrent_and_magnet_links/RARBG_-_torrent_and_magnet_links.user.js @@ -1,9 +1,10 @@ // ==UserScript== // @name RARBG - torrent and magnet links // @namespace darkred +// @license MIT // @description Adds a column with torrent and magnet links in RARBG lists -// @include /^(https?:)?\/\/(www\.)?rarbg\.(to|com)\/(torrents\.php.*|catalog\/.*|top10)$/ // @version 2017.11.11 +// @include /^(https?:)?\/\/(www\.)?rarbg\.(to|com)\/(torrents\.php.*|catalog\/.*|top10)$/ // @grant none // ==/UserScript== diff --git a/Reddit_Infinite_Scrolling/Reddit_Infinite_Scrolling.user.js b/Reddit_Infinite_Scrolling/Reddit_Infinite_Scrolling.user.js index c7a1c1d..4cb2beb 100644 --- a/Reddit_Infinite_Scrolling/Reddit_Infinite_Scrolling.user.js +++ b/Reddit_Infinite_Scrolling/Reddit_Infinite_Scrolling.user.js @@ -2,9 +2,10 @@ // @name Reddit Infinite Scrolling // @namespace darkred // @author darkred +// @license MIT // @description Adds infinite scrolling to subreddits and to comments. -// @include https://www.reddit.com/* // @version 2015.12.14 +// @include https://www.reddit.com/* // @grant unsafeWindow // @require http://code.jquery.com/jquery-2.1.4.min.js // @require https://greasyfork.org/scripts/11636-jscroll/code/jScroll.js?version=67302 @@ -12,22 +13,22 @@ // Jscroll code $('#siteTable').jscroll({ - nextSelector: 'span.nextprev a:last', - contentSelector: '#siteTable .thing, .nav-buttons', - callback: function () { - $('.nav-buttons').remove(); - } + nextSelector: 'span.nextprev a:last', + contentSelector: '#siteTable .thing, .nav-buttons', + callback: function() { + $('.nav-buttons').remove(); + } }); //if current URL contains the string 'comments', then click the 'more comments' button when scrolling at the end of the page if (/(.*comments.*)/.test(document.location)) { - $(window).scroll(function () { - if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) { - // console.log('bottom!'); - var element = unsafeWindow.document.getElementsByClassName('morecomments'); - var last = element.length; - element[last - 1].firstChild.click(); - } - }); -} + $(window).scroll(function() { + if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) { + // console.log('bottom!'); + var element = unsafeWindow.document.getElementsByClassName('morecomments'); + var last = element.length; + element[last - 1].firstChild.click(); + } + }); +} \ No newline at end of file diff --git a/Rotten_Tomatoes_Decimal_Rating/Rotten_Tomatoes_Decimal_Rating.user.js b/Rotten_Tomatoes_Decimal_Rating/Rotten_Tomatoes_Decimal_Rating.user.js index 39825c5..cc024f9 100644 --- a/Rotten_Tomatoes_Decimal_Rating/Rotten_Tomatoes_Decimal_Rating.user.js +++ b/Rotten_Tomatoes_Decimal_Rating/Rotten_Tomatoes_Decimal_Rating.user.js @@ -1,14 +1,15 @@ īģŋ// ==UserScript== -// @name Rotten Tomatoes Decimal Rating -// @author wOxxOm -// @description Changes base-5 Rating of Rotten Tomatoes to base-10 -// @include http://www.rottentomatoes.com/* -// @include https://www.rottentomatoes.com/* -// @grant none -// @version 3.0.1 -// @run-at document-start -// @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js -// @namespace https://greasyfork.org/users/2160 +// @name Rotten Tomatoes Decimal Rating +// @namespace darkred +// @author wOxxOm +// @license MIT +// @description Changes base-5 Rating of Rotten Tomatoes to base-10 +// @version 3.0.1 +// @include http://www.rottentomatoes.com/* +// @include https://www.rottentomatoes.com/* +// @grant none +// @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js +// @run-at document-start // ==/UserScript== /* --------- Note --------- This script changes the Base 5 rating of Rotten Tomatoes to Base 10. diff --git a/StackExchange_sites_-_convert_dates_to_local_timezone/StackExchange_sites_-_convert_dates_to_local_timezone.user.js b/StackExchange_sites_-_convert_dates_to_local_timezone/StackExchange_sites_-_convert_dates_to_local_timezone.user.js index 797bbd2..be76136 100644 --- a/StackExchange_sites_-_convert_dates_to_local_timezone/StackExchange_sites_-_convert_dates_to_local_timezone.user.js +++ b/StackExchange_sites_-_convert_dates_to_local_timezone/StackExchange_sites_-_convert_dates_to_local_timezone.user.js @@ -1,7 +1,9 @@ // ==UserScript== // @name StackExchange sites - convert dates to local timezone // @namespace darkred +// @license MIT // @description Converts dates to your local timezone +// @version 2016.10.16 // @match *://*.stackoverflow.com/* // @match *://*.stackexchange.com/* // @match *://*.superuser.com/* @@ -9,7 +11,6 @@ // @match *://*.askubuntu.com/* // @match *://*.mathoverflow.net/* // @match *://*.serverfault.com/* -// @version 2016.10.16 // @grant none // @require http://momentjs.com/downloads/moment.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.6/moment-timezone-with-data-2010-2020.js diff --git a/Twitter_-_add_unread_notifications_count_in_the_tab_title/Twitter_-_add_unread_notifications_count_in_the_tab_title.user.js b/Twitter_-_add_unread_notifications_count_in_the_tab_title/Twitter_-_add_unread_notifications_count_in_the_tab_title.user.js index c0b6ab7..bcaf360 100644 --- a/Twitter_-_add_unread_notifications_count_in_the_tab_title/Twitter_-_add_unread_notifications_count_in_the_tab_title.user.js +++ b/Twitter_-_add_unread_notifications_count_in_the_tab_title/Twitter_-_add_unread_notifications_count_in_the_tab_title.user.js @@ -2,30 +2,40 @@ // @name Twitter - add unread notifications count in the tab title // @namespace darkred // @author darkred +// @license MIT // @description Adds unread notifications count in the tab title +// @version 2017.07.13 // @include https://twitter.com/* -// @version 2017.02.07 // @grant none // @require https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js?version=139586 // ==/UserScript== -var counter; + +// .count > .count-inner +// Notifications counter + +// .dm-new > .count-inner +// DM counter + + +var notificationsCounter; function addCounterInTitle() { // alert(0); - counter = parseInt(document.querySelector('.count-inner').innerHTML); // the Notifications counter value + // counter = parseInt(document.querySelector('.count-inner').innerHTML); // the Notifications counter value + notificationsCounter = parseInt(document.querySelector('.count > .count-inner').innerHTML); // the Notifications counter value // if (counter > 0 && document.title.indexOf('|') > 3) { // if the '|' symbol is the default separator of username and 'Twitter' when viewing profiles, e.g.: Twitter Support (@Support) | Twitter. In here the position of `|` is 27. - if (counter > 0) { // if the '|' symbol is the default separator of username and 'Twitter' when viewing profiles, e.g.: Twitter Support (@Support) | Twitter. In here the position of `|` is 27. + if (notificationsCounter > 0) { // if the '|' symbol is the default separator of username and 'Twitter' when viewing profiles, e.g.: Twitter Support (@Support) | Twitter. In here the position of `|` is 27. if (/[0-9]+\ \|\ .*/.test(document.title)){ // if our counter is already added to title var defaultTitle = document.title.match(/[0-9]+\ \|\ (.*)/)[1]; - document.title = counter + ' | ' + defaultTitle; + document.title = notificationsCounter + ' | ' + defaultTitle; return; } else { - document.title = counter + ' | ' + document.title; // add the counter to the title + document.title = notificationsCounter + ' | ' + document.title; // add the counter to the title return; } - } else if (counter === 0) { + } else if (notificationsCounter === 0) { document.title = /[0-9]+\ \|\ (.*)/g.exec(document.title)[1]; // remove title's added counter } } @@ -62,8 +72,9 @@ document.leave('.new-tweets-bar', function () { // Whenever viewing the 'Notifications' tab document.arrive('.NotificationsHeadingContent', function () { - document.querySelector('.count-inner').innerHTML = 0; // ..reset the counter.. - counter = 0; + // document.querySelector('.count-inner').innerHTML = 0; // ..reset the counter.. + document.querySelector('.count > .count-inner').innerHTML = 0; // ..reset the counter.. + notificationsCounter = 0; document.title = document.title.match(/[0-9]+\ \|\ (.*)/)[1]; // ..and the tab title }); @@ -86,7 +97,7 @@ observer2.observe(target2, config2); function resetCounter(){ // document.querySelector('.new-count').className = 'count'; - counter = 0; + notificationsCounter = 0; document.querySelector('.count-inner').innerHTML = ''; document.title = /[0-9]+\ \|\ (.*)/g.exec(document.title)[1]; } diff --git a/mozillaZine_Forums_-_insert_titles_to_bug_links/mozillaZine_Forums_-_insert_titles_to_bug_links.user.js b/mozillaZine_Forums_-_insert_titles_to_bug_links/mozillaZine_Forums_-_insert_titles_to_bug_links.user.js index 2feef1f..6c9dd9b 100644 --- a/mozillaZine_Forums_-_insert_titles_to_bug_links/mozillaZine_Forums_-_insert_titles_to_bug_links.user.js +++ b/mozillaZine_Forums_-_insert_titles_to_bug_links/mozillaZine_Forums_-_insert_titles_to_bug_links.user.js @@ -2,9 +2,10 @@ // @name mozillaZine Forums - insert titles to bug links // @namespace darkred // @author darkred, johnp_ +// @license MIT // @description Inserts titles to bug links that are plain URLs, in forums.mozillazine.org -// @include http://forums.mozillazine.org/viewtopic.php* // @version 2016.11.25 +// @include http://forums.mozillazine.org/viewtopic.php* // @grant GM_xmlhttpRequest // @grant GM_getResourceURL // @require https://code.jquery.com/jquery-2.1.4.min.js @@ -183,7 +184,7 @@ $.getJSON(rest_url, function(data) { links[z].previousSibling.textContent += temp[1] + ' '; } links[z].innerHTML = bugCodes[yy] + ' - ' + bugTitles[yy] + temp2[1]; - + break loop2; } diff --git a/thepiratebay_-_add_a_sortable_Ratio_column/thepiratebay_-_add_a_sortable_Ratio_column.user.js b/thepiratebay_-_add_a_sortable_Ratio_column/thepiratebay_-_add_a_sortable_Ratio_column.user.js index dda12b6..90ef4a6 100644 --- a/thepiratebay_-_add_a_sortable_Ratio_column/thepiratebay_-_add_a_sortable_Ratio_column.user.js +++ b/thepiratebay_-_add_a_sortable_Ratio_column/thepiratebay_-_add_a_sortable_Ratio_column.user.js @@ -2,7 +2,9 @@ // @name thepiratebay - add a sortable Ratio column // @namespace darkred // @author darkred +// @license MIT // @description Adds a sortable "Ratio" column +// @version 1.2.3 // @include https://thepiratebay.org/search/* // @include https://thepiratebay.org/browse/* // @include https://thepiratebay.org/recent @@ -10,7 +12,6 @@ // @include https://thepiratebay.org/tv/ // @include https://thepiratebay.org/music // @include https://thepiratebay.org/top -// @version 1.2.3 // @grant none // @require https://greasyfork.org/scripts/5844-tablesorter/code/TableSorter.js?version=21758 // This userscript uses jQuery and it's plugin "tablesorter" (forked by Rob Garrison (Mottie)) http://mottie.github.io/tablesorter/docs/index.html diff --git a/thepiratebay_helper/thepiratebay_helper.user.js b/thepiratebay_helper/thepiratebay_helper.user.js index 50c20a5..3fc5250 100644 --- a/thepiratebay_helper/thepiratebay_helper.user.js +++ b/thepiratebay_helper/thepiratebay_helper.user.js @@ -2,17 +2,18 @@ // @name thepiratebay helper // @namespace darkred // @authors emptyparad0x, darkred +// @license MIT // @description Converts dates to local timezone on thepiratebay and optionally either highlight VIP/Trusted/Moderator/Helper torrents or hide non verified torrents altogether // @version 0.9.6l // @date 2017.6.21 // @include /^https?://thepiratebay\.(org|se|gd|la|mn|vg)/(search|browse|user|recent|torrent|tv|music|top).*$/ // @grant none -// @run-at document-idle // @require https://code.jquery.com/jquery-3.2.0.min.js // @require https://greasyfork.org/scripts/28536-gm-config/code/GM_config.js // @require https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.4/keypress.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.28.5/js/jquery.tablesorter.min.js +// @run-at document-idle // ==/UserScript== /* global $:false, GM_config, moment */ diff --git a/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js index ca5dab8..a47bb91 100644 --- a/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js +++ b/userstyles.org_css_highlighter/userstylesorg_css_highlighter.user.js @@ -2,11 +2,11 @@ // @name userstyles.org css highlighter // @namespace trespassersW // @version 2017.10.21 +// @license MIT // @description Formats and highlights CSS code shown after [Show CSS] clicking. (works with the new userstyles.org layout). // @author trespassersW // @contributor darkred // -// @license MIT License // @released 2013-11-20 // @updated 2017-10-20 // From b0d5112523ac55bda4a248c938d4cc7cb1ac7b17 Mon Sep 17 00:00:00 2001 From: darkred Date: Sun, 12 Nov 2017 05:51:19 +0200 Subject: [PATCH 026/490] Added '@licence MIT' (required by OUJS, in order to allow import and autoupdate of scripts from GitHub) --- .../Userstyles_Bullshit_Filter.user.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Userstyles_Bullshit_Filter/Userstyles_Bullshit_Filter.user.js b/Userstyles_Bullshit_Filter/Userstyles_Bullshit_Filter.user.js index 139ac13..db123df 100644 --- a/Userstyles_Bullshit_Filter/Userstyles_Bullshit_Filter.user.js +++ b/Userstyles_Bullshit_Filter/Userstyles_Bullshit_Filter.user.js @@ -2,13 +2,14 @@ // @name Userstyles Bullshit Filter // @namespace darkred // @author kuehlschrank, darkred +// @license MIT // @description Hides styles for popular browser games and social networks, styles that use "foreign" characters in descriptions as well as styles that have no screenshots. // @version 1.1 -// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png +// @include https://userstyles.org/styles/browse* // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue -// @include https://userstyles.org/styles/browse* +// @icon https://s3.amazonaws.com/uso_ss/icon/97145/large.png // This is an edited version of this script (http://userscripts-mirror.org/scripts/show/97145) by kuehlschrank. // Thanks a lot to kuehlschrank for making another great script. // ==/UserScript== From b59d05293b57ad3416ca36ff4e8ddc2f6e27252b Mon Sep 17 00:00:00 2001 From: darkred Date: Mon, 13 Nov 2017 01:55:02 +0200 Subject: [PATCH 027/490] (Metal Archives - group together entries for the same album in the Reviews section) Script is removed. --- ...he_same_album_in_the_Reviews_sectn.user.js | 112 ------------------ .../README.md | 23 ---- .../jquery-3.1.1.min.js | 4 - 3 files changed, 139 deletions(-) delete mode 100644 Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js delete mode 100644 Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/README.md delete mode 100644 Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/jquery-3.1.1.min.js diff --git a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js b/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js deleted file mode 100644 index d62cdcd..0000000 --- a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn.user.js +++ /dev/null @@ -1,112 +0,0 @@ -// ==UserScript== -// @name Metal Archives - group together entries for the same album in the Reviews section -// @namespace darkred -// @license MIT -// @description Groups together entries for the same album in the Reviews section -// @version 1 -// @include http://www.metal-archives.com/review/browse* -// @grant GM_addStyle -// @require https://code.jquery.com/jquery-3.1.1.min.js -// @run-at document-idle -// ==/UserScript== - - -function groupRatings(){ - - var allAlbumTitlesRefs = $('#reviewList > tbody > tr > td:nth-child(3)'), - AllBandRefs = $('#reviewList > tbody > tr > td:nth-child(2)'), - duplicateTitles = [], - bandAndAlbums = []; - - - $(allAlbumTitlesRefs).each(function(index, el) { - let bandAndTitleTemp = AllBandRefs[index].textContent + '|' + allAlbumTitlesRefs[index].textContent; - bandAndAlbums.push(bandAndTitleTemp); - }); - - var bandAndAlbumsUnique = []; - $.each(bandAndAlbums, function(index, val) { - if (bandAndAlbumsUnique.indexOf(val) === -1){ - bandAndAlbumsUnique.push(val); - } else { - if (duplicateTitles.indexOf(val) === -1){ - duplicateTitles.push(val); - } - } - }); - - - - - - $.each(duplicateTitles, function(index, el) { - - var regex = /(.*)\|(.*)/; - var band = el.match(regex)[1]; - var album = el.match(regex)[2]; - - var toDelete = $(`tbody > tr > td:nth-child(2)`).filter(`:contains("` + band + `")`); - toDelete = $(toDelete).next().filter(`:contains("` + album + `")`); - toDelete = $(toDelete).parent(); - - var ratings = []; - - - $.each($(toDelete), function(index, el) { - ratings.push(parseInt($(el).children(':nth-child(4)').html().replace('%', ''))); - }); - - var sum = 0; - $.each(ratings, function(index, val) { - sum += parseInt(val, 10); - }); - var avg = sum/ratings.length; - avg = Math.round(avg); - - // $(toDelete).first().children(':nth-child(4)').html(avg + '%~ (' + ratings.length + ')'); - $(toDelete).first().children(':nth-child(4)').html(avg + '%~ '); - - $(toDelete).first().children(':nth-child(5)').html('(' + ratings.length + ' authors)'); - $(toDelete).first().children(':nth-child(5)').css('color', '#A2787a'); - - - - toDelete = toDelete.not($(toDelete).first()); - $.each($(toDelete), function(index, el) { - $(el).remove(); - }); - - }); - - - - -} - - -// selector for the Rating column (4th column) -// GM_addStyle('#reviewList > tbody > tr > td:nth-child(4) {width: 70px;}'); -// GM_addStyle('#reviewList > tbody > tr > td:nth-child(4) {width: 44px;}'); - - - - -const target = document.querySelector('#reviewList'), - observer = new MutationObserver((mutations) => { - - observer.disconnect(); - - groupRatings(); - - // Update entries count (substracting the removed duplicate entries) to the navigation buttons located to the start and to the end of the Reviews list - var a = $('#reviewList_info'); - var entries = $('#reviewList > tbody > tr > td:nth-child(3) > A').length; - $(a).html($(a).text().replace('of', '(' + entries + ')' )); - a = $('div.dataTables_info:nth-child(7)'); - $(a).html($(a).text().replace('of', '(' + entries + ')' )); - - observer.observe(target, config); - - }), - config = {childList: true}; -observer.observe(target, config); diff --git a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/README.md b/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/README.md deleted file mode 100644 index c373e39..0000000 --- a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/README.md +++ /dev/null @@ -1,23 +0,0 @@ -This userscript applies to metal-archives.com(Metal Archives), in the [Review section](http://www.metal-archives.com/review/browse/by/rating). - - -As per request here: [Improving the Display of the Review Section](http://www.metal-archives.com/board/viewtopic.php?f=3&t=111286&sid=1f8d52b324bbe9ce10fb5cc6090eb204) - -The script: -- groups all reviews for the same album in one entry, -- changes the relevant value in the Authors column to e.g. `(2 authors)`, -- replaces the Rating percentage of the entries, with the average of them all, -- updates the entries count of the displayed Review entries list (i.e. after removing the duplicate entries) -to the navigation buttons located to the start and to the end of the list, and -- works when changing Review pages or after switching the pages 'tabs' (`DATE`, `RATING`, `ALPHA`). - - - Screenshots - Before: -[![](https://i.imgur.com/TQ70ilBl.jpg)](https://i.imgur.com/TQ70ilB.jpg) - -After: -[![](https://i.imgur.com/rjZvCf3l.jpg)](https://i.imgur.com/rjZvCf3.jpg) - - -*Tested in Greasemonkey.* \ No newline at end of file diff --git a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/jquery-3.1.1.min.js b/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/jquery-3.1.1.min.js deleted file mode 100644 index 4c5be4c..0000000 --- a/Metal_Archives_-_group_together_entries_for_the_same_album_in_the_Reviews_sectn/jquery-3.1.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), -a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), -void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("