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); } chrome.pageAction.onClicked.addListener(function(tab) { getCurrentTabUrl(function(url) { var filename = url.substr(url.lastIndexOf("/")); chrome.storage.sync.get({url: '', tabbehaviour: '', copytoclipboard: false, replacebookmark: false}, function(config) { if(config.url == '') { alert("Please select a Pomf clone."); chrome.tabs.create({ url: "options.html" }); 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.postMessage(JSON.stringify({pomfclone: config.url, url: url, filename: filename})); }); }); }); function isCoolUrl(url) { url = url.toLowerCase(); var extensionIndex = url.lastIndexOf('.'); var extension = url.substr(extensionIndex + 1); var validExtensions = ["jpg", "jpeg", "png", "gif", "webm", "gifv"]; var blackList = ["pomf", "mixtape.moe", "catgirlsare.sexy", "cocaine.ninja"]; for(black of blackList) { if(url.indexOf(black) != -1) { return false; } } return validExtensions.indexOf(extension) != -1; } chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { if(isCoolUrl(tab.url) && tab.active) { chrome.pageAction.show(tabId); } }); chrome.tabs.onActivated.addListener(function(activeInfo) { chrome.tabs.get(activeInfo.tabId, function(tab) { if(isCoolUrl(tab.url)) { chrome.pageAction.show(activeInfo.tabId); } }); });