var gsti;
var currentStories = new Array();
var playing = true;
//getElementById
function $ei(id, parentNode) {
parentNode = parentNode || document;
return parentNode.getElementById(id);
}
//getAttribute
function $a(parentNode, att) {
return parentNode.getAttribute(att);
}
//getElementByTagName
function $et(tagName, parentNode) {
parentNode = parentNode || document;
return parentNode.getElementsByTagName(tagName)[0];
}
//getElementByClassName
function $ec(className, parentNode) {
parentNode = parentNode || document;
elements = parentNode.getElementsByTagName("*");
for (i=0; i/g, ">").replace(/"/g, """);
}
function fetchData(url, handler) {
//alert("inside fetchData");
$ei('diggIndicator').style.display = '';
$ei("diggIndicator").setAttribute('mode', 'undetermined');
var request = Components.
classes["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance();
// QI the object to nsIDOMEventTarget to set event handlers on it:
request.QueryInterface(Components.interfaces.nsIDOMEventTarget);
request.addEventListener("load", handler, false);
request.addEventListener("error", handleError, false);
// QI it to nsIXMLHttpRequest to open and send the request:
request.QueryInterface(Components.interfaces.nsIXMLHttpRequest);
request.open("GET", url, true);
request.send(null);
//$ei('diggIndicator').style.display = '';
}
function handleError(e) {
$ei('storyList').appendItem("!! Error accessing Digg !!");
//$ei('diggIndicator').style.display = 'none';
}
function populateMenu(e) {
XHR = e.target;
data = decodeJson(XHR.responseText);
topics = data.topics;
containers = new Array();
while ($ei('topicPopup').firstChild) {
$ei('topicPopup').removeChild($ei('topicPopup').firstChild);
}
for (i=0; i 0) && (min > 0)) ?
(hr + " hr " + min + " mins ago") :
((hr == 0) && (min > 0)) ?
(min + " mins ago") :
((hr == 0) && (min == 0)) ?
"just now" : "";
storyStatus.innerHTML = story.status.escapeEntities();
storyContainer.innerHTML = story.container.name.escapeEntities();
storyTopic.innerHTML = story.topic.name.escapeEntities();
storyUserName.href = "http://digg.com/users/" + story.user.name;
storyUserName.innerHTML = story.user.name.escapeEntities();
storyDiggs.innerHTML = story.diggs;
storyComments.innerHTML = story.comments;
storyDesc.innerHTML = story.description.escapeEntities();
storyLink.href = story.link;
storyHref.href = story.href;
storyCEIcon.src = "chrome://diggsidebar/content/image/down.jpg";
storyRead.style.textDecoration = "line-through";
storyRead.style.backgroundColor = "black";
storyRead.style.color = "white";
storyRead.title = "Read";
storyNew.style.textDecoration = "line-through";
storyNew.style.backgroundColor = "black";
storyNew.style.color = "white";
storyNew.title = "Old";
storyDetails.style.display = 'block';
$ei('diggIndicator').style.display = 'none';
}
function getStories() {
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
ep = prefs.getCharPref("extensions.diggsidebar.endpoint") || '';
$ei('diggEndPoint').value = "digg" + ep;
fetchData("http://services.digg.com/stories" + ep.replace(/\/all/g, '') +
"?count=30" + "&type=json" +
"&appkey=" + encodeURIComponent("http://diggsidebar.googlepages.com"),
populateStoryList);
//gsti = window.setTimeout(getStories, prefs.getIntPref("extensions.diggsidebar.updateinterval"));
}
function getDescription(storyId) {
if (storyId == null) return;
fetchData("http://services.digg.com/story/" + storyId + "?type=json" +
"&appkey=" + encodeURIComponent("http://diggsidebar.googlepages.com"),
populateDescription);
}
function createMenu() {
fetchData("http://services.digg.com/topics" + "?type=json" +
"&appkey=" + encodeURIComponent("http://diggsidebar.googlepages.com"),
populateMenu);
}
function openInTab(href) {
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
mainWindow.getBrowser().selectedTab = mainWindow.getBrowser().addTab(href);
}
function setEndPoint(ep) {
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
prefs.setCharPref("extensions.diggsidebar.endpoint", ep);
window.clearTimeout(gsti);
//window.clearInterval(psi);
getStories();
}
function togglePlayPause() {
if (playing) {
window.clearTimeout(gsti);
//window.clearInterval(psi);
$ei('diggPlayPause').image = "chrome://diggsidebar/content/image/Play.png";
$ei('diggPlayPause').setAttribute("tooltiptext", "Click to Start autoupdate");
playing = false;
} else {
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
updateInterval = prefs.getIntPref("extensions.diggsidebar.updateinterval")
updateIntervalDecay = prefs.getIntPref("extensions.diggsidebar.updateintervaldecay");
timeout = Math.round(updateInterval*(Math.pow(1.5, updateIntervalDecay)));
//newTimeout = Math.round(timeout*parseInt($ei("diggIndicator").getAttribute('value'))/100);
gsti = window.setTimeout(getStories, timeout);
//psi = window.setInterval(showProgress, Math.round(timeout/100));
//window.setTimeout("window.clearInterval(psi)", newTimeout);
$ei('diggPlayPause').image = "chrome://diggsidebar/content/image/Pause.png";
$ei('diggPlayPause').setAttribute("tooltiptext", "Click to Pause autoupdate");
playing = true;
}
}
function decodeJson(string) {
var json = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);
return json.decode(string);
};
/*TODO
preferences
toolbar button
refresh button
*/
/*DONE
v0.2
added kdb navigation
Added progressmeter
added error notification
added accesskeys
added new story notification
v0.2.1
adaptive polling interval
promote_date
pause/play
v0.5
new ui
*/