home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / phoenix / chrome / browser.jar / content / browser / utilityOverlay.js < prev    next >
Text File  |  2002-10-10  |  6KB  |  216 lines

  1.  
  2. /**
  3.  * Communicator Shared Utility Library
  4.  * for shared application glue for the Communicator suite of applications
  5.  **/
  6.  
  7. var goPrefWindow = 0;
  8.  
  9. function getBrowserURL() {
  10.  
  11.   try {
  12.     var prefs = Components.classes["@mozilla.org/preferences-service;1"]
  13.                          .getService(Components.interfaces.nsIPrefBranch);
  14.     var url = prefs.getCharPref("browser.chromeURL");
  15.     if (url)
  16.       return url;
  17.   } catch(e) {
  18.   }
  19.   return "chrome://navigator/content/navigator.xul";
  20. }
  21.  
  22. function goPageSetup(domwin, printSettings)
  23. {
  24.   try {
  25.     if (printSettings == null) {
  26.       alert("PrintSettings arg is null!");
  27.     }
  28.  
  29.     // This code calls the printoptions service to bring up the printoptions
  30.     // dialog.  This will be an xp dialog if the platform did not override
  31.     // the ShowPrintSetupDialog method.
  32.     var printingPromptService = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  33.                                              .getService(Components.interfaces.nsIPrintingPromptService);
  34.     printingPromptService.showPageSetup(domwin, printSettings, null);
  35.     return true;
  36.   } catch(e) {
  37.     return false; 
  38.   }
  39.   return true;
  40. }
  41.  
  42. function goToggleToolbar( id, elementID )
  43. {
  44.   var toolbar = document.getElementById( id );
  45.   var element = document.getElementById( elementID );
  46.   if ( toolbar )
  47.   {
  48.     var attribValue = toolbar.getAttribute("hidden") ;
  49.  
  50.     if ( attribValue == "true" )
  51.     {
  52.       toolbar.setAttribute("hidden", "false" );
  53.       if ( element )
  54.         element.setAttribute("checked","true")
  55.     }
  56.     else
  57.     {
  58.       toolbar.setAttribute("hidden", true );
  59.       if ( element )
  60.         element.setAttribute("checked","false")
  61.     }
  62.     document.persist(id, 'hidden');
  63.     document.persist(elementID, 'checked');
  64.   }
  65. }
  66.  
  67.  
  68. function goClickThrobber( urlPref )
  69. {
  70.   var url;
  71.   try {
  72.     var pref = Components.classes["@mozilla.org/preferences-service;1"]
  73.                          .getService(Components.interfaces.nsIPrefBranch);
  74.     url = pref.getComplexValue(urlPref, Components.interfaces.nsIPrefLocalizedString).data;
  75.   }
  76.  
  77.   catch(e) {
  78.     url = null;
  79.   }
  80.  
  81.   if ( url )
  82.     openTopWin(url);
  83. }
  84.  
  85.  
  86. //No longer needed.  Rip this out since we are using openTopWin
  87. function goHelpMenu( url )
  88. {
  89.   /* note that this chrome url should probably change to not have all of the navigator controls */
  90.   /* also, do we want to limit the number of help windows that can be spawned? */
  91.   window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
  92. }
  93.  
  94. function getTopWin()
  95. {
  96.     var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
  97.     var windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
  98.     var topWindowOfType = windowManagerInterface.getMostRecentWindow( "navigator:browser" );
  99.  
  100.     if (topWindowOfType) {
  101.         return topWindowOfType;
  102.     }
  103.     return null;
  104. }
  105.  
  106. function openTopWin( url )
  107. {
  108.     /* note that this chrome url should probably change to not have
  109.        all of the navigator controls, but if we do this we need to have
  110.        the option for chrome controls because goClickThrobber() needs to
  111.        use this function with chrome controls */
  112.     /* also, do we want to
  113.        limit the number of help windows that can be spawned? */
  114.     if ((url == null) || (url == "")) return null;
  115.  
  116.     // xlate the URL if necessary
  117.     if (url.indexOf("urn:") == 0)
  118.     {
  119.         url = xlateURL(url);        // does RDF urn expansion
  120.     }
  121.  
  122.     // avoid loading "", since this loads a directory listing
  123.     if (url == "") {
  124.         url = "about:blank";
  125.     }
  126.  
  127.     var topWindowOfType = getTopWin();
  128.     if ( topWindowOfType )
  129.     {
  130.         topWindowOfType.focus();
  131.         topWindowOfType.loadURI(url);
  132.         return topWindowOfType;
  133.     }
  134.     return window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
  135. }
  136.  
  137. // update menu items that rely on focus
  138. function goUpdateGlobalEditMenuItems()
  139. {
  140.   goUpdateCommand('cmd_undo');
  141.   goUpdateCommand('cmd_redo');
  142.   goUpdateCommand('cmd_cut');
  143.   goUpdateCommand('cmd_copy');
  144.   goUpdateCommand('cmd_paste');
  145.   goUpdateCommand('cmd_selectAll');
  146.   goUpdateCommand('cmd_delete');
  147. }
  148.  
  149. // update menu items that rely on the current selection
  150. function goUpdateSelectEditMenuItems()
  151. {
  152.   goUpdateCommand('cmd_cut');
  153.   goUpdateCommand('cmd_copy');
  154.   goUpdateCommand('cmd_delete');
  155.   goUpdateCommand('cmd_selectAll');
  156. }
  157.  
  158. // update menu items that relate to undo/redo
  159. function goUpdateUndoEditMenuItems()
  160. {
  161.   goUpdateCommand('cmd_undo');
  162.   goUpdateCommand('cmd_redo');
  163. }
  164.  
  165. // update menu items that depend on clipboard contents
  166. function goUpdatePasteMenuItems()
  167. {
  168.   goUpdateCommand('cmd_paste');
  169. }
  170.  
  171. // Gather all descendent text under given document node.
  172. function gatherTextUnder ( root ) 
  173. {
  174.   var text = "";
  175.   var node = root.firstChild;
  176.   var depth = 1;
  177.   while ( node && depth > 0 ) {
  178.     // See if this node is text.
  179.     if ( node.nodeName == "#text" ) {
  180.       // Add this text to our collection.
  181.       text += " " + node.data;
  182.     } else if ( node.nodeType == Node.ELEMENT_NODE 
  183.                 && node.localName.toUpperCase() == "IMG" ) {
  184.       // If it has an alt= attribute, use that.
  185.       var altText = node.getAttribute( "alt" );
  186.       if ( altText && altText != "" ) {
  187.         text = altText;
  188.         break;
  189.       }
  190.     }
  191.     // Find next node to test.
  192.     // First, see if this node has children.
  193.     if ( node.hasChildNodes() ) {
  194.       // Go to first child.
  195.       node = node.firstChild;
  196.       depth++;
  197.     } else {
  198.       // No children, try next sibling.
  199.       if ( node.nextSibling ) {
  200.         node = node.nextSibling;
  201.       } else {
  202.         // Last resort is our next oldest uncle/aunt.
  203.         node = node.parentNode.nextSibling;
  204.         depth--;
  205.       }
  206.     }
  207.   }
  208.   // Strip leading whitespace.
  209.   text = text.replace( /^\s+/, "" );
  210.   // Strip trailing whitespace.
  211.   text = text.replace( /\s+$/, "" );
  212.   // Compress remaining whitespace.
  213.   text = text.replace( /\s+/g, " " );
  214.   return text;
  215. }
  216.