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 */