home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 March / Chip_2011.03_CD.iso / Tools / yabar.msi / fil38B83070CEDE011FA925B3A892CC3F2E < prev    next >
Encoding:
Extensible Markup Language  |  2010-04-16  |  8.2 KB  |  231 lines

  1. <?xml version="1.0"?>
  2. <!DOCTYPE bindings [
  3. <!ENTITY % yasearchDTD SYSTEM "chrome://yasearch/locale/keycorrector/urlbarcorrector.dtd" >
  4. %yasearchDTD;
  5. ]>
  6. <bindings id="YaSearchUrlbarBindings"
  7.           xmlns="http://www.mozilla.org/xbl"
  8.           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  9.           xmlns:xbl="http://www.mozilla.org/xbl">
  10.   <binding id="urlbar-corrector-icon">
  11.     <content>
  12.       <xul:popupset>
  13.         <xul:popup id="yasearchbar-urlbar-corrector-context">
  14.           <xul:menuitem label="&yasearch.urlbar.corrector.enable.label;"
  15.                         class="menuitem-iconic" xbl:inherits="checked=runned"
  16.                         oncommand="switchRunned();"/>
  17.           <xul:menuseparator/>
  18.           <xul:menuitem label="&yasearch.urlbar.corrector.disable.label;"
  19.                         xbl:inherits="checked=disabled"
  20.                         oncommand="switchDisabled();"/>
  21.         </xul:popup>
  22.       </xul:popupset>
  23.       
  24.       <xul:tooltip orient="vertical" id="yasearchbar-urlbar-corrector-tooltip" noautohide="true">
  25.         <xul:label value="&yasearch.urlbar.corrector.tooltiptext; &yasearch.urlbar.corrector.tooltiptext.enable;"/>
  26.         <xul:label value="&yasearch.urlbar.corrector.tooltiptext; &yasearch.urlbar.corrector.tooltiptext.disable;"/>
  27.       </xul:tooltip>
  28.             
  29.       <xul:image xbl:inherits="hidden" context="yasearchbar-urlbar-corrector-context"
  30.                  onclick="if (event.button != 2) switchRunned();"
  31.                  tooltip="yasearchbar-urlbar-corrector-tooltip"/>
  32.     </content>
  33.     
  34.     <implementation implements="nsIDOMEventListener, nsIObserver">
  35.       <field name="mDisabled">true</field>
  36.       <field name="mRunned">false</field>
  37.       
  38.       <property name="runned">
  39.         <getter><![CDATA[
  40.           return this.mRunned;
  41.         ]]></getter>
  42.         <setter><![CDATA[
  43.           if (val !== this.mRunned) {
  44.             this.setAttribute("runned", val);
  45.             this.mRunned = val;
  46.           }
  47.           return this.mRunned;
  48.         ]]></setter>
  49.       </property>
  50.       
  51.       <property name="disabled">
  52.         <getter><![CDATA[
  53.           return this.mDisabled;
  54.         ]]></getter>
  55.         <setter><![CDATA[
  56.           if (val !== this.mDisabled) {
  57.             this.setAttribute("hidden", val);
  58.             this.mDisabled = val;
  59.             
  60.             val ? this._uninit() : this._init();
  61.           }
  62.           return this.mDisabled;
  63.         ]]></setter>
  64.       </property>
  65.       
  66.       <field name="__lastKey">null</field>
  67.       <field name="nsKeyCorrector">null</field>
  68.       
  69.       <constructor><![CDATA[
  70.         this.nsKeyCorrector = Cc["@yandex.ru/yasearch;1"]
  71.                                      .getService(Ci.nsIYaSearch)
  72.                                      .wrappedJSObject
  73.                                      .KeyCorrector;
  74.         this.checkState();
  75.         
  76.         Cc["@mozilla.org/observer-service;1"]
  77.             .getService(Ci.nsIObserverService)
  78.             .addObserver(this, "Ya-Refresh-Data", false);
  79.       ]]></constructor>
  80.       
  81.       <destructor><![CDATA[
  82.         Cc["@mozilla.org/observer-service;1"]
  83.             .getService(Ci.nsIObserverService)
  84.             .removeObserver(this, "Ya-Refresh-Data");
  85.  
  86.         this.nsKeyCorrector = null;
  87.         this._uninit();
  88.       ]]></destructor>
  89.       
  90.       <method name="handleEvent">
  91.         <parameter name="aEvent"/>
  92.         <body><![CDATA[
  93.           if (aEvent.isTrusted === true && !(aEvent.ctrlKey || aEvent.altKey || aEvent.metaKey)) {
  94.             switch (aEvent.type) {
  95.               case "keydown":
  96.                 this.__lastKey = aEvent.keyCode;
  97.                 break;
  98.  
  99.               case "keypress":
  100.                 if (aEvent.keyCode == aEvent.DOM_VK_PAUSE) {
  101.                   this.switchRunned();
  102.                 } else if (this.runned) {
  103.                   var res = false;
  104.                   var shiftKey = aEvent.shiftKey;
  105.                   var strFromCode = String.fromCharCode(aEvent.charCode);
  106.                   
  107.                   if (this._keyConvTable) {
  108.                     // Caps Lock
  109.                     if ((shiftKey && strFromCode.toUpperCase() != strFromCode) ||
  110.                         (!shiftKey && strFromCode.toLowerCase() != strFromCode))
  111.                     {
  112.                       shiftKey = !shiftKey;
  113.                     }
  114.                     
  115.                     var chCode = shiftKey ?
  116.                                      this._keyConvTable.withShift[this.__lastKey]||null :
  117.                                      this._keyConvTable.withoutShift[this.__lastKey]||null;
  118.                     res = (chCode && chCode != aEvent.charCode) ? String.fromCharCode(chCode) : false;
  119.                   } else {
  120.                     res = (shiftKey ? this._charConvTable.withShift[strFromCode.toLowerCase()]||null : null) ||
  121.                           this._charConvTable.withoutShift[strFromCode]||null;
  122.                   }
  123.  
  124.                   if (res && this.fireInsertCommand(res)) {
  125.                     aEvent.preventDefault();
  126.                     aEvent.stopPropagation();
  127.                   }
  128.                 }
  129.                 break;
  130.             }
  131.           }
  132.         ]]></body>
  133.       </method>
  134.       
  135.       <method name="fireInsertCommand">
  136.         <parameter name="aData"/>
  137.         <body><![CDATA[
  138.           try {
  139.             var command = "cmd_insertText";
  140.             var controller = document.commandDispatcher.getControllerForCommand(command);
  141.             if (controller && controller.isCommandEnabled(command)) {
  142.               controller = controller.QueryInterface(Ci.nsICommandController);
  143.               var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
  144.               params.setStringValue("state_data", aData);
  145.               controller.doCommandWithParams(command, params);
  146.               return true;
  147.             }
  148.           } catch(e) {}
  149.  
  150.           return false;
  151.         ]]></body>
  152.       </method>
  153.       
  154.       <method name="checkState">
  155.         <body><![CDATA[
  156.           switch (this.nsKeyCorrector.currentState) {
  157.             case this.nsKeyCorrector.STATE_DISABLED:
  158.               this.runned = false;
  159.               this.disabled = true;
  160.               break;
  161.  
  162.             case this.nsKeyCorrector.STATE_RUNNED:
  163.               this.runned = true;
  164.               this.disabled = false;
  165.               break;
  166.  
  167.             case this.nsKeyCorrector.STATE_STOPPED:
  168.               this.runned = false;
  169.               this.disabled = false;
  170.               break;
  171.           }
  172.         ]]></body>
  173.       </method>
  174.       
  175.       <method name="observe">
  176.         <parameter name="aSubject"/>
  177.         <parameter name="aTopic"/>
  178.         <parameter name="aData"/>
  179.         <body><![CDATA[
  180.           if (aTopic == "Ya-Refresh-Data" && aData == "urlbar-corrector")
  181.             this.checkState();
  182.         ]]></body>
  183.       </method>
  184.       
  185.       <method name="_init">
  186.         <body><![CDATA[
  187.           this._keyConvTable = this.nsKeyCorrector.keyConvTable;
  188.           this._charConvTable = this.nsKeyCorrector.charConvTable;
  189.           this._setListeners(true);
  190.         ]]></body>
  191.       </method>
  192.       
  193.       <method name="_uninit">
  194.         <body><![CDATA[
  195.           this._setListeners(false);
  196.           this._keyConvTable = null;
  197.           this._charConvTable = null;
  198.         ]]></body>
  199.       </method>
  200.       
  201.       <method name="_setListeners">
  202.         <parameter name="aAdd"/>
  203.         <body><![CDATA[
  204.           var urlBar = document.getElementById("urlbar");
  205.           if (urlBar) {
  206.             var fn = aAdd ? "addEventListener" : "removeEventListener";
  207.             for each (var ev in [["keypress", true], ["keydown", false]])
  208.               urlBar[fn](ev[0], this, ev[1]);
  209.           }
  210.         ]]></body>
  211.       </method>
  212.       
  213.       <method name="switchRunned">
  214.         <body><![CDATA[
  215.           this.nsKeyCorrector.currentState =
  216.               this.runned ? this.nsKeyCorrector.STATE_STOPPED :
  217.                             this.nsKeyCorrector.STATE_RUNNED;
  218.         ]]></body>
  219.       </method>
  220.       
  221.       <method name="switchDisabled">
  222.         <body><![CDATA[
  223.           this.nsKeyCorrector.currentState =
  224.               this.disabled ? this.nsKeyCorrector.STATE_RUNNED :
  225.                               this.nsKeyCorrector.STATE_DISABLED;
  226.         ]]></body>
  227.       </method>
  228.     </implementation>
  229.   </binding>
  230.   
  231. </bindings>