diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..cbdcbbc --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.js text eol=lf diff --git a/.gitignore b/.gitignore index 55e16f5..6594807 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.zip .vscode -Capture \ No newline at end of file +Capture +.eslintrc.json diff --git a/backgroundScripts/background.js b/backgroundScripts/background.js index e981036..a75ff56 100644 --- a/backgroundScripts/background.js +++ b/backgroundScripts/background.js @@ -22,13 +22,13 @@ var defaults = { storageSchema: 1 // Increment this when data format changes }; -chrome.runtime.onInstalled.addListener(function(details){ - if(details.reason === "install"){ +chrome.runtime.onInstalled.addListener(function (details) { + if (details.reason === "install") { chrome.storage.sync.set(defaults); chrome.storage.sync.set({ 'categories': defaults.defaultCategories}); chrome.storage.sync.set({ 'searchSort': defaults.defaultSearchSort}); chrome.storage.sync.set({ 'searchOrder': defaults.defaultSearchOrder}); - } else if(details.reason === "update"){ + } else if (details.reason === "update") { migrateData(); } }); diff --git a/contentScripts/addTorrent/accessAddTorrent.js b/contentScripts/addTorrent/accessAddTorrent.js index b2dc663..c67a46b 100644 --- a/contentScripts/addTorrent/accessAddTorrent.js +++ b/contentScripts/addTorrent/accessAddTorrent.js @@ -1,3 +1,3 @@ var downloadButton = document.querySelector('a.butt'); -downloadButton.onclick = function(){} +downloadButton.onclick = function () {}; downloadButton.removeAttribute('onclick'); diff --git a/contentScripts/addTorrent/addTorrent.js b/contentScripts/addTorrent/addTorrent.js index a8f38e4..cb42759 100644 --- a/contentScripts/addTorrent/addTorrent.js +++ b/contentScripts/addTorrent/addTorrent.js @@ -2,14 +2,12 @@ injectScript(chrome.extension.getURL('contentScripts/addTorrent/accessAddTorrent.js'), 'head'); injectLink(chrome.extension.getURL("css/style.css"), 'head'); -/********************************************************************/ -/********************************************************************/ /********************************************************************/ var path = window.location.pathname; /* Add an info line to the table */ -var tableLines = document.querySelectorAll('table.infos-torrent tbody tr') +var tableLines = document.querySelectorAll('table.infos-torrent tbody tr'); var downloadLine = tableLines[1]; var torrentInfo = downloadLine.cloneNode(true); torrentInfo.style = "display: none"; @@ -17,90 +15,89 @@ downloadLine.insertAdjacentElement('afterend', torrentInfo); /* Add third party download button */ var downloadButton = downloadLine.querySelector('a.butt'); -flexButton = document.createElement('a'); +var flexButton = document.createElement('a'); flexButton.appendChild(document.createTextNode("Télécharger via discord ")); var span = document.createElement('span'); span.className = "ico_download"; flexButton.appendChild(span); -flexButton.className = "butt discord" +flexButton.className = "butt discord"; flexButton.style = "display: none"; flexButton.addEventListener('click', addToDiscord); downloadButton.parentElement.appendChild(flexButton); /* Retrieve torrent data from page*/ -var torrentId = (/.*\/torrent\/.*\/.*\/(\d+)\-/g).exec(window.location.pathname); -if(torrentId){ - torrentId = torrentId[1] +var torrentId = (/.*\/torrent\/.*\/.*\/(\d+)-/g).exec(window.location.pathname); +if (torrentId) { + torrentId = torrentId[1]; } var torrentTitle = document.querySelector('div#title h1').textContent.trim().split(".").join(" "); -torrentYear = (/(19\d{2}|2\d{3})/g).exec(torrentTitle) -if(torrentYear){ - torrentYear = torrentYear[1] +var torrentYear = (/(19\d{2}|2\d{3})/g).exec(torrentTitle); +if (torrentYear) { + torrentYear = torrentYear[1]; } -if(torrentTitle.includes('1080')) +var torrentQuality = ''; +if (torrentTitle.includes('1080')) { torrentQuality = '1080p'; -else if(torrentTitle.includes('720')) +} else if (torrentTitle.includes('720')) { torrentQuality = '720p'; -else if(torrentTitle.includes('480')) +} else if (torrentTitle.includes('480')) { torrentQuality = '480p'; +} /* Retrieve credentials from Google Storage*/ var discordWebhookUrl, discordUserName, categories; -chrome.storage.sync.get(['yggToken', 'discordWebhookUrl', 'discordUserName', 'displayDiscord', 'displayAddCategories', 'categories', 'defaultCategories'], function(value){ - if(value.yggToken){ +chrome.storage.sync.get(['yggToken', 'discordWebhookUrl', 'discordUserName', 'displayDiscord', 'displayAddCategories', 'categories', 'defaultCategories'], function (value) { + if (value.yggToken) { downloadButton.setAttribute('href', "https://www2.yggtorrent.ch/rss/download?id=" + torrentId + "&passkey=" + value.yggToken); - } - else{ + } else { var alertYggToken = ''; - if (document.readyState !== "complete"){ - document.addEventListener('readystatechange', function onReadyStateChange() { + if (document.readyState !== "complete") { + document.addEventListener('readystatechange', function () { downloadLine.childNodes[3].innerHTML = alertYggToken; }, false); } else { downloadLine.childNodes[3].innerHTML = alertYggToken; } } - if(value.displayDiscord){ - if(value.discordWebhookUrl){ + if (value.displayDiscord) { + if (value.discordWebhookUrl) { discordWebhookUrl = value.discordWebhookUrl; + } else { + showAlert('error_discord_button_alert'); } - else{ - showAlert('error_discord_button_alert') - } - if(value.discordUserName){ + if (value.discordUserName) { discordUserName = value.discordUserName; - } - else{ - discordUserName = "BetterYGG - Extension" + } else { + discordUserName = "BetterYGG - Extension"; } - if(value.displayAddCategories){ - if(value.categories){ + if (value.displayAddCategories) { + if (value.categories) { categories = value.categories; - if(categories.length === 0){ - showAlert('error_categories_alert') + if (categories.length === 0) { + showAlert('error_categories_alert'); } + } else { + showAlert('error_categories_alert'); } - else{ - showAlert('error_categories_alert') - } - } - else { - if(value.defaultCategories){ + } else { + if (value.defaultCategories) { categories = value.defaultCategories; } } /* Retrieve torrent data from page*/ var torrentType = getTypeFromUrl(categories); - var torrentEpisode = '', torrentSeason = '', torrentQuality = ''; - if(torrentType.season){ - document.querySelectorAll('a.term').forEach(function(element){ - var key = element.innerHTML - if(key.includes('Saison')) + var torrentEpisode = '', torrentSeason = ''; + if (torrentType.season) { + document.querySelectorAll('a.term').forEach(function (element) { + var key = element.innerHTML; + if (key.includes('Saison')) { torrentSeason = key.replace('Saison ', ''); - if(key.includes('Episode')) + } + if (key.includes('Episode')) { torrentEpisode = key.replace('Episode ', ''); + } }); } @@ -111,7 +108,7 @@ chrome.storage.sync.get(['yggToken', 'discordWebhookUrl', 'discordUserName', 'di left.childNodes[1].className = 'ico_info-circle'; var right = torrentInfo.childNodes[3]; /* Add alert banners */ - right.innerHTML = '' + right.innerHTML = ''; right.innerHTML += ''; right.innerHTML += ''; right.innerHTML += ''; @@ -126,8 +123,8 @@ chrome.storage.sync.get(['yggToken', 'discordWebhookUrl', 'discordUserName', 'di row.className = "row"; row.appendChild(getInputCol("Titre", "title", ["error"], "text", torrentTitle, { - onInput:function() { - this.classList.remove('error') + onInput: function () { + this.classList.remove('error'); } }) ); @@ -137,4 +134,262 @@ chrome.storage.sync.get(['yggToken', 'discordWebhookUrl', 'discordUserName', 'di torrentInfo.style.display = ""; flexButton.style.display = ""; } -}); \ No newline at end of file +}); + +/*************/ +/* FUNCTIONS */ +/*************/ + +function alert(id) { + document.querySelectorAll('.alert').forEach(function (elem) { + elem.style.display = "none"; + }); + document.getElementById(id).style.display = "block"; +} + +function showAlert(id) { + if (document.readyState !== "complete") { + document.addEventListener('readystatechange', function () { + alert(id); + }, false); + } else { + alert(id); + } +} + +function addToDiscord() { + if (discordWebhookUrl === undefined) { + showAlert('error_discord_button_alert'); + return; + } + + var inputs = document.forms['form_info'].querySelectorAll('input, select'); + var dict = {}; + + for (var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + if (!input) { + continue; + } + if (input.className.includes('error')) { + showAlert('error_form_alert'); + return; + } + dict[input.name] = input.value; + } + + var data = { + content: JSON.stringify(dict), + username: discordUserName, + }; + + var xhr = new XMLHttpRequest(); + xhr.open('POST', discordWebhookUrl); + xhr.setRequestHeader('Content-Type', 'multipart/form-data'); + xhr.onload = function () { + if (xhr.status === 204) { + showAlert('valid_form_alert'); + } else { + showAlert('error_discord_button_alert'); + } + }; + xhr.send(JSON.stringify(data)); +} + +/*********************/ +/* GET HTML ELEMENTS */ +/*********************/ + +function getInput(name, classes, type, value, attrs = {}) { + var inputNode = document.createElement('input'); + inputNode.name = name; + inputNode.className = "form-control " + classes.join(" "); + inputNode.setAttribute("type", type); + for (var key in attrs) { + inputNode.setAttribute(key, attrs[key]); + } + inputNode.value = value; + return inputNode; +} + +function getSelect(name, classes, options, selected, attrs = {}) { + var selectNode = document.createElement('select'); + selectNode.name = name; + selectNode.className = "form-control " + classes.join(" "); + for (var key in attrs) { + selectNode.setAttribute(key, attrs[key]); + } + for (var index in options) { + var type = options[index]; + var option = document.createElement("option"); + option.value = type; + option.text = type; + if (type === selected) { + option.setAttribute("selected", "selected"); + } + selectNode.appendChild(option); + } + return selectNode; +} + +function getFormGroup(input, label, name, size) { + var labelNode = document.createElement('label'); + labelNode.className = "control-label"; + labelNode.setAttribute("for", name); + labelNode.appendChild(document.createTextNode(label)); + + var div = document.createElement('div'); + div.className = "form-group col-" + size; + div.appendChild(labelNode); + div.appendChild(input); + return div; +} + +function getInputCol(label, name, classes, type, value, {size = 12, attrs = {}, onInput = false}) { + var input = getInput(name, classes, type, value, attrs); + if (onInput) { + input.addEventListener("input", onInput); + } + return getFormGroup(input, label, name, size); +} + +function getSelectCol(label, name, classes, options, selected, {size = 12, attrs = {}, onInput = false}) { + var select = getSelect(name, classes, options, selected, attrs); + if (onInput) { + select.addEventListener("input", onInput); + } + return getFormGroup(select, label, name, size); +} + +function getSecondRow(torrentType, torrentSeason, torrentEpisode, torrentId, torrentYear, torrentQuality, categories) { + var size = 3; + var classes = []; + var onInput = false; + var row = document.createElement('div'); + row.className = "row"; + if (torrentType.season) { + size = 2; + if (torrentSeason === '') { + classes = ['error']; + } + onInput = function () { + torrentSeason = formatEpisodeSeason(this.value); + this.value = torrentSeason; + if (torrentSeason === "") { + this.className += ' error'; + } else { + this.classList.remove('error'); + } + }; + row.appendChild(getInputCol("Saison", "season", classes, "number", torrentSeason, {size: size, attrs: {"min": "0"}, onInput: onInput})); + classes = []; + onInput = false; + + if (torrentEpisode === '') { + classes = ['warning']; + } + onInput = function () { + torrentEpisode = formatEpisodeSeason(this.value); + this.value = torrentEpisode; + if (torrentEpisode === "") { + this.className += ' warning'; + } else { + this.classList.remove('warning'); + } + }; + row.appendChild(getInputCol("Episode", "episode", classes, "number", torrentEpisode, {size: size, attrs: {"min": "0"}, onInput: onInput})); + classes = []; + onInput = false; + + var space = document.createElement('div'); + space.className = 'col-1'; + row.appendChild(space); + row.appendChild(getInputCol("ID", "id", [], "text", torrentId, {size: size})); + row.appendChild(space.cloneNode()); + } else { + row.appendChild(getInputCol("ID", "id", [], "text", torrentId, {size: size})); + row.appendChild(getInputCol("Year", "year", ['warning'], "text", torrentYear, {size: size, + onInput: function () { + if (this.value.length !== 4) { + this.classList.remove('warning'); + this.classList += ' error'; + } else { + this.classList.remove('error'); + this.classList.remove('warning'); + } + } + }) + ); + } + + row.appendChild(getInputCol("Quality", "quality", [], "text", torrentQuality, {size: size})); + + onInput = function () { + torrentType = getTypeFromName(categories, this.options[this.selectedIndex].value); + if (torrentType.name === 'unknown') { + this.className += ' error'; + } else { + this.classList.remove('error'); + row.replaceWith(getSecondRow(torrentType, torrentSeason, torrentEpisode, torrentId, torrentYear, torrentQuality, categories)); + } + }; + var categoriesNameList = categories.map(x => x.name); + if (torrentType.name === 'unknown') { + classes = ['error']; + categoriesNameList.push('unknown'); + } + row.appendChild(getSelectCol('Types', 'type', classes, categoriesNameList, torrentType.name, {size: size, onInput: onInput})); + classes = []; + onInput = false; + + return row; +} + + +/*********/ +/* Utils */ +/*********/ + +/* Ensure the episode and season number is nice */ +function formatEpisodeSeason(value) { + if (value > 0 && value <= 9) { + if (value.includes("0")) { + value = "" + parseInt(value); + } + value = "0" + value; + } else { + while (value.substring(0, 1) === "0") { + value = value.substring(1, value.length); + } + } + return value; +} + +function getTypeFromUrl(categories) { + for (var i in categories) { + var urls = categories[i].urls; + for (var j in urls) { + if (path.indexOf(urls[j]) !== -1) { + return categories[i]; + } + } + } + return { + name: "unknown", + season: false, + urls: ["/"] + }; +} + +function getTypeFromName(categories, name) { + for (var i in categories) { + if (categories[i].name === name) { + return categories[i]; + } + } + return { + name: "unknown", + season: false, + urls: ["/"] + }; +} diff --git a/contentScripts/addTorrent/functions.js b/contentScripts/addTorrent/functions.js deleted file mode 100644 index 33482a5..0000000 --- a/contentScripts/addTorrent/functions.js +++ /dev/null @@ -1,259 +0,0 @@ -/*************/ -/* FUNCTIONS */ -/*************/ - -function alert(id){ - document.querySelectorAll('.alert').forEach(function(elem){ - elem.style.display = "none"; - }); - document.getElementById(id).style.display = "block"; -} - -function showAlert(id){ - if (document.readyState !== "complete"){ - document.addEventListener('readystatechange', function onReadyStateChange() { - alert(id); - }, false); - } else { - alert(id); - } -} - -function addToDiscord() { - if(discordWebhookUrl === undefined){ - showAlert('error_discord_button_alert') - return; - } - - var inputs = document.forms['form_info'].querySelectorAll('input, select'); - var dict = {} - - for(var i = 0; i < inputs.length; i++){ - input = inputs[i] - if(!input){ - continue; - } - if(input.className.includes('error')){ - showAlert('error_form_alert'); - return; - } - dict[input.name] = input.value; - } - - data = { - content: JSON.stringify(dict), - username: discordUserName, - } - - xhr = new XMLHttpRequest(); - xhr.open('POST', discordWebhookUrl); - xhr.setRequestHeader('Content-Type', 'multipart/form-data'); - xhr.onload = function() { - if (xhr.status === 204) { - showAlert('valid_form_alert'); - } - else{ - showAlert('error_discord_button_alert'); - } - }; - xhr.send(JSON.stringify(data)); -} - -/*********************/ -/* GET HTML ELEMENTS */ -/*********************/ - -function getInput(name, classes, type, value, attrs = {}) { - var inputNode = document.createElement('input'); - inputNode.name = name; - inputNode.className = "form-control " + classes.join(" "); - inputNode.setAttribute("type", type); - for (var key in attrs) { - inputNode.setAttribute(key, attrs[key]); - } - inputNode.value = value; - return inputNode; -} - -function getSelect(name, classes, options, selected, attrs = {}){ - var selectNode = document.createElement('select'); - selectNode.name = name; - selectNode.className = "form-control " + classes.join(" "); - for (var key in attrs) { - selectNode.setAttribute(key, attrs[key]); - } - for (var index in options){ - var type = options[index]; - var option = document.createElement("option"); - option.value = type; - option.text = type; - if (type === selected) - option.setAttribute("selected", "selected"); - selectNode.appendChild(option); - } - return selectNode; -} - -function getFormGroup(input, label, name, size) { - var labelNode = document.createElement('label'); - labelNode.className = "control-label"; - labelNode.setAttribute("for", name); - labelNode.appendChild(document.createTextNode(label)); - - var div = document.createElement('div'); - div.className = "form-group col-" + size; - div.appendChild(labelNode); - div.appendChild(input); - return div; -} - -function getInputCol(label, name, classes, type, value, { size = 12, attrs = {}, onInput = false }){ - var input = getInput(name, classes, type, value, attrs); - if(onInput){ - input.addEventListener("input", onInput); - } - return getFormGroup(input, label, name, size); -} - -function getSelectCol(label, name, classes, options, selected, { size = 12, attrs = {}, onInput = false }){ - var select = getSelect(name, classes, options, selected, attrs); - if(onInput){ - select.addEventListener("input", onInput); - } - return getFormGroup(select, label, name, size); -} - -function getSecondRow(torrentType, torrentSeason, torrentEpisode, torrentId, torrentYear, torrentQuality, categories){ - var size = 3; - var classes = []; - var onInput = false; - var row = document.createElement('div'); - row.className = "row"; - if(torrentType.season){ - size = 2; - if(torrentSeason == ''){ - classes = ['error']; - } - onInput = function() { - torrentSeason = formatEpisodeSeason(this.value); - this.value = torrentSeason; - if(torrentSeason === "") - this.className += ' error'; - else - this.classList.remove('error'); - } - row.appendChild(getInputCol("Saison", "season", classes, "number", torrentSeason, { size:size, attrs:{"min": "0"}, onInput:onInput })); - classes = []; - onInput = false; - - if(torrentEpisode == ''){ - classes = ['warning']; - } - onInput = function() { - torrentEpisode = formatEpisodeSeason(this.value); - this.value = torrentEpisode; - if(torrentEpisode === "") - this.className += ' warning'; - else - this.classList.remove('warning'); - } - row.appendChild(getInputCol("Episode", "episode", classes, "number", torrentEpisode,{ size:size, attrs:{"min": "0"}, onInput:onInput })); - classes = []; - onInput = false; - - var space = document.createElement('div'); - space.className = 'col-1'; - row.appendChild(space); - row.appendChild(getInputCol("ID", "id", [], "text", torrentId, { size:size })); - row.appendChild(space.cloneNode()); - } - else{ - row.appendChild(getInputCol("ID", "id", [], "text", torrentId, { size:size })); - row.appendChild(getInputCol("Year", "year", ['warning'], "text", torrentYear, { size:size, - onInput:function() { - if(this.value.length != 4){ - this.classList.remove('warning') - this.classList += ' error' - } - else{ - this.classList.remove('error') - this.classList.remove('warning') - } - } - }) - ); - } - - row.appendChild(getInputCol("Quality", "quality", [], "text", torrentQuality, { size:size })); - - onInput = function() { - torrentType = getTypeFromName(categories, this.options[this.selectedIndex].value) - if(torrentType.name === 'unknown'){ - this.className += ' error'; - } - else{ - this.classList.remove('error'); - row.replaceWith(getSecondRow(torrentType, torrentSeason, torrentEpisode, torrentId, torrentYear, torrentQuality, categories)) - } - } - categoriesNameList = categories.map(x => x.name); - if(torrentType.name === 'unknown'){ - classes = ['error']; - categoriesNameList.push('unknown'); - } - row.appendChild(getSelectCol('Types', 'type', classes, categoriesNameList, torrentType.name, { size:size, onInput:onInput })); - classes = [] - onInput = false; - - return row -} - - -/*********/ -/* Utils */ -/*********/ - -/* Ensure the episode and season number is nice */ -function formatEpisodeSeason(value){ - if(value > 0 && value <= 9){ - if(value.includes("0")){ - value = "" + parseInt(value); - } - value = "0" + value; - } - else{ - while(value.substring(0,1) === "0"){ - value = value.substring(1, value.length); - } - } - return value; -} - -function getTypeFromUrl(categories) { - for (var i in categories) { - var urls = categories[i].urls - for(var j in urls){ - if(path.indexOf(urls[j]) != -1){ - return categories[i]; - } - } - } - return { - name: "unknown", - season: false, - urls: ["/"] - }; -}; - -function getTypeFromName(categories, name) { - for (var i in categories) { - if (categories[i].name === name){ - return categories[i]; - } - } - return { - name: "unknown", - season: false, - urls: ["/"] - }; -}; \ No newline at end of file diff --git a/contentScripts/allPages/accessAllPages.js b/contentScripts/allPages/accessAllPages.js index acb4287..3c913e6 100644 --- a/contentScripts/allPages/accessAllPages.js +++ b/contentScripts/allPages/accessAllPages.js @@ -1,6 +1,6 @@ hideSidebar(); -$(window).on('resize', function(){ +$(window).on('resize', function () { hideSidebar(); }); diff --git a/contentScripts/allPages/allPages.js b/contentScripts/allPages/allPages.js index 917aac9..b5b22aa 100644 --- a/contentScripts/allPages/allPages.js +++ b/contentScripts/allPages/allPages.js @@ -2,17 +2,18 @@ injectScript(chrome.extension.getURL('/contentScripts/allPages/accessAllPages.js'), 'head'); /* disable annoying fuckn popup */ -popup = document.querySelector('div.ad-alert-wrapper'); -if(popup && popup.style.display !== "none") - document.querySelector('button.ad-alert-message-continue-btn').click() +var popup = document.querySelector('div.ad-alert-wrapper'); +if (popup && popup.style.display !== "none") { + document.querySelector('button.ad-alert-message-continue-btn').click(); +} /* Retrieve credentials from Google Storage*/ -chrome.storage.sync.get(['searchOrder', 'searchSort'], function(value){ +chrome.storage.sync.get(['searchOrder', 'searchSort'], function (value) { /* Update links to order and filter them with our values */ - if(value.searchOrder && value.searchSort){ + if (value.searchOrder && value.searchSort) { var elements = document.querySelectorAll('a[href$="do=search"]'); for (var i = 0; i < elements.length; i++) { - elements[i].href += '&order=' + value.searchOrder +'&sort=' + value.searchSort; + elements[i].href += '&order=' + value.searchOrder + '&sort=' + value.searchSort; } } }); diff --git a/contentScripts/homePage.js b/contentScripts/homePage.js index af0b9b7..e62e0af 100644 --- a/contentScripts/homePage.js +++ b/contentScripts/homePage.js @@ -1,2 +1,2 @@ var iframeYoutube = document.querySelector('iframe[src="https://www.youtube.com/embed/8dmTl4xAefk"]'); -iframeYoutube.remove(); \ No newline at end of file +iframeYoutube.remove(); diff --git a/contentScripts/search/search.js b/contentScripts/search/search.js index 33a7f4f..990f228 100644 --- a/contentScripts/search/search.js +++ b/contentScripts/search/search.js @@ -1,22 +1,22 @@ /* Inject scripts don't forget to add them to web_accessible_resources in manifest */ injectScript(chrome.extension.getURL('contentScripts/search/accessSearch.js'), 'head'); - function addDlButton(idx, torrentId, yggToken) { - var cell = table.rows[idx].cells[2]; - var downloadButton = document.createElement('a') - var downloadIcon = document.createElement('img') - downloadIcon.setAttribute('src', chrome.extension.getURL("img/download.png")); - downloadButton.appendChild(downloadIcon); - downloadButton.setAttribute('href', "https://www2.yggtorrent.ch/rss/download?id=" + torrentId + "&passkey=" + yggToken); - cell.appendChild(downloadButton); - } +/********************************************************************/ - chrome.storage.sync.get(['yggToken'], function(value){ - if(value.yggToken){ - for (var i = 0; i < table.rows.length; i++) { - var torrentId = table.rows[i].cells[2].children[0].getAttribute('target') - addDlButton(i, torrentId, value.yggToken); - } +/* Retrieve credentials from Google Storage*/ +chrome.storage.sync.get(['yggToken'], function (value) { + if (value.yggToken) { + /* Add a download button on each torrent line */ + var table = document.getElementsByTagName('tbody')[1]; + for (var i = 0; i < table.rows.length; i++) { + var torrentId = table.rows[i].cells[2].children[0].getAttribute('target') + var cell = table.rows[i].cells[2]; + var downloadButton = document.createElement('a') + var downloadIcon = document.createElement('img') + downloadIcon.setAttribute('src', chrome.extension.getURL("img/download.png")); + downloadButton.appendChild(downloadIcon); + downloadButton.setAttribute('href', "https://www2.yggtorrent.ch/rss/download?id=" + torrentId + "&passkey=" + value.yggToken); + cell.appendChild(downloadButton); } - }); -} \ No newline at end of file + } +}); diff --git a/css/style.css b/css/style.css index 63b0dbe..fab1ff3 100644 --- a/css/style.css +++ b/css/style.css @@ -47,4 +47,4 @@ select.warning:focus{ select.form-control { height: auto !important; -} \ No newline at end of file +} diff --git a/js/utilsFunctions.js b/js/utilsFunctions.js index 55b4c26..2e8f27e 100644 --- a/js/utilsFunctions.js +++ b/js/utilsFunctions.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ function injectScript(file, node) { var th = document.getElementsByTagName(node)[0]; var s = document.createElement('script'); @@ -13,4 +14,4 @@ function injectLink(file, node) { link.type = "text/css"; link.rel = "stylesheet"; th.appendChild(link); -} \ No newline at end of file +} diff --git a/manifest.json b/manifest.json index 6fcd963..b39c619 100644 --- a/manifest.json +++ b/manifest.json @@ -30,7 +30,7 @@ { "matches": ["https://*.yggtorrent.ch/torrent/*"], "run_at": "document_idle", - "js": ["js/utilsFunctions.js", "contentScripts/addTorrent/functions.js", "contentScripts/addTorrent/addTorrent.js"] + "js": ["js/utilsFunctions.js", "contentScripts/addTorrent/addTorrent.js"] }, { "matches": ["https://*.yggtorrent.ch/"], diff --git a/options/options.html b/options/options.html index 28bc105..4746789 100644 --- a/options/options.html +++ b/options/options.html @@ -99,4 +99,4 @@ - \ No newline at end of file + diff --git a/options/options.js b/options/options.js index 1844957..a899b96 100644 --- a/options/options.js +++ b/options/options.js @@ -8,7 +8,7 @@ var storedValues = [ 'categories', 'searchSort', 'searchOrder' -] +]; var yggToken = document.getElementById('yggToken'); var discordWebhookUrl = document.getElementById('discordWebhookUrl'); @@ -21,103 +21,103 @@ var displayAddCategoriesSection = document.getElementById('displayAddCategoriesS var addCategories = document.getElementById('addCategoriesSection'); var categoriesTable = document.getElementById('categoriesTable').children[1]; -var buttonSaveCategories = document.getElementById('saveCategories'); -var buttonRestoreCategories = document.getElementById('restoreCategories'); +var buttonSaveCategories = document.getElementById('saveCategories'); +var buttonRestoreCategories = document.getElementById('restoreCategories'); var defaultCategories = []; var categories = []; var searchSort = document.getElementById('searchSort'); var searchOrder = document.getElementById('searchOrder'); -chrome.storage.sync.get(storedValues, function(value){ - if(value.yggToken) +chrome.storage.sync.get(storedValues, function (value) { + if (value.yggToken) { yggToken.value = value.yggToken; - if(value.discordWebhookUrl) + } + if (value.discordWebhookUrl) { discordWebhookUrl.value = value.discordWebhookUrl; - if(value.discordUserName) + } + if (value.discordUserName) { discordUserName.value = value.discordUserName; - if(value.displayDiscord){ + } + if (value.displayDiscord) { displayDiscord.checked = value.displayDiscord; - if (displayDiscord.checked){ + if (displayDiscord.checked) { discordIntegration.style.display = "block"; displayAddCategoriesSection.style.display = "block"; - if (displayAddCategories.checked){ + if (displayAddCategories.checked) { addCategories.style.display = "block"; } - } - else { + } else { discordIntegration.style.display = "none"; displayAddCategoriesSection.style.display = "none"; addCategories.style.display = "none"; } - if(value.displayAddCategories){ + if (value.displayAddCategories) { displayAddCategories.checked = value.displayAddCategories; - if (displayAddCategories.checked){ + if (displayAddCategories.checked) { addCategories.style.display = "block"; - } - else { + } else { addCategories.style.display = "none"; } } } - if(value.categories){ + if (value.categories) { categories = value.categories; makeCategoriesTable(categories); } - if(value.defaultCategories){ + if (value.defaultCategories) { defaultCategories = value.defaultCategories; - buttonSaveCategories.addEventListener('click', saveCategories) - buttonRestoreCategories.addEventListener('click', restoreDefaultCategories) + buttonSaveCategories.addEventListener('click', saveCategories); + buttonRestoreCategories.addEventListener('click', restoreDefaultCategories); } - if(value.searchSort){ + if (value.searchSort) { document.querySelector('#searchSort option[value=' + value.searchSort + ']').selected = "selected"; } - if(value.searchOrder){ + if (value.searchOrder) { document.querySelector('#searchOrder option[value=' + value.searchOrder + ']').selected = "selected"; } }); function addToStorage(name, value) { - chrome.storage.sync.set({ [name]: value }); + chrome.storage.sync.set({[name]: value}); } document.addEventListener('DOMContentLoaded', function () { - yggToken.addEventListener('input', function(){ + yggToken.addEventListener('input', function () { addToStorage('yggToken', this.value); }); - discordWebhookUrl.addEventListener('input', function(){ + discordWebhookUrl.addEventListener('input', function () { addToStorage('discordWebhookUrl', this.value); }); - discordUserName.addEventListener('input', function(){ + discordUserName.addEventListener('input', function () { addToStorage('discordUserName', this.value); }); - displayDiscord.addEventListener('input', function(){ + displayDiscord.addEventListener('input', function () { addToStorage('displayDiscord', this.checked); - if (this.checked){ + if (this.checked) { discordIntegration.style.display = "block"; displayAddCategoriesSection.style.display = "block"; - if (displayAddCategories.checked){ + if (displayAddCategories.checked) { addCategories.style.display = "block"; } - } - else { + } else { discordIntegration.style.display = "none"; displayAddCategoriesSection.style.display = "none"; addCategories.style.display = "none"; } }); - displayAddCategories.addEventListener('input', function(){ + displayAddCategories.addEventListener('input', function () { addToStorage('displayAddCategories', this.checked); - if (this.checked) + if (this.checked) { addCategories.style.display = "block"; - else { + } else { addCategories.style.display = "none"; } }); - searchSort.addEventListener('change', function(){ + searchSort.addEventListener('change', function () { addToStorage('searchSort', this.options[this.selectedIndex].value); }); - searchOrder.addEventListener('change', function(){ + searchOrder.addEventListener('change', function () { addToStorage('searchOrder', this.options[this.selectedIndex].value); }); }); @@ -127,20 +127,20 @@ document.addEventListener('DOMContentLoaded', function () { /***********************/ function makeCategoriesArray() { - lines = Array.from(categoriesTable.children) - var categoriesArray = [] - for(var i in lines){ + var lines = Array.from(categoriesTable.children); + var categoriesArray = []; + for (var i in lines) { var line = lines[i]; - name = line.getElementsByTagName('input').namedItem('name').value; - season = line.getElementsByTagName('input').namedItem('season').checked; - urls = line.getElementsByTagName('textarea').namedItem('urls').value; - urlsArray = urls.split('\n').filter(x => x != '') - if(name != ''){ + var name = line.getElementsByTagName('input').namedItem('name').value; + var season = line.getElementsByTagName('input').namedItem('season').checked; + var urls = line.getElementsByTagName('textarea').namedItem('urls').value; + var urlsArray = urls.split('\n').filter(x => x !== ''); + if (name !== '') { categoriesArray.push({ name: name, season: season, urls: urlsArray - }) + }); } } return categoriesArray; @@ -148,18 +148,18 @@ function makeCategoriesArray() { function makeCategoriesTable(categories) { var tbody = document.createElement('tbody'); - for (var i in categories){ + for (var i in categories) { var line = categories[i]; var tr = getTr(line.name, line.season, line.urls, "Supprimer", deleteLine); - tbody.appendChild(tr) + tbody.appendChild(tr); } - var tr = getTr('', false, [], "Ajouter", addLine); - tbody.appendChild(tr) - categoriesTable.parentNode.replaceChild(tbody, categoriesTable) + tr = getTr('', false, [], "Ajouter", addLine); + tbody.appendChild(tr); + categoriesTable.parentNode.replaceChild(tbody, categoriesTable); categoriesTable = tbody; } -function getTr(name, season, urls, buttonText, buttonOnClick){ +function getTr(name, season, urls, buttonText, buttonOnClick) { var tr = document.createElement('tr'); var tdName = document.createElement('td'); @@ -181,15 +181,15 @@ function getTr(name, season, urls, buttonText, buttonOnClick){ var tdUrls = document.createElement('td'); var textareaUrls = document.createElement('textarea'); textareaUrls.name = "urls"; - textareaUrls.rows="5"; - textareaUrls.cols="75"; + textareaUrls.rows = "5"; + textareaUrls.cols = "75"; textareaUrls.value = urls.join('\n'); tdUrls.appendChild(textareaUrls); tr.appendChild(tdUrls); var tdTrash = document.createElement('td'); var button = document.createElement('button'); - button.innerText = buttonText + button.innerText = buttonText; button.addEventListener("click", buttonOnClick); tdTrash.appendChild(button); tr.appendChild(tdTrash); @@ -201,26 +201,26 @@ function getTr(name, season, urls, buttonText, buttonOnClick){ /* Events Handlers */ /*******************/ -function addLine(){ - this.innerText = "Supprimer" +function addLine() { + this.innerText = "Supprimer"; this.removeEventListener("click", addLine); this.addEventListener("click", deleteLine); var tr = getTr('', false, [], "Ajouter", addLine); - categoriesTable.appendChild(tr) + categoriesTable.appendChild(tr); } -function deleteLine(){ - this.parentElement.parentElement.remove() +function deleteLine() { + this.parentElement.parentElement.remove(); } -function saveCategories(){ +function saveCategories() { categories = makeCategoriesArray(); addToStorage('categories', categories); makeCategoriesTable(categories); } -function restoreDefaultCategories(){ - categories = defaultCategories +function restoreDefaultCategories() { + categories = defaultCategories; addToStorage('categories', categories); makeCategoriesTable(categories); }