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 b[date]) return -1; else if (a[date] < b[date]) return 1; return 0; }); for (i=0; i 0) { previousUpdateInterval = prefs.get("updateinterval").value; prefs.get("updateinterval").value = updateInterval; updateIntervalDecay = prefs.get("updateintervaldecay").value; if (previousUpdateInterval == updateInterval) prefs.get("updateintervaldecay").value = updateIntervalDecay + 1; else prefs.get("updateintervaldecay").value = 0; } window.clearTimeout(gsti); updateInterval = prefs.get("updateinterval").value; updateIntervalDecay = prefs.get("updateintervaldecay").value; timeout = Math.round(updateInterval*(Math.pow(1.5, updateIntervalDecay))); gsti = window.setTimeout(getStories, timeout); //Adaptive update interval code END $ei('diggIndicator').style.display = 'none'; //prefs.setIntPref("extensions.diggsidebar.progress", 100); //$ei("diggIndicator").setAttribute('mode', 'determined'); //$ei("diggIndicator").setAttribute('value', 100); //psi = window.setInterval(showProgress, Math.round(timeout/100)); //window.setTimeout("window.clearInterval(psi)", timeout); } //function showProgress() { // var prefs = Components.classes["@mozilla.org/preferences-service;1"]. // getService(Components.interfaces.nsIPrefBranch); // progress = prefs.getIntPref("extensions.diggsidebar.progress"); // prefs.setIntPref("extensions.diggsidebar.progress", (progress - 1)); // // $ei("diggIndicator").setAttribute('value', (parseInt($ei("diggIndicator").getAttribute('value')) - 1)); //} function populateDescription(e) { XHR = e.target; //Application.console.log(XHR.responseText); data = decodeJson(XHR.responseText); story = data.stories[0]; now = new Date(); if (story.promote_date != null) then = new Date(story.promote_date*1000); else then = new Date(story.submit_date*1000); diff = Math.max(now - then, 0) hr = Math.floor(diff/(1000*3600)); min = Math.floor(diff/(1000*60)) - 60*hr; listitems = document.getElementsByTagName('richlistitem'); 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 = Application.extensions.get("diggsidebar@abhinavsarkar.net").prefs; ep = prefs.get("endpoint").value || ''; $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 = Application.extensions.get("diggsidebar@abhinavsarkar.net").prefs; prefs.get("endpoint").value = 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 = Application.extensions.get("diggsidebar@abhinavsarkar.net").prefs; updateInterval = prefs.get("extensions.diggsidebar.updateinterval").value; updateIntervalDecay = prefs.get("extensions.diggsidebar.updateintervaldecay").value; 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 */