]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/modules/messages.jsm
Import 1.0b7.1 supporting Firefox up to 8.*
[dactyl.git] / common / modules / messages.jsm
index 4b6e47888eb7de3aaebee4423ccfda73dc05a473..f1f4de1324a3d02103e7313294775671135ef629 100644 (file)
@@ -45,7 +45,7 @@ var Messages = Module("messages", {
 
         let seen = {};
         for (let { key } in this.iterate()) {
-            if (!set.add(seen, key))
+            if (!Set.add(seen, key))
                 this._[key] = this[key] = {
                     __noSuchMethod__: function __(prop, args) self._.apply(self, [prop].concat(args))
                 };
@@ -67,7 +67,7 @@ var Messages = Module("messages", {
             catch (e) {}
 
         // Report error so tests fail, but don't throw
-        if (arguments.length < 2)
+        if (arguments.length < 2) // Do *not* localize these strings
             util.reportError(Error("Invalid locale string: " + value));
         return arguments.length > 1 ? default_ : value;
     },
@@ -80,7 +80,7 @@ var Messages = Module("messages", {
             catch (e) {}
 
         // Report error so tests fail, but don't throw
-        if (arguments.length < 3)
+        if (arguments.length < 3) // Do *not* localize these strings
             util.reportError(Error("Invalid locale string: " + value));
         return arguments.length > 2 ? default_ : value;
     }
@@ -88,13 +88,17 @@ var Messages = Module("messages", {
 }, {
     Localized: Class("Localized", Class.Property, {
         init: function init(prop, obj) {
-            let _prop = "localized_" + prop;
+            let _prop = "unlocalized_" + prop;
             if (this.initialized) {
                 /*
                 if (config.locale === "en-US")
-                    return { configurable: true, enumerable: true, value: null, writable: true };
+                    return { configurable: true, enumerable: true, value: this.default, writable: true };
                 */
 
+                if (!Set.has(obj, "localizedProperties"))
+                    obj.localizedProperties = { __proto__: obj.localizedProperties };
+                obj.localizedProperties[prop] = true;
+
                 obj[_prop] = this.default;
                 return {
                     get: function get() {
@@ -103,26 +107,29 @@ var Messages = Module("messages", {
 
                         function getter(key, default_) function getter() messages.get([name, key].join("."), default_);
 
-                        let name = [this.constructor.className.toLowerCase(), this.identifier || this.name, prop].join(".");
-                        if (!isObject(value))
-                            value = messages.get(name, value)
-                        else if (isArray(value))
-                            // Deprecated
-                            iter(value).forEach(function ([k, v]) {
-                                if (isArray(v))
-                                    memoize(v, 1, getter(v[0], v[1]));
-                                else
-                                    memoize(value, k, getter(k, v));
-                            });
-                        else
-                            iter(value).forEach(function ([k, v]) {
-                                memoize(value, k, function () messages.get([name, k].join("."), v));
-                            });
+                        if (value != null) {
+                            var name = [this.constructor.className.toLowerCase(), this.identifier || this.name, prop].join(".");
+                            if (!isObject(value))
+                                value = messages.get(name, value);
+                            else if (isArray(value))
+                                // Deprecated
+                                iter(value).forEach(function ([k, v]) {
+                                    if (isArray(v))
+                                        memoize(v, 1, getter(v[0], v[1]));
+                                    else
+                                        memoize(value, k, getter(k, v));
+                                });
+                            else
+                                iter(value).forEach(function ([k, v]) {
+                                    memoize(value, k, function () messages.get([name, k].join("."), v));
+                                });
+                        }
 
                         return Class.replaceProperty(this, prop, value);
                     },
+
                     set: function set(val) this[_prop] = val
-                }
+                };
             }
             this.default = prop;
             this.initialized = true;