forked from corbindavenport/wikipedia-search
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
116 lines (92 loc) · 3.6 KB
/
background.js
File metadata and controls
116 lines (92 loc) · 3.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
*/
// Update Message
chrome.runtime.onInstalled.addListener(function(details){
if(details.reason == "update" || "install"){
if(localStorage.getItem("language") === null){
var language = "en";
localStorage["language"] = language;
console.log("no language selected, defaulting to english");
}
}
chrome.tabs.create({'url': chrome.extension.getURL('welcome.html')});
});
// Context Menu Search
function onSearch(info, tab) {
chrome.tabs.detectLanguage(null, function(lang) {
var language = localStorage["language"];
var taburl = "http://" + language + ".wikipedia.org/w/index.php?title=Special:Search&search=" + info.selectionText.replace(/\s/g, "+");
chrome.tabs.create({ url: taburl, selected: false });
});
}
var id = chrome.contextMenus.create({ "title": "Wikipedia Search", "contexts": ["selection"],
"onclick": onSearch
});
// Omnibox Search
// Derived from OmniWiki (github.com/hamczu/OmniWiki)
var currentRequest = null;
chrome.omnibox.onInputChanged.addListener(function(text, suggest) {
if (currentRequest != null) {
currentRequest.onreadystatechange = null;
currentRequest.abort();
currentRequest = null;
}
updateDefaultSuggestion(text);
if(text.length > 0){
currentRequest = suggests(text, function(data) {
var results = [];
for(var i = 0; i < data[1].length; i++){
results.push({
content: data[1][i],
description: data[1][i]
});
}
suggest(results);
});
} else {
}
});
function resetDefaultSuggestion() {
chrome.omnibox.setDefaultSuggestion({
description: ' '
});
}
resetDefaultSuggestion();
var searchLabel = chrome.i18n.getMessage('search_label');
function updateDefaultSuggestion(text) {
chrome.omnibox.setDefaultSuggestion({
description: searchLabel + ': %s'
});
}
chrome.omnibox.onInputStarted.addListener(function() {
updateDefaultSuggestion('');
});
chrome.omnibox.onInputCancelled.addListener(function() {
resetDefaultSuggestion();
});
function suggests(query, callback) {
var language = localStorage["language"];
var req = new XMLHttpRequest();
req.open("GET", "http://" + language + ".wikipedia.org/w/api.php?action=opensearch&namespace=0&suggest=&search=" + query, true);
req.onload = function(){
if(this.status == 200){
try{
callback(JSON.parse(this.responseText));
}catch(e){
this.onerror();
}
}else{
this.onerror();
}
};
req.onerror = function(){
};
req.send();
};
chrome.omnibox.onInputEntered.addListener(function(text) {
var language = localStorage["language"];
chrome.tabs.update(null, {url: "http://" + language + ".wikipedia.org/w/index.php?search=" + text});
});