]> git.donarmstrong.com Git - x_full.git/blobdiff - .mozilla/firefox/default/extensions/keyconfig@dorando/components/keyconfig-service.js
add various extensions
[x_full.git] / .mozilla / firefox / default / extensions / keyconfig@dorando / components / keyconfig-service.js
diff --git a/.mozilla/firefox/default/extensions/keyconfig@dorando/components/keyconfig-service.js b/.mozilla/firefox/default/extensions/keyconfig@dorando/components/keyconfig-service.js
new file mode 100644 (file)
index 0000000..a76d105
--- /dev/null
@@ -0,0 +1,110 @@
+function NSGetModule(compMgr, fileSpec) { return keyconfigModule; }\r
+\r
+var keyconfigModule = {\r
+  CID: Components.ID("{e9f7950e-d78d-4aaa-900a-c43588052eba}"),\r
+  contractID : "@dorando.at/keyconfig;1",\r
+  className  : "keyconfigService",\r
+\r
+  registerSelf: function (aComponentManager, aFileSpec, aLocation, aType) \r
+  {\r
+    aComponentManager = aComponentManager.QueryInterface(Components.interfaces.nsIComponentRegistrar);\r
+\r
+    aComponentManager.registerFactoryLocation(this.CID, this.className, this.contractID, aFileSpec, aLocation, aType);\r
+\r
+    var CategoryManager = Components.classes["@mozilla.org/categorymanager;1"]\r
+                                    .getService(Components.interfaces.nsICategoryManager);\r
+    CategoryManager.addCategoryEntry("app-startup", this.className, "service," + this.contractID, true, true, null);\r
+  },\r
+  \r
+  getClassObject: function (aComponentManager, aCID, aIID) \r
+  {\r
+    if (!aIID.equals(Components.interfaces.nsIFactory)) throw Components.results.NS_ERROR_NOT_IMPLEMENTED;\r
+\r
+    if (aCID.equals(this.CID)) return this.factory;\r
+    \r
+    throw Components.results.NS_ERROR_NO_INTERFACE;\r
+  },\r
+\r
+  factory: {\r
+    createInstance: function (aOuter, aIID)\r
+    {\r
+      if (aOuter != null) throw Components.results.NS_ERROR_NO_AGGREGATION;\r
+\r
+      return new keyconfigService();\r
+    }\r
+  },\r
+  \r
+  canUnload: function () { return true; }\r
+};\r
+\r
+function keyconfigService() { }\r
+\r
+keyconfigService.prototype = {\r
+  os: Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService),\r
+  ps: Components.classes['@mozilla.org/preferences-service;1']\r
+                .getService(Components.interfaces.nsIPrefService).getBranch(""),\r
+  bug174320fixed: Components.interfaces.nsIDOMNSFeatureFactory ? true : false,\r
+  haspageshow: Components.interfaces.nsIDOMPageTransitionEvent ? true : false,\r
+\r
+  observe: function (aSubject, aTopic, aData) {\r
+    if(aTopic == "app-startup") this.os.addObserver(this,"domwindowopened",false);\r
+    else if(aTopic == "domwindowopened") {\r
+      aSubject.keyconfig = {service: this};\r
+      aSubject.addEventListener("load",this.load,this.bug174320fixed);\r
+    }\r
+  },\r
+\r
+  load: function(event) {\r
+    this.removeEventListener(event.type,this.keyconfig.service.load,true);\r
+\r
+    if(event.eventPhase == 2 && this.keyconfig.service.bug174320fixed)\r
+     if(this.keyconfig.service.haspageshow)\r
+      this.addEventListener("pageshow",this.keyconfig.service.init,false);\r
+     else\r
+      this.keyconfig.service.init.call(this);\r
+    else\r
+      this.addEventListener("load",this.keyconfig.service.init,false);\r
+  },\r
+\r
+  init: function() {\r
+    this.removeEventListener("pageshow",this.keyconfig.service.init,false);\r
+\r
+    this.keyconfig.removedKeys = this.document.createElement("keyset");\r
+    this.keyconfig.profile = "keyconfig." + this.keyconfig.service.ps.getCharPref("keyconfig.profile") + ".";\r
+\r
+    var i, l;\r
+\r
+    var keyset = this.document.getElementsByTagName("keyset")[0] ||\r
+                 this.document.documentElement.appendChild(this.document.createElement("keyset"));\r
+\r
+    var nodes = this.document.getElementsByTagName("key");\r
+    for(i = 0, l = nodes.length; i < l; i++) if(!nodes[i].id)\r
+      nodes[i].id = "xxx_key"+ i +"_"+nodes[i].getAttribute("command")+nodes[i].getAttribute("oncommand");\r
+\r
+    var keys = this.keyconfig.service.ps.getChildList(this.keyconfig.profile, {});\r
+\r
+    for(i = 0, l = keys.length; i < l; i++) {\r
+      var key, node;\r
+      try {\r
+       key = this.keyconfig.service.ps.getComplexValue(keys[i], Components.interfaces.nsISupportsString).data.split("][");\r
+      } catch(e) { continue; }\r
+      if(key[3] && (!key[4] || key[4] == this.document.location)) {\r
+        node = keyset.appendChild(this.document.createElement("key"));\r
+        node.id = keys[i].substr(this.keyconfig.profile.length);\r
+        node.setAttribute("oncommand",key[3]);\r
+      } else {\r
+        node = this.document.getElementById(keys[i].substr(this.keyconfig.profile.length));\r
+        if(!node) continue;\r
+      }\r
+\r
+      node.removeAttribute("modifiers"); node.removeAttribute("key"); node.removeAttribute("keycode");\r
+      node.removeAttribute("charcode");\r
+      if(key[0] == "!") {this.keyconfig.removedKeys.appendChild(node); continue;}\r
+\r
+      if(key[0]) node.setAttribute("modifiers",key[0]);\r
+      if(key[1]) node.setAttribute("key",key[1]);\r
+      if(key[2]) node.setAttribute("keycode",key[2]);\r
+    }\r
+  }\r
+\r
+}\r