home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 July & August / PCWorld_2005-07-08_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / browser.jar / content / browser / search.xml < prev    next >
Extensible Markup Language  |  2005-05-07  |  20KB  |  499 lines

  1. <?xml version="1.0"?>
  2.  
  3.  
  4. <bindings id="SearchBindings"
  5.           xmlns="http://www.mozilla.org/xbl"
  6.           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  7.           xmlns:xbl="http://www.mozilla.org/xbl">
  8.  
  9.   <binding id="searchbar-base">
  10.     <resources>
  11.       <stylesheet src="chrome://browser/content/searchbarBindings.css"/>
  12.       <stylesheet src="chrome://browser/skin/searchbar.css"/>
  13.     </resources>
  14.   </binding>
  15.  
  16.   <binding id="searchbar" extends="chrome://browser/content/search.xml#searchbar-base">
  17.       <!--
  18.                    type="autocomplete"
  19.                    autocompletepopup="SearchBarHistoryPopup"
  20.                    autocompletesearch="form-history"
  21.                    autocompletesearchparam="searchbar-history"
  22.                    disableautocomplete="true"
  23.                    enablehistory="true"
  24.       -->
  25.     <content>
  26.       <xul:stringbundle src="chrome://browser/locale/searchbar.properties"/>
  27.       <xul:textbox class="searchbar-textbox" flex="1"
  28.                    completeselectedindex="true"
  29.                    tabscrolling="true"
  30.                    onfocus="URLBarFocusHandler(event, this);"
  31.                    onmousedown="URLBarMouseDownHandler(event, this);"
  32.                    onclick="URLBarClickHandler(event, this);"
  33.                    xbl:inherits="searchengine,src">
  34.         <xul:button class="searchbar-dropmarker" type="menu"
  35.                     popup="_child" xbl:inherits="src">
  36.           <xul:menupopup anonid="searchbar-popup" position="after_start"
  37.                          datasources="rdf:internetsearch"
  38.                          ref="NC:SearchEngineRoot"
  39.                          oncommand="if (this.parentNode) this.parentNode.parentNode.onEnginePopupCommand(event);"
  40.                          onpopupshowing="if (this.parentNode) this.parentNode.parentNode.onEnginePopupShowing(event);"
  41.                          onpopuphidden="if (this.parentNode) this.parentNode.parentNode.onEnginePopupHidden(event);">
  42.             <xul:template>
  43.               <xul:menuitem type="checkbox"
  44.                             uri="rdf:*" value="rdf:*"
  45.                             src="rdf:http://home.netscape.com/NC-rdf#Icon"
  46.                             label="rdf:http://home.netscape.com/NC-rdf#Name"/>
  47.             </xul:template>
  48.            <!--  <xul:menuseparator anonid="searchsize-menuseparator"/>
  49.                         <xul:menu anonid="searchsize-menu" label="Select size">
  50.                 <xul:menupopup label="Search Box Size" anonid="searchbar-size-popup" position="after_start"
  51.                              oncommand="if (this.parentNode) this.parentNode.parentNode.parentNode.parentNode.onSearchBoxSize(event);">
  52.                   <xul:menuitem anonid="searchbox-size-10em" type="radio" label="Short" name="searchbox-size" value="10em"/>
  53.                   <xul:menuitem anonid="searchbox-size-15em" type="radio" label="Medium" name="searchbox-size" value="15em"/>
  54.                   <xul:menuitem anonid="searchbox-size-19em" type="radio" label="Long" name="searchbox-size" value="19em"/>
  55.                 </xul:menupopup>
  56.             </xul:menu> -->
  57.           </xul:menupopup>
  58.         </xul:button>
  59.       </xul:textbox>
  60.       <xul:dropmarker class="searchbar-history-dropmarker"
  61.                       popup="SearchBarHistoryPopup">
  62.         <xul:image class="searchbar-history-dropmarker-image"/>
  63.       </xul:dropmarker>
  64.     </content>
  65.     <implementation>
  66.       <constructor><![CDATA[
  67.         var broadcaster = document.getElementById('searchEngineBroadcaster');
  68.         broadcaster.addEventListener('DOMAttrModified', this.onSearchEngineChange, false);
  69.       ]]></constructor>
  70.       <field name="mStringBundle"> document.getAnonymousNodes(this)[0] </field>
  71.       <field name="mTextbox"> document.getAnonymousNodes(this)[1] </field>
  72.       <method name="focus">
  73.         <body><![CDATA[
  74.           this.mTextbox.focus();
  75.         ]]></body>
  76.       </method>
  77.       <method name="clear">
  78.         <body><![CDATA[
  79.           this.mTextbox.value="";
  80.         ]]></body>
  81.       </method>
  82.       <method name="select">
  83.         <body><![CDATA[
  84.           this.mTextbox.select();
  85.         ]]></body>
  86.       </method>
  87.       <method name="onSearchEngineChange">
  88.         <parameter name="evt"/>
  89.         <body><![CDATA[
  90.           // MERC (ccampbell) added this function to watch search engine broadcaster
  91.           if (evt.attrName!='searchengine') return;
  92.           var searchbar = document.getElementById('searchbar');
  93.           searchbar.currentEngine = evt.newValue;
  94.           //searchbar.mTextbox.select();
  95.         ]]></body>
  96.       </method>
  97.     </implementation>
  98.   </binding>
  99.  
  100.   <binding id="searchbar-textbox" extends="chrome://global/content/bindings/autocomplete.xml#autocomplete">
  101.     <implementation>
  102.  
  103.       <constructor><![CDATA[
  104.         if (this.parentNode && this.parentNode.parentNode.parentNode.localName ==
  105.             "toolbarpaletteitem")
  106.           return;
  107.         setTimeout(function(a) { a.initialize(); }, 0, this);
  108.       ]]></constructor>
  109.  
  110.       <destructor><![CDATA[
  111.        if (this.parentNode && this.parentNode.parentNode.parentNode.localName ==
  112.             "toolbarpaletteitem")
  113.           return;
  114.         this.controllers.removeController(this.searchbarController);
  115.       ]]></destructor>
  116.  
  117.       <property name="mContextMenu" readonly="true">
  118.         <getter>
  119.           var textBox = document.getAnonymousElementByAttribute(this,
  120.                         "anonid", "textbox-input-box");
  121.           return document.getAnonymousElementByAttribute(textBox,
  122.                         "anonid", "input-box-contextmenu");
  123.         </getter>
  124.       </property>
  125.  
  126.       <method name="initialize">
  127.         <body><![CDATA[
  128.         
  129.         if (!this.parentNode || !this.mContextMenu) return;
  130.         
  131.           this.RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]
  132.                                .getService(Components.interfaces.nsIRDFService);
  133.           this.ISEARCHDS = this.RDF.GetDataSource("rdf:internetsearch");
  134.           this.FORMHISTSVC = Components
  135.                               .classes["@mozilla.org/satchel/form-history;1"]
  136.                               .getService(Components.interfaces.nsIFormHistory);
  137.  
  138.           var engine = this.currentEngine;
  139.           if (!engine)
  140.             this.currentEngine = this.getDefaultEngine();
  141.           else {
  142.             var rEngine = this.RDF.GetResource(engine);
  143.             var rChild  = this.RDF.GetResource("http://home.netscape.com/NC-rdf#child");
  144.             if (!this.ISEARCHDS.hasArcIn(rEngine, rChild)) {
  145.               this.currentEngine = this.getDefaultEngine();
  146.             } // if default engine not found... XXXblake what to do now?
  147.           }
  148.  
  149.           var element;
  150.           element = document.createElementNS(XUL_NS, "menuseparator");
  151.           this.mContextMenu.appendChild(element);
  152.           element = document.createElementNS(XUL_NS, "menuitem");
  153.           element.setAttribute("label", this.mStringBundle
  154.                                .getString("cmd_clearHistory"));
  155.           element.setAttribute("accesskey", this.mStringBundle
  156.                                .getString("cmd_clearHistory_accesskey"));
  157.           element.setAttribute("cmd", "cmd_clearhistory");
  158.           this.mContextMenu.appendChild(element);
  159.           this.controllers.appendController(this.searchbarController);
  160.  
  161.         ]]></body>
  162.       </method>
  163.  
  164.       <field name="mStringBundle"> 
  165.       if (this.parentNode)
  166.       this.parentNode.mStringBundle </field>
  167.       <field name="RDF"/>
  168.       <field name="ISEARCHDS"/>
  169.       <field name="FORMHISTSVC"/>
  170.  
  171.       <property name="currentEngine"
  172.                 onget="if (this.parentNode) return this.parentNode.getAttribute('searchengine'); else return null;">
  173.         <setter><![CDATA[
  174.           if (!val)
  175.             return;
  176.  
  177.           var broadcaster = document.getElementById('searchEngineBroadcaster');
  178.           broadcaster.setAttribute("searchengine", val);
  179.           const kNC_Icon = this.RDF.GetResource("http://home.netscape.com/NC-rdf#Icon");
  180.           var rEngine = this.RDF.GetResource(val);
  181.           broadcaster.setAttribute("src", this.readRDFString(rEngine, kNC_Icon));
  182.  
  183.           const kNC_Name = this.RDF.GetResource("http://home.netscape.com/NC-rdf#Name");
  184.           var pls = Components.classes["@mozilla.org/pref-localizedstring;1"]
  185.                               .createInstance(Components.interfaces.nsIPrefLocalizedString);
  186.           pls.data = this.readRDFString(rEngine, kNC_Name);
  187.           var PREF = Components.classes["@mozilla.org/preferences-service;1"]
  188.                                .getService(Components.interfaces.nsIPrefService)
  189.                                .getBranch(null);
  190.           PREF.setComplexValue("browser.search.selectedEngine",
  191.                                Components.interfaces.nsIPrefLocalizedString,
  192.                                pls);
  193.         ]]></setter>
  194.       </property>
  195.  
  196.       <property name="perfmon">
  197.         <getter><![CDATA[
  198.           if (!this.parentNode) return null;
  199.           var rEngine = this.RDF.GetResource(this.currentEngine);
  200.           const kNC_Name = this.RDF.GetResource("http://home.netscape.com/NC-rdf#Name");
  201.           var pls = Components.classes["@mozilla.org/pref-localizedstring;1"]
  202.                               .createInstance(Components.interfaces.nsIPrefLocalizedString);
  203.           var engineID = 'searchbar:'+this.readRDFString(rEngine, kNC_Name);
  204.           dump('search.xml: perfmon = '+engineID+'\n');
  205.           return engineID;
  206.         ]]></getter>
  207.       </property>
  208.  
  209.       <method name="getDefaultEngine">
  210.         <body><![CDATA[
  211.           var PREF = Components.classes["@mozilla.org/preferences-service;1"]
  212.                                .getService(Components.interfaces.nsIPrefService)
  213.                                .getBranch(null);
  214.           var defaultName = PREF.getComplexValue("browser.search.defaultenginename",
  215.                                                  Components.interfaces.nsIPrefLocalizedString).data;
  216.  
  217.           const kNC_Root  = this.RDF.GetResource("NC:SearchEngineRoot");
  218.           const kNC_child = this.RDF.GetResource("http://home.netscape.com/NC-rdf#child");
  219.           const kNC_Name  = this.RDF.GetResource("http://home.netscape.com/NC-rdf#Name");
  220.  
  221.           var arcs = this.ISEARCHDS.GetTargets(kNC_Root, kNC_child, true);
  222.           while (arcs.hasMoreElements()) {
  223.             var rEngine = arcs.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
  224.             var name = this.readRDFString(rEngine, kNC_Name);
  225.             if (name == defaultName)
  226.               return rEngine.Value;
  227.           }
  228.           return null;
  229.         ]]></body>
  230.       </method>
  231.  
  232.       <method name="readRDFString">
  233.         <parameter name="aRes"/>
  234.         <parameter name="aProp"/>
  235.         <body><![CDATA[
  236.           var n = this.ISEARCHDS.GetTarget(aRes, aProp, true);
  237.           return n ? n.QueryInterface(Components.interfaces.nsIRDFLiteral).Value : null;
  238.         ]]></body>
  239.       </method>
  240.       <!--  // overload |onTextEntered| in autocomplete.xml -->
  241.       <method name="onTextEntered">
  242.         <body><![CDATA[
  243.           // CDC - Remember the text in the search history list
  244.           if (this.value) {
  245.             search.AddToHistory(this.value);
  246.           }
  247.  
  248.           // CDC - Count search provider hits
  249.           try {
  250.             if (perfmon) {
  251.               this.setAttribute('perfmon', this.perfmon);
  252.               perfmon.trackData(this);
  253.             }
  254.           } catch (ex) { }
  255.  
  256.           var ISEARCHSVC = Components.classes["@mozilla.org/rdf/datasource;1?name=internetsearch"]
  257.                                      .getService(Components.interfaces.nsIInternetSearchService);
  258.           var searchURL = ISEARCHSVC.GetInternetSearchURL(this.currentEngine,
  259.                                        this.value? encodeURIComponent(this.value):"",
  260.                                        0, 0, {value:0});
  261.  
  262.           if (!this.value) {
  263.             var uri = Components.classes['@mozilla.org/network/standard-url;1']
  264.                                 .createInstance(Components.interfaces.nsIURI);
  265.             uri.spec = searchURL;
  266.             searchURL = uri.host;
  267.             if (!searchURL)
  268.               return;
  269.           }
  270.  
  271.           // JMC - Why was this commented out?
  272.           SearchLoadURL(searchURL, this.mEnterEvent);
  273.         ]]></body>
  274.       </method>
  275.  
  276.         <method name="onSearchBoxSize">
  277.         <parameter name="aEvent"/>
  278.         <body><![CDATA[
  279.  
  280.         if (!this.parentNode) return; // JMC - Sanity check fixes BLT bug 127010
  281.  
  282.          var newSize;
  283.            newSize = aEvent.target.getAttribute("value");
  284.             this.parentNode.style.width = newSize;
  285.  
  286.               var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  287.                            .getService(Components.interfaces.nsIPrefBranch);
  288.          prefService.setCharPref("browser.search.size",newSize);
  289.             /*
  290.             var menupopup = document.getAnonymousElementByAttribute(this, "anonid", "searchbar-size-popup");
  291.          var foundme = document.getAnonymousElementByAttribute(menupopup, "value", newSize);
  292.          if (foundme)
  293.              foundme.setAttribute("checked", "true");
  294.                */
  295.          this.focus();
  296.          this.select();
  297.  
  298.         ]]></body>
  299.       </method>
  300.  
  301.  
  302.       <method name="onEnginePopupCommand">
  303.         <parameter name="aEvent"/>
  304.         <body><![CDATA[
  305.           var target = aEvent.target
  306.           if (target.getAttribute("anonid") == "addengine-menuitem") {
  307.             var regionBundle = document.getElementById("bundle_browser_region");
  308.             loadURI(regionBundle.getString("searchEnginesURL"), null, null);
  309.           } else {
  310.             this.currentEngine = target.id;
  311.             this.focus();
  312.             this.select();
  313.           }
  314.         ]]></body>
  315.       </method>
  316.  
  317.       <method name="onEnginePopupShowing">
  318.         <parameter name="aEvent"/>
  319.         <body><![CDATA[
  320.             dump("\n\nOnEnginePopupShowing... executed! \n\n");
  321.             
  322.             if (!this.parentNode) return;
  323.             
  324.           var target = aEvent.target;
  325.           var element = document.getAnonymousElementByAttribute(this.parentNode,
  326.                            "anonid", "searchsize-menuseparator");
  327.  
  328.           if (!element)
  329.             return;
  330.  
  331.             var myParent = element.parentNode;
  332.  
  333.             myParent.removeChild(element);
  334.             myParent.appendChild(element);
  335.  
  336.           element = document.getAnonymousElementByAttribute(this.parentNode,
  337.                            "anonid", "searchsize-menu");
  338.  
  339.             myParent.removeChild(element);
  340.             myParent.appendChild(element);
  341.  
  342.           /* don't need any of this pucky
  343.           search.ReadSearchHistory();
  344.  
  345.           var target = aEvent.target;
  346.           var element = document.getAnonymousElementByAttribute(this.parentNode,
  347.                            "anonid", "clearhistory-menuitem");
  348.           if (element)
  349.             return;
  350.  
  351.           element = document.createElementNS(XUL_NS, "menuseparator");
  352.           target.appendChild(element);
  353.  
  354.           // MERC: add 'clear search history' menu item
  355.           element = document.createElementNS(XUL_NS, "menuitem");
  356.           element.setAttribute("label", "Clear search history");
  357.           element.setAttribute("anonid", "clearhistory-menuitem");
  358.           target.appendChild(element);
  359.           */
  360.  
  361.           /* MERC: Disable adding of new search engines
  362.           element = document.createElementNS(XUL_NS, "menuitem");
  363.           element.setAttribute("label", this.mStringBundle
  364.               .getString("cmd_addEngine"));
  365.           element.setAttribute("accesskey", this.mStringBundle
  366.               .getString("cmd_addEngine_accesskey"));
  367.           element.setAttribute("anonid", "addengine-menuitem");
  368.           target.appendChild(element);
  369.           */
  370.         ]]></body>
  371.       </method>
  372.  
  373.       <method name="onEnginePopupHidden">
  374.         <parameter name="aEvent"/>
  375.         <body><![CDATA[
  376.         if (!this.parentNode) return;
  377.         
  378.           var target = aEvent.target;
  379.           var element = document.getAnonymousElementByAttribute(this.parentNode,
  380.                            "anonid", "addengine-menuitem");
  381.           if (element) {
  382.             target.removeChild(target.lastChild);
  383.             target.removeChild(target.lastChild);
  384.           }
  385.         ]]></body>
  386.       </method>
  387.  
  388.       <!-- nsIController -->
  389.       <field name="searchbarController" readonly="true"><![CDATA[
  390.       ({
  391.         mOuter: this,
  392.  
  393.         supportsCommand: function (aCommand)
  394.         {
  395.           return aCommand == "cmd_clearhistory";
  396.         },
  397.  
  398.         isCommandEnabled: function (aCommand)
  399.         {
  400.           return this.mOuter.FORMHISTSVC.nameExists(
  401.                  this.mOuter.getAttribute("autocompletesearchparam"));
  402.         },
  403.  
  404.         doCommand: function (aCommand)
  405.         {
  406.           this.mOuter.FORMHISTSVC.removeEntriesForName(
  407.               this.mOuter.getAttribute("autocompletesearchparam"));
  408.           this.mOuter.value = "";
  409.         }
  410.       })
  411.       ]]></field>
  412.  
  413.       <!-- DND Observer -->
  414.       <field name="searchbarDNDObserver" readonly="true"><![CDATA[
  415.       ({
  416.         mOuter: this,
  417.  
  418.         onDrop: function (aEvent, aXferData, aDragSession)
  419.         {
  420.           var data = transferUtils.retrieveURLFromData(aXferData.data,
  421.                          aXferData.flavour.contentType);
  422.           if (data) {
  423.             // XXXBlake Workaround caret crash when you try to set the
  424.             // textbox's value on dropping
  425.             setTimeout(function(This, data, evt) { This.value = data; This.onTextEntered(evt); }, 0, this.mOuter, data, aEvent);
  426.           }
  427.         },
  428.  
  429.         getSupportedFlavours: function ()
  430.         {
  431.           var flavourSet = new FlavourSet();
  432.  
  433.           flavourSet.appendFlavour("text/unicode");
  434.           flavourSet.appendFlavour("text/x-moz-url");
  435.           flavourSet.appendFlavour("application/x-moz-file", "nsIFile");
  436.           return flavourSet;
  437.         }
  438.       })
  439.       ]]></field>
  440.  
  441.     </implementation>
  442.  
  443.     <handlers>
  444.  
  445.       <handler event="keypress" keycode="vk_up" modifiers="control" phase="capturing">
  446.         <![CDATA[
  447.           var currentEngine = this.currentEngine;
  448.           if (currentEngine) {
  449.           var searchEngineMenuitem = document.getAnonymousElementByAttribute(this.parentNode, "id", currentEngine);
  450.             var newEngine = searchEngineMenuitem.previousSibling;
  451.             if (newEngine)
  452.               this.currentEngine = newEngine.id;
  453.           }
  454.           event.preventDefault();
  455.           event.stopPropagation();
  456.         ]]>
  457.       </handler>
  458.  
  459.       <handler event="keypress" keycode="vk_down" modifiers="control" phase="capturing">
  460.         <![CDATA[
  461.           var currentEngine = this.currentEngine;
  462.           if (currentEngine) {
  463.             var searchEngineMenuitem = document.getAnonymousElementByAttribute(this.parentNode, "id", currentEngine);
  464.  
  465.             var newEngine = searchEngineMenuitem.nextSibling;
  466.  
  467.             if (newEngine)
  468.               this.currentEngine = newEngine.id;
  469.           }
  470.           event.preventDefault();
  471.           event.stopPropagation();
  472.         ]]>
  473.       </handler>
  474.  
  475.       <handler event="dragdrop" phase="capturing">
  476.         nsDragAndDrop.drop(event, this.searchbarDNDObserver);
  477.       </handler>
  478.  
  479.     </handlers>
  480.  
  481.   </binding>
  482.  
  483.   <binding id="searchbar-dropmarker" extends="chrome://browser/content/search.xml#searchbar-base">
  484.     <content>
  485.       <xul:stack flex="1">
  486.         <xul:hbox align="center">
  487.           <xul:image class="searchbar-engine-image" xbl:inherits="src"/>
  488.         </xul:hbox>
  489.         <xul:hbox align="end">
  490.             <xul:spacer flex="1"/>
  491.                 <xul:image class="searchbar-dropmarker-image"/>
  492.           </xul:hbox>
  493.       </xul:stack>
  494.       <children/>
  495.     </content>
  496.   </binding>
  497.  
  498. </bindings>
  499.