home *** CD-ROM | disk | FTP | other *** search
/ ftp.swcp.com / ftp.swcp.com.zip / ftp.swcp.com / mac / mozilla-macos9-1.3.1.sea.bin / Mozilla1.3.1 / Chrome / comm.jar / content / communicator / pref / pref-applications.js < prev    next >
Text File  |  2003-06-08  |  9KB  |  256 lines

  1. /* -*- Mode: Java; tab-width: 2; c-basic-offset: 2; -*-
  2.  * 
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  *
  18.  * Contributor(s):
  19.  */
  20.  
  21. var gNewTypeRV    = null;
  22. var gUpdateTypeRV = null;
  23. var gList   = null;
  24. var gDS     = null;
  25. var gPrefApplicationsBundle = null;
  26.  
  27. var gExtensionField = null;
  28. var gMIMEDescField  = null;
  29. var gHandlerField   = null;
  30. var gNewTypeButton  = null;
  31. var gEditButton     = null;
  32. var gRemoveButton   = null;
  33.  
  34. function newType()
  35. {
  36.   var handlerOverride = new HandlerOverride();
  37.   window.openDialog("chrome://communicator/content/pref/pref-applications-edit.xul", "appEdit", "chrome,modal=yes,resizable=no", handlerOverride);
  38.   if (gNewTypeRV) {
  39.     //gList.builder.rebuild();
  40.     gList.setAttribute("ref", "urn:mimetypes");
  41.     gNewTypeRV = null;
  42.   }
  43. }
  44.  
  45. function removeType()
  46. {
  47.   // Only prompt if setting is "useHelperApp".
  48.   var uri = gList.selectedItems[0].id;
  49.   var handlerOverride = new HandlerOverride(uri);
  50.   if ( !handlerOverride.useSystemDefault && !handlerOverride.saveToDisk ) {
  51.     var titleMsg = gPrefApplicationsBundle.getString("removeHandlerTitle");
  52.     var dialogMsg = gPrefApplicationsBundle.getString("removeHandler");
  53.     dialogMsg = dialogMsg.replace(/%n/g, "\n");
  54.     var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
  55.     var remove = promptService.confirm(window, titleMsg, dialogMsg);
  56.     if (!remove) {
  57.       return;
  58.     }
  59.   }
  60.   removeOverride(handlerOverride.mimeType);
  61.   gList.setAttribute("ref", "urn:mimetypes");
  62.   selectApplication();
  63. }
  64.  
  65. function editType()
  66. {
  67.   if (gList.selectedItems && gList.selectedItems[0]) {
  68.     var uri = gList.selectedItems[0].id;
  69.     var handlerOverride = new HandlerOverride(uri);
  70.     window.openDialog("chrome://communicator/content/pref/pref-applications-edit.xul", "appEdit", "chrome,modal=yes,resizable=no", handlerOverride);
  71.     selectApplication();
  72.   }
  73. }
  74.  
  75. const xmlSinkObserver = {
  76.   onBeginLoad: function(aSink)
  77.   {
  78.   },
  79.   onInterrupt: function(aSink)
  80.   {
  81.   },
  82.   onResume: function(aSink)
  83.   {
  84.   },
  85.   // This is called when the RDF data source has finished loading.
  86.   onEndLoad: function(aSink)
  87.   {
  88.     // Unhook observer.
  89.     aSink.removeXMLSinkObserver(this);
  90.  
  91.     // Convert old "don't ask" pref info to helper app pref entries
  92.     try {
  93.       var prefService = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPrefService);
  94.       var prefBranch = prefService.getBranch("browser.helperApps.neverAsk.");
  95.       if (!prefBranch) return;
  96.     } catch(e) { return; }
  97.  
  98.     var neverAskSave = new Array();
  99.     var neverAskOpen = new Array();
  100.     try {
  101.       neverAskSave = prefBranch.getCharPref("saveToDisk").split(",");
  102.     } catch(e) {}
  103.     try {
  104.       neverAskOpen = prefBranch.getCharPref("openFile").split(",");
  105.     } catch(e) {}
  106.     
  107.     var i;
  108.     var newEntries = {};
  109.     for ( i = 0; i < neverAskSave.length; i++ ) {
  110.       // See if mime type is in data source.
  111.       var type = unescape(neverAskSave[i]);
  112.       if (type != "" && !mimeHandlerExists(type)) {
  113.         // Not in there, need to create an entry now so user can edit it.
  114.         newEntries[type] = "saveToDisk";
  115.       }
  116.     }
  117.     
  118.     for ( i = 0; i < neverAskOpen.length; i++ ) {
  119.       // See if mime type is in data source.
  120.       var type = unescape(neverAskOpen[i]);
  121.       if (type != "" && !mimeHandlerExists(type)) {
  122.         // Not in there, need to create an entry now so user can edit it.
  123.         newEntries[type] = "useSystemDefault";
  124.       }
  125.     }
  126.     
  127.     // Now create all new entries.
  128.     for ( var newEntry in newEntries ) {
  129.       this.createNewEntry(newEntry, newEntries[newEntry]);
  130.     }
  131.     
  132.     // Don't need these any more!
  133.     try { prefBranch.clearUserPref("saveToDisk"); } catch(e) {}
  134.     try { prefBranch.clearUserPref("openFile"); } catch(e) {}
  135.   },
  136.   onError: function(aSink, aStatus, aMsg)
  137.   {
  138.   },
  139.   createNewEntry: function(mimeType, action)
  140.   {
  141.     // Create HandlerOverride and populate it.
  142.     var entry = new HandlerOverride(MIME_URI(mimeType));
  143.     entry.mUpdateMode = false;
  144.     entry.mimeType    = mimeType;
  145.     entry.description = "";
  146.     entry.isEditable  = true;
  147.     entry.alwaysAsk   = false;
  148.     entry.appPath     = "";
  149.     entry.appDisplayName = "";
  150.     // This sets preferred action.
  151.     entry[action]     = true;
  152.     
  153.     // Do RDF magic.
  154.     entry.buildLinks();
  155.   }
  156. }
  157.  
  158. function Startup()
  159. {
  160.   // set up the string bundle
  161.   gPrefApplicationsBundle = document.getElementById("bundle_prefApplications");
  162.  
  163.   // set up the elements
  164.   gList = document.getElementById("appList"); 
  165.   gExtensionField = document.getElementById("extension");        
  166.   gMIMEDescField  = document.getElementById("mimeDesc");
  167.   gHandlerField   = document.getElementById("handler");
  168.   gNewTypeButton  = document.getElementById("newTypeButton");
  169.   gEditButton     = document.getElementById("editButton");
  170.   gRemoveButton   = document.getElementById("removeButton");
  171.  
  172.   // Disable the Edit & Remove buttons until we click on something
  173.   updateLockedButtonState(false);
  174.  
  175.   const mimeTypes = "UMimTyp";
  176.   var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
  177.   
  178.   var file = fileLocator.get(mimeTypes, Components.interfaces.nsIFile);
  179.  
  180.   var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  181.   var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
  182.   gDS = gRDF.GetDataSource(fileHandler.getURLSpecFromFile(file));
  183.  
  184.   // intialize the listbox
  185.   gList.database.AddDataSource(gDS);
  186.   gList.setAttribute("ref", "urn:mimetypes");
  187.  
  188.   // Test whether the data source is already loaded.
  189.   if (gDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).loaded) {
  190.     // Do it now.
  191.     xmlSinkObserver.onEndLoad(gDS.QueryInterface(Components.interfaces.nsIRDFXMLSink));
  192.   } else {
  193.     // Add observer that will kick in when data source load completes.
  194.     gDS.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver( xmlSinkObserver );
  195.   }
  196. }
  197.  
  198. function selectApplication()
  199. {
  200.   if (gList.selectedItems && gList.selectedItems.length && gList.selectedItems[0]) {
  201.     var uri = gList.selectedItems[0].id;
  202.     var handlerOverride = new HandlerOverride(uri);
  203.     gExtensionField.setAttribute("value", handlerOverride.extensions);
  204.     gMIMEDescField.setAttribute("value", handlerOverride.description);
  205.     
  206.     // figure out how this type is handled
  207.     if (handlerOverride.handleInternal == "true")
  208.       gHandlerField.setAttribute("value",
  209.                                  gPrefApplicationsBundle.getString("handleInternally"));
  210.     else if (handlerOverride.saveToDisk == "true")
  211.       gHandlerField.setAttribute("value",
  212.                                  gPrefApplicationsBundle.getString("saveToDisk"));
  213.     else if (handlerOverride.useSystemDefault == "true")
  214.       gHandlerField.setAttribute("value",
  215.                                  gPrefApplicationsBundle.getString("useSystemDefault"));
  216.     else 
  217.       gHandlerField.setAttribute("value",
  218.                                  gPrefApplicationsBundle.getFormattedString("useHelperApp", [handlerOverride.appDisplayName]));
  219.     var ext;
  220.     var posOfFirstSpace = handlerOverride.extensions.indexOf(" ");
  221.     if (posOfFirstSpace > -1)
  222.       ext = handlerOverride.extensions.substr(0, posOfFirstSpace);
  223.     else
  224.       ext = handlerOverride.extensions;
  225.     var imageString = "moz-icon://" + "dummy." + ext.toLowerCase() + "?size=32&contentType=" + handlerOverride.mimeType;
  226.     document.getElementById("contentTypeImage").setAttribute("src", imageString);
  227.     updateLockedButtonState(handlerOverride.isEditable == "true");
  228.     delete handlerOverride;
  229.   } else {
  230.     updateLockedButtonState(false)
  231.     gHandlerField.removeAttribute("value");
  232.     document.getElementById("contentTypeImage").removeAttribute("src");
  233.     gExtensionField.removeAttribute("value");
  234.     gMIMEDescField.removeAttribute("value");
  235.   }
  236.  
  237. // disable locked buttons
  238. function updateLockedButtonState(handlerEditable)
  239. {
  240.   gNewTypeButton.disabled = parent.hPrefWindow.getPrefIsLocked(gNewTypeButton.getAttribute("prefstring") );
  241.   if (!handlerEditable ||
  242.       parent.hPrefWindow.getPrefIsLocked(gEditButton.getAttribute("prefstring"))) {
  243.     gEditButton.disabled = true;
  244.   } else {
  245.     gEditButton.disabled = false;
  246.   }
  247.       
  248.   if (!handlerEditable ||
  249.       parent.hPrefWindow.getPrefIsLocked(gRemoveButton.getAttribute("prefstring"))) {
  250.     gRemoveButton.disabled = true;
  251.   } else {
  252.     gRemoveButton.disabled = false;
  253.   }
  254. }
  255.