-
Notifications
You must be signed in to change notification settings - Fork 8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update downloads to mv3 #844
Changes from all commits
b96f4fe
d3150b6
2b85fdd
c210c32
a491288
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should probably remove this, or otherwise bump it to Chrome 88 (the first version with Manifest V3 support). |
||
"permissions": [ | ||
"downloads", | ||
"activeTab", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for moving to activeTab here! |
||
"scripting" | ||
], | ||
"content_scripts":[ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Given that we inject this script from the popup, do we need a content script? |
||
{ | ||
"matches": ["<all_urls>"], | ||
"js": ["send_links.js"] | ||
} | ||
], | ||
"action": { | ||
"default_popup": "popup.html" | ||
}, | ||
"manifest_version": 3 | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'] | ||
|
||
}); | ||
|
||
}); | ||
}); | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We weren't previously logging here, so I think we should probably remove this? |
||
|
||
//using runtime sendmessage to send the links to the popup | ||
chrome.runtime.sendMessage({ | ||
request : links, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We used to just send links, rather than an object with a |
||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given the previous version was 0.1, this should probably be 0.2?