home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December / PCWorld_2005-12_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / toolkit.jar / content / global / printProgress.js < prev    next >
Text File  |  2005-09-26  |  8KB  |  269 lines

  1.  
  2. // dialog is just an array we'll use to store various properties from the dialog document...
  3. var dialog;
  4.  
  5. // the printProgress is a nsIPrintProgress object
  6. var printProgress = null; 
  7.  
  8. // random global variables...
  9. var targetFile;
  10.  
  11. var docTitle = "";
  12. var docURL   = "";
  13. var progressParams = null;
  14. var switchUI = true;
  15.  
  16. function elipseString(aStr, doFront)
  17. {
  18.   if (aStr.length > 3 && (aStr.substr(0, 3) == "..." || aStr.substr(aStr.length-4, 3) == "...")) {
  19.     return aStr;
  20.   }
  21.  
  22.   var fixedLen = 64;
  23.   if (aStr.length > fixedLen) {
  24.     if (doFront) {
  25.       var endStr = aStr.substr(aStr.length-fixedLen, fixedLen);
  26.       var str = "..." + endStr;
  27.       return str;
  28.     } else {
  29.       var frontStr = aStr.substr(0, fixedLen);
  30.       var str = frontStr + "...";
  31.       return str;
  32.     }
  33.   }
  34.   return aStr;
  35. }
  36.  
  37. // all progress notifications are done through the nsIWebProgressListener implementation...
  38. var progressListener = {
  39.     onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus)
  40.     {
  41.       if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_START)
  42.       {
  43.         // Put progress meter in undetermined mode.
  44.         // dialog.progress.setAttribute( "value", 0 );
  45.         dialog.progress.setAttribute( "mode", "undetermined" );
  46.       }
  47.       
  48.       if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP)
  49.       {
  50.         // we are done printing 
  51.         // Indicate completion in title area.
  52.         var msg = getString( "printComplete" );
  53.         dialog.title.setAttribute("value", msg);
  54.  
  55.         // Put progress meter at 100%.
  56.         dialog.progress.setAttribute( "value", 100 );
  57.         dialog.progress.setAttribute( "mode", "normal" );
  58.         var percentPrint = getString( "progressText" );
  59.         percentPrint = replaceInsert( percentPrint, 1, 100 );
  60.         dialog.progressText.setAttribute("value", percentPrint);
  61.         window.close();
  62.       }
  63.     },
  64.     
  65.     onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress)
  66.     {
  67.       if (switchUI) 
  68.       {
  69.         dialog.tempLabel.setAttribute("hidden", "true");
  70.         dialog.progress.setAttribute("hidden", "false");
  71.         dialog.cancel.setAttribute("disabled", "false");
  72.  
  73.         var progressLabel = getString("progress");
  74.         if (progressLabel == "") {
  75.           progressLabel = "Progress:"; // better than nothing
  76.         }
  77.         switchUI = false;
  78.       }
  79.  
  80.       if (progressParams)
  81.       {
  82.         var docTitleStr = elipseString(progressParams.docTitle, false);
  83.         if (docTitleStr != docTitle) {
  84.           docTitle = docTitleStr;
  85.           dialog.title.value = docTitle;
  86.         }
  87.         var docURLStr = progressParams.docURL;
  88.         if (docURLStr != docURL && dialog.title != null) {
  89.           docURL = docURLStr;
  90.           if (docTitle == "") {
  91.             dialog.title.value = elipseString(docURLStr, true);
  92.           }
  93.         }
  94.       }
  95.  
  96.       // Calculate percentage.
  97.       var percent;
  98.       if ( aMaxTotalProgress > 0 ) 
  99.       {
  100.         percent = Math.round( (aCurTotalProgress*100)/aMaxTotalProgress );
  101.         if ( percent > 100 )
  102.           percent = 100;
  103.         
  104.         dialog.progress.removeAttribute( "mode");
  105.         
  106.         // Advance progress meter.
  107.         dialog.progress.setAttribute( "value", percent );
  108.  
  109.         // Update percentage label on progress meter.
  110.         var percentPrint = getString( "progressText" );
  111.         percentPrint = replaceInsert( percentPrint, 1, percent );
  112.         dialog.progressText.setAttribute("value", percentPrint);
  113.       } 
  114.       else 
  115.       {
  116.         // Progress meter should be barber-pole in this case.
  117.         dialog.progress.setAttribute( "mode", "undetermined" );
  118.         // Update percentage label on progress meter.
  119.         dialog.progressText.setAttribute("value", "");
  120.       }
  121.     },
  122.  
  123.       onLocationChange: function(aWebProgress, aRequest, aLocation)
  124.     {
  125.       // we can ignore this notification
  126.     },
  127.  
  128.     onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage)
  129.     {
  130.       if (aMessage != "")
  131.         dialog.title.setAttribute("value", aMessage);
  132.     },
  133.  
  134.     onSecurityChange: function(aWebProgress, aRequest, state)
  135.     {
  136.       // we can ignore this notification
  137.     },
  138.  
  139.     QueryInterface : function(iid)
  140.     {
  141.      if (iid.equals(Components.interfaces.nsIWebProgressListener) || iid.equals(Components.interfaces.nsISupportsWeakReference))
  142.       return this;
  143.      
  144.      throw Components.results.NS_NOINTERFACE;
  145.     }
  146. };
  147.  
  148. function getString( stringId ) {
  149.    // Check if we've fetched this string already.
  150.    if (!(stringId in dialog.strings)) {
  151.       // Try to get it.
  152.       var elem = document.getElementById( "dialog.strings."+stringId );
  153.       try {
  154.         if ( elem
  155.            &&
  156.            elem.childNodes
  157.            &&
  158.            elem.childNodes[0]
  159.            &&
  160.            elem.childNodes[0].nodeValue ) {
  161.          dialog.strings[ stringId ] = elem.childNodes[0].nodeValue;
  162.         } else {
  163.           // If unable to fetch string, use an empty string.
  164.           dialog.strings[ stringId ] = "";
  165.         }
  166.       } catch (e) { dialog.strings[ stringId ] = ""; }
  167.    }
  168.    return dialog.strings[ stringId ];
  169. }
  170.  
  171. function loadDialog() 
  172. {
  173. }
  174.  
  175. function replaceInsert( text, index, value ) {
  176.    var result = text;
  177.    var regExp = new RegExp( "#"+index );
  178.    result = result.replace( regExp, value );
  179.    return result;
  180. }
  181.  
  182. function onLoad() {
  183.  
  184.     // Set global variables.
  185.     printProgress = window.arguments[0];
  186.     if (window.arguments[1])
  187.     {
  188.       progressParams = window.arguments[1].QueryInterface(Components.interfaces.nsIPrintProgressParams)
  189.       if (progressParams)
  190.       {
  191.         docTitle = elipseString(progressParams.docTitle, false);
  192.         docURL   = elipseString(progressParams.docURL, true);
  193.       }
  194.     }
  195.  
  196.     if ( !printProgress ) {
  197.         dump( "Invalid argument to printProgress.xul\n" );
  198.         window.close()
  199.         return;
  200.     }
  201.  
  202.     dialog = new Object;
  203.     dialog.strings = new Array;
  204.     dialog.title        = document.getElementById("dialog.title");
  205.     dialog.titleLabel   = document.getElementById("dialog.titleLabel");
  206.     dialog.progress     = document.getElementById("dialog.progress");
  207.     dialog.progressText = document.getElementById("dialog.progressText");
  208.     dialog.progressLabel = document.getElementById("dialog.progressLabel");
  209.     dialog.tempLabel    = document.getElementById("dialog.tempLabel");
  210.     dialog.cancel       = document.getElementById("cancel");
  211.  
  212.     dialog.progress.setAttribute("hidden", "true");
  213.     dialog.cancel.setAttribute("disabled", "true");
  214.  
  215.     var progressLabel = getString("preparing");
  216.     if (progressLabel == "") {
  217.       progressLabel = "Preparing..."; // better than nothing
  218.     }
  219.     dialog.tempLabel.value = progressLabel;
  220.  
  221.     dialog.title.value = docTitle;
  222.  
  223.     // Set up dialog button callbacks.
  224.     var object = this;
  225.     doSetOKCancel("", function () { return object.onCancel();});
  226.  
  227.     // Fill dialog.
  228.     loadDialog();
  229.  
  230.     // set our web progress listener on the helper app launcher
  231.     printProgress.registerListener(progressListener);
  232.     moveToAlertPosition();
  233.     //We need to delay the set title else dom will overwrite it
  234.     window.setTimeout(doneIniting, 500);
  235. }
  236.  
  237. function onUnload() 
  238. {
  239.   if (printProgress)
  240.   {
  241.    try 
  242.    {
  243.      printProgress.unregisterListener(progressListener);
  244.      printProgress = null;
  245.    }
  246.     
  247.    catch( exception ) {}
  248.   }
  249. }
  250.  
  251. // If the user presses cancel, tell the app launcher and close the dialog...
  252. function onCancel () 
  253. {
  254.   // Cancel app launcher.
  255.    try 
  256.    {
  257.      printProgress.processCanceledByUser = true;
  258.    }
  259.    catch( exception ) {return true;}
  260.     
  261.   // don't Close up dialog by returning false, the backend will close the dialog when everything will be aborted.
  262.   return false;
  263. }
  264.  
  265. function doneIniting() 
  266. {
  267.   printProgress.doneIniting();
  268. }
  269.