diff --git a/chrome.manifest b/chrome.manifest new file mode 100644 index 0000000..f4ece24 --- /dev/null +++ b/chrome.manifest @@ -0,0 +1,4 @@ +content diggsidebar jar:chrome/diggsidebar.jar!/chrome/content/ +locale diggsidebar en-US jar:chrome/diggsidebar.jar!/chrome/locale/en-US/ +skin diggsidebar classic/1.0 jar:chrome/diggsidebar.jar!/chrome/skin/ +overlay chrome://browser/content/browser.xul chrome://diggsidebar/content/firefoxOverlay.xul diff --git a/chrome/content/diggsidebar.js b/chrome/content/diggsidebar.js new file mode 100644 index 0000000..5ae6569 --- /dev/null +++ b/chrome/content/diggsidebar.js @@ -0,0 +1,446 @@ +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 +*/ \ No newline at end of file diff --git a/chrome/content/diggsidebar.xul b/chrome/content/diggsidebar.xul new file mode 100644 index 0000000..f5ffa4a --- /dev/null +++ b/chrome/content/diggsidebar.xul @@ -0,0 +1,83 @@ + + + + + + + +