home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / komunikace / netscape / nsb-install-8-1-2.exe / chrome / browser.jar / content / browser / urlbar.js < prev    next >
Text File  |  2006-01-06  |  15KB  |  454 lines

  1. var focusedURLBar;
  2. var lastBrowserKeyPress = 0;
  3. var lastURLKeyPress = 0;
  4. var lastBrowserMouseDown = 0;
  5. var lastURLMouseDown = 0;
  6. var lastURLRightMouseDown = 0;
  7. var lastRegainFocus = 0;
  8.  
  9. function URLBarFocusHandler(aEvent, aElt)
  10.   if (gIgnoreFocus) {
  11.     gIgnoreFocus = false;
  12.   }
  13.   else if (gClickSelectsAll)
  14.   {
  15.     aElt.select();
  16.   }
  17.   
  18.   // Remember which url bar is in focus, and listen to window key and mouse events until the when we willingly loose the focus grip on url bar 
  19.   focusedURLBar = aElt;
  20.   window.addEventListener("keypress", onBrowserKeyPressForUrlbar, false);
  21.   window.addEventListener("mousedown", onBrowserMouseEventForUrlbar, false);
  22.   window.addEventListener("mouseup", onBrowserMouseEventForUrlbar, false);
  23. }
  24.  
  25.  
  26. function URLBarBlurHandler(aEvent, aElt) {
  27.   closeURLBarPopup();
  28.   
  29.   if(focusedURLBar == aElt) {
  30.     setTimeout("URLBarRegainFocus()", 10);
  31.   }
  32. }
  33.  
  34. // If the URLBar's focus is "stolen", regain the focus back if it should be.
  35. function URLBarRegainFocus() {
  36.   var now = new Date().getTime();
  37.   var regain;
  38.   
  39.   if(now - Math.max(lastURLKeyPress, lastURLMouseDown) < 500) {
  40.     // if url key or mouse event is recent (0.5 second), regain focus
  41.     regain = true;
  42.   }
  43.   else {
  44.     regain = false;
  45.     /*
  46.     var recentBrowserUserInput = Math.max(lastBrowserKeyPress, lastBrowserMouseDown);
  47.     
  48.     // get Trident plug in doc last mouse down event timestamp
  49.     var hpDoc = getTridentDocument();
  50.     if (hpDoc) {
  51.       recentBrowserUserInput = Math.max(recentBrowserUserInput, hpDoc.lastMouseDown);
  52.     }
  53.     
  54.     // if last browser key or mouse event is recent,  loose the grip on url bar
  55.     // otherwise, always regain focus back to url bar
  56.     regain = (now - recentBrowserUserInput > 200);
  57.     */
  58.     
  59.   }
  60.   
  61.   if(regain) {
  62.     // Wanna steal the focus, no way!
  63.     gIgnoreFocus = true;
  64.     lastRegainFocus = new Date().getTime();
  65.     focusedURLBar.focus();
  66.   }
  67.   else {
  68.     // OK, give up the grip on the focus
  69.     focusedURLBar = null;
  70.     window.removeEventListener("keypress", onBrowserKeyPressForUrlbar, false);
  71.     window.removeEventListener("mousedown", onBrowserMouseEventForUrlbar, false);
  72.     window.removeEventListener("mouseup", onBrowserMouseEventForUrlbar, false);
  73.   }  
  74. }
  75.  
  76. function onBrowserKeyPressForUrlbar(evt) {
  77.   closeURLBarPopup();
  78.   lastBrowserKeyPress = new Date().getTime();
  79. }
  80.  
  81. function onBrowserMouseEventForUrlbar(evt) {
  82.   lastBrowserMouseDown = new Date().getTime();
  83. }
  84.  
  85. function URLBarKeyPressHandler(aEvent, aElt) {
  86.   if(aEvent.keyCode == 9 || aEvent.keyCode == 10 || aEvent.keyCode == 13) {
  87.     lastURLKeyPress = 0;
  88.   }
  89.   else {
  90.     lastURLKeyPress = new Date().getTime();
  91.   }
  92. }
  93.  
  94. function URLBarMouseDownHandler(aEvent, aElt)
  95. {
  96.   if(aEvent.which == 3) {
  97.     lastURLRightMouseDown = new Date().getTime();
  98.   }
  99.   
  100.   if(focusedURLBar == aElt) {
  101.     lastURLMouseDown = new Date().getTime();
  102.   }
  103.     
  104.   if (aElt.hasAttribute("focused")) {
  105.     gIgnoreClick = true;
  106.   } else {
  107.     gIgnoreFocus = true;
  108.     gIgnoreClick = false;
  109.     aElt.setSelectionRange(0, 0);
  110.   }
  111. }
  112.  
  113. function URLBarClickHandler(aEvent, aElt)
  114.   if (!gIgnoreClick && gClickSelectsAll && aElt.selectionStart == aElt.selectionEnd)
  115.   {
  116.     aElt.select();
  117.   }
  118. }
  119.  
  120.  
  121. function handleURLBarCommand(aTriggeringEvent)
  122. {
  123.   var postData = { };
  124.   canonizeUrl(aTriggeringEvent, postData);
  125.  
  126.   try {
  127.     addToUrlbarHistory();
  128.   } catch (ex) {
  129.     // Things may go wrong when adding url to session history,
  130.     // but don't let that interfere with the loading of the url.
  131.   }
  132.  
  133.   BrowserLoadURL(aTriggeringEvent, postData.value);
  134.   // BrowserLoadURL(aTriggeringEvent, postData.value, "browser.tabs.history.open");
  135. }
  136.  
  137. // If "ESC" is pressed in the url bar, we replace the urlbar's value with the url of the page
  138. // and highlight it, unless it is about:blank, where we reset it to "".
  139. function handleURLBarRevert()
  140. {
  141.   var url = getWebNavigation().currentURI.spec;
  142.   var throbberElement = document.getElementById("throbberBroadcaster");
  143.  
  144.   var isScrolling = gURLBar.popupOpen;
  145.  
  146.   // don't revert to last valid url unless page is NOT loading
  147.   // and user is NOT key-scrolling through autocomplete list
  148.   if ((!throbberElement || !throbberElement.hasAttribute("busy")) && !isScrolling) {
  149.     if (url != "about:blank") {
  150.       gURLBar.value = url;
  151.       gURLBar.select();
  152.       SetPageProxyState("valid", null); // XXX Build a URI and pass it in here.
  153.     } else { //if about:blank, urlbar becomes ""
  154.       gURLBar.value = "";
  155.     }
  156.   }
  157.  
  158.   gBrowser.userTypedValue = null;
  159.  
  160.   // tell widget to revert to last typed text only if the user
  161.   // was scrolling when they hit escape
  162.   return !isScrolling;
  163. }
  164.  
  165. function closeURLBarPopup() {
  166.   try {
  167.     document.getElementById('URLBarPopup').hidePopup();
  168.   }
  169.   catch(ex) { }
  170. }
  171.  
  172. function openURLBarPopup() {
  173.   //dump("\n\n BML MERC - urlbar.js openURLBarPopup called...\n\n");
  174.   // JMC - If there's a better Popup already open, just exit
  175.   if (balloonhelp && balloonhelp.isHelpShown())
  176.   {
  177.       return;
  178.   }
  179.   
  180.   // BML - fixes bugzilla 2454 - check if nav history drop down is open and exit if so...
  181.   if (document.getElementById('urlbar').popup.mPopupOpen)
  182.   {
  183.     return;
  184.   }
  185.   
  186.   var now = new Date().getTime();
  187.   if(now - Math.max(lastURLRightMouseDown, lastRegainFocus) < 200) {
  188.     return;
  189.   }
  190.     
  191.   try {
  192.     // check if URLBarPopup preference flag is set
  193.     if (gPrefService === null){
  194.       throw ("No Prefservice...");
  195.     }
  196.     var urlBarPopupOn = gPrefService.getBoolPref("browser.urlbar.topSitesPopup.enabled");
  197.  
  198.     var theURLBar = document.getElementById('urlbar');
  199.     if (!theURLBar){
  200.       throw ("No urlbar found...");
  201.     }
  202.     
  203.     if (urlBarPopupOn) {
  204.       // update the URLBarPopup
  205.       setURLBarPopupButtons();
  206.       
  207.       // show the popup
  208.       var urlPopup = document.getElementById("URLBarPopup");
  209.       if (!urlPopup){
  210.         throw ("No urlPopup found...");
  211.       }
  212.       
  213.       // The urlbarpopup is not friendly with autocompletepopup.  Make sure only one shows up
  214.       var autocompletePopupId = document.getElementById("urlbar").getAttribute("autocompletepopup");
  215.       if (autocompletePopupId) {
  216.         var autopopup = document.getElementById(autocompletePopupId);
  217.         if(autopopup) {
  218.           autopopup.hidePopup();
  219.         }
  220.       }     
  221.       // show popup
  222.       //dump("\n\n ~~~ BML change- urlbar.js - openURLBarPopup - showing top sites list\n\n");
  223.       urlPopup.showPopup(theURLBar, -1, -1, 'popup', 'bottomleft', 'topleft');
  224.     }
  225.   } catch(ex) {dump("\n\nException thown - urlbar.js: openURLBarPopup:\n" + ex + "\n\n");}
  226.   //dump("\n\n:::::  openURLBarPopup finished...\n");
  227. }
  228.  
  229. var topSiteSelectedTime = 0;
  230. function urlPopupSelected(theURI, theCommand) {
  231.   //dump("\n\n:::::  urlPopupSelected called...\n");
  232.   topSiteSelectedTime = new Date().getTime();
  233.   var currentTopSite;
  234.   if(theURI) {
  235.     currentTopSite = "loadURI('" + theURI + "');";
  236.   }
  237.   else {
  238.     currentTopSite = theCommand;
  239.   }
  240.   closeURLBarPopup();
  241.   eval(currentTopSite);
  242.   //dump("\n\n:::::  urlPopupSelected finished...\n");
  243. }
  244.  
  245. function urlPopupClicked(theURI, theCommand) {
  246.   //dump("\n\n:::::  urlPopupClicked called...\n");
  247.   // onselect always happen before onclick.  If the onselect is not called yet, 
  248.   // that is because the user clicked the currently selected item. We need to force to call it now.
  249.   if(new Date().getTime() - topSiteSelectedTime > 200) {
  250.     urlPopupSelected(theURI, theCommand);
  251.   }
  252. }
  253.  
  254. // MERC BML Sets the showHistory & showBookmarks menu items in URLBarPopup
  255. //          to state of sidebar panels they open
  256. function setURLBarPopupButtons(){
  257.   try {
  258.     //              get popup checkboxes
  259.     var showHistoryCheckbox = document.getElementById("showHistory-checkbox");
  260.     var showBookmarksCheckbox = document.getElementById("showBookmarks-checkbox");
  261.     if(!showHistoryCheckbox){
  262.       throw("No showHistoryCheckbox found...");
  263.     }
  264.     if(!showBookmarksCheckbox){
  265.       throw("No showBookmarksCheckbox found...");
  266.     }
  267.  
  268.     //              set showHistory
  269.     if(isHistoryPanelOpen()){
  270.       showHistoryCheckbox.setAttribute('checked', true);
  271.     } else {
  272.       showHistoryCheckbox.setAttribute('checked', false);
  273.     }
  274.  
  275.     //              set showBookmarks
  276.     if(isBookmarksPanelOpen()){
  277.       showBookmarksCheckbox.setAttribute('checked', true);
  278.     } else {
  279.       showBookmarksCheckbox.setAttribute('checked', false);
  280.     }
  281.   } catch(ex) { dump("Exception in urlbar.js: SetURLBarPopupButtons\n" + ex + "\n"); }
  282. }
  283.  
  284. // when the popup is hidden destroy the list of topsites
  285. function destroyTopSitesList()
  286. {
  287.   //dump("\n\n BML MERC - urlbar.js destroyTopSitesList called...\n\n");  
  288.   try{
  289.     
  290.   // hide label 
  291.   var topsitesLabel = document.getElementById("topsites-label");
  292.   topsitesLabel.setAttribute("hidden", "true");
  293.   
  294.   //  hide separator
  295.   var endSeparator = document.getElementById("endTopSitesSeparator");
  296.   endSeparator.setAttribute("hidden", "true");
  297.  
  298.   // Destroy the items.  
  299.   var urlPopup = document.getElementById("URLBarPopup-box");
  300.   var destroy = false;
  301.   for (var i = 0; i < urlPopup.childNodes.length; i++) {
  302.     var item = urlPopup.childNodes[i];
  303.     if (item == endSeparator)
  304.       break;
  305.  
  306.     if (destroy) {
  307.       i--;
  308.       urlPopup.removeChild(item);
  309.     }
  310.  
  311.     if (item == topsitesLabel)
  312.       destroy = true;
  313.   }   
  314.   }catch (ex) {dump("Exception thrown in destroyTopSitesList...\n"+ex);}
  315.   //dump("\n\n BML MERC - urlbar.js destroyTopSitesList finished...\n\n");
  316. }
  317.  
  318. /*
  319.  MERC BML : when the popup is shown get topsites from history rdf using xpcom service 
  320.             & add to urlpopup as menuitems
  321. */
  322. function buildTopSitesList()
  323. {
  324.   try{    
  325.   //dump("\n\n BML MERC - urlbar.js buildtopSitesList called...\n\n");  
  326.   var URLBarPopup =   document.getElementById("URLBarPopup");
  327.   
  328.   // In case the timer didn't fire.
  329.   destroyTopSitesList(); 
  330.   
  331.   //  get a list of topsites from data source  
  332.   var siteList = getTopsites();
  333.   
  334.   //  should we display topsites?
  335.   if(siteList.length === 0){
  336.     // no history so no topsites
  337.     return;
  338.   }  
  339.   //  show label
  340.   var topsitesLabel = document.getElementById("topsites-label");
  341.   topsitesLabel.setAttribute("hidden", "false");  
  342.   
  343.   // get the end of the topsites list as we'll be adding items in reverse
  344.   var beforeItem = document.getElementById("endTopSitesSeparator");
  345.   
  346.   // show separator while we've got it
  347.   beforeItem.setAttribute("hidden", "false");  
  348.   
  349.   // get container for topsites list
  350.   var urlBarPopup = document.getElementById("URLBarPopup-box");
  351.   
  352.   // add menu items to topsites list from bottom to top
  353.   for (var i = siteList.length - 1; i >= 0; i--) {  
  354.     //dump("\n\n siteList["+i+"] = "+siteList[i]);
  355.     var aTopsite  = siteList[i].split("|");     
  356.     var aName     = aTopsite[0];
  357.     var aURL      = aTopsite[1];    
  358.     //dump("\naURL" + i + "= " + aURL +" aName =" +aName+"...\n");
  359.     beforeItem = constructTopSitesMenuItem(urlBarPopup, beforeItem, aURL, aName);
  360.   }   
  361.   } catch(ex){dump("\n\n Exception thrown in urlbar.js - buildTopSitesList:\n"+ ex +"...");}
  362.   //dump("\n\n BML MERC - urlbar.js leaving buildTopSitesList...\n\n");  
  363. }
  364. /*
  365. MERC BML :  this helps buildTopSitesList in creating a topsites
  366.             menuitem and adding it to the urlBarpopup before returning the added
  367.             menuitem.
  368.             Have hard coded the width of the left column based on width
  369.             of URLBar because using structures like listbox caused crashes when removed from popup            
  370. */
  371. function constructTopSitesMenuItem(urlBarPopup, beforeItem, aURL, aName)
  372. {
  373.   //dump("\n\n BML MERC - urlbar.js constructTopSitesMenuItem called...\n\n");   
  374.   
  375.   // create a menuItem, 2 containers for labels & labels for a topSites entry
  376.   var menuItem  = document.createElementNS(XUL_NS, "menuitem");
  377.   var leftHbox  = document.createElementNS(XUL_NS, "hbox");
  378.   var rightHbox = document.createElementNS(XUL_NS, "hbox");
  379.   
  380.   var nameLabel = document.createElementNS(XUL_NS, "label");  
  381.   var urlLabel  = document.createElementNS(XUL_NS, "label");
  382.   
  383.   // set the menuitem
  384.   menuItem.setAttribute("class", "topsites-menuitem");
  385.   menuItem.setAttribute("flex", "1");  
  386.   var theCommand = 'urlPopupSelected("'+ aURL +'", null);';
  387.   //dump("\n\ntheCommand = "+theCommand+"\n");
  388.   menuItem.setAttribute("oncommand", theCommand);  
  389.   
  390.   // set name & it's container  
  391.   leftHbox.setAttribute("id", "topsites-nameBox");
  392.   leftHbox.setAttribute("class", "topsites-leftcolumn");
  393.   var leftColumnWidth = calcTopsitesLeftColumn();
  394.   leftHbox.setAttribute("width", leftColumnWidth);
  395.   nameLabel.setAttribute("class", "topsitesName");
  396.   nameLabel.setAttribute("value", aName);
  397.   nameLabel.setAttribute("crop", "end");
  398.   leftHbox.appendChild(nameLabel);
  399.   
  400.   // set url & it's container
  401.   rightHbox.setAttribute("id", "topsites-urlBox");
  402.   rightHbox.setAttribute("class", "topsites-rightcolumn");
  403.   urlLabel.setAttribute("class", "topsitesURL");
  404.   urlLabel.setAttribute("value", aURL);
  405.   urlLabel.setAttribute("crop", "end"); 
  406.   rightHbox.appendChild(urlLabel);
  407.   
  408.   // add contents to menuItem
  409.   menuItem.appendChild(leftHbox);
  410.   menuItem.appendChild(rightHbox);  
  411.   
  412.   // add menuItem to urlPopup
  413.   urlBarPopup.insertBefore(menuItem, beforeItem);
  414.   //dump("\n\n BML MERC - urlbar.js constructTopSitesMenuItem finished...\n\n");   
  415.   return menuItem;
  416. }
  417.  
  418. /*
  419. MERC BML/AAM : helper function that retrieves an array of urls & names
  420.               sorted by their visitcount from history rdf.
  421.               the length of array should be based on pref : browser.urlbar.topSitesPopup.maxLines
  422. */
  423. function getTopsites() {
  424.   
  425.   try {
  426.     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  427.     const cid = "@mozilla.org/browser/minihistory;1";
  428.     var obj = Components.classes[cid].createInstance(Components.interfaces.nsIMiniHistory);
  429.  
  430.     var count = {}; // ensure this is an object
  431.     var aStrings = obj.getHistory(count);
  432.     //dump('count=' + count.value);    
  433.     var i;
  434.     var splitstr;
  435.     for (i=0; i < count.value; i++)
  436.     {
  437.       splitstr = aStrings[i].split("|");
  438.       //dump('index=' + i + '\nName="' + splitstr[0] + '"\nURL=' + splitstr[1]);
  439.     }
  440.   } catch (err) {dump("Exception thrown in urlbar.js - getTopsitese\n" + err);return;}
  441.   return aStrings;
  442. }
  443.  
  444. // Helper function for dynamically controlling column width of topsites list
  445. function calcTopsitesLeftColumn(){
  446.   try{
  447.     var urlBarWidth = document.getElementById('urlbar').boxObject.width;
  448.     //  set width of left column to 40% of urlBar (and as an integer)
  449.     var leftColWidth = Math.floor(urlBarWidth * 0.4);
  450.   }catch(ex){dump("Exception thrown in urlbar.js - calcTopsitesLeftColumn\n" + ex);return;}     
  451.   return leftColWidth;
  452. }