diff --git a/buildxpi.py b/buildxpi.py
index 107533b..1c54d28 100755
--- a/buildxpi.py
+++ b/buildxpi.py
@@ -130,7 +130,7 @@ def print_info(self):
self.msg(" - Version: %s" % self.info["version"], False)
self.msg(" - Filename: %s" % self.pn("xpi"), False)
- xpifile = open(self.pn("xpi"), "r")
+ xpifile = open(self.pn("xpi"), "rb")
hashname, hash = sha_hash(xpifile.read())
xpifile.close()
self.msg(" - %s: %s" % (hashname, hash), False)
diff --git a/src/install.rdf b/src/install.rdf
index b27639c..9c7ab54 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -7,9 +7,9 @@
em:minVersion="3.6"
em:maxVersion="9.*" />
@@ -18,9 +18,9 @@
+ em:contributor="Chromakode slyf vilkku" />
diff --git a/src/modules/site.jsm b/src/modules/site.jsm
index d97e3a1..7782388 100644
--- a/src/modules/site.jsm
+++ b/src/modules/site.jsm
@@ -113,8 +113,8 @@ SiteCollection.prototype.initRefreshInterval = function() {
SiteCollection.prototype.onContentLoad = function(doc, win) {
if (doc.location) {
for (let [siteID, site] in this) {
- // Remove www.
- var baseRegex = /www\.?/;
+ // Remove https?://www.
+ var baseRegex = /https?:\/\/www\.?/;
var baseSiteHost = site.siteURI.spec.replace(baseRegex, "");
var baseURL = doc.location.href.replace(baseRegex, "");
if (strStartsWith(baseURL, baseSiteHost)) {
diff --git a/src/modules/utils/domUtils.jsm b/src/modules/utils/domUtils.jsm
index 2bac5d8..fe0a916 100644
--- a/src/modules/utils/domUtils.jsm
+++ b/src/modules/utils/domUtils.jsm
@@ -47,18 +47,6 @@ function compareBy(keyFunction) {
};
}
-function sortChildren(parentElement, compareFunc) {
- sorted = Array.sort(Array.slice(parentElement.childNodes), compareFunc)
-
- let parentElement = curElement.parentNode;
- if (i == nodeList.length) {
- // Insert after the last node
- parentElement.insertBefore(insertElement, curElement.nextSibling);
- } else {
- parentElement.insertBefore(insertElement, curElement);
- }
-}
-
/**
* Return the first child node of an element with the specified class.
*
diff --git a/unused/authentication-old.jsm b/unused/authentication-old.jsm
deleted file mode 100644
index 4621808..0000000
--- a/unused/authentication-old.jsm
+++ /dev/null
@@ -1,139 +0,0 @@
-var loginManager = Components.classes["@mozilla.org/login-manager;1"]
- .getService(Components.interfaces.nsILoginManager)
-
-var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
- Components.interfaces.nsILoginInfo,
- "init");
-
-logger = Components.utils.import("resource://socialite/utils/log.jsm");
-Components.utils.import("resource://socialite/utils/action/action.jsm");
-http = Components.utils.import("resource://socialite/utils/action/httpRequest.jsm");
-
-var EXPORTED_SYMBOLS = ["getAuthHash", "refreshAuthHash", "RedditAuth"];
-
-STATUS_SUCCESS = 200;
-
-PASSWORD_HOSTNAME = "chrome://socialite";
-PASSWORD_REALM_PRE = "Socialite authentication for ";
-
-// ---
-
-function RedditAuth(siteURL, username, userHash) {
- this.siteURL = siteURL;
- this.username = username;
- this.userHash = userHash;
- this.modHash = null;
-}
-
-RedditAuth.prototype.authParams = function(params) {
- params["uh"] = this.userHash;
- return params;
-}
-
-RedditAuth.prototype.snarfModHash = function(modHash) {
- this.modHash = modHash;
-}
-
-RedditAuth.prototype.authModHash = function(params) {
- if (this.modHash) {
- params["uh"] = this.modHash;
- }
- return params;
-}
-
-// ---
-
-var getAuthHash = Action("reddit_auth.getAuthHash", function(siteURL, action) {
- logger.log("reddit_auth", "Making authenticate call");
-
- var logins = loginManager.findLogins({}, PASSWORD_HOSTNAME, null, PASSWORD_REALM_PRE + siteURL);
- if (logins.length == 0) {
- // No stored hash... time to get one
- var act = refreshAuthHash();
- act.chainTo(action);
- act.perform(siteURL);
- } else {
- var login = logins[0];
- var rAuth = new RedditAuth(siteURL, login.username, login.password);
- action.success(rAuth);
- }
-});
-
-var refreshAuthHash = Action("reddit_auth.refreshAuthHash", function(siteURL, action) {
- logger.log("reddit_auth", "Getting new user hash");
-
- var act = http.GetAction(
- "http://" + siteURL + "/bookmarklets/",
- null,
-
- function success(r) {
- var uh = extractUserHash(r.responseXML);
- var username = extractUsername(r.responseXML);
-
- // Save the userHash we retrieved
- var uhLoginInfo = new nsLoginInfo(
- PASSWORD_HOSTNAME,
- null,
- PASSWORD_REALM_PRE + siteURL,
- username, uh,
- "", ""
- );
-
- // Remove any existing logins
- var logins = loginManager.findLogins({}, PASSWORD_HOSTNAME, null, PASSWORD_REALM_PRE + siteURL);
- for (var i = 0; i < logins.length; i++) {
- if (logins[1].username == username) {
- loginManager.removeLogin(logins[i]);
- }
- }
-
- // Add the new login
- loginManager.addLogin(uhLoginInfo);
-
- var rAuth = new RedditAuth(siteURL, uh);
- action.success(rAuth);
- },
- function failure(r) { action.failure(); }
- );
-
- act.request.overrideMimeType('text/xml');
- act.perform();
-});
-
-function evalXHTML_XPath(document, xpath) {
- var XPathResult = Components.interfaces.nsIDOMXPathResult;
- const XHTMLResolver = function(prefix) {
- if (prefix=="xhtml") {return "http://www.w3.org/1999/xhtml"}
- }
-
- return document.evaluate(xpath, document, XHTMLResolver, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
-}
-
-function extractUserHash(document) {
- // A bit elaborate, but this is currently the best way to do things.
- // By getting the information from the bookmarklets page itself, we are hopefully more safe from unassociated page changes as reddit may alter their hashing system...
-
- // Get the first "like" button
- try {
- var results = evalXHTML_XPath(document, "//xhtml:a/xhtml:img[@alt='like']/..");
- var likeButton = results.iterateNext();
- const getUserHash = /uh=(\w*)/;
-
- return likeButton.href.match(getUserHash)[1];
- } catch (e) {
- logger.log("reddit_auth", "Unable to parse bookmarklets page for user hash: " + e.toString());
- return null;
- }
-}
-
-function extractUsername(document) {
- // Get the username
- try {
- var results = evalXHTML_XPath(document, "//xhtml:span[@class='user']/xhtml:a");
- var usernameLink = results.iterateNext();
- return usernameLink.textContent;
- } catch (e) {
- logger.log("reddit_auth", "Unable to parse bookmarklets page for username: " + e.toString());
- return null;
- }
-}
diff --git a/unused/bookmarkletAPI.jsm b/unused/bookmarkletAPI.jsm
deleted file mode 100644
index e0c991d..0000000
--- a/unused/bookmarkletAPI.jsm
+++ /dev/null
@@ -1,56 +0,0 @@
-// High-level reddit bookmarklet commands
-
-logger = Components.utils.import("resource://socialite/utils/log.jsm");
-Components.utils.import("resource://socialite/utils/action/action.jsm");
-http = Components.utils.import("resource://socialite/utils/action/httpRequest.jsm");
-Components.utils.import("resource://socialite/utils/hitch.jsm");
-Components.utils.import("resource://socialite/utils/quantizer.jsm");
-
-var EXPORTED_SYMBOLS = ["BookmarkletAPI"];
-
-QUANTIZE_TIME = 1000;
-
-var BOOKMARKLET_API_PATH = "/d/";
-function APIURL(site, op) {
- return "http://www." + site + BOOKMARKLET_API_PATH + op;
-}
-
-function sameURL(func1, arg1, func2, arg2) {
- var url1 = arg1[0];
- var url2 = arg2[0];
-
- return (url1 == url2);
-};
-
-// Make a template since all bookmarklet calls are similar
-function bookmarkletAction(self, op, quantizer) {
- var func = hitchThis(self, function(url, action) {
- logger.log("reddit", "Making ajax bookmarklet " + op + " call");
-
- var params = {
- u: url,
- };
- params = this.reddit.auth.authParams(params);
-
- var act = http.GetAction(APIURL(this.reddit.auth.site, op), params);
- act.chainTo(action);
- act.perform();
- });
-
- if (quantizer) {
- func = quantizer.quantize(func);
- }
-
- return Action("reddit.bookmarklet." + op, func);
-}
-
-function BookmarkletAPI(reddit) {
- this.reddit = reddit;
-
- this.voteQuantizer = new Quantizer("reddit.bookmarklet.vote.quantizer", QUANTIZE_TIME, sameURL);
- this.like = bookmarkletAction(this, "like", this.voteQuantizer);
- this.dislike = bookmarkletAction(this, "dislike", this.voteQuantizer);
-
- this.saveQuantizer = new Quantizer("reddit.bookmarklet.save.quantizer", QUANTIZE_TIME, sameURL);
- this.save = bookmarkletAction(this, "save", this.saveQuantizer);
-}
diff --git a/unused/oneshot.jsm b/unused/oneshot.jsm
deleted file mode 100644
index 3710c83..0000000
--- a/unused/oneshot.jsm
+++ /dev/null
@@ -1,13 +0,0 @@
-// Add an event listener that only fires once.
-
-var EXPORTED_SYMBOLS = ["makeOneShot"]
-
-function makeOneShot(instance, type, listener, useCapture) {
-
- var oneShotListener = function () {
- instance.removeEventListener(type, oneShotListener, useCapture);
- listener.apply(null, arguments);
- }
-
- instance.addEventListener(type, oneShotListener, useCapture);
-}
diff --git a/unused/retry.jsm b/unused/retry.jsm
deleted file mode 100644
index 9f8369a..0000000
--- a/unused/retry.jsm
+++ /dev/null
@@ -1,56 +0,0 @@
-// A failure callback to retry an action a set number of times
-
-logger = Components.utils.import("resource://socialite/utils/log.jsm");
-Components.utils.import("resource://socialite/utils/action/action.jsm");
-Components.utils.import("resource://socialite/utils/hitch.jsm");
-
-var EXPORTED_SYMBOLS = ["retryAction"];
-
-function retryAction(startCount, delay, retryCallback, successCallback, failureCallback) {
- var act = _RetryAction(successCallback, failureCallback);
- act.count = startCount;
- act.delay = delay
- act.retryCallback = retryCallback;
- act.timer = Components.classes["@mozilla.org/timer;1"]
- .createInstance(Components.interfaces.nsITimer);
- return act;
-}
-
-var _RetryAction = Action("retry", function() {
- var argsLen = arguments.length;
-
- var retryAction = arguments[argsLen-1];
- var action = arguments[argsLen-2];
-
- if (!retryAction.count) {
- retryAction.failure.apply(retryAction, arguments);
- } else {
- logger.log(retryAction.name, action.name + " has failed, retrying (" + retryAction.count + " retrys left)");
-
- var args = arguments;
- var doRetry = function() {
- // Call the retry callback
- var continueRetry = retryAction.doCallback(this.retryCallback, null, args);
- if (continueRetry == null || continueRetry == true) {
- retryAction.count -= 1;
-
- // Perform the action again.
- action.perform.apply(action, action.lastArgs);
- } else {
- logger.log(retryAction.name, "Retry callback has signalled to stop retrying; retry aborted");
- retryAction.failure.apply(retryAction, arguments);
- }
- };
-
- if (retryAction.delay) {
- logger.log(retryAction.name, "Waiting " + retryAction.delay + " milliseconds");
- retryAction.timer.initWithCallback(
- doRetry,
- retryAction.delay,
- retryAction.timer.TYPE_ONE_SHOT
- );
- } else {
- doRetry();
- }
- }
-});
diff --git a/unused/sequence.jsm b/unused/sequence.jsm
deleted file mode 100644
index 75c0512..0000000
--- a/unused/sequence.jsm
+++ /dev/null
@@ -1,17 +0,0 @@
-// A helper function to call a list of functions in sequence
-
-logger = Components.utils.import("resource://socialite/utils/log.jsm");
-
-var EXPORTED_SYMBOLS = ["sequenceCalls"];
-
-function sequenceCalls() {
- var callbacks = Array.prototype.splice.call(arguments, 0) || [];
-
- var sequence = function () {
- for (var i=0; i