function getCurrentTabUrl(callback) { var queryInfo = { active: true, currentWindow: true }; chrome.tabs.query(queryInfo, function(tabs) { var tab = tabs[0]; var url = tab.url; callback(url); }); } function replaceBookmark(oldUrl, newUrl) { chrome.bookmarks.search({url: oldUrl}, function(bookmarks) { for(bookmark of bookmarks) { chrome.bookmarks.update(bookmark.id, {url: newUrl}); } }); } function copyToClipboard(url) { document.oncopy = function(event) { event.clipboardData.setData("text/plain", url); event.preventDefault(); }; document.execCommand('Copy', false, null); } var blacklist = ["pomf.", "mixtape.moe", "catgirlsare.sexy", "p.fuwafuwa.moe", "/wiki/", "catbox.moe", "fuwa.se"]; chrome.pageAction.onClicked.addListener(function(tab) { getCurrentTabUrl(function(url) { getBetterUrl(url, function(betterUrl) { var filename = betterUrl.substr(betterUrl.lastIndexOf("/")); filename = cleanExtension(filename); if(filename.indexOf('.') == -1) { filename = filename + '.jpg'; //on average, it's probably JPEG if it doesn't have an extension } chrome.storage.sync.get({url: '', tabbehaviour: '', copytoclipboard: false, replacebookmark: false, disableblacklist: false}, function(config) { if(config.url == '') { alert("Please select a Pomf clone."); chrome.tabs.create({ url: "options.html" }); return; } if(!config.disableblacklist) { for(black of blacklist) { if(url.indexOf(black) != -1) { return; } } } var worker = new Worker('worker.js'); worker.onmessage = function(event) { var response = JSON.parse(event.data); var newUrl = response.files[0].url; switch(config.tabbehaviour) { case "newtab": chrome.tabs.create({url: newUrl}); break; case "replacetab": chrome.tabs.update(tab.id, {url: newUrl}); break; } if(config.copytoclipboard) { copyToClipboard(newUrl); } if(config.replacebookmark) { replaceBookmark(url, newUrl); } worker.terminate(); }; worker.postMessage(JSON.stringify({pomfclone: config.url, url: betterUrl, filename: filename})); }); }); }); }); function getBetterUrl(url, callback) { var extensionIndex = url.lastIndexOf('.'); var extension = url.substr(extensionIndex + 1); if(extension == "gifv") { url = url.replace("gifv", "mp4"); } if(isTwitterUrl(url)) { if(url.indexOf(':') != url.lastIndexOf(':')) { //Match if there are occurences of ':' other than the ':' in 'https://', such as in '.jpg:large' url = url.substr(0, url.lastIndexOf(':')); } url = url + ':orig'; callback(url); } else if(isInstagramUrl(url)) { var request = new XMLHttpRequest(); request.open('GET', 'https://api.instagram.com/oembed/?callback=&url=' + url, true); request.onload = function () { var json = JSON.parse(request.responseText); var filename = json.thumbnail_url.substr(json.thumbnail_url.lastIndexOf('/') + 1); filename = filename.substr(0, filename.indexOf('?')); var baseurl = 'https://scontent-amt2-1.cdninstagram.com/'; callback(baseurl + '/' + filename); }; request.send(); } else if(isPixivUrl(url)) { //TODO: Use a content script instead of re-fetching the page var pageRequest = new XMLHttpRequest(); pageRequest.open('GET', url, true); pageRequest.onload = function () { var regex = /