migrated download links to mv3

This commit is contained in:
Shubham-Rasal
2023-03-08 11:55:23 +05:30
parent d3150b6eee
commit 70e4512277
4 changed files with 201 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
{
"name": "Download Selected Links",
"description": "Select links on a page and download them.",
"version": "0.3",
"minimum_chrome_version": "16.0.884",
"permissions": [
"downloads",
"activeTab",
"scripting"
],
"content_scripts":[
{
"matches": ["<all_urls>"],
"js": ["send_links.js"]
}
],
"action": {
"default_popup": "popup.html"
},
"manifest_version": 3
}

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<head>
<script src='popup.js'></script>
</head>
<body>
<input type=text id=filter placeholder=Filter>
<input type=checkbox id=regex>
<label for=regex>Regex</label><br>
<button id=download0>Download All!</button>
<table id=links>
<tr>
<th><input type=checkbox checked id=toggle_all></th>
<th align=left>URL</th>
</tr>
</table>
<button id=download1>Download All!</button>
</body>
</html>

View File

@@ -0,0 +1,122 @@
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This extension demonstrates using chrome.downloads.download() to
// download URLs.
var allLinks = [];
var visibleLinks = [];
// Display all visible links.
function showLinks() {
var linksTable = document.getElementById('links');
while (linksTable.children.length > 1) {
linksTable.removeChild(linksTable.children[linksTable.children.length - 1])
}
for (var i = 0; i < visibleLinks.length; ++i) {
var row = document.createElement('tr');
var col0 = document.createElement('td');
var col1 = document.createElement('td');
var checkbox = document.createElement('input');
checkbox.checked = true;
checkbox.type = 'checkbox';
checkbox.id = 'check' + i;
col0.appendChild(checkbox);
col1.innerText = visibleLinks[i];
col1.style.whiteSpace = 'nowrap';
col1.onclick = function() {
checkbox.checked = !checkbox.checked;
}
row.appendChild(col0);
row.appendChild(col1);
linksTable.appendChild(row);
}
}
// Toggle the checked state of all visible links.
function toggleAll() {
var checked = document.getElementById('toggle_all').checked;
for (var i = 0; i < visibleLinks.length; ++i) {
document.getElementById('check' + i).checked = checked;
}
}
// Download all visible checked links.
function downloadCheckedLinks() {
for (var i = 0; i < visibleLinks.length; ++i) {
if (document.getElementById('check' + i).checked) {
chrome.downloads.download({url: visibleLinks[i]},
function(id) {
});
}
}
window.close();
}
// Re-filter allLinks into visibleLinks and reshow visibleLinks.
function filterLinks() {
var filterValue = document.getElementById('filter').value;
if (document.getElementById('regex').checked) {
visibleLinks = allLinks.filter(function(link) {
return link.match(filterValue);
});
} else {
var terms = filterValue.split(' ');
visibleLinks = allLinks.filter(function(link) {
for (var termI = 0; termI < terms.length; ++termI) {
var term = terms[termI];
if (term.length != 0) {
var expected = (term[0] != '-');
if (!expected) {
term = term.substr(1);
if (term.length == 0) {
continue;
}
}
var found = (-1 !== link.indexOf(term));
if (found != expected) {
return false;
}
}
}
return true;
});
}
showLinks();
}
// Add links to allLinks and visibleLinks, sort and show them. send_links.js is
// injected into all frames of the active tab, so this listener may be called
// multiple times.
chrome.runtime.onMessage.addListener(function(links) {
for (var index in links) {
allLinks.push(links[index]);
}
allLinks.sort();
visibleLinks = allLinks;
showLinks();
});
// Set up event handlers and inject send_links.js into all frames in the active
// tab.
window.onload = function() {
document.getElementById('filter').onkeyup = filterLinks;
document.getElementById('regex').onchange = filterLinks;
document.getElementById('toggle_all').onchange = toggleAll;
document.getElementById('download0').onclick = downloadCheckedLinks;
document.getElementById('download1').onclick = downloadCheckedLinks;
chrome.windows.getCurrent(function (currentWindow) {
chrome.tabs.query({active: true, windowId: currentWindow.id},
function(activeTabs) {
chrome.scripting.executeScript(
{
target: {tabId: activeTabs[0].id},
files: ['send_links.js']
});
});
});
};

View File

@@ -0,0 +1,40 @@
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Send back to the popup a sorted deduped list of valid link URLs on this page.
// The popup injects this script into all frames in the active tab.
var links = [].slice.apply(document.getElementsByTagName('a'));
links = links.map(function(element) {
// Return an anchor's href attribute, stripping any URL fragment (hash '#').
// If the html specifies a relative path, chrome converts it to an absolute
// URL.
var href = element.href;
var hashIndex = href.indexOf('#');
if (hashIndex >= 0) {
href = href.substr(0, hashIndex);
}
return href;
});
links.sort();
// Remove duplicates and invalid URLs.
var kBadPrefix = 'javascript';
for (var i = 0; i < links.length;) {
if (((i > 0) && (links[i] == links[i - 1])) ||
(links[i] == '') ||
(kBadPrefix == links[i].toLowerCase().substr(0, kBadPrefix.length))) {
links.splice(i, 1);
} else {
++i;
}
}
console.log(links)
//using runtime sendmessage to send the links to the popup
chrome.runtime.sendMessage({
request : links,
});