/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998-1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Pete Collins * Brian King * Ben Goodger * Charles Manske (cmanske@netscape.com) * Neil Rashbrook (neil@parkwaycc.co.uk) * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ var gAnchorElement = null; var gOriginalHref = ""; var gHNodeArray = {}; // dialog initialization code function Startup() { var editor = GetCurrentEditor(); if (!editor) { window.close(); return; } ImageStartup(); gDialog.hrefInput = document.getElementById("hrefInput"); gDialog.makeRelativeLink = document.getElementById("MakeRelativeLink"); gDialog.showLinkBorder = document.getElementById("showLinkBorder"); gDialog.linkTab = document.getElementById("imageLinkTab"); // Get a single selected image element var tagName = "img"; if ("arguments" in window && window.arguments[0]) { imageElement = window.arguments[0]; // We've been called from form field propertes, so we can't insert a link gDialog.linkTab.parentNode.removeChild(gDialog.linkTab); gDialog.linkTab = null; } else { // First check for try { imageElement = editor.getSelectedElement("input"); if (!imageElement || imageElement.getAttribute("type") != "image") { // Get a single selected image element imageElement = editor.getSelectedElement(tagName); if (imageElement) gAnchorElement = editor.getElementOrParentByTagName("href", imageElement); } } catch (e) {} } if (imageElement) { // We found an element and don't need to insert one if (imageElement.hasAttribute("src")) { gInsertNewImage = false; gActualWidth = imageElement.naturalWidth; gActualHeight = imageElement.naturalHeight; } } else { gInsertNewImage = true; // We don't have an element selected, // so create one with default attributes try { imageElement = editor.createElementWithDefaults(tagName); } catch(e) {} if (!imageElement) { dump("Failed to get selected element or create a new one!\n"); window.close(); return; } try { gAnchorElement = editor.getSelectedElement("href"); } catch (e) {} } // Make a copy to use for AdvancedEdit globalElement = imageElement.cloneNode(false); // We only need to test for this once per dialog load gHaveDocumentUrl = GetDocumentBaseUrl(); InitDialog(); if (gAnchorElement) gOriginalHref = gAnchorElement.getAttribute("href"); gDialog.hrefInput.value = gOriginalHref; FillLinkMenulist(gDialog.hrefInput, gHNodeArray); ChangeLinkLocation(); // Save initial source URL gOriginalSrc = gDialog.srcInput.value; // By default turn constrain on, but both width and height must be in pixels gDialog.constrainCheckbox.checked = gDialog.widthUnitsMenulist.selectedIndex == 0 && gDialog.heightUnitsMenulist.selectedIndex == 0; // Start in "Link" tab if 2nd arguement is true if (gDialog.linkTab && "arguments" in window && window.arguments[1]) { document.getElementById("TabBox").selectedTab = gDialog.linkTab; SetTextboxFocus(gDialog.hrefInput); } else SetTextboxFocus(gDialog.srcInput); SetWindowLocation(); } // Set dialog widgets with attribute data // We get them from globalElement copy so this can be used // by AdvancedEdit(), which is shared by all property dialogs function InitDialog() { InitImage(); var border = TrimString(gDialog.border.value); gDialog.showLinkBorder.checked = border != "" && border > 0; } function ChangeLinkLocation() { SetRelativeCheckbox(gDialog.makeRelativeLink); gDialog.showLinkBorder.disabled = !TrimString(gDialog.hrefInput.value); } function ToggleShowLinkBorder() { if (gDialog.showLinkBorder.checked) { var border = TrimString(gDialog.border.value); if (!border || border == "0") gDialog.border.value = "2"; } else { gDialog.border.value = "0"; } } // Get data from widgets, validate, and set for the global element // accessible to AdvancedEdit() [in EdDialogCommon.js] function ValidateData() { return ValidateImage(); } function doHelpButton() { openHelp("image_properties"); return true; } function onAccept() { // Use this now (default = false) so Advanced Edit button dialog doesn't trigger error message gDoAltTextError = true; if (ValidateData()) { if ("arguments" in window && window.arguments[0]) { SaveWindowLocation(); return true; } var editor = GetCurrentEditor(); editor.beginTransaction(); try { if (gRemoveImageMap) { globalElement.removeAttribute("usemap"); if (gImageMap) { editor.deleteNode(gImageMap); gInsertNewIMap = true; gImageMap = null; } } else if (gImageMap) { // un-comment to see that inserting image maps does not work! /* gImageMap = editor.createElementWithDefaults("map"); gImageMap.setAttribute("name", "testing"); var testArea = editor.createElementWithDefaults("area"); testArea.setAttribute("shape", "circle"); testArea.setAttribute("coords", "86,102,52"); testArea.setAttribute("href", "test"); gImageMap.appendChild(testArea); */ // Assign to map if there is one var mapName = gImageMap.getAttribute("name"); if (mapName != "") { globalElement.setAttribute("usemap", ("#"+mapName)); if (globalElement.getAttribute("border") == "") globalElement.setAttribute("border", 0); } } // Create or remove the link as appropriate var href = gDialog.hrefInput.value; if (href != gOriginalHref) { if (href && !gInsertNewImage) EditorSetTextProperty("a", "href", href); else EditorRemoveTextProperty("href", ""); } // If inside a link, always write the 'border' attribute if (href) { if (gDialog.showLinkBorder.checked) { // Use default = 2 if border attribute is empty if (!globalElement.hasAttribute("border")) globalElement.setAttribute("border", "2"); } else globalElement.setAttribute("border", "0"); } if (gInsertNewImage) { if (href) { var linkElement = editor.createElementWithDefaults("a"); linkElement.setAttribute("href", href); linkElement.appendChild(imageElement); editor.insertElementAtSelection(linkElement, true); } else // 'true' means delete the selection before inserting editor.insertElementAtSelection(imageElement, true); } // Check to see if the link was to a heading // Do this last because it moves the caret (BAD!) if (href in gHNodeArray) { var anchorNode = editor.createElementWithDefaults("a"); if (anchorNode) { anchorNode.name = href.substr(1); // Remember to use editor method so it is undoable! editor.insertNode(anchorNode, gHNodeArray[href], 0, false); } } // All values are valid - copy to actual element in doc or // element we just inserted editor.cloneAttributes(imageElement, globalElement); // If document is empty, the map element won't insert, // so always insert the image first if (gImageMap && gInsertNewIMap) { // Insert the ImageMap element at beginning of document var body = editor.rootElement; editor.setShouldTxnSetSelection(false); editor.insertNode(gImageMap, body, 0); editor.setShouldTxnSetSelection(true); } } catch (e) { dump(e); } editor.endTransaction(); SaveWindowLocation(); return true; } gDoAltTextError = false; return false; }