diff --git a/itad_importer.user.coffee b/itad_importer.user.coffee
index 1d5b176..f98394a 100644
--- a/itad_importer.user.coffee
+++ b/itad_importer.user.coffee
@@ -15,6 +15,8 @@
// @match *://www.flyingbundle.com/users/account*
// @match *://www.gog.com/account*
// @match *://www.gog.com/order/status/*
+// @match *://itch.io/my-purchases*
+// @match *://*.itch.io/*
// @match *://groupees.com/purchases*
// @match *://groupees.com/users/*
// @match *://www.humblebundle.com/home*
@@ -60,11 +62,38 @@ this.$ = this.jQuery = jQuery.noConflict(true)
# Less overhead than instantiating a new jQuery object
attr = (node, name) -> node.getAttribute(name)
+#from http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter
+
+romanise_numbers = (elem) ->
+ elem = elem.replace(/1/g,"i")
+ elem = elem.replace(/2/g,"ii")
+ elem = elem.replace(/3/g,"iii")
+ elem = elem.replace(/4/g,"iv")
+ elem = elem.replace(/5/g,"v")
+ elem = elem.replace(/6/g,"vi")
+ elem = elem.replace(/7/g,"vii")
+ elem = elem.replace(/8/g,"viii")
+ elem = elem.replace(/9/g,"ix")
+ elem = elem.replace(/9/g,"ix")
+
+
gog_prepare_title = (elem) ->
dom = $('.product-title', elem).clone()
$('._product-flag', dom).remove()
dom.text()
+itch_plain = (elem) ->
+ elem.toLowerCase();
+
+title_plain = (elem) ->
+ plain = elem;
+ plain = plain.toLowerCase()
+ plain = plain.replace(/\bthe\b/g,"")
+ plain = plain.replace(/ & /g," and ")
+ plain = plain.replace(" ","")
+ plain = plain.replace(/[\s\.\!@"#$%^&'*\(\)\-:_+=;,\?]/g,"")
+ return romanise_numbers(plain);
+
humble_make_button = ->
# Humble Library uses very weird button markup
label = $('').html(BUTTON_LABEL)
@@ -238,6 +267,83 @@ scrapers =
.html(BUTTON_LABEL + " (This Page)")
.prependTo($('.collection-header').filter(':first'))
+ 'itch.io':
+# '^https?://itch\\.io/my-purchases':
+# 'source_id': 'itchio'
+# 'game_list': ->
+# old_date=0
+# new_date=null
+# console.debug("game_list called for itch.io collection page")
+# {
+# # new_date=0
+# "version": "02",
+# "data": {
+# # id: attr(x, 'gog-account-product')
+# #.attr('title').trim()
+# title: $('.title.game_link',x).first().text().trim()
+# copies: [{
+# new_date: new Date($('span',$('.date_header',x)).first().attr('title')).getTime()/1000
+# #if (new_date == null)
+# # new_date=o
+# added: new Date($('span',$('.date_header',x)).first().attr('title')).getTime()/1000
+# type: 'itchio',
+# status: 'redeemed',
+# owned: 1,
+# }]
+# } for x in $('.game_cell')
+# }
+#
+# 'insert_button': ->
+# console.debug("insert_button called for itch.io collection page")
+# $("")
+# .css
+# float: 'right'
+# cursor: 'pointer'
+# # TODO: Replace the following hacks with whatever GOG uses
+# position: 'relative'
+# marginBottom: '-2em'
+# zIndex: 1
+# .html(BUTTON_LABEL + " (This Page)")
+# .appendTo($('.header_tabs').filter(':first'))
+
+ '^https?://.+\\.itch\\.io/.+/download/.+':
+# '^https?://itch\\.io/my-purchases':
+ 'source_id': 'itchio'
+ 'game_list': ->
+ console.debug("game_list called for itch.io download page")
+ {
+ "version": "02",
+ "data": {
+ # id: attr(x, 'gog-account-product')
+ #.attr('title').trim()
+ title: $('.object_title',x).first().text().replace(" "," ").trim()
+ plain: title_plain($('.object_title',x).first().text().trim())
+ copies: [{
+ added: new Date($('p > abbr',x).attr('title').replace('@','') + " UTC").getTime()/1000
+#if (new_date == null)
+# new_date=o
+# added: new Date($('span',$('.date_header',x)).first().attr('title')).getTime()/1000
+ type: 'itchio',
+ status: 'redeemed',
+ owned: 1,
+ }]
+ } for x in $('.inner_column').filter(':first')
+ }
+
+ 'insert_button': ->
+ console.debug("insert_button called for itch.io download page")
+ $("")
+ .css
+ float: 'right'
+ cursor: 'pointer'
+ # TODO: Replace the following hacks with whatever GOG uses
+ position: 'relative'
+ marginBottom: '-2em'
+ zIndex: 1
+ .html(BUTTON_LABEL + " (This Page)")
+ .appendTo($('.header_nav_tabs').filter(':first'))
+
+
'groupees.com':
# TODO: Support the new UI beta
@@ -378,6 +484,8 @@ $ ->
# It seems we don't need an explicit `if location.host of scrapers`
# before the `for` loop
console.log("Loading ITAD importer...")
+ if location.host.match(/\.itch\.io/)
+ scrapers[location.host] = scrapers['itch.io']
if scrapers[location.host]
console.log("Matched domain: " + location.host)
for regex, profile of scrapers[location.host]
diff --git a/itad_importer.user.js b/itad_importer.user.js
index a89fa89..af100ec 100644
--- a/itad_importer.user.js
+++ b/itad_importer.user.js
@@ -1,4 +1,4 @@
-// Generated by CoffeeScript 1.7.1
+// Generated by CoffeeScript 1.12.8
/* IsThereAnyDeal.com Collection Importer
// ==UserScript==
@@ -17,6 +17,8 @@
// @match *://www.flyingbundle.com/users/account*
// @match *://www.gog.com/account*
// @match *://www.gog.com/order/status/*
+// @match *://itch.io/my-purchases*
+// @match *://*.itch.io/*
// @match *://groupees.com/purchases*
// @match *://groupees.com/users/*
// @match *://www.humblebundle.com/home*
@@ -35,445 +37,523 @@ License: MIT (http://opensource.org/licenses/MIT)
TODO:
- Add a `@downloadURL` for the script
*/
-var BUTTON_LABEL, ITAD_12X12, ITAD_14X14_GRAY, attr, gog_prepare_title, humble_make_button, humble_parse, scrapeGames, scrapers;
-BUTTON_LABEL = "Export to ITAD";
+(function() {
+ var BUTTON_LABEL, ITAD_12X12, ITAD_14X14_GRAY, attr, gog_prepare_title, humble_make_button, humble_parse, itch_plain, romanise_numbers, scrapeGames, scrapers, title_plain;
-ITAD_12X12 = "data:image/png;base64,\niVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAAZlBMVEUEbrIEbrIJcbQLcrQefboo\ng70rhb4thr8vh78zicA6jcNCksVLl8hWnctZn8xdoc1ipM9ipc9kptB5stZ6staCt9mHutqJu9ud\nxuGozeSrz+W72OrA2+zJ4O7U5vLX6PPn8fj3+vyC0mvkAAAAAXRSTlMAQObYZgAAAFdJREFUCB0F\nwYkCgUAABcA3CpElRyRH6/9/0kwCQALtZSwNglN9Pt5LR+jqGuelEaYbeBXh04P7KMwDeF6E8l1h\nW1vh8PsO/bWeiGPdl/kzdYjdBkACQP5LygQ7CM8T6wAAAABJRU5ErkJggg==";
+ BUTTON_LABEL = "Export to ITAD";
-ITAD_14X14_GRAY = "data:image/png;base64,\niVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAdVBMVEUEbrKTlaCTlZ+TlZ+UlqCY\nmaSYmqWcnqednqieoKmfoaugoqulprCvsLivsbiwsrmztLuztby2uL7BwsjDxcrExcvIyc7V1trW\n1trX2Nvn5+rp6evx8vP19fb39/j4+Pn5+fr7+/v7+/z8/Pz8/P39/f3///8J+FboAAAAJHRSTlMA\ny+rw8PHx8fHx8vLy9PT09PT19vf39/n5+fz8/f3+/v7+/v695LIzAAAAcUlEQVQIHQXBhwGCQAAE\nsHui2FHsBeyy/4gmSQGgJKWCeTNFVQJNN9yH2xJB+z3WZuf3kjDuD+B8I6wfIzAbpsLuCrg3QtsD\n9TAXJq8tOHYEl9+W0eHbEPaf06u/PvoWsXmuTNrdegwp1QJAVZICQMkf1qQG7Yh+Z60AAAAASUVO\nRK5CYII=";
+ ITAD_12X12 = "data:image/png;base64,\niVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAAZlBMVEUEbrIEbrIJcbQLcrQefboo\ng70rhb4thr8vh78zicA6jcNCksVLl8hWnctZn8xdoc1ipM9ipc9kptB5stZ6staCt9mHutqJu9ud\nxuGozeSrz+W72OrA2+zJ4O7U5vLX6PPn8fj3+vyC0mvkAAAAAXRSTlMAQObYZgAAAFdJREFUCB0F\nwYkCgUAABcA3CpElRyRH6/9/0kwCQALtZSwNglN9Pt5LR+jqGuelEaYbeBXh04P7KMwDeF6E8l1h\nW1vh8PsO/bWeiGPdl/kzdYjdBkACQP5LygQ7CM8T6wAAAABJRU5ErkJggg==";
-this.$ = this.jQuery = jQuery.noConflict(true);
+ ITAD_14X14_GRAY = "data:image/png;base64,\niVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAdVBMVEUEbrKTlaCTlZ+TlZ+UlqCY\nmaSYmqWcnqednqieoKmfoaugoqulprCvsLivsbiwsrmztLuztby2uL7BwsjDxcrExcvIyc7V1trW\n1trX2Nvn5+rp6evx8vP19fb39/j4+Pn5+fr7+/v7+/z8/Pz8/P39/f3///8J+FboAAAAJHRSTlMA\ny+rw8PHx8fHx8vLy9PT09PT19vf39/n5+fz8/f3+/v7+/v695LIzAAAAcUlEQVQIHQXBhwGCQAAE\nsHui2FHsBeyy/4gmSQGgJKWCeTNFVQJNN9yH2xJB+z3WZuf3kjDuD+B8I6wfIzAbpsLuCrg3QtsD\n9TAXJq8tOHYEl9+W0eHbEPaf06u/PvoWsXmuTNrdegwp1QJAVZICQMkf1qQG7Yh+Z60AAAAASUVO\nRK5CYII=";
-attr = function(node, name) {
- return node.getAttribute(name);
-};
+ this.$ = this.jQuery = jQuery.noConflict(true);
-gog_prepare_title = function(elem) {
- var dom;
- dom = $('.product-title', elem).clone();
- $('._product-flag', dom).remove();
- return dom.text();
-};
+ attr = function(node, name) {
+ return node.getAttribute(name);
+ };
-humble_make_button = function() {
- var a, button, label;
- label = $('').html(BUTTON_LABEL);
- a = $('').html(BUTTON_LABEL).css('padding-left', '9px');
- return button = $('').append('').append(label).append(a);
-};
+ romanise_numbers = function(elem) {
+ elem = elem.replace(/1/g, "i");
+ elem = elem.replace(/2/g, "ii");
+ elem = elem.replace(/3/g, "iii");
+ elem = elem.replace(/4/g, "iv");
+ elem = elem.replace(/5/g, "v");
+ elem = elem.replace(/6/g, "vi");
+ elem = elem.replace(/7/g, "vii");
+ elem = elem.replace(/8/g, "viii");
+ elem = elem.replace(/9/g, "ix");
+ return elem = elem.replace(/9/g, "ix");
+ };
-humble_parse = function() {
- var x;
- return {
- version: "02",
- data: (function() {
- var _i, _len, _ref, _results;
- _ref = $('div.row').has(' .downloads.windows .download, .downloads.linux .download, .downloads.mac .download, .downloads.android .download').find('div.title');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: x.textContent.trim(),
- copies: [
- {
- type: 'humblestore'
- }
- ]
- });
- }
- return _results;
- })()
+ gog_prepare_title = function(elem) {
+ var dom;
+ dom = $('.product-title', elem).clone();
+ $('._product-flag', dom).remove();
+ return dom.text();
};
-};
-scrapers = {
- 'fireflowergames.com': {
- '^https://fireflowergames\\.com/my-account/?': {
- 'source_id': 'fireflower',
- 'game_list': function() {
- var results, title, titles, uniques, x;
- results = $('ul.digital-downloads li a');
- titles = [
- (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = results.length; _i < _len; _i++) {
- x = results[_i];
- _results.push($(x).text().split(" – ")[0].trim());
- }
- return _results;
- })()
- ][0];
- uniques = titles.filter(function(title, pos) {
- return titles.indexOf(title) === pos;
- });
- return {
- version: "02",
- data: (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = uniques.length; _i < _len; _i++) {
- title = uniques[_i];
- _results.push({
- title: title,
- copies: [
- {
- type: 'fireflower',
- status: 'redeemed',
- owned: 1
- }
- ]
- });
- }
- return _results;
- })()
- };
- },
- 'insert_button': function() {
- return $('').html(BUTTON_LABEL).css({
- verticalAlign: '20%',
- marginLeft: '1em'
- }).appendTo($('ul.digital-downloads').prev());
- }
- },
- '^http://fireflowergames\\.com/my-lists/(edit-my|view-a)-list/\\?.+': {
- 'source_id': 'fireflower',
- 'game_list': function() {
- var results, x;
- results = $('table.wl-table tbody td.check-column input:checked').parents('tr').find('td.product-name a');
- if (!results.length) {
- results = $('table.wl-table td.product-name a');
+ itch_plain = function(elem) {
+ return elem.toLowerCase();
+ };
+
+ title_plain = function(elem) {
+ var plain;
+ plain = elem;
+ plain = plain.toLowerCase();
+ plain = plain.replace(/\bthe\b/g, "");
+ plain = plain.replace(/ & /g, " and ");
+ plain = plain.replace(" ", "");
+ plain = plain.replace(/[\s\.\!@"#$%^&'*\(\)\-:_+=;,\?]/g, "");
+ return romanise_numbers(plain);
+ };
+
+ humble_make_button = function() {
+ var a, button, label;
+ label = $('').html(BUTTON_LABEL);
+ a = $('').html(BUTTON_LABEL).css('padding-left', '9px');
+ return button = $('').append('').append(label).append(a);
+ };
+
+ humble_parse = function() {
+ var x;
+ return {
+ version: "02",
+ data: (function() {
+ var i, len, ref, results1;
+ ref = $('div.row').has(' .downloads.windows .download, .downloads.linux .download, .downloads.mac .download, .downloads.android .download').find('div.title');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: x.textContent.trim(),
+ copies: [
+ {
+ type: 'humblestore'
+ }
+ ]
+ });
}
- return {
- version: "02",
- data: (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = results.length; _i < _len; _i++) {
- x = results[_i];
- _results.push({
- title: $(x).text().trim()
- });
- }
- return _results;
- })()
- };
- },
- 'insert_button': function() {
- return $('').html(BUTTON_LABEL).wrap('
| ').appendTo($('table.wl-actions-table tbody:first').find('tr:last'));
- },
- 'is_wishlist': true
- }
- },
- 'flyingbundle.com': {
- 'https?://(www\\.)?flyingbundle\\.com/users/account#?': {
- 'source_id': 'flying_bundle',
- 'game_list': function() {
- var x;
- return {
- version: "02",
- data: (function() {
- var _i, _len, _ref, _results;
- _ref = $(".div_btn_download[href^='/users/sources']").parents('li').find(':first');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: $(x).text(),
- copies: [
- {
- type: 'Flying Bundle',
- status: 'redeemed',
- owned: 1,
- source: {
- type: "s",
- id: "other"
+ return results1;
+ })()
+ };
+ };
+
+ scrapers = {
+ 'fireflowergames.com': {
+ '^https://fireflowergames\\.com/my-account/?': {
+ 'source_id': 'fireflower',
+ 'game_list': function() {
+ var results, title, titles, uniques, x;
+ results = $('ul.digital-downloads li a');
+ titles = [
+ (function() {
+ var i, len, results1;
+ results1 = [];
+ for (i = 0, len = results.length; i < len; i++) {
+ x = results[i];
+ results1.push($(x).text().split(" – ")[0].trim());
+ }
+ return results1;
+ })()
+ ][0];
+ uniques = titles.filter(function(title, pos) {
+ return titles.indexOf(title) === pos;
+ });
+ return {
+ version: "02",
+ data: (function() {
+ var i, len, results1;
+ results1 = [];
+ for (i = 0, len = uniques.length; i < len; i++) {
+ title = uniques[i];
+ results1.push({
+ title: title,
+ copies: [
+ {
+ type: 'fireflower',
+ status: 'redeemed',
+ owned: 1
}
- }
- ]
- });
- }
- return _results;
- })()
- };
- },
- 'insert_button': function() {
- var li;
- li = $("").appendTo('.legenda_points ul');
- return $('' + BUTTON_LABEL + '
').css('text-transform', 'uppercase').wrap("").appendTo(li);
- }
- }
- },
- 'www.gog.com': {
- '^https://www\\.gog\\.com/order/status/.+': {
- 'source_id': 'gog',
- 'game_list': function() {
- var x;
- console.debug("game_list called for GOG order status page");
- return {
- "version": "02",
- "data": (function() {
- var _i, _len, _ref, _results;
- _ref = $('.order + .container .product-row');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: gog_prepare_title(x),
- copies: [
- {
- type: 'gog',
- status: 'redeemed',
- owned: 1
- }
- ]
- });
- }
- return _results;
- })()
- };
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ return $('').html(BUTTON_LABEL).css({
+ verticalAlign: '20%',
+ marginLeft: '1em'
+ }).appendTo($('ul.digital-downloads').prev());
+ }
},
- 'insert_button': function() {
- console.debug("insert_button called for GOG order status page");
- $(".order-article__btn-pointer-wrapper .order-article__btn-pointer").css({
- marginTop: -4,
- zIndex: 20
- });
- $('.order-article__dropdown-items').css('z-index', 10);
- return $("").html("On ITAD").prependTo($('.order-message__actions ._dropdown__items').filter(':first'));
+ '^http://fireflowergames\\.com/my-lists/(edit-my|view-a)-list/\\?.+': {
+ 'source_id': 'fireflower',
+ 'game_list': function() {
+ var results, x;
+ results = $('table.wl-table tbody td.check-column input:checked').parents('tr').find('td.product-name a');
+ if (!results.length) {
+ results = $('table.wl-table td.product-name a');
+ }
+ return {
+ version: "02",
+ data: (function() {
+ var i, len, results1;
+ results1 = [];
+ for (i = 0, len = results.length; i < len; i++) {
+ x = results[i];
+ results1.push({
+ title: $(x).text().trim()
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ return $('').html(BUTTON_LABEL).wrap(' | ').appendTo($('table.wl-actions-table tbody:first').find('tr:last'));
+ },
+ 'is_wishlist': true
}
},
- '^https?://www\\.gog\\.com/account(/games(/(shelf|list))?)?/?(\\?|$)': {
- 'source_id': 'gog',
- 'game_list': function() {
- var x;
- console.debug("game_list called for GOG collection page");
- return {
- "version": "02",
- "data": (function() {
- var _i, _len, _ref, _results;
- _ref = $('.product-row');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: gog_prepare_title(x),
- copies: [
- {
- type: 'gog',
- status: 'redeemed',
- owned: 1
- }
- ]
- });
- }
- return _results;
- })()
- };
- },
- 'insert_button': function() {
- console.debug("insert_button called for GOG collection page");
- return $("").css({
- float: 'right',
- cursor: 'pointer',
- position: 'relative',
- marginBottom: '-2em',
- zIndex: 1
- }).html(BUTTON_LABEL + " (This Page)").prependTo($('.collection-header').filter(':first'));
+ 'flyingbundle.com': {
+ 'https?://(www\\.)?flyingbundle\\.com/users/account#?': {
+ 'source_id': 'flying_bundle',
+ 'game_list': function() {
+ var x;
+ return {
+ version: "02",
+ data: (function() {
+ var i, len, ref, results1;
+ ref = $(".div_btn_download[href^='/users/sources']").parents('li').find(':first');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: $(x).text(),
+ copies: [
+ {
+ type: 'Flying Bundle',
+ status: 'redeemed',
+ owned: 1,
+ source: {
+ type: "s",
+ id: "other"
+ }
+ }
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ var li;
+ li = $("").appendTo('.legenda_points ul');
+ return $('' + BUTTON_LABEL + '
').css('text-transform', 'uppercase').wrap("").appendTo(li);
+ }
}
- }
- },
- 'groupees.com': {
- 'https?://(www\\.)?groupees\\.com/(purchases|users/\\d+)': {
- 'source_id': 'other',
- 'game_list': function() {
- var x;
- return {
- "version": "02",
- "data": (function() {
- var _i, _len, _ref, _results;
- _ref = $('.product ul.dropdown-menu').parents('.details').find('h3');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: x.textContent.trim(),
- copies: [
- {
- type: 'Groupees.com',
- status: 'redeemed',
- owned: 1,
- source: {
- type: "s",
- id: "other"
+ },
+ 'www.gog.com': {
+ '^https://www\\.gog\\.com/order/status/.+': {
+ 'source_id': 'gog',
+ 'game_list': function() {
+ var x;
+ console.debug("game_list called for GOG order status page");
+ return {
+ "version": "02",
+ "data": (function() {
+ var i, len, ref, results1;
+ ref = $('.order + .container .product-row');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: gog_prepare_title(x),
+ copies: [
+ {
+ type: 'gog',
+ status: 'redeemed',
+ owned: 1
}
- }
- ]
- });
- }
- return _results;
- })()
- };
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ console.debug("insert_button called for GOG order status page");
+ $(".order-article__btn-pointer-wrapper .order-article__btn-pointer").css({
+ marginTop: -4,
+ zIndex: 20
+ });
+ $('.order-article__dropdown-items').css('z-index', 10);
+ return $("").html("On ITAD").prependTo($('.order-message__actions ._dropdown__items').filter(':first'));
+ }
},
- 'insert_button': function() {
- return $("").css({
- float: 'right'
- }).addClass('button btn btn-sm btn-primary').html(BUTTON_LABEL + " (Selected Bundle)").insertBefore("input[name='search']");
+ '^https?://www\\.gog\\.com/account(/games(/(shelf|list))?)?/?(\\?|$)': {
+ 'source_id': 'gog',
+ 'game_list': function() {
+ var x;
+ console.debug("game_list called for GOG collection page");
+ return {
+ "version": "02",
+ "data": (function() {
+ var i, len, ref, results1;
+ ref = $('.product-row');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: gog_prepare_title(x),
+ copies: [
+ {
+ type: 'gog',
+ status: 'redeemed',
+ owned: 1
+ }
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ console.debug("insert_button called for GOG collection page");
+ return $("").css({
+ float: 'right',
+ cursor: 'pointer',
+ position: 'relative',
+ marginBottom: '-2em',
+ zIndex: 1
+ }).html(BUTTON_LABEL + " (This Page)").prependTo($('.collection-header').filter(':first'));
+ }
}
- }
- },
- 'www.humblebundle.com': {
- 'https://www\\.humblebundle\\.com/home/library/?': {
- 'source_id': 'humblestore',
- 'game_list': function() {
- var x;
- return {
- "version": "02",
- "data": (function() {
- var _i, _len, _ref, _results;
- _ref = $('.subproduct-selector h2');
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push({
- title: x.textContent.trim(),
- copies: [
- {
- type: 'humblestore',
- status: 'redeemed',
- owned: 1
- }
- ]
- });
- }
- return _results;
- })()
- };
- },
- 'insert_button': function() {
- var button, config, found_early, observer;
- config = {
- childList: true,
- subtree: true
- };
- button = $('').html(BUTTON_LABEL).css({
- display: 'inline',
- border: '1px solid #CCC',
- background: '#F1F3F6',
- padding: '5px 10px 5px 10px',
- marginLeft: '10px'
- });
- found_early = $(".top-controls");
- if (found_early.length > 0) {
- console.log("Inserting button immediately.");
- button.appendTo(found_early);
- } else {
- console.log("Using MutationObserver for deferred button insertion.");
- observer = new MutationObserver(function(mutations) {
- return mutations.forEach(function(mutation) {
- var found, tnode_cls;
- tnode_cls = mutation.target.getAttribute("class");
- found = $(".top-controls", mutation.target);
- if (found.length > 0) {
- observer.disconnect();
- return button.appendTo(found);
+ },
+ 'itch.io': {
+ '^https?://.+\\.itch\\.io/.+/download/.+': {
+ 'source_id': 'itchio',
+ 'game_list': function() {
+ var x;
+ console.debug("game_list called for itch.io download page");
+ return {
+ "version": "02",
+ "data": (function() {
+ var i, len, ref, results1;
+ ref = $('.inner_column').filter(':first');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: $('.object_title', x).first().text().replace(" ", " ").trim(),
+ plain: title_plain($('.object_title', x).first().text().trim()),
+ copies: [
+ {
+ added: new Date($('p > abbr', x).attr('title').replace('@', '') + " UTC").getTime() / 1000,
+ type: 'itchio',
+ status: 'redeemed',
+ owned: 1
+ }
+ ]
+ });
}
- });
- });
- observer.observe(document.querySelector('.js-library-holder'), config);
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ console.debug("insert_button called for itch.io download page");
+ return $("").css({
+ float: 'right',
+ cursor: 'pointer',
+ position: 'relative',
+ marginBottom: '-2em',
+ zIndex: 1
+ }).html(BUTTON_LABEL + " (This Page)").appendTo($('.header_nav_tabs').filter(':first'));
}
- return button;
}
},
- 'https://www\\.humblebundle\\.com/home/?': {
- 'source_id': 'humblestore',
- 'game_list': humble_parse,
- 'insert_button': function() {
- return humble_make_button().css({
- float: 'right',
- fontSize: '14px',
- fontWeight: 'normal'
- }).prependTo('.base-main-wrapper h1');
+ 'groupees.com': {
+ 'https?://(www\\.)?groupees\\.com/(purchases|users/\\d+)': {
+ 'source_id': 'other',
+ 'game_list': function() {
+ var x;
+ return {
+ "version": "02",
+ "data": (function() {
+ var i, len, ref, results1;
+ ref = $('.product ul.dropdown-menu').parents('.details').find('h3');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: x.textContent.trim(),
+ copies: [
+ {
+ type: 'Groupees.com',
+ status: 'redeemed',
+ owned: 1,
+ source: {
+ type: "s",
+ id: "other"
+ }
+ }
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ return $("").css({
+ float: 'right'
+ }).addClass('button btn btn-sm btn-primary').html(BUTTON_LABEL + " (Selected Bundle)").insertBefore("input[name='search']");
+ }
}
},
- 'https://www\\.humblebundle\\.com/(download)?s\\?key=.+': {
- 'source_id': 'humblestore',
- 'game_list': humble_parse,
- 'insert_button': function() {
- var parent;
- parent = $('.js-gamelist-holder').parents('.whitebox');
- parent.find('.staple.s4').remove();
- return humble_make_button().css({
- position: 'absolute',
- top: 11,
- right: 17
- }).appendTo(parent);
+ 'www.humblebundle.com': {
+ 'https://www\\.humblebundle\\.com/home/library/?': {
+ 'source_id': 'humblestore',
+ 'game_list': function() {
+ var x;
+ return {
+ "version": "02",
+ "data": (function() {
+ var i, len, ref, results1;
+ ref = $('.subproduct-selector h2');
+ results1 = [];
+ for (i = 0, len = ref.length; i < len; i++) {
+ x = ref[i];
+ results1.push({
+ title: x.textContent.trim(),
+ copies: [
+ {
+ type: 'humblestore',
+ status: 'redeemed',
+ owned: 1
+ }
+ ]
+ });
+ }
+ return results1;
+ })()
+ };
+ },
+ 'insert_button': function() {
+ var button, config, found_early, observer;
+ config = {
+ childList: true,
+ subtree: true
+ };
+ button = $('').html(BUTTON_LABEL).css({
+ display: 'inline',
+ border: '1px solid #CCC',
+ background: '#F1F3F6',
+ padding: '5px 10px 5px 10px',
+ marginLeft: '10px'
+ });
+ found_early = $(".top-controls");
+ if (found_early.length > 0) {
+ console.log("Inserting button immediately.");
+ button.appendTo(found_early);
+ } else {
+ console.log("Using MutationObserver for deferred button insertion.");
+ observer = new MutationObserver(function(mutations) {
+ return mutations.forEach(function(mutation) {
+ var found, tnode_cls;
+ tnode_cls = mutation.target.getAttribute("class");
+ found = $(".top-controls", mutation.target);
+ if (found.length > 0) {
+ observer.disconnect();
+ return button.appendTo(found);
+ }
+ });
+ });
+ observer.observe(document.querySelector('.js-library-holder'), config);
+ }
+ return button;
+ }
+ },
+ 'https://www\\.humblebundle\\.com/home/?': {
+ 'source_id': 'humblestore',
+ 'game_list': humble_parse,
+ 'insert_button': function() {
+ return humble_make_button().css({
+ float: 'right',
+ fontSize: '14px',
+ fontWeight: 'normal'
+ }).prependTo('.base-main-wrapper h1');
+ }
+ },
+ 'https://www\\.humblebundle\\.com/(download)?s\\?key=.+': {
+ 'source_id': 'humblestore',
+ 'game_list': humble_parse,
+ 'insert_button': function() {
+ var parent;
+ parent = $('.js-gamelist-holder').parents('.whitebox');
+ parent.find('.staple.s4').remove();
+ return humble_make_button().css({
+ position: 'absolute',
+ top: 11,
+ right: 17
+ }).appendTo(parent);
+ }
}
}
- }
-};
+ };
-scrapers['www.flyingbundle.com'] = scrapers['flyingbundle.com'];
+ scrapers['www.flyingbundle.com'] = scrapers['flyingbundle.com'];
-scrapers['www.groupees.com'] = scrapers['groupees.com'];
+ scrapers['www.groupees.com'] = scrapers['groupees.com'];
-scrapeGames = function(scraper_obj) {
- var form, params, url;
- params = {
- file: btoa(unescape(encodeURIComponent(JSON.stringify(scraper_obj.game_list())))),
- upload: 'x'
+ scrapeGames = function(scraper_obj) {
+ var form, params, url;
+ params = {
+ file: btoa(unescape(encodeURIComponent(JSON.stringify(scraper_obj.game_list())))),
+ upload: 'x'
+ };
+ url = scraper_obj.is_wishlist != null ? 'https://isthereanydeal.com/waitlist/import/' : 'https://isthereanydeal.com/collection/import/';
+ form = $("").attr('action', url);
+ params['returnTo'] = location.href;
+ form.css({
+ display: 'none'
+ });
+ $.each(params, function(key, value) {
+ return $("").attr("name", key).attr("value", value).appendTo(form);
+ });
+ $(document.body).append(form);
+ return form.submit();
};
- url = scraper_obj.is_wishlist != null ? 'https://isthereanydeal.com/waitlist/import/' : 'https://isthereanydeal.com/collection/import/';
- form = $("").attr('action', url);
- params['returnTo'] = location.href;
- form.css({
- display: 'none'
- });
- $.each(params, function(key, value) {
- return $("").attr("name", key).attr("value", value).appendTo(form);
- });
- $(document.body).append(form);
- return form.submit();
-};
-$(function() {
- var e, profile, profile_matched, regex, scraper, _fn, _i, _len, _ref, _results;
- console.log("Loading ITAD importer...");
- if (scrapers[location.host]) {
- console.log("Matched domain: " + location.host);
- _ref = scrapers[location.host];
- _results = [];
- for (regex in _ref) {
- profile = _ref[regex];
- try {
- profile_matched = location.href.match(regex);
- } catch (_error) {
- e = _error;
- console.error("Bad regex: " + regex);
- }
- if (profile_matched) {
- console.log("Matched profile: " + regex);
- $('.itad_btn, #itad_dlg, .itad_close').remove();
- if (!Array.isArray(profile)) {
- profile = [profile];
+ $(function() {
+ var e, fn, i, len, profile, profile_matched, ref, regex, results1, scraper;
+ console.log("Loading ITAD importer...");
+ if (location.host.match(/\.itch\.io/)) {
+ scrapers[location.host] = scrapers['itch.io'];
+ }
+ if (scrapers[location.host]) {
+ console.log("Matched domain: " + location.host);
+ ref = scrapers[location.host];
+ results1 = [];
+ for (regex in ref) {
+ profile = ref[regex];
+ try {
+ profile_matched = location.href.match(regex);
+ } catch (error) {
+ e = error;
+ console.error("Bad regex: " + regex);
}
- _fn = function(scraper) {
- console.log("Inserting ITAD button for source ID: " + scraper.source_id);
- return typeof scraper.insert_button === "function" ? scraper.insert_button().addClass('itad_btn').click(function() {
- console.log("ITAD button clicked");
- return scrapeGames(scraper);
- }) : void 0;
- };
- for (_i = 0, _len = profile.length; _i < _len; _i++) {
- scraper = profile[_i];
- _fn(scraper);
+ if (profile_matched) {
+ console.log("Matched profile: " + regex);
+ $('.itad_btn, #itad_dlg, .itad_close').remove();
+ if (!Array.isArray(profile)) {
+ profile = [profile];
+ }
+ fn = function(scraper) {
+ console.log("Inserting ITAD button for source ID: " + scraper.source_id);
+ return typeof scraper.insert_button === "function" ? scraper.insert_button().addClass('itad_btn').click(function() {
+ console.log("ITAD button clicked");
+ return scrapeGames(scraper);
+ }) : void 0;
+ };
+ for (i = 0, len = profile.length; i < len; i++) {
+ scraper = profile[i];
+ fn(scraper);
+ }
+ break;
+ } else {
+ results1.push(void 0);
}
- break;
- } else {
- _results.push(void 0);
}
+ return results1;
}
- return _results;
- }
-});
+ });
+
+}).call(this);