Adds context menu item that looks up selected text on dictionary sites. You have the choice of dictionary.com, merriam-webster.com (dictionary and thesaurus), thefreedictionary.com, thesaurus.com, urbandictionary.com, wikipedia.org, wiktionary.org, and yourdictionary.com to look selected terms up with. There is an options page to enable or disable the different menu items included. This is actually a rewrite and improvement of an older version that looked up terms on dictionary.com exclusively. While using the old version, I eventually found myself in need of more options for this add-on so here it is.
manifest.json
{ "name": "Look-it-up", "description": "Adds context menu item that looks up selected text on dictionary sites", "version": "0.2", "permissions": ["contextMenus"], "background": { "scripts": ["app.js"] }, "options_page": "options.html", "icons" : { "16" : "book16.png", "32" : "book32.png", "48" : "book48.png", "128" : "book128.png" }, "manifest_version": 2 }
app.js
/** app.js */ var defaultentries = [ { "menu":"dictionary.com", "active":1 },{ "menu":"merriam-webster.com-dict", "active":1 },{ "menu":"merriam-webster.com-thes", "active":1 },{ "menu":"thefreedictionary.com", "active":1 },{ "menu":"thesaurus.com", "active":1 },{ "menu":"urbandictionary.com", "active":1 },{ "menu":"wikipedia.org", "active":1 },{ "menu":"wiktionary.org", "active":1 },{ "menu":"yourdictionary.com", "active":1 }, ]; var entries = {}; if (!localStorage.getItem("entries")) { localStorage.setItem("entries", JSON.stringify(defaultentries)); } entries = JSON.parse(localStorage.getItem("entries")); function isActive(menu){ console.log("isActive"); var elen = entries.length; console.assert(!elen == 0); for(i=0;i<elen;i++){ if(entries[i]["menu"] == menu){ console.log(entries[i]["menu"]); if(entries[i]["active"] == 1){ return true; }else{ return false; } } } } function setActive(menu){ console.log("setActive"); var elen = entries.length; console.log(menu); console.assert(!elen == 0); for(i=0;i<elen;i++){ if(entries[i]["menu"] == menu){ entries[i]["active"] = 1; } } localStorage.setItem("entries", JSON.stringify(entries)); } function setInactive(menu){ console.log("setInactive"); var elen = entries.length; console.log(menu); console.assert(!elen == 0); for(i=0;i<elen;i++){ if(entries[i]["menu"] == menu){ entries[i]["active"] = 0; } } localStorage.setItem("entries", JSON.stringify(entries)); } /* Create the context menu */ var tm = chrome.contextMenus.create({"title": "Look-it-up", "contexts":["selection"]}); if(isActive("dictionary.com")){ chrome.contextMenus.create({"title": "dictionary.com", "contexts":["selection"], "parentId": tm, "onclick": lookItUp1}); } function lookItUp1(i, t){ var createProperties = {url: "http://www.dictionary.com/cgi-bin/dict.pl?term=" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("merriam-webster.com-dict")){ chrome.contextMenus.create({"title": "merriam-webster.com-dict", "contexts":["selection"], "parentId": tm, "onclick": lookItUp2}); } function lookItUp2(i, t){ var createProperties = {url: "http://www.merriam-webster.com/dictionary/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("merriam-webster.com-thes")){ chrome.contextMenus.create({"title": "merriam-webster.com-thes", "contexts":["selection"], "parentId": tm, "onclick": lookItUp3}); } function lookItUp3(i, t){ var createProperties = {url: "http://www.merriam-webster.com/thesaurus/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("thefreedictionary.com")){ chrome.contextMenus.create({"title": "thefreedictionary.com", "contexts":["selection"], "parentId": tm, "onclick": lookItUp4}); } function lookItUp4(i, t){ var createProperties = {url: "http://www.thefreedictionary.com/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("thesaurus.com")){ chrome.contextMenus.create({"title": "thesaurus.com", "contexts":["selection"], "parentId": tm, "onclick": lookItUp5}); } function lookItUp5(i, t){ var createProperties = {url: "http://thesaurus.com/search?q=" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("urbandictionary.com")){ chrome.contextMenus.create({"title": "urbandictionary.com", "contexts":["selection"], "parentId": tm, "onclick": lookItUp6}); } function lookItUp6(i, t){ var createProperties = {url: "http://www.urbandictionary.com/define.php?term=" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("wikipedia.org")){ chrome.contextMenus.create({"title": "wikipedia.org", "contexts":["selection"], "parentId": tm, "onclick": lookItUp7}); } function lookItUp7(i, t){ var createProperties = {url: "http://en.wikipedia.org/wiki/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("wiktionary.org")){ chrome.contextMenus.create({"title": "wiktionary.org", "contexts":["selection"], "parentId": tm, "onclick": lookItUp8}); } function lookItUp8(i, t){ var createProperties = {url: "http://en.wiktionary.org/wiki/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); } if(isActive("yourdictionary.com")){ chrome.contextMenus.create({"title": "yourdictionary.com", "contexts":["selection"], "parentId": tm, "onclick": lookItUp9}); } function lookItUp9(i, t){ var createProperties = {url: "http://www.yourdictionary.com/" + encodeURIComponent(i.selectionText)}; chrome.tabs.create(createProperties); }
options.html
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Look-it-up Options</title> <script type="text/javascript" src="options.js"></script> </head> <body> <ul id="menu"> </ul> <div class="summary">Changes will take place the next time you start your browser. Or if you don't want to close the browser you could uncheck and recheck the enabled box next to this extension on the Extensions tab page.</div> </body> </html>
options.js
window.onload = function () { ckb = chrome.extension.getBackgroundPage().entries; var list = document.getElementById("menu"); for(i = 0; i < ckb.length; i++){ console.log(ckb[i]["active"]); if(ckb[i]["active"] == 1){ var li = document.createElement("li"); var temp = "<input type=\"checkbox\" class=\"butt\" checked=\"true\" value=\"" + ckb[i]["menu"] + "\"><span>" + ckb[i]["menu"] + "</span></input>"; li.innerHTML = temp; list.appendChild(li); }else{ var li = document.createElement("li"); var tempp = "<input type=\"checkbox\" class=\"butt\" value=\"" + ckb[i]["menu"] + "\"><span>" + ckb[i]["menu"] + "</span></input>"; li.innerHTML = tempp; list.appendChild(li); } } as = document.getElementsByClassName("butt"); for(i=0;i<as.length;i++){ as[i].addEventListener("click",function(evt){ if(evt.target.checked == true){ chrome.extension.getBackgroundPage().setActive(evt.target.value); }else{ chrome.extension.getBackgroundPage().setInactive(evt.target.value); } },false) } }