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 / EdNamedAnchorProps.js < prev    next >
Text File  |  2003-06-08  |  5KB  |  183 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) 1998-1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  * 
  20.  * Contributor(s): 
  21.  */
  22.  
  23. var gInsertNew = true;
  24. var gAnchorElement = null;
  25. var gOriginalName = "";
  26. const kTagName = "anchor";
  27.  
  28. // dialog initialization code
  29. function Startup()
  30. {
  31.   var editor = GetCurrentEditor();
  32.   if (!editor)
  33.   {
  34.     window.close();
  35.     return;
  36.   }
  37.  
  38.   gDialog.OkButton  = document.documentElement.getButton("accept");
  39.   gDialog.NameInput = document.getElementById("nameInput");
  40.  
  41.   // Get a single selected element of the desired type
  42.   gAnchorElement = editor.getSelectedElement(kTagName);
  43.  
  44.   if (gAnchorElement) {
  45.     // We found an element and don't need to insert one
  46.     gInsertNew = false;
  47.  
  48.     // Make a copy to use for AdvancedEdit
  49.     globalElement = gAnchorElement.cloneNode(false);
  50.     gOriginalName = ConvertToCDATAString(gAnchorElement.name);
  51.   } else {
  52.     gInsertNew = true;
  53.     // We don't have an element selected, 
  54.     //  so create one with default attributes
  55.     gAnchorElement = editor.createElementWithDefaults(kTagName);
  56.     if (gAnchorElement) {
  57.       // Use the current selection as suggested name
  58.       var name = GetSelectionAsText();
  59.       // Get 40 characters of the selected text and don't add "...",
  60.       //  replace whitespace with "_" and strip non-word characters
  61.       name = ConvertToCDATAString(TruncateStringAtWordEnd(name, 40, false));
  62.       //Be sure the name is unique to the document
  63.       if (AnchorNameExists(name))
  64.         name += "_"
  65.  
  66.       // Make a copy to use for AdvancedEdit
  67.       globalElement = gAnchorElement.cloneNode(false);
  68.       globalElement.setAttribute("name",name);
  69.     }
  70.   }
  71.   if(!gAnchorElement)
  72.   {
  73.     dump("Failed to get selected element or create a new one!\n");
  74.     window.close();
  75.     return;
  76.   }
  77.  
  78.   InitDialog();
  79.   
  80.   DoEnabling();
  81.   SetTextboxFocus(gDialog.NameInput);
  82.   SetWindowLocation();
  83. }
  84.  
  85. function InitDialog()
  86. {
  87.   gDialog.NameInput.value = globalElement.getAttribute("name");
  88. }
  89.  
  90. function ChangeName()
  91. {
  92.   if (gDialog.NameInput.value.length > 0)
  93.   {
  94.     // Replace spaces with "_" and strip other non-URL characters
  95.     // Note: we could use ConvertAndEscape, but then we'd
  96.     //  have to UnEscapeAndConvert beforehand - too messy!
  97.     gDialog.NameInput.value = ConvertToCDATAString(gDialog.NameInput.value);
  98.   }
  99.   DoEnabling();
  100. }
  101.  
  102. function DoEnabling()
  103. {
  104.   var enable = gDialog.NameInput.value.length > 0;
  105.   SetElementEnabled(gDialog.OkButton,  enable);
  106.   SetElementEnabledById("AdvancedEditButton1", enable);
  107. }
  108.  
  109. function AnchorNameExists(name)
  110. {
  111.   var anchorList;
  112.   try {
  113.     anchorList = GetCurrentEditor().document.anchors;
  114.   } catch (e) {}
  115.  
  116.   if (anchorList) {
  117.     for (var i = 0; i < anchorList.length; i++) {
  118.       if (anchorList[i].name == name)
  119.         return true;
  120.     }
  121.   }
  122.   return false;
  123. }
  124.  
  125. // Get and validate data from widgets.
  126. // Set attributes on globalElement so they can be accessed by AdvancedEdit()
  127. function ValidateData()
  128. {
  129.   var name = TrimString(gDialog.NameInput.value);
  130.   if (!name)
  131.   {
  132.       ShowInputErrorMessage(GetString("MissingAnchorNameError"));
  133.       SetTextboxFocus(gDialog.NameInput);
  134.       return false;
  135.   } else {
  136.     // Replace spaces with "_" and strip other characters
  137.     // Note: we could use ConvertAndEscape, but then we'd
  138.     //  have to UnConverAndEscape beforehand - too messy!
  139.     name = ConvertToCDATAString(name);
  140.  
  141.     if (gOriginalName != name && AnchorNameExists(name))
  142.     {
  143.       ShowInputErrorMessage(GetString("DuplicateAnchorNameError").replace(/%name%/,name));            
  144.       SetTextboxFocus(gDialog.NameInput);
  145.       return false;
  146.     }
  147.     globalElement.name = name;
  148.   }
  149.   return true;
  150. }
  151.  
  152. function onAccept()
  153. {
  154.   if (ValidateData())
  155.   {
  156.     if (gOriginalName != globalElement.name)
  157.     {
  158.       var editor = GetCurrentEditor();
  159.       editor.beginTransaction();
  160.  
  161.       try {
  162.         // "false" = don't delete selected text when inserting
  163.         if (gInsertNew)
  164.         {
  165.           // We must insert element before copying CSS style attribute,
  166.           //  but we must set the name else it won't insert at all
  167.           gAnchorElement.name = globalElement.name;
  168.           editor.insertElementAtSelection(gAnchorElement, false);
  169.         }
  170.  
  171.         // Copy attributes to element we are changing or inserting
  172.         editor.cloneAttributes(gAnchorElement, globalElement);
  173.  
  174.       } catch (e) {}
  175.  
  176.       editor.endTransaction();
  177.     }
  178.     SaveWindowLocation();
  179.     return true;
  180.   }
  181.   return false;
  182. }
  183.