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 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/chrome/content/firefoxOverlay.xul b/chrome/content/firefoxOverlay.xul
new file mode 100644
index 0000000..c1b852b
--- /dev/null
+++ b/chrome/content/firefoxOverlay.xul
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/chrome/content/image/Pause.png b/chrome/content/image/Pause.png
new file mode 100644
index 0000000..271e378
Binary files /dev/null and b/chrome/content/image/Pause.png differ
diff --git a/chrome/content/image/Play.png b/chrome/content/image/Play.png
new file mode 100644
index 0000000..6094a9c
Binary files /dev/null and b/chrome/content/image/Play.png differ
diff --git a/chrome/content/image/comments.png b/chrome/content/image/comments.png
new file mode 100644
index 0000000..c559b08
Binary files /dev/null and b/chrome/content/image/comments.png differ
diff --git a/chrome/content/image/digg.png b/chrome/content/image/digg.png
new file mode 100644
index 0000000..5db8fc0
Binary files /dev/null and b/chrome/content/image/digg.png differ
diff --git a/chrome/content/image/digg_this.png b/chrome/content/image/digg_this.png
new file mode 100644
index 0000000..1e43ee3
Binary files /dev/null and b/chrome/content/image/digg_this.png differ
diff --git a/chrome/content/image/down.jpg b/chrome/content/image/down.jpg
new file mode 100644
index 0000000..32e78a7
Binary files /dev/null and b/chrome/content/image/down.jpg differ
diff --git a/chrome/content/image/external.png b/chrome/content/image/external.png
new file mode 100644
index 0000000..419c06f
Binary files /dev/null and b/chrome/content/image/external.png differ
diff --git a/chrome/content/image/up.jpg b/chrome/content/image/up.jpg
new file mode 100644
index 0000000..ac907ae
Binary files /dev/null and b/chrome/content/image/up.jpg differ
diff --git a/chrome/locale/en-US/diggsidebar.dtd b/chrome/locale/en-US/diggsidebar.dtd
new file mode 100644
index 0000000..ebd41f3
--- /dev/null
+++ b/chrome/locale/en-US/diggsidebar.dtd
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/chrome/skin/diggsidebar.css b/chrome/skin/diggsidebar.css
new file mode 100644
index 0000000..62cd781
--- /dev/null
+++ b/chrome/skin/diggsidebar.css
@@ -0,0 +1,79 @@
+.storyList {
+ margin: 1px;
+ border-style: solid !important;
+ border-color: #000;
+ border-width: 1px;
+ -moz-border-bottom-colors: #000 !important;
+ -moz-border-top-colors: #000 !important;
+ -moz-border-left-colors: #000 !important;
+ -moz-border-right-colors: #000 !important;
+}
+
+.storyDetails {
+ padding: 3px;
+ display: none;
+ background-color: #ffffff;
+ clear: both;
+}
+.storyDetails > div {
+ clear: both;
+ height: 15px;
+ padding: 1px 0px;
+ font-size: x-small;
+}
+.storyTitle {
+ padding: 0px 5px;
+ font-size: x-small;
+ font-weight: bold;
+}
+.storyDate, .storyDate, .storyLink {
+ float: left;
+}
+
+.storyStatus, .storyNew, .storyRead, .storyPopularity, .storyHref {
+ float: right;
+}
+
+.storyNew, .storyRead {
+ padding: 0px 2px;
+}
+.storyDesc {
+ height: auto!important;
+}
+
+.storyHeader {
+ cursor: pointer;
+}
+a {
+ color: blue;
+ cursor: pointer;
+ padding: 1px;
+}
+
+a:hover {
+ color: white;
+ background-color: blue;
+}
+
+richlistitem {
+ border-bottom: 1px solid black;
+ padding-bottom: 3px;
+ color: #000000!important;
+}
+
+richlistitem > div{
+ width: 250px;
+}
+richlistitem[selected="true"] {
+ background-color: #FFFBF0;
+ color: inherit;
+}
+richlistitem[selected="true"] .storyDetails {
+ border-top: 1px dashed black;
+ background-color: #FFFBF0;
+}
+
+richlistitem .storyTitle:hover {
+ background-color: green;
+ color: white;
+}
\ No newline at end of file
diff --git a/defaults/preferences/defaults.js b/defaults/preferences/defaults.js
new file mode 100644
index 0000000..5c55325
--- /dev/null
+++ b/defaults/preferences/defaults.js
@@ -0,0 +1,3 @@
+pref("extensions.diggsidebar.endpoint", "");
+pref("extensions.diggsidebar.updateinterval", 30000);
+pref("extensions.diggsidebar.updateintervaldecay", 0);
\ No newline at end of file
diff --git a/install.rdf b/install.rdf
new file mode 100644
index 0000000..311658e
--- /dev/null
+++ b/install.rdf
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+