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 / editor / EditorPublishSettings.js < prev    next >
Text File  |  2003-06-08  |  10KB  |  361 lines

  1. /*
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 2001 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s):
  21.  */
  22.  
  23. var gPublishSiteData;
  24. var gPublishDataChanged = false;
  25. var gDefaultSiteIndex = -1;
  26. var gDefaultSiteName;
  27. var gPreviousDefaultSite;
  28. var gPreviousTitle;
  29. var gSettingsChanged = false;
  30. var gSiteDataChanged = false;
  31. var gAddNewSite = false;
  32. var gCurrentSiteIndex = -1;
  33. var gPasswordManagerOn = true;
  34.  
  35. // Dialog initialization code
  36. function Startup()
  37. {
  38.   if (!GetCurrentEditor())
  39.   {
  40.     window.close();
  41.     return;
  42.   }
  43.  
  44.   gDialog.SiteList            = document.getElementById("SiteList");
  45.   gDialog.SiteNameInput       = document.getElementById("SiteNameInput");
  46.   gDialog.PublishUrlInput     = document.getElementById("PublishUrlInput");
  47.   gDialog.BrowseUrlInput      = document.getElementById("BrowseUrlInput");
  48.   gDialog.UsernameInput       = document.getElementById("UsernameInput");
  49.   gDialog.PasswordInput       = document.getElementById("PasswordInput");
  50.   gDialog.SavePassword        = document.getElementById("SavePassword");
  51.   gDialog.SetDefaultButton    = document.getElementById("SetDefaultButton");
  52.   gDialog.RemoveSiteButton    = document.getElementById("RemoveSiteButton");
  53.   gDialog.OkButton            = document.documentElement.getButton("accept");
  54.  
  55.   gPublishSiteData = GetPublishSiteData();
  56.   gDefaultSiteName = GetDefaultPublishSiteName();
  57.   gPreviousDefaultSite = gDefaultSiteName;
  58.  
  59.   gPasswordManagerOn = GetBoolPref("signon.rememberSignons");
  60.   gDialog.SavePassword.disabled = !gPasswordManagerOn;
  61.  
  62.   InitDialog();
  63.  
  64.   SetWindowLocation();
  65. }
  66.  
  67. function InitDialog()
  68. {
  69.   // If there's no current site data, start a new item in the Settings panel
  70.   if (!gPublishSiteData)
  71.   {
  72.     AddNewSite();
  73.   }
  74.   else
  75.   {
  76.     FillSiteList();
  77.     InitSiteSettings(gDefaultSiteIndex);
  78.     SetTextboxFocus(gDialog.SiteNameInput);
  79.   }
  80. }
  81.  
  82. function FillSiteList()
  83. {
  84.   // Prevent triggering SelectSiteList() actions
  85.   gIsSelecting = true;
  86.   ClearListbox(gDialog.SiteList);
  87.   gIsSelecting = false;
  88.   gDefaultSiteIndex = -1;
  89.  
  90.   // Fill the site list
  91.   var count = gPublishSiteData.length;
  92.   for (var i = 0; i < count; i++)
  93.   {
  94.     var name = gPublishSiteData[i].siteName;
  95.     var item = gDialog.SiteList.appendItem(name);
  96.     SetPublishItemStyle(item);
  97.     if (name == gDefaultSiteName)
  98.       gDefaultSiteIndex = i;
  99.   }
  100. }
  101.  
  102. function SetPublishItemStyle(item)
  103. {
  104.   // Display default site with bold style
  105.   if (item)
  106.   {
  107.     if (item.getAttribute("label") == gDefaultSiteName)
  108.       item.setAttribute("class", "bold");
  109.     else
  110.       item.removeAttribute("class");
  111.   }
  112. }
  113.  
  114. function AddNewSite()
  115. {
  116.   // Save any pending changes locally first
  117.   if (!ApplyChanges())
  118.     return;
  119.  
  120.   // Initialize Setting widgets to none of the selected sites
  121.   InitSiteSettings(-1);
  122.   gAddNewSite = true;
  123.  
  124.   SetTextboxFocus(gDialog.SiteNameInput);
  125. }
  126.  
  127. function RemoveSite()
  128. {
  129.   if (!gPublishSiteData)
  130.     return;
  131.  
  132.   var index = gDialog.SiteList.selectedIndex;
  133.   var item;
  134.   if (index != -1)
  135.   {
  136.     item = gDialog.SiteList.selectedItems[0];
  137.     var nameToRemove = item.getAttribute("label");
  138.  
  139.     // Remove one item from site data array
  140.     gPublishSiteData.splice(index, 1);
  141.     // Remove item from site list
  142.     gDialog.SiteList.clearSelection();
  143.     gDialog.SiteList.removeItemAt(index);
  144.  
  145.     // Adjust if we removed last item and reselect a site
  146.     if (index >= gPublishSiteData.length)
  147.       index--;
  148.     InitSiteSettings(index);
  149.  
  150.     if (nameToRemove == gDefaultSiteName)
  151.     {
  152.       // Deleting current default -- set to new selected item
  153.       //  Arbitrary, but what else to do?
  154.       SetDefault();
  155.     }
  156.     gSiteDataChanged = true;
  157.   }
  158. }
  159.  
  160. function SetDefault()
  161. {
  162.   if (!gPublishSiteData)
  163.     return;
  164.  
  165.   var index = gDialog.SiteList.selectedIndex;
  166.   if (index != -1)
  167.   {
  168.     gDefaultSiteIndex = index;
  169.     gDefaultSiteName = gPublishSiteData[index].siteName;
  170.     
  171.     // Set bold style on new default
  172.     var item = gDialog.SiteList.firstChild;
  173.     while (item)
  174.     {
  175.       SetPublishItemStyle(item);
  176.       item = item.nextSibling;
  177.     }
  178.   }
  179. }
  180.  
  181. // Recursion prevention:
  182. // Use when you don't want to trigger ApplyChanges and InitSiteSettings
  183. var gIsSelecting = false;
  184.  
  185. function SelectSiteList()
  186. {
  187.   if (gIsSelecting)
  188.     return;
  189.  
  190.   gIsSelecting = true;
  191.   var newIndex = gDialog.SiteList.selectedIndex;
  192.  
  193.   // Save any pending changes locally first
  194.   if (!ApplyChanges())
  195.     return;
  196.  
  197.   InitSiteSettings(newIndex);
  198.  
  199.   gIsSelecting = false;
  200. }
  201.  
  202. // Use this to prevent recursion in SelectSiteList
  203. function SetSelectedSiteIndex(index)
  204. {
  205.   gIsSelecting = true;
  206.   gDialog.SiteList.selectedIndex = index;
  207.   gIsSelecting = false;
  208. }
  209.  
  210. function InitSiteSettings(selectedSiteIndex)
  211. {  
  212.   // Index to the site we will need to update if settings changed
  213.   gCurrentSiteIndex = selectedSiteIndex;
  214.   
  215.   SetSelectedSiteIndex(selectedSiteIndex);
  216.   var haveData = (gPublishSiteData && selectedSiteIndex != -1);
  217.  
  218.   gDialog.SiteNameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].siteName : "";
  219.   gDialog.PublishUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].publishUrl : "";
  220.   gDialog.BrowseUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].browseUrl : "";
  221.   gDialog.UsernameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].username : "";
  222.  
  223.   var savePassord = haveData && gPasswordManagerOn;
  224.   gDialog.PasswordInput.value = savePassord ? gPublishSiteData[selectedSiteIndex].password : "";
  225.   gDialog.SavePassword.checked = savePassord ? gPublishSiteData[selectedSiteIndex].savePassword : false;
  226.  
  227.   gDialog.SetDefaultButton.disabled = !haveData;
  228.   gDialog.RemoveSiteButton.disabled = !haveData;
  229.   gSettingsChanged = false;
  230. }
  231.  
  232. function onInputSettings()
  233. {
  234.   // TODO: Save current data during SelectSite1 and compare here
  235.   //       to detect if real change has occurred?
  236.   gSettingsChanged = true;
  237. }
  238.  
  239. function ApplyChanges()
  240. {
  241.   if (gSettingsChanged && !UpdateSettings())
  242.   {
  243.     // Restore selection to previously current site
  244.     SetSelectedSiteIndex(gCurrentSiteIndex);
  245.     return false;
  246.   }
  247.   return true;
  248. }
  249.  
  250. function UpdateSettings()
  251. {
  252.   // Validate and add new site
  253.   var newName = TrimString(gDialog.SiteNameInput.value);
  254.   if (!newName)
  255.   {
  256.     ShowInputErrorMessage(GetString("MissingSiteNameError"), gDialog.SiteNameInput);
  257.     return false;
  258.   }
  259.   if (PublishSiteNameExists(newName, gPublishSiteData, gCurrentSiteIndex))
  260.   {
  261.     ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, newName));            
  262.     SetTextboxFocus(gDialog.SiteNameInput);
  263.     return false;
  264.   }
  265.  
  266.   var newUrl = FormatUrlForPublishing(gDialog.PublishUrlInput.value);
  267.   if (!newUrl)
  268.   {
  269.     ShowInputErrorMessage(GetString("MissingPublishUrlError"), gDialog.PublishUrlInput);
  270.     return false;
  271.   }
  272.  
  273.   // Start assuming we're updating existing site at gCurrentSiteIndex
  274.   var newSiteData = false;
  275.  
  276.   if (!gPublishSiteData)
  277.   {
  278.     // First time used - Create the first site profile
  279.     gPublishSiteData = new Array(1);
  280.     gCurrentSiteIndex = 0;
  281.     newSiteData = true;
  282.   }
  283.   else if (gCurrentSiteIndex == -1)
  284.   {
  285.     // No currently-selected site,
  286.     //  must be adding a new site
  287.     // Add new data at the end of list
  288.     gCurrentSiteIndex = gPublishSiteData.length;
  289.     newSiteData = true;
  290.   }
  291.     
  292.   if (newSiteData)
  293.   {
  294.     // Init new site profile
  295.     gPublishSiteData[gCurrentSiteIndex] = {};
  296.     gPublishSiteData[gCurrentSiteIndex].docDir = "";
  297.     gPublishSiteData[gCurrentSiteIndex].otherDir = "";
  298.     gPublishSiteData[gCurrentSiteIndex].dirList = [""];
  299.     gPublishSiteData[gCurrentSiteIndex].previousSiteName = newName;
  300.   }
  301.  
  302.   gPublishSiteData[gCurrentSiteIndex].siteName = newName;
  303.   gPublishSiteData[gCurrentSiteIndex].publishUrl = newUrl;
  304.   gPublishSiteData[gCurrentSiteIndex].browseUrl = FormatUrlForPublishing(gDialog.BrowseUrlInput.value);
  305.   gPublishSiteData[gCurrentSiteIndex].username = TrimString(gDialog.UsernameInput.value);
  306.   gPublishSiteData[gCurrentSiteIndex].password= gDialog.PasswordInput.value;
  307.   gPublishSiteData[gCurrentSiteIndex].savePassword = gDialog.SavePassword.checked;
  308.  
  309.   if (gCurrentSiteIndex == gDefaultSiteIndex)
  310.     gDefaultSiteName = newName;
  311.  
  312.   // When adding the very first site, assume that's the default
  313.   if (gPublishSiteData.length == 1 && !gDefaultSiteName)
  314.   {
  315.     gDefaultSiteName = gPublishSiteData[0].siteName;
  316.     gDefaultSiteIndex = 0;
  317.   }
  318.  
  319.   FillSiteList();
  320.  
  321.   // Select current site in list  
  322.   SetSelectedSiteIndex(gCurrentSiteIndex);
  323.  
  324.   // Signal saving data to prefs
  325.   gSiteDataChanged = true;
  326.   
  327.   // Clear current site flags
  328.   gSettingsChanged = false;
  329.   gAddNewSite = false;
  330.  
  331.   return true;
  332. }
  333.  
  334.  
  335. function doHelpButton()
  336. {
  337.   openHelp("comp-doc-publish-site-settings");
  338. }
  339.  
  340. function onAccept()
  341. {
  342.   // Save any pending changes locally first
  343.   if (!ApplyChanges())
  344.     return false;
  345.  
  346.   if (gSiteDataChanged)
  347.   {
  348.     // Save all local data to prefs
  349.     SavePublishSiteDataToPrefs(gPublishSiteData, gDefaultSiteName);
  350.   }
  351.   else if (gPreviousDefaultSite != gDefaultSiteName)
  352.   {
  353.     // only the default site was changed
  354.     SetDefaultSiteName(gDefaultSiteName);
  355.   }
  356.  
  357.   SaveWindowLocation();
  358.  
  359.   return true;
  360. }
  361.