Created
January 28, 2010 00:02
-
-
Save hbussell/288293 to your computer and use it in GitHub Desktop.
greasemonkey script to download page resources with wget
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Download with Wget | |
// @namespace http://userscripts.org/users/14536 | |
// @description Creates code to download web pages, images and other files using wget | |
// @include * | |
// ==/UserScript== | |
// Last updated 2009-01-13 | |
function $(id) { return document.getElementById(id); } | |
function l(id,f) { $(id).addEventListener('click',f,false); } | |
function v(id,val) { if (val!=null) { $(id).value=val; } return $(id).value; } | |
function popup() { | |
var loc = location.href.toLowerCase(); | |
if ($('wgetoptions')) { return; } | |
var style = '#wgetcontainer { position:absolute; top:10px; left:0; right:0; z-index:10000000; }'+ | |
'#wgetoptions { width:700px; margin:0 auto; background:#f9f9f9; border:3px double black; padding:10px; font-family:serif; }'+ | |
'#wgetoptions table { margin:0 auto; }'+ | |
'#wgetoptions td { vertical-align:top; padding-bottom:10px; border:none; text-align:left; }'+ | |
'#wgetoptions td, #wgetoptions label { font-size:14px; font-weight:normal; font-family:serif; color:black; }'+ | |
'#wgetoptions .wgetpreset { font-size:11px; }'+ | |
'#wgetoptions .wgetpreset span { color:#003399; font-style:italic; cursor:pointer; }'+ | |
'#wgetoptions input[type=text] { width:500px; }'+ | |
'#wgetoptions input[type=button], #wgetoptions input[type=submit] { width:150px; }'+ | |
'#wgetcode { width:100%; height:200px; }'+ | |
'#wgetshadow { background:black; opacity:0.6; z-index:9999999; top:0; right:0; left:0; bottom:0; position:fixed; }'; | |
GM_addStyle(style.replace(/;/g,' ! important;')); | |
GM_addStyle('.wgetadvanced { display:none; }'); | |
var shadow = document.createElement('shadow'); | |
shadow.id = 'wgetshadow'; | |
var div = document.createElement('div'); | |
div.id = 'wgetcontainer'; | |
div.innerHTML = '<div id="wgetoptions"><form onsubmit="return false;"><table>'+ | |
'<tr><td></td><td></td></tr>'+ | |
'<tr><td>Source: </td><td><input type="checkbox" id="wgetlinks" ' + (GM_getValue('links',true) ? 'checked="checked" ' : '') + '/><label for="wgetlinks">Links</label> <input type="checkbox" id="wgetimages" ' + (GM_getValue('images',false) ? 'checked="checked" ' : '') + '/><label for="wgetimages">Images</label> <input type="checkbox" id="wgetcss" ' + (GM_getValue('css',false) ? 'checked="checked" ' : '') + '/><label for="wgetcss">CSS</label></td><td style="text-align:right ! important;"><select id="wgetmode"><option>Manual</option><option>Facebook Pictures</option><option>Google Image Search</option><option>MySpace Pictures</option></select></td></tr>'+ | |
'<tr><td>Extensions Filter: </td><td colspan="2"><input type="text" id="wgetextensions" /><br /><span class="wgetpreset">presets: <span id="wgetextall">All</span> - <span id="wgetextimg">Images</span> - <span id="wgetextav">Audio/Video</span> - <span id="wgetextweb">Web Pages</span></span></td></tr>'+ | |
'<tr class="wgetadvanced"><td>Regex Filter: </td><td colspan="2"><input type="text" id="wgetregex" /></td></tr>'+ | |
'<tr class="wgetadvanced"><td>Regex Replace: </td><td colspan="2"><input type="text" id="wgetfind" style="width:248px ! important;" /> <input type="text" id="wgetreplace" style="width:247px ! important;" /></td></tr>'+ | |
'<tr class="wgetadvanced"><td>User Agent: </td><td colspan="2"><input type="text" id="wgetuseragent" value="' + navigator.userAgent + '" /><br /><span class="wgetpreset">presets: <span id="wgetuadef">Browser Default</span> - <span id="wgetuawget">Wget</span> - <span id="wgetuaffl">Firefox on Linux</span> - <span id="wgetuaie">IE on Windows</span></span></td></tr>'+ | |
'<tr><td><input type="checkbox" id="wgetadvanced" /><label for="wgetadvanced">Advanced</label><input type="checkbox" id="wgetfile" /><label for="wgetfile">Each resource as line</label></td><td colspan="2" style="text-align:right ! important;"><input type="submit" id="wgetcreate" value="Create Code" /> <input type="button" id="wgetreset" value="Reset" /> <input type="button" id="wgetclose" value="Close" /></td></tr>'+ | |
'<tr><td colspan="3"><textarea id="wgetcode" onmouseover="this.focus(); this.select();"></textarea></td></tr>'+ | |
'<tr><td colspan="3" id="status">Ready...</td></tr>'+ | |
'</table></form>'; | |
document.body.appendChild(div); | |
document.body.appendChild(shadow); | |
window.scroll(0,0); | |
if (GM_getValue('advanced',false)) { $('wgetadvanced').checked = 'checked'; toggleAdvanced(true); } | |
if (loc.indexOf('images.google.')!=-1) { changeMode('Google Image Search'); } | |
else if (loc.indexOf('facebook.com')!=-1) { changeMode('Facebook Pictures'); } | |
else if (loc.indexOf('myspace.com')!=-1) { changeMode('MySpace Pictures'); } | |
l('wgetadvanced',function(e){ GM_setValue('advanced',e.target.checked); toggleAdvanced(e.target.checked); }); | |
l('wgetlinks',function(e){ GM_setValue('links',e.target.checked); }); | |
l('wgetimages',function(e){ GM_setValue('images',e.target.checked); }); | |
l('wgetcss',function(e){ GM_setValue('css',e.target.checked); }); | |
l('wgetuaffl',function(){ v('wgetuseragent','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121622 Firefox/3.0.5'); }); | |
l('wgetuaie',function(){ v('wgetuseragent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'); }); | |
l('wgetuadef',function(){ v('wgetuseragent',navigator.userAgent); }); | |
l('wgetuawget',function(){ v('wgetuseragent',''); }); | |
l('wgetextall',function(){ v('wgetextensions',''); }); | |
l('wgetextimg',function(){ v('wgetextensions','jpg,jpeg,gif,png,bmp,svg'); }); | |
l('wgetextav',function(){ v('wgetextensions','avi,flv,mp3,mp4,mpg,mpeg,m4a,m4v,ogg,aac,wma,wmv'); }); | |
l('wgetextweb',function(){ v('wgetextensions','htm,html,php,asp'); }); | |
l('wgetcreate',function(){ makeCode(); }); | |
l('wgetreset',function(){ changeFields('','','','',navigator.userAgent,true,false,false); }); | |
l('wgetclose',function(){ closePopup(); }); | |
$('wgetmode').addEventListener('change', function(e) { changeMode(e.target.options[e.target.selectedIndex].value); }, false); | |
} | |
function toggleAdvanced(bool) { | |
var adv = document.evaluate("//tr[contains(@class,'wgetadvanced')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE , null); | |
for (var i=0; i<adv.snapshotLength; i++) { adv.snapshotItem(i).style.display = bool ? 'table-row' : 'none'; } | |
} | |
function changeFields(ext,regex,find,replace,ua,links,images,css) { | |
v('wgetextensions',ext); | |
v('wgetregex',regex); | |
v('wgetfind',find); | |
v('wgetreplace',replace); | |
v('wgetuseragent',ua); | |
if (links!=null) { $('wgetlinks').checked = links ? 'checked' : ''; } | |
if (images!=null) { $('wgetimages').checked = images ? 'checked' : ''; } | |
if (css!=null) { $('wgetcss').checked = css ? 'checked' : ''; } | |
} | |
function changeMode(mode) { | |
$('wgetmode').value = mode; | |
GM_setValue('mode',mode); | |
click('wgetuadef'); | |
if (mode=='Manual') { changeFields('','','','',null,true,false,false); } | |
if (mode=='Facebook Pictures') { changeFields('jpg','photos.*\\d\\/[st]\\d','\\/[st]','/n',null,false,true,false); } | |
if (mode=='Google Image Search') { changeFields('','imgurl=','^.*imgurl=([^&]+).*$','$1',null,true,false,false); } | |
if (mode=='MySpace Pictures') { changeFields('jpg','images.*(\\/[am]_|_m\\.)','(\\/|_)[am](_|\\.)','$1l$2',null,false,true,false); } | |
} | |
function closePopup() { | |
$('wgetcontainer').parentNode.removeChild($('wgetcontainer')); | |
$('wgetshadow').parentNode.removeChild($('wgetshadow')); | |
} | |
function click(id) { | |
var evt = document.createEvent('MouseEvents'); | |
evt.initMouseEvent( 'click', true, true, window, 0, 1, 1, 1, 1, false, false, false, false, 0, null ); | |
$(id).dispatchEvent(evt); | |
} | |
function makeCode() { | |
var code = 'wget'; | |
var as_file = v('wgetfile'); | |
if (v('wgetuseragent')!='') { code = code + ' -U "' + v('wgetuseragent').replace(/"/g,'\"') + '"'; } | |
var count = 0; | |
var ext=null, regex=null; | |
if (v('wgetextensions')!='') { ext = new RegExp('\\.(' + v('wgetextensions').replace(/,/g,'|') + ')(\\?.*)?$', 'i'); } | |
if (v('wgetregex')!='') { regex = new RegExp(v('wgetregex'), 'i'); } | |
var doReplace = v('wgetfind')!='' && v('wgetreplace')!=''; | |
var find = doReplace ? new RegExp(v('wgetfind')) : null; | |
var replace = doReplace ? v('wgetreplace') : null; | |
if(as_file){ | |
code = ''; | |
} | |
function addURL(url) { | |
if ((ext==null || ext.test(url)) && (regex==null || regex.test(url))) { | |
if (doReplace) { url = url.replace(find,replace); } | |
if (code.indexOf(url)==-1) { | |
if(as_file){ | |
code = code + url +"\n"; | |
}else{ | |
code = code + ' ' + url; | |
} | |
count++; | |
} | |
} | |
} | |
if ($('wgetlinks').checked) { | |
var elms = document.getElementsByTagName('a'); | |
for (var i=0; i<elms.length; i++) { addURL(elms[i].href); } | |
} | |
if ($('wgetimages').checked) { | |
var elms = document.getElementsByTagName('img'); | |
for (var i=0; i<elms.length; i++) { addURL(elms[i].src); } | |
} | |
if ($('wgetcss').checked) { | |
function checkCSS(elms) { | |
for (var i=0; i<elms.length; i++) { | |
buf = document.defaultView.getComputedStyle(elms[i],null).getPropertyValue('background-image'); | |
if (buf!='none') { addURL(buf.match(/url\((.+)\)/)[1]); } | |
} | |
} | |
var elements = ['body','div','table','tr','th','td','tbody','thead','tfoot' | |
,'button','caption','cite','code','col','colgroup','dd','del','dl','dt','em' | |
,'fieldset','form','h1','h2','h3','h4','h5','h6','i','iframe','img', | |
,'input','ins','label','legend','li','map','menu','ol','optiongroup','option','p', | |
,'pre','q','s','samp','select','small','span','strike','strong','sub','sup', | |
,'textarea','tt','u','var']; | |
for (var i in elements){ | |
var elem = elements[i]; | |
checkCSS(document.getElementsByTagName(elem)); | |
} | |
} | |
$('status').innerHTML = count==0 ? 'No matches found' : count + ' matches found'; | |
$('wgetcode').innerHTML = code; | |
} | |
window.addEventListener('keydown', function(e) { | |
if (e.keyCode==68 && e.shiftKey && e.ctrlKey) { popup(); } | |
if (e.keyCode==27 && $('wgetoptions')) { closePopup(); e.preventDefault(); } | |
}, false); | |
GM_registerMenuCommand('Download with Wget', popup); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment