home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / phoenix / chrome / toolkit.jar / content / global / printPreviewProgress.js < prev    next >
Text File  |  2002-07-11  |  6KB  |  204 lines

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /*
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "License"); you may not use this file except in
  5.  * compliance with the License.  You may obtain a copy of the License at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  10.  * for the specific language governing rights and limitations under the
  11.  * License.
  12.  *
  13.  * The Original Code is Mozilla Communicator client code, 
  14.  * released March 31, 1998. 
  15.  *
  16.  * The Initial Developer of the Original Code is Netscape Communications 
  17.  * Corporation.  Portions created by Netscape are 
  18.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  19.  * Reserved.
  20.  *
  21.  * Contributors:
  22.  *     Rod Spears <rods@netscape.com>
  23.  */
  24.  
  25. // dialog is just an array we'll use to store various properties from the dialog document...
  26. var dialog;
  27.  
  28. // the printProgress is a nsIPrintProgress object
  29. var printProgress = null; 
  30.  
  31. // random global variables...
  32. var targetFile;
  33.  
  34. var docTitle = "";
  35. var docURL   = "";
  36. var progressParams = null;
  37.  
  38. function elipseString(aStr, doFront)
  39. {
  40.   if (aStr.length > 3 && (aStr.substr(0, 3) == "..." || aStr.substr(aStr.length-4, 3) == "...")) {
  41.     return aStr;
  42.   }
  43.  
  44.   var fixedLen = 64;
  45.   if (aStr.length > fixedLen) {
  46.     if (doFront) {
  47.       var endStr = aStr.substr(aStr.length-fixedLen, fixedLen);
  48.       var str = "..." + endStr;
  49.       return str;
  50.     } else {
  51.       var frontStr = aStr.substr(0, fixedLen);
  52.       var str = frontStr + "...";
  53.       return str;
  54.     }
  55.   }
  56.   return aStr;
  57. }
  58.  
  59. // all progress notifications are done through the nsIWebProgressListener implementation...
  60. var progressListener = {
  61.     onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus)
  62.     {
  63.       
  64.       if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP)
  65.       {
  66.         window.close();
  67.       }
  68.     },
  69.     
  70.     onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress)
  71.     {
  72.       if (progressParams)
  73.       {
  74.         var docTitleStr = elipseString(progressParams.docTitle, false);
  75.         if (docTitleStr != docTitle) {
  76.           docTitle = docTitleStr;
  77.           dialog.title.value = docTitle;
  78.         }
  79.         var docURLStr = elipseString(progressParams.docURL, true);
  80.         if (docURLStr != docURL && dialog.title != null) {
  81.           docURL = docURLStr;
  82.           if (docTitle == "") {
  83.             dialog.title.value = docURLStr;
  84.           }
  85.         }
  86.       }
  87.     },
  88.  
  89.       onLocationChange: function(aWebProgress, aRequest, aLocation)
  90.     {
  91.       // we can ignore this notification
  92.     },
  93.  
  94.     onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage)
  95.     {
  96.       if (aMessage != "")
  97.         dialog.title.setAttribute("value", aMessage);
  98.     },
  99.  
  100.     onSecurityChange: function(aWebProgress, aRequest, state)
  101.     {
  102.       // we can ignore this notification
  103.     },
  104.  
  105.     QueryInterface : function(iid)
  106.     {
  107.      if (iid.equals(Components.interfaces.nsIWebProgressListener) || iid.equals(Components.interfaces.nsISupportsWeakReference))
  108.       return this;
  109.      
  110.      throw Components.results.NS_NOINTERFACE;
  111.     }
  112. };
  113.  
  114. function onLoad() {
  115.     // Set global variables.
  116.     printProgress = window.arguments[0];
  117.     if (window.arguments[1])
  118.     {
  119.       progressParams = window.arguments[1].QueryInterface(Components.interfaces.nsIPrintProgressParams)
  120.       if (progressParams)
  121.       {
  122.         docTitle = elipseString(progressParams.docTitle, false);
  123.         docURL   = elipseString(progressParams.docURL, true);
  124.       }
  125.     }
  126.  
  127.     if ( !printProgress ) {
  128.         dump( "Invalid argument to printPreviewProgress.xul\n" );
  129.         window.close()
  130.         return;
  131.     }
  132.  
  133.     dialog          = new Object;
  134.     dialog.strings  = new Array;
  135.     dialog.title      = document.getElementById("dialog.title");
  136.     dialog.titleLabel = document.getElementById("dialog.titleLabel");
  137.  
  138.     dialog.title.value = docTitle;
  139.  
  140.     // set our web progress listener on the helper app launcher
  141.     printProgress.registerListener(progressListener);
  142.     moveToAlertPosition();
  143.  
  144.     //We need to delay the set title else dom will overwrite it
  145.     window.setTimeout(doneIniting, 100);
  146. }
  147.  
  148. function onUnload() 
  149. {
  150.   if (printProgress)
  151.   {
  152.    try 
  153.    {
  154.      printProgress.unregisterListener(progressListener);
  155.      printProgress = null;
  156.    }
  157.     
  158.    catch( exception ) {}
  159.   }
  160. }
  161.  
  162. function getString( stringId ) {
  163.    // Check if we've fetched this string already.
  164.    if (!(stringId in dialog.strings)) {
  165.       // Try to get it.
  166.       var elem = document.getElementById( "dialog.strings."+stringId );
  167.       try {
  168.         if ( elem
  169.            &&
  170.            elem.childNodes
  171.            &&
  172.            elem.childNodes[0]
  173.            &&
  174.            elem.childNodes[0].nodeValue ) {
  175.          dialog.strings[ stringId ] = elem.childNodes[0].nodeValue;
  176.         } else {
  177.           // If unable to fetch string, use an empty string.
  178.           dialog.strings[ stringId ] = "";
  179.         }
  180.       } catch (e) { dialog.strings[ stringId ] = ""; }
  181.    }
  182.    return dialog.strings[ stringId ];
  183. }
  184.  
  185. // If the user presses cancel, tell the app launcher and close the dialog...
  186. function onCancel () 
  187. {
  188.   // Cancel app launcher.
  189.    try 
  190.    {
  191.      printProgress.processCanceledByUser = true;
  192.    }
  193.    catch( exception ) {return true;}
  194.     
  195.   // don't Close up dialog by returning false, the backend will close the dialog when everything will be aborted.
  196.   return false;
  197. }
  198.  
  199. function doneIniting() 
  200. {
  201.   // called by function timeout in onLoad
  202.   printProgress.doneIniting();
  203. }
  204.