/
contentManager.js
100 lines (89 loc) · 3.49 KB
/
contentManager.js
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
/* Manage user's feed sources */
(function() {
var contentList = [];
self.port.on("contentList", function(content) {
contentList = content;
});
// FIXME: DRY in managers
// The code below this line (fetchcontentList and the window listener)
// is being repeated in every *Manager.js file. Maybe we can move this
// message filtering to another module? (DRY ya know)
/* Wrapper for fetching all contentList */
var fetchContentList = function(timeout) {
// Wait for `timeout` secs before declaring 'fetch failure'
if(timeout == 0 && contentList.length == 0) {
console.log("Failed to retrieve contentList.");
return;
}
if(contentList.length == 0) {
setTimeout(function() {
fetchContentList(timeout - 1);
}, 1000);
} else {
console.log("Posting contentList");
window.postMessage({
target: "ContentController",
intent: "contentList",
payload: contentList
}, "resource://blink/data/blink_shell.html#/blink/content");
}
};
var getAutocompleteSuggestions = function(query) {
var request = new XMLHttpRequest();
var completeQuery = "https://cloud.feedly.com/v3/search/feeds?q="
+ query + "&count=8";
console.log("Getting auto-complete suggestions");
request.open("GET", completeQuery, true);
request.onload = function() {
console.log("Got autocomplete list");
window.postMessage({
target: "ContentController",
intent: "suggestionList",
payload: JSON.parse(request.responseText).results
}, "resource://blink/data/blink_shell.html#/blink/content");
};
// TODO: request.onerror
request.send();
};
var addSourceItem = function(item) {
self.port.emit("addSourceItem", item);
}
var deleteSourceItem = function(item) {
self.port.emit("deleteSourceItem", item);
}
var toggleSourceItem = function(item) {
self.port.emit("toggleSourceItem", item);
}
/* Listen for window message events, and process accordingly. */
window.addEventListener('message', function(event) {
var message = JSON.parse(event.data);
if (message.target && message.target == "ContentManager") {
console.log("Got message for ContentManager");
var intent = message.intent;
switch (intent) {
case "fetch":
console.log("fetch request");
contentList = [];
self.port.emit("getContentList", {});
fetchContentList(3);
break;
case "search":
console.log("search request");
getAutocompleteSuggestions(message.payload.query);
break;
case "add":
console.log("add request");
addSourceItem(message.payload.addItem);
break;
case "delete":
console.log("delete request");
deleteSourceItem(message.payload.removeItem);
break;
case "toggle":
console.log("toggle request");
toggleSourceItem(message.payload.toggleItem)
break;
}
}
}, false);
}());