releases-comm-central/editor/ui/dialogs/content/EdInputImage.js

190 строки
5.2 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* import-globals-from ../../composer/content/editorUtilities.js */
/* import-globals-from EdDialogCommon.js */
/* import-globals-from EdImageDialog.js */
// dialog initialization code
document.addEventListener("dialogaccept", onAccept);
document.addEventListener("dialogcancel", onCancel);
function Startup() {
var editor = GetCurrentEditor();
if (!editor) {
window.close();
return;
}
gDialog = {
inputName: document.getElementById("InputName"),
inputDisabled: document.getElementById("InputDisabled"),
inputTabIndex: document.getElementById("InputTabIndex"),
};
ImageStartup();
// Get a single selected input element
var tagName = "input";
try {
imageElement = editor.getSelectedElement(tagName);
} catch (e) {}
if (imageElement) {
// We found an element and don't need to insert one
gInsertNewImage = false;
} 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;
}
var imgElement;
try {
imgElement = editor.getSelectedElement("img");
} catch (e) {}
if (imgElement) {
// We found an image element, convert it to an input type="image"
var attributes = [
"src",
"alt",
"width",
"height",
"hspace",
"vspace",
"border",
"align",
"usemap",
"ismap",
];
for (let i in attributes) {
imageElement.setAttribute(
attributes[i],
imgElement.getAttribute(attributes[i])
);
}
}
}
// 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();
// 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;
SetTextboxFocus(gDialog.inputName);
SetWindowLocation();
}
function InitDialog() {
InitImage();
gDialog.inputName.value = globalElement.getAttribute("name");
gDialog.inputDisabled.setAttribute(
"checked",
globalElement.hasAttribute("disabled")
);
gDialog.inputTabIndex.value = globalElement.getAttribute("tabindex");
}
function ValidateData() {
if (!ValidateImage()) {
return false;
}
if (gDialog.inputName.value) {
globalElement.setAttribute("name", gDialog.inputName.value);
} else {
globalElement.removeAttribute("name");
}
if (gDialog.inputTabIndex.value) {
globalElement.setAttribute("tabindex", gDialog.inputTabIndex.value);
} else {
globalElement.removeAttribute("tabindex");
}
if (gDialog.inputDisabled.checked) {
globalElement.setAttribute("disabled", "");
} else {
globalElement.removeAttribute("disabled");
}
globalElement.setAttribute("type", "image");
return true;
}
function onAccept(event) {
// Show alt text error only once
// (we don't initialize doAltTextError=true
// so Advanced edit button dialog doesn't trigger that error message)
// Use this now (default = false) so Advanced Edit button dialog doesn't trigger error message
gDoAltTextError = true;
if (ValidateData()) {
var editor = GetCurrentEditor();
editor.beginTransaction();
try {
if (gRemoveImageMap) {
globalElement.removeAttribute("usemap");
if (gImageMap) {
editor.deleteNode(gImageMap);
gInsertNewIMap = true;
gImageMap = null;
}
} else if (gImageMap) {
// 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);
}
}
}
if (gInsertNewImage) {
// 'true' means delete the selection before inserting
// in case were are converting an image to an input type="image"
editor.insertElementAtSelection(imageElement, true);
}
editor.cloneAttributes(imageElement, globalElement);
// If document is empty, the map element won't insert,
// so always insert the image element 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) {}
editor.endTransaction();
SaveWindowLocation();
return;
}
event.preventDefault();
}