|
|
|
@ -32,14 +32,17 @@ var DiggSidebar = { |
|
|
|
|
updateIntervalDecay: 0, |
|
|
|
|
lastUpdateAt: new Date().getTime(), |
|
|
|
|
shownStoriesCount: 30, |
|
|
|
|
categories: ['All', 'Popular', 'Upcoming', 'Hot', 'Top'], |
|
|
|
|
categories: ["All", "Popular", "Upcoming", "Hot", "Top"], |
|
|
|
|
timerId: null, |
|
|
|
|
storyIds: [], |
|
|
|
|
refreshing: false, |
|
|
|
|
stories: [], |
|
|
|
|
expandedStory: null, |
|
|
|
|
observerService: Components.classes["@mozilla.org/observer-service;1"] |
|
|
|
|
.getService(Components.interfaces.nsIObserverService), |
|
|
|
|
|
|
|
|
|
fetchData: function(url, handler) { |
|
|
|
|
|
|
|
|
|
fetchData: function (url, handler) { |
|
|
|
|
DiggSidebar.indicateActivity(); |
|
|
|
|
|
|
|
|
|
var request = new XMLHttpRequest(); |
|
|
|
@ -49,7 +52,7 @@ var DiggSidebar = { |
|
|
|
|
request.send(null); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
errorHandler: function(e) { |
|
|
|
|
errorHandler: function (e) { |
|
|
|
|
/*if (DiggSidebar.UI.notificationBox.allNotifications.length > 0) |
|
|
|
|
DiggSidebar.UI.notificationBox.removeAllNotifications(true);*/ |
|
|
|
|
DiggSidebar.UI.notificationBox.appendNotification( |
|
|
|
@ -57,54 +60,62 @@ var DiggSidebar = { |
|
|
|
|
"dsAccessFailNotification", |
|
|
|
|
null, |
|
|
|
|
"PRIORITY_CRITICAL_HIGH", |
|
|
|
|
[{callback:DiggSidebar.getStories, label: "Retry", accessKey: "R"}] |
|
|
|
|
[{callback: DiggSidebar.getStories, label: "Retry", accessKey: "R"}] |
|
|
|
|
); |
|
|
|
|
DiggSidebar.refreshing = false; |
|
|
|
|
DiggSidebar.indicateInactivity(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
populateMenu: function(e) { |
|
|
|
|
populateMenu: function (e) { |
|
|
|
|
var XHR = e.target; |
|
|
|
|
var data = DiggSidebar.Utils.decodeJson(XHR.responseText); |
|
|
|
|
var containers = data.containers; |
|
|
|
|
|
|
|
|
|
containers.forEach(function (container) { |
|
|
|
|
var cmenu = document.createElement('menu'); |
|
|
|
|
cmenu.setAttribute('id', container.short_name + 'Menu'); |
|
|
|
|
cmenu.setAttribute('label', container.name); |
|
|
|
|
cmenu.setAttribute('accesskey', container.name.charAt(0)); |
|
|
|
|
var cmenu = document.createElement("menu"); |
|
|
|
|
with (cmenu) { |
|
|
|
|
setAttribute("id", container.short_name + "Menu"); |
|
|
|
|
setAttribute("label", container.name); |
|
|
|
|
setAttribute("accesskey", container.name.charAt(0)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var cmenupopup = document.createElement('menupopup'); |
|
|
|
|
cmenupopup.setAttribute('id', container.short_name + 'Popup'); |
|
|
|
|
var cmenupopup = document.createElement("menupopup"); |
|
|
|
|
cmenupopup.setAttribute("id", container.short_name + "Popup"); |
|
|
|
|
|
|
|
|
|
DiggSidebar.categories.forEach( |
|
|
|
|
function (category) { |
|
|
|
|
var cmenuitem = document.createElement('menuitem'); |
|
|
|
|
cmenuitem.setAttribute('label', category); |
|
|
|
|
cmenuitem.setAttribute('value', '/container/' + container.short_name + '/' + category.toLowerCase()); |
|
|
|
|
cmenuitem.setAttribute('accesskey', category.charAt(0)); |
|
|
|
|
cmenuitem.setAttribute('oncommand', "DiggSidebar.setEndPoint(this.value)"); |
|
|
|
|
var cmenuitem = document.createElement("menuitem"); |
|
|
|
|
with (cmenuitem) { |
|
|
|
|
setAttribute("label", category); |
|
|
|
|
setAttribute("value", "/container/" + container.short_name + "/" + category.toLowerCase()); |
|
|
|
|
setAttribute("accesskey", category.charAt(0)); |
|
|
|
|
setAttribute("oncommand", "DiggSidebar.setEndPoint(this.value)"); |
|
|
|
|
} |
|
|
|
|
cmenupopup.appendChild(cmenuitem); |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
cmenupopup.appendChild(document.createElement('menuseparator')); |
|
|
|
|
cmenupopup.appendChild(document.createElement("menuseparator")); |
|
|
|
|
var topics = container.topics; |
|
|
|
|
topics.forEach(function (topic) { |
|
|
|
|
var tmenu = document.createElement('menu'); |
|
|
|
|
tmenu.setAttribute('id', topic.short_name + 'Menu'); |
|
|
|
|
tmenu.setAttribute('label', topic.name); |
|
|
|
|
tmenu.setAttribute('accesskey', topic.name.charAt(0)); |
|
|
|
|
var tmenu = document.createElement("menu"); |
|
|
|
|
with (tmenu) { |
|
|
|
|
setAttribute("id", topic.short_name + "Menu"); |
|
|
|
|
setAttribute("label", topic.name); |
|
|
|
|
setAttribute("accesskey", topic.name.charAt(0)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var tmenupopup = document.createElement('menupopup'); |
|
|
|
|
tmenupopup.setAttribute('id', topic.short_name + 'Popup'); |
|
|
|
|
var tmenupopup = document.createElement("menupopup"); |
|
|
|
|
tmenupopup.setAttribute("id", topic.short_name + "Popup"); |
|
|
|
|
|
|
|
|
|
DiggSidebar.categories.forEach( |
|
|
|
|
function (category) { |
|
|
|
|
var tmenuitem = document.createElement('menuitem'); |
|
|
|
|
tmenuitem.setAttribute('label', category); |
|
|
|
|
tmenuitem.setAttribute('value', '/topic/' + topic.short_name + '/' + category.toLowerCase()); |
|
|
|
|
tmenuitem.setAttribute('accesskey', category.charAt(0)); |
|
|
|
|
tmenuitem.setAttribute('oncommand', "DiggSidebar.setEndPoint(this.value)"); |
|
|
|
|
var tmenuitem = document.createElement("menuitem"); |
|
|
|
|
with (tmenuitem) { |
|
|
|
|
setAttribute("label", category); |
|
|
|
|
setAttribute("value", "/topic/" + topic.short_name + "/" + category.toLowerCase()); |
|
|
|
|
setAttribute("accesskey", category.charAt(0)); |
|
|
|
|
setAttribute("oncommand", "DiggSidebar.setEndPoint(this.value)"); |
|
|
|
|
} |
|
|
|
|
tmenupopup.appendChild(tmenuitem); |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
@ -116,37 +127,41 @@ var DiggSidebar = { |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
populateStoryList: function() { |
|
|
|
|
var newStoryIds = new Array(); |
|
|
|
|
populateStoryList: function () { |
|
|
|
|
var newStoryIds = []; |
|
|
|
|
|
|
|
|
|
var jp = new JPath(DiggSidebar.stories); |
|
|
|
|
var filteredStories = jp.$(function(story){ |
|
|
|
|
return (story.$("category").json == DiggSidebar.endpoint.category) ; |
|
|
|
|
var filteredStories = jp.$(function (story) { |
|
|
|
|
return (story.$("category").json == DiggSidebar.endpoint.category); |
|
|
|
|
}).json; |
|
|
|
|
jp = new JPath(filteredStories); |
|
|
|
|
if (DiggSidebar.endpoint.topic) |
|
|
|
|
filteredStories = jp.$(function(story){ |
|
|
|
|
if (DiggSidebar.endpoint.topic) { |
|
|
|
|
filteredStories = jp.$(function (story) { |
|
|
|
|
return (story.$("topic/short_name").json == DiggSidebar.endpoint.topic); |
|
|
|
|
}).json; |
|
|
|
|
if (DiggSidebar.endpoint.container) |
|
|
|
|
filteredStories = jp.$(function(story){ |
|
|
|
|
} |
|
|
|
|
if (DiggSidebar.endpoint.container) { |
|
|
|
|
filteredStories = jp.$(function (story) { |
|
|
|
|
return story.$("container/short_name").json == DiggSidebar.endpoint.container; |
|
|
|
|
}).json; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (filteredStories.length > 0) |
|
|
|
|
if (filteredStories.length > 0) { |
|
|
|
|
DiggSidebar.Utils.removeAllChildren(DiggSidebar.UI.storyListBox); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
filteredStories.forEach(function (story, index) { |
|
|
|
|
if (index < DiggSidebar.shownStoriesCount) { |
|
|
|
|
var now = new Date(); |
|
|
|
|
if (story.promote_date != null) |
|
|
|
|
var then = new Date(story.promote_date*1000); |
|
|
|
|
else |
|
|
|
|
var then = new Date(story.submit_date*1000); |
|
|
|
|
var diff = Math.max(now - then, 0) |
|
|
|
|
if (story.promote_date != null) { |
|
|
|
|
var then = new Date(story.promote_date * 1000); |
|
|
|
|
} else { |
|
|
|
|
var then = new Date(story.submit_date * 1000); |
|
|
|
|
} |
|
|
|
|
var diff = Math.max(now - then, 0); |
|
|
|
|
|
|
|
|
|
var hr = Math.floor(diff/(1000*3600)); |
|
|
|
|
var min = Math.floor(diff/(1000*60)) - 60*hr; |
|
|
|
|
var hr = Math.floor(diff / (1000 * 3600)); |
|
|
|
|
var min = Math.floor(diff / (1000 * 60)) - 60 * hr; |
|
|
|
|
|
|
|
|
|
var relativeTime = ((hr > 0) && (min > 0)) ? |
|
|
|
|
(hr + " hr " + min + " mins ago") : |
|
|
|
@ -155,7 +170,7 @@ var DiggSidebar = { |
|
|
|
|
((hr == 0) && (min == 0)) ? |
|
|
|
|
"just now" : ""; |
|
|
|
|
|
|
|
|
|
var li = DiggSidebar.UI.storyListBox.appendChild(document.createElement('richlistitem')); |
|
|
|
|
var li = DiggSidebar.UI.storyListBox.appendChild(document.createElement("richlistitem")); |
|
|
|
|
li.id = "story_" + story.id; |
|
|
|
|
var attributes = { |
|
|
|
|
title: story.title, |
|
|
|
@ -170,56 +185,59 @@ var DiggSidebar = { |
|
|
|
|
desc: story.description, |
|
|
|
|
link: story.link, |
|
|
|
|
href: story.href |
|
|
|
|
} |
|
|
|
|
for (var attr in attributes) |
|
|
|
|
}; |
|
|
|
|
for (var attr in attributes) { |
|
|
|
|
li.setAttribute(attr, attributes[attr]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
li.read = story.read; |
|
|
|
|
if (story.id == DiggSidebar.expandedStory) |
|
|
|
|
if (story.id == DiggSidebar.expandedStory) { |
|
|
|
|
li.showDescription(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (DiggSidebar.storyIds.indexOf(story.id) == -1) { |
|
|
|
|
newStoryIds.push(story.id); |
|
|
|
|
} |
|
|
|
|
if (DiggSidebar.storyIds.indexOf(story.id) == -1) newStoryIds.push(story.id); |
|
|
|
|
}); |
|
|
|
|
DiggSidebar.storyIds = DiggSidebar.storyIds.concat(newStoryIds); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
showDescription: function(storyId) { |
|
|
|
|
showDescription: function (storyId) { |
|
|
|
|
var jp = new JPath(DiggSidebar.stories); |
|
|
|
|
var story = jp.query('//[id == ' + storyId + ']')[0]; |
|
|
|
|
var story = jp.query("//[id == " + storyId + "]")[0]; |
|
|
|
|
story.read = true; |
|
|
|
|
DiggSidebar.expandedStory = parseInt(storyId); |
|
|
|
|
|
|
|
|
|
var listitems = DiggSidebar.UI.storyListBox.children; |
|
|
|
|
for (var i=0; i<listitems.length; i++) |
|
|
|
|
for (var i = 0; i < listitems.length; i++) { |
|
|
|
|
listitems[i].hideDescription(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
document.getElementById('story_'+ story.id).showDescription(); |
|
|
|
|
document.getElementById("story_" + story.id).showDescription(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
getStories: function() { |
|
|
|
|
getStories: function () { |
|
|
|
|
if (!DiggSidebar.refreshing) { |
|
|
|
|
DiggSidebar.refreshing = true; |
|
|
|
|
var ep = DiggSidebar.prefs.get("endpoint").value || ''; |
|
|
|
|
var ep = DiggSidebar.prefs.get("endpoint").value || ""; |
|
|
|
|
|
|
|
|
|
DiggSidebar.fetchData("http://services.digg.com/stories" + ep.replace(/\/all/g, '') + |
|
|
|
|
DiggSidebar.fetchData("http://services.digg.com/stories" + ep.replace(/\/all/g, "") + |
|
|
|
|
"?count=30" + "&type=json" + |
|
|
|
|
"&appkey=" + encodeURIComponent(DiggSidebar.homepageURL), |
|
|
|
|
function(e) { |
|
|
|
|
function (e) { |
|
|
|
|
DiggSidebar.UI.endPointDesc.value = "digg" + ep; |
|
|
|
|
|
|
|
|
|
var stories = DiggSidebar.Utils.decodeJson(e.target.responseText).stories; |
|
|
|
|
var newStories = stories.filter( |
|
|
|
|
function(story) { |
|
|
|
|
function (story) { |
|
|
|
|
return !(DiggSidebar.storyIds.indexOf(story.id) != -1); |
|
|
|
|
}); |
|
|
|
|
newStories.forEach(function(story) { |
|
|
|
|
newStories.forEach(function (story) { |
|
|
|
|
story.category = DiggSidebar.endpoint.category; |
|
|
|
|
story.read = false; |
|
|
|
|
}); |
|
|
|
|
DiggSidebar.stories = newStories.concat(DiggSidebar.stories); |
|
|
|
|
var observerService = Components.classes["@mozilla.org/observer-service;1"] |
|
|
|
|
.getService(Components.interfaces.nsIObserverService); |
|
|
|
|
observerService.notifyObservers(null, DiggSidebar.storyListRefreshEventTopic, null); |
|
|
|
|
DiggSidebar.observerService.notifyObservers(null, DiggSidebar.storyListRefreshEventTopic, null); |
|
|
|
|
|
|
|
|
|
DiggSidebar.refreshing = false; |
|
|
|
|
DiggSidebar.setUpdateInterval(stories); |
|
|
|
@ -235,171 +253,179 @@ var DiggSidebar = { |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
createMenu: function() { |
|
|
|
|
createMenu: function () { |
|
|
|
|
DiggSidebar.fetchData("http://services.digg.com/containers" + "?type=json" + |
|
|
|
|
"&appkey=" + encodeURIComponent(DiggSidebar.homepageURL), |
|
|
|
|
DiggSidebar.populateMenu); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
setUpdateInterval: function(stories) { |
|
|
|
|
setUpdateInterval: function (stories) { |
|
|
|
|
//Adaptive update interval code START
|
|
|
|
|
if (stories.length == 0) return; |
|
|
|
|
if (stories.length == 0) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
var sum = 0; |
|
|
|
|
var weights = [4, 3, 2, 1] |
|
|
|
|
var date = (stories[0].promote_date != null) ? 'promote_date' : 'submit_date'; |
|
|
|
|
var weights = [4, 3, 2, 1]; |
|
|
|
|
var date = (stories[0].promote_date != null) ? "promote_date" : "submit_date"; |
|
|
|
|
stories.sort(function (a, b) { |
|
|
|
|
if (a[date] > b[date]) return -1; |
|
|
|
|
else if (a[date] < b[date]) return 1; |
|
|
|
|
return 0; |
|
|
|
|
if (a[date] > b[date]) { |
|
|
|
|
return -1; |
|
|
|
|
} else if (a[date] < b[date]) { |
|
|
|
|
return 1; |
|
|
|
|
} else { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
for (var i=0; i<Math.min(4, stories.length-1); i++) { |
|
|
|
|
var diff = stories[i][date] - stories[i+1][date]; |
|
|
|
|
sum += weights[i]*diff; |
|
|
|
|
for (var i = 0; i < Math.min(4, stories.length - 1); i++) { |
|
|
|
|
var diff = stories[i][date] - stories[i + 1][date]; |
|
|
|
|
sum += weights[i] * diff; |
|
|
|
|
} |
|
|
|
|
var newUpdateInterval = Math.round( |
|
|
|
|
sum*1000/weights |
|
|
|
|
.splice(0,Math.min(4, stories.length-1)) |
|
|
|
|
.reduce(function(a, b){return a + b;}) |
|
|
|
|
sum * 1000 / weights |
|
|
|
|
.splice(0, Math.min(4, stories.length - 1)) |
|
|
|
|
.reduce(function (a, b) { |
|
|
|
|
return a + b; |
|
|
|
|
}) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (newUpdateInterval > 0) { |
|
|
|
|
var previousUpdateInterval = DiggSidebar.updateInterval; |
|
|
|
|
DiggSidebar.updateInterval = newUpdateInterval; |
|
|
|
|
|
|
|
|
|
if (previousUpdateInterval == newUpdateInterval) |
|
|
|
|
if (previousUpdateInterval == newUpdateInterval) { |
|
|
|
|
DiggSidebar.updateIntervalDecay += 1; |
|
|
|
|
else |
|
|
|
|
} else { |
|
|
|
|
DiggSidebar.updateIntervalDecay = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//Adaptive update interval code END
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
calculateTimeout: function() { |
|
|
|
|
return Math.round(DiggSidebar.updateInterval*(Math.pow(1.5, DiggSidebar.updateIntervalDecay))) |
|
|
|
|
calculateTimeout: function () { |
|
|
|
|
return Math.round(DiggSidebar.updateInterval * (Math.pow(1.5, DiggSidebar.updateIntervalDecay))); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
setEndPoint: function(ep) { |
|
|
|
|
setEndPoint: function (ep) { |
|
|
|
|
DiggSidebar.prefs.get("endpoint").value = ep; |
|
|
|
|
DiggSidebar.endpoint = DiggSidebar.getEndpointParts(ep); |
|
|
|
|
window.clearTimeout(DiggSidebar.timerId); |
|
|
|
|
DiggSidebar.getStories(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
getEndpointParts: function(ep) { |
|
|
|
|
getEndpointParts: function (ep) { |
|
|
|
|
var tmp = { |
|
|
|
|
topic: null, |
|
|
|
|
container: null, |
|
|
|
|
category: "all" |
|
|
|
|
}; |
|
|
|
|
var parts = ep.split("/"); |
|
|
|
|
if (parts.length == 2) |
|
|
|
|
if (parts.length == 2) { |
|
|
|
|
tmp.category = parts[1]; |
|
|
|
|
else if (parts.length == 4) { |
|
|
|
|
} else if (parts.length == 4) { |
|
|
|
|
tmp[parts[1]] = parts[2]; |
|
|
|
|
tmp.category = parts[3]; |
|
|
|
|
} |
|
|
|
|
return tmp; |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
indicateActivity: function() { |
|
|
|
|
indicateActivity: function () { |
|
|
|
|
DiggSidebar.UI.indicator.src = "chrome://global/skin/icons/loading_16.png"; |
|
|
|
|
with (DiggSidebar.UI.indicator.parentNode) { |
|
|
|
|
disabled = true; |
|
|
|
|
setAttribute('tooltiptext', "Refreshing"); |
|
|
|
|
setAttribute("tooltiptext", "Refreshing"); |
|
|
|
|
onmouseover = null; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
indicateInactivity: function() { |
|
|
|
|
indicateInactivity: function () { |
|
|
|
|
DiggSidebar.UI.indicator.src = "chrome://global/skin/icons/notloading_16.png"; |
|
|
|
|
with (DiggSidebar.UI.indicator.parentNode) { |
|
|
|
|
disabled = false; |
|
|
|
|
onmouseover = function() { |
|
|
|
|
onmouseover = function () { |
|
|
|
|
var autoRefreshTime = Math.round( |
|
|
|
|
(DiggSidebar.lastUpdateAt + DiggSidebar.calculateTimeout() - new Date().getTime())/1000 |
|
|
|
|
(DiggSidebar.lastUpdateAt + DiggSidebar.calculateTimeout() - new Date().getTime()) / 1000 |
|
|
|
|
); |
|
|
|
|
autoRefreshTime = (autoRefreshTime > 3600) ? |
|
|
|
|
Math.round(autoRefreshTime/3600) + " hours": |
|
|
|
|
Math.round(autoRefreshTime / 3600) + " hours": |
|
|
|
|
(autoRefreshTime > 60) ? |
|
|
|
|
Math.round(autoRefreshTime/60) + " minutes": |
|
|
|
|
Math.round(autoRefreshTime / 60) + " minutes": |
|
|
|
|
autoRefreshTime + " seconds"; |
|
|
|
|
setAttribute('tooltiptext', "Click to refresh now.\n" + |
|
|
|
|
setAttribute("tooltiptext", "Click to refresh now.\n" + |
|
|
|
|
"Autorefreshing in " + autoRefreshTime); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
DiggSidebar.lastUpdateAt = new Date().getTime(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
initialize: function(){ |
|
|
|
|
initialize: function () { |
|
|
|
|
DiggSidebar.endpoint = DiggSidebar.getEndpointParts(DiggSidebar.prefs.get("endpoint").value); |
|
|
|
|
var $ = function(id) {return document.getElementById(id)}; |
|
|
|
|
var $ = function (id) { |
|
|
|
|
return document.getElementById(id); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
DiggSidebar.UI = {}; |
|
|
|
|
DiggSidebar.UI.notificationBox = $('dsNotificationBox'); |
|
|
|
|
DiggSidebar.UI.indicator = $('dsBusyIndicator'); |
|
|
|
|
DiggSidebar.UI.storiesPopup = $('dsStoriesPopup'); |
|
|
|
|
DiggSidebar.UI.storyListBox = $('dsStoryListBox'); |
|
|
|
|
DiggSidebar.UI.endPointDesc = $('dsEndPointDesc'); |
|
|
|
|
DiggSidebar.UI.notificationBox = $("dsNotificationBox"); |
|
|
|
|
DiggSidebar.UI.indicator = $("dsBusyIndicator"); |
|
|
|
|
DiggSidebar.UI.storiesPopup = $("dsStoriesPopup"); |
|
|
|
|
DiggSidebar.UI.storyListBox = $("dsStoryListBox"); |
|
|
|
|
DiggSidebar.UI.endPointDesc = $("dsEndPointDesc"); |
|
|
|
|
|
|
|
|
|
DiggSidebar.storyListObserver = new DiggSidebar.StoryListObserver(); |
|
|
|
|
DiggSidebar.createMenu(); |
|
|
|
|
DiggSidebar.getStories(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
destroy: function(){ |
|
|
|
|
destroy: function () { |
|
|
|
|
DiggSidebar.storyListObserver.unregister(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
DiggSidebar.Utils = { |
|
|
|
|
url: function(spec) { |
|
|
|
|
url: function (spec) { |
|
|
|
|
var ios = Components.classes["@mozilla.org/network/io-service;1"] |
|
|
|
|
.getService(Components.interfaces.nsIIOService); |
|
|
|
|
return ios.newURI(spec, null, null); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
openUrlInTab: function(url) { |
|
|
|
|
openUrlInTab: function (url) { |
|
|
|
|
Application.activeWindow.open(DiggSidebar.Utils.url(url)); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
decodeJson: function(string) { |
|
|
|
|
decodeJson: function (string) { |
|
|
|
|
var json = Components.classes["@mozilla.org/dom/json;1"] |
|
|
|
|
.createInstance(Components.interfaces.nsIJSON); |
|
|
|
|
return json.decode(string); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
removeAllChildren: function(node) { |
|
|
|
|
while (node.firstChild) |
|
|
|
|
removeAllChildren: function (node) { |
|
|
|
|
while (node.firstChild) { |
|
|
|
|
node.removeChild(node.firstChild); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
DiggSidebar.StoryListObserver = function() { |
|
|
|
|
this.registered = false; |
|
|
|
|
this.register(); |
|
|
|
|
} |
|
|
|
|
DiggSidebar.StoryListObserver = function () { |
|
|
|
|
this.registered = false; |
|
|
|
|
this.register(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
DiggSidebar.StoryListObserver.prototype = { |
|
|
|
|
observe: function(subject, topic, data) { |
|
|
|
|
observe: function (subject, topic, data) { |
|
|
|
|
if (topic == window.DiggSidebar.storyListRefreshEventTopic) { |
|
|
|
|
window.DiggSidebar.populateStoryList(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
register: function() { |
|
|
|
|
if (this.registered == false) { |
|
|
|
|
var observerService = Components.classes["@mozilla.org/observer-service;1"] |
|
|
|
|
.getService(Components.interfaces.nsIObserverService); |
|
|
|
|
observerService.addObserver(this, DiggSidebar.storyListRefreshEventTopic, false); |
|
|
|
|
register: function () { |
|
|
|
|
if (!this.registered) { |
|
|
|
|
DiggSidebar.observerService.addObserver(this, DiggSidebar.storyListRefreshEventTopic, false); |
|
|
|
|
this.registered = true; |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
unregister: function() { |
|
|
|
|
if (this.registered == true) { |
|
|
|
|
var observerService = Components.classes["@mozilla.org/observer-service;1"] |
|
|
|
|
.getService(Components.interfaces.nsIObserverService); |
|
|
|
|
observerService.removeObserver(this, DiggSidebar.storyListRefreshEventTopic); |
|
|
|
|
unregister: function () { |
|
|
|
|
if (this.registered) { |
|
|
|
|
DiggSidebar.observerService.removeObserver(this, DiggSidebar.storyListRefreshEventTopic); |
|
|
|
|
this.registered = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|