From f8b89da45392a04878478dbf58389155e650c13d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Rigal?= Date: Wed, 29 Sep 2021 17:41:52 +0200 Subject: [PATCH] Added context menu downloads --- README.md | 2 + background.js | 119 +++++++++++++++++++++++++++++++ css/toastr.min.css | 6 ++ js/{ => lib}/bootstrap.min.js | 0 js/{ => lib}/jquery-3.5.1.min.js | 0 js/lib/toastr.min.js | 7 ++ js/pyload-api.js | 16 +++-- manifest.json | 11 ++- options.html | 4 +- options.js | 2 + popup.html | 4 +- 11 files changed, 158 insertions(+), 13 deletions(-) create mode 100644 background.js create mode 100644 css/toastr.min.css rename js/{ => lib}/bootstrap.min.js (100%) rename js/{ => lib}/jquery-3.5.1.min.js (100%) create mode 100644 js/lib/toastr.min.js diff --git a/README.md b/README.md index 6f144ea..e9d2e0d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Features: - One-click download - Monitor current downloads - Monitor global bandwidth usage & one-click speed limiter +- Context menu downloads ## Usage @@ -15,6 +16,7 @@ Go to the option page by clicking on the `settings` icon and fill the IP address The current downloads are always displayed. If the current active tab has a downloadable file, an extra panel will be displayed with a button to start the download. +A download can also be added by right-clicking on a link and selecting `Download with Yape`. ## Screenshots diff --git a/background.js b/background.js new file mode 100644 index 0000000..d0fcd9d --- /dev/null +++ b/background.js @@ -0,0 +1,119 @@ +importScripts('js/storage.js'); + +const notify = function(title, message) { + return chrome.notifications.create('', { + type: 'basic', + title: title || 'Yape', + message: message || '', + iconUrl: './images/icon.png', + }); +} + +const loadToastr = function(tab, callback) { + chrome.scripting.insertCSS({ + target: {tabId: tab.id}, + files: ['css/toastr.min.css'] + }, function() { + chrome.scripting.executeScript({ + target: {tabId: tab.id}, + files: ['js/lib/jquery-3.5.1.min.js', 'js/lib/toastr.min.js'] + }, function() { + chrome.scripting.executeScript({ + target: {tabId: tab.id}, + func: () => { + toastr.options = { + closeButton: false, + newestOnTop: false, + progressBar: false, + positionClass: 'toastr-top-right', + containerId: 'toastr-container', + toastClass: 'toastr', + iconClasses: { + error: 'toastr-error', + info: 'toastr-info', + success: 'toastr-success', + warning: 'toastr-warning' + }, + iconClass: 'toastr-info', + titleClass: 'toastr-title', + messageClass: 'toastr-message', + closeClass: 'toastr-close-button', + timeOut: 8000 + }; + } + }, function() { + callback(); + }); + }); + }); +} + +const sendToast = function(tab, type, message) { + chrome.scripting.executeScript({ + target: {tabId: tab.id}, + func: (type, message) => { + toastr.remove(); + toastr[type](message); + }, + args: [type, message] + }); +} + +const downloadLink = function(info, tab) { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 5000) + fetch(`${origin}/api/statusServer`, { signal: controller.signal }) + .then(response => response.json()) + .then(json => { + clearTimeout(timeoutId); + if (json.hasOwnProperty('error')) { + if (json.error === 'Forbidden') sendToast(tab, 'error', `Invalid credentials, make sure you are logged in`); + else sendToast(tab, 'error', `Server unreachable`); + return; + } + fetch(`${origin}/api/checkURLs?urls=["${encodeURIComponent(info.linkUrl)}"]`) + .then(response => response.json()) + .then(json => { + if (json.hasOwnProperty('error')) { + sendToast(tab, 'error', `Error checking url: ${json}`); + return; + } + const safeName = encodeURIComponent(info.linkUrl.replace(/[^a-z0-9._\-]/gi, '_')); + fetch(`${origin}/api/addPackage?name="${safeName}"&links=["${encodeURIComponent(info.linkUrl)}"]`) + .then(response => response.json()) + .then(json => { + if (json.hasOwnProperty('error')) { + sendToast(tab, 'error', `Error requesting download: ${json}`); + return; + } + sendToast(tab, 'success', 'Download added successfully'); + }); + }); + }) + .catch(e => sendToast(tab, 'error', `Server unreachable`)); +} + +chrome.runtime.onInstalled.addListener( () => { + chrome.contextMenus.create({ + id: 'yape', + title: 'Download with Yape', + contexts:['link'] + }); +}); + +chrome.runtime.onMessage.addListener( data => { + if (data.type === 'notification') { + notify(data.title, data.message); + } +}); + +chrome.contextMenus.onClicked.addListener( ( info, tab ) => { + if ('yape' === info.menuItemId) { + loadToastr(tab, function() { + pullStoredData(function() { + sendToast(tab, 'info', 'Requesting download...'); + downloadLink(info, tab); + }); + }); + } +} ); diff --git a/css/toastr.min.css b/css/toastr.min.css new file mode 100644 index 0000000..e00cc03 --- /dev/null +++ b/css/toastr.min.css @@ -0,0 +1,6 @@ +/* + * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance, + * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, + * make sure you copy the url from the website since the url may change between versions. + * */ +.toastr-title{font-weight:700;font-size:medium}.toastr-message{-ms-word-wrap:break-word;word-wrap:break-word;font-size:medium}.toastr-message a,.toastr-message label{color:#FFF}.toastr-message a:hover{color:#CCC;text-decoration:none}.toastr-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90);line-height:1}.toastr-close-button:focus,.toastr-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toastr-close-button{left:-.3em;float:left;right:.3em}button.toastr-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toastr-top-center{top:0;right:0;width:100%}.toastr-bottom-center{bottom:0;right:0;width:100%}.toastr-top-full-width{top:0;right:0;width:100%}.toastr-bottom-full-width{bottom:0;right:0;width:100%}.toastr-top-left{top:12px;left:12px}.toastr-top-right{top:12px;right:12px}.toastr-bottom-right{right:12px;bottom:12px}.toastr-bottom-left{bottom:12px;left:12px}#toastr-container{position:fixed;z-index:999999;pointer-events:none}#toastr-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toastr-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90)}#toastr-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toastr-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toastr-container>.toastr-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toastr-container>.toastr-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toastr-container>.toastr-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toastr-container>.toastr-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toastr-container.toastr-bottom-center>div,#toastr-container.toastr-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toastr-container.toastr-bottom-full-width>div,#toastr-container.toastr-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toastr{background-color:#030303}.toastr-success{background-color:#51A351}.toastr-error{background-color:#BD362F}.toastr-info{background-color:#2F96B4}.toastr-warning{background-color:#F89406}.toastr-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toastr-container>div{padding:8px 8px 8px 50px;width:11em}#toastr-container>div.rtl{padding:8px 50px 8px 8px}#toastr-container .toastr-close-button{right:-.2em;top:-.2em}#toastr-container .rtl .toastr-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){#toastr-container>div{padding:8px 8px 8px 50px;width:18em}#toastr-container>div.rtl{padding:8px 50px 8px 8px}#toastr-container .toastr-close-button{right:-.2em;top:-.2em}#toastr-container .rtl .toastr-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){#toastr-container>div{padding:15px 15px 15px 50px;width:25em}#toastr-container>div.rtl{padding:15px 50px 15px 15px}} \ No newline at end of file diff --git a/js/bootstrap.min.js b/js/lib/bootstrap.min.js similarity index 100% rename from js/bootstrap.min.js rename to js/lib/bootstrap.min.js diff --git a/js/jquery-3.5.1.min.js b/js/lib/jquery-3.5.1.min.js similarity index 100% rename from js/jquery-3.5.1.min.js rename to js/lib/jquery-3.5.1.min.js diff --git a/js/lib/toastr.min.js b/js/lib/toastr.min.js new file mode 100644 index 0000000..3e3f46f --- /dev/null +++ b/js/lib/toastr.min.js @@ -0,0 +1,7 @@ +/* + * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance, + * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, + * make sure you copy the url from the website since the url may change between versions. + * */ +!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return g({type:O.error,iconClass:m().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=m()),v=e("#"+t.containerId),v.length?v:(n&&(v=d(t)),v)}function o(e,t,n){return g({type:O.info,iconClass:m().iconClasses.info,message:e,optionsOverride:n,title:t})}function s(e){C=e}function i(e,t,n){return g({type:O.success,iconClass:m().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return g({type:O.warning,iconClass:m().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e,t){var o=m();v||n(o),u(e,o,t)||l(o)}function c(t){var o=m();return v||n(o),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function l(t){for(var n=v.children(),o=n.length-1;o>=0;o--)u(e(n[o]),t)}function u(t,n,o){var s=!(!o||!o.force)&&o.force;return!(!t||!s&&0!==e(":focus",t).length)&&(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0)}function d(t){return v=e("
").attr("id",t.containerId).addClass(t.positionClass),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,closeMethod:!1,closeDuration:!1,closeEasing:!1,closeOnHover:!0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",escapeHtml:!1,target:"body",closeHtml:'',closeClass:"toast-close-button",newestOnTop:!0,preventDuplicates:!1,progressBar:!1,progressClass:"toast-progress",rtl:!1}}function f(e){C&&C(e)}function g(t){function o(e){return null==e&&(e=""),e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function s(){c(),u(),d(),p(),g(),C(),l(),i()}function i(){var e="";switch(t.iconClass){case"toast-success":case"toast-info":e="polite";break;default:e="assertive"}I.attr("aria-live",e)}function a(){E.closeOnHover&&I.hover(H,D),!E.onclick&&E.tapToDismiss&&I.click(b),E.closeButton&&j&&j.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),E.onCloseClick&&E.onCloseClick(e),b(!0)}),E.onclick&&I.click(function(e){E.onclick(e),b()})}function r(){I.hide(),I[E.showMethod]({duration:E.showDuration,easing:E.showEasing,complete:E.onShown}),E.timeOut>0&&(k=setTimeout(b,E.timeOut),F.maxHideTime=parseFloat(E.timeOut),F.hideEta=(new Date).getTime()+F.maxHideTime,E.progressBar&&(F.intervalId=setInterval(x,10)))}function c(){t.iconClass&&I.addClass(E.toastClass).addClass(y)}function l(){E.newestOnTop?v.prepend(I):v.append(I)}function u(){if(t.title){var e=t.title;E.escapeHtml&&(e=o(t.title)),M.append(e).addClass(E.titleClass),I.append(M)}}function d(){if(t.message){var e=t.message;E.escapeHtml&&(e=o(t.message)),B.append(e).addClass(E.messageClass),I.append(B)}}function p(){E.closeButton&&(j.addClass(E.closeClass).attr("role","button"),I.prepend(j))}function g(){E.progressBar&&(q.addClass(E.progressClass),I.prepend(q))}function C(){E.rtl&&I.addClass("rtl")}function O(e,t){if(e.preventDuplicates){if(t.message===w)return!0;w=t.message}return!1}function b(t){var n=t&&E.closeMethod!==!1?E.closeMethod:E.hideMethod,o=t&&E.closeDuration!==!1?E.closeDuration:E.hideDuration,s=t&&E.closeEasing!==!1?E.closeEasing:E.hideEasing;if(!e(":focus",I).length||t)return clearTimeout(F.intervalId),I[n]({duration:o,easing:s,complete:function(){h(I),clearTimeout(k),E.onHidden&&"hidden"!==P.state&&E.onHidden(),P.state="hidden",P.endTime=new Date,f(P)}})}function D(){(E.timeOut>0||E.extendedTimeOut>0)&&(k=setTimeout(b,E.extendedTimeOut),F.maxHideTime=parseFloat(E.extendedTimeOut),F.hideEta=(new Date).getTime()+F.maxHideTime)}function H(){clearTimeout(k),F.hideEta=0,I.stop(!0,!0)[E.showMethod]({duration:E.showDuration,easing:E.showEasing})}function x(){var e=(F.hideEta-(new Date).getTime())/F.maxHideTime*100;q.width(e+"%")}var E=m(),y=t.iconClass||E.iconClass;if("undefined"!=typeof t.optionsOverride&&(E=e.extend(E,t.optionsOverride),y=t.optionsOverride.iconClass||y),!O(E,t)){T++,v=n(E,!0);var k=null,I=e("
"),M=e("
"),B=e("
"),q=e("
"),j=e(E.closeHtml),F={intervalId:null,hideEta:null,maxHideTime:null},P={toastId:T,state:"visible",startTime:new Date,options:E,map:t};return s(),r(),a(),f(P),E.debug&&console&&console.log(P),I}}function m(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),w=void 0))}var v,C,w,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:c,error:t,getContainer:n,info:o,options:{},subscribe:s,success:i,version:"2.1.3",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)}); +//# sourceMappingURL=toastr.js.map \ No newline at end of file diff --git a/js/pyload-api.js b/js/pyload-api.js index 2a1b556..e963933 100644 --- a/js/pyload-api.js +++ b/js/pyload-api.js @@ -4,11 +4,15 @@ function getServerStatus(callback) { xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { - const response = JSON.parse(xhr.responseText); - if (response.hasOwnProperty('error')) { - if (callback) callback(false, response.error); - } else { - if (callback) callback(true, null, response); + try { + const response = JSON.parse(xhr.responseText); + if (response.hasOwnProperty('error')) { + if (callback) callback(false, response.error); + } else { + if (callback) callback(true, null, response); + } + } catch { + if (callback) callback(false, 'Server unreachable'); } } } @@ -25,7 +29,6 @@ function login(username, password, callback) { xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { - console.log(xhr.responseText); if (JSON.parse(xhr.responseText) !== false) { if (callback) callback(true); } else { @@ -91,7 +94,6 @@ function setLimitSpeedStatus(limitSpeed, callback) { xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { - console.log(xhr.responseText); const success = JSON.parse(xhr.responseText); if (callback) callback(success); } diff --git a/manifest.json b/manifest.json index 05ee5e3..ba039e4 100644 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,8 @@ { "name": "Yape", - "version": "0.0.4", + "version": "0.0.5", "description": "Extension for PyLoad to easily monitor and add downloads", - "permissions": ["activeTab", "storage"], + "permissions": ["activeTab", "storage", "contextMenus", "scripting"], "host_permissions": ["http://*/", "https://*/"], "action": { "default_popup": "popup.html", @@ -20,5 +20,12 @@ "128": "images/icon.png" }, "options_page": "options.html", + "background": { + "service_worker": "background.js" + }, + "web_accessible_resources": [{ + "resources": ["js/lib/toastr.min.js", "js/lib/jquery-3.5.1.min.js", "css/toastr.min.css"], + "matches": [""] + }], "manifest_version": 3 } diff --git a/options.html b/options.html index 1c3c494..458c96f 100644 --- a/options.html +++ b/options.html @@ -76,8 +76,8 @@
- - + + diff --git a/options.js b/options.js index 53d6d7d..d3e54a3 100644 --- a/options.js +++ b/options.js @@ -46,6 +46,7 @@ function getProtocol() { } function updateLoggedInStatus() { + saveButton.disabled = true; loginStatusOKDiv.hidden = true; loginStatusKODiv.hidden = true; loginButton.hidden = true; @@ -55,6 +56,7 @@ function updateLoggedInStatus() { loginStatusOKDiv.hidden = !loggedIn; loginStatusKODiv.hidden = loggedIn; loginButton.hidden = loggedIn; + saveButton.disabled = false; }); } diff --git a/popup.html b/popup.html index 5144764..60deed3 100644 --- a/popup.html +++ b/popup.html @@ -45,8 +45,8 @@ - - + +