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;
//myDump(XHR.responseText);
data = XHR.responseXML;
topics = $xp(data, "/topics/topic");
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 = $a(story, 'status').escapeEntities();
//alert($a($et('container', story), 'name').escapeEntities());
storyContainer.innerHTML = $a($et('container', story), 'name').escapeEntities();
storyTopic.innerHTML = $a($et('topic', story), 'name').escapeEntities();
storyUserName.href = "http://digg.com/users/" + $a($et('user', story), 'name').escapeEntities();
storyUserName.innerHTML = $a($et('user', story), 'name').escapeEntities();
storyDiggs.innerHTML = $a(story, 'diggs').escapeEntities();
storyComments.innerHTML = $a(story, 'comments').escapeEntities();
storyDesc.innerHTML = $et('description', story).textContent.escapeEntities();
storyLink.href = $a(story, 'link');
storyHref.href = $a(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() {
//alert("inside getStories");
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
ep = prefs.getCharPref("extensions.diggsidebar.endpoint") || '';
//alert(ep);
$ei('diggEndPoint').value = "digg" + ep;
//ep ='';
fetchData("http://services.digg.com/stories" + ep.replace(/\/all/g, '') + "?count=30" +
"&appkey=" + encodeURIComponent("http://diggsidebar.googlepages.com"),
populateStoryList);
//gsti = window.setTimeout(getStories, prefs.getIntPref("extensions.diggsidebar.updateinterval"));
}
function getDescription(storyId) {
myDump(storyId);
if (storyId == null) return;
fetchData("http://services.digg.com/story/" + storyId +
"?appkey=" + encodeURIComponent("http://diggsidebar.googlepages.com"),
populateDescription);
}
function createMenu() {
fetchData("http://services.digg.com/topics" +
"?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 myDump(aMessage) {
var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
consoleService.logStringMessage("Diggsidebar: " + aMessage);
}
/*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
*/