/* * The contents of this file are subject to the Netscape 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/NPL/ * * 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 Netscape are * Copyright (C) 1998-1999 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ //Cancel() is in EdDialogCommon.js var tagName = "table" var tableElement = null; var rowElement = null; var cellElement = null; var maxRows = 10000; var maxColumns = 10000; var maxPixels = 10000; var rows; var columns; var prefs = GetPrefs(); // dialog initialization code function Startup() { if (!InitEditorShell()) return; tableElement = editorShell.CreateElementWithDefaults(tagName); if(!tableElement) { dump("Failed to create a new table!\n"); window.close(); return; } gDialog.rowsInput = document.getElementById("rowsInput"); gDialog.columnsInput = document.getElementById("columnsInput"); gDialog.widthInput = document.getElementById("widthInput"); gDialog.borderInput = document.getElementById("borderInput"); gDialog.widthPixelOrPercentMenulist = document.getElementById("widthPixelOrPercentMenulist"); gDialog.OkButton = document.documentElement.getButton("accept"); // Make a copy to use for AdvancedEdit globalElement = tableElement.cloneNode(false); if (prefs.getBoolPref("editor.use_css") && (editorShell.editorType == "html")) { // only for Composer and not for htmlmail globalElement.setAttribute("style", "text-align: left;"); } // Initialize all widgets with image attributes InitDialog(); // Set initial number to 2 rows, 2 columns: // Note, these are not attributes on the table, // so don't put them in InitDialog(), // else the user's values will be trashed when they use // the Advanced Edit dialog gDialog.rowsInput.value = 2; gDialog.columnsInput.value = 2; // If no default value on the width, set to 100% if (gDialog.widthInput.value.length == 0) { gDialog.widthInput.value = "100"; gDialog.widthPixelOrPercentMenulist.selectedIndex = 1; } SetTextboxFocusById("rowsInput"); 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() { // Get default attributes set on the created table: // Get the width attribute of the element, stripping out "%" // This sets contents of menu combobox list // 2nd param = null: Use current selection to find if parent is table cell or window gDialog.widthInput.value = InitPixelOrPercentMenulist(globalElement, null, "width", "widthPixelOrPercentMenulist", gPercent); gDialog.borderInput.value = globalElement.getAttribute("border"); } function ChangeRowOrColumn(id) { // Allow only integers forceInteger(id); // Enable OK only if both rows and columns have a value > 0 var enable = gDialog.rowsInput.value.length > 0 && gDialog.rowsInput.value > 0 && gDialog.columnsInput.value.length > 0 && gDialog.columnsInput.value > 0; SetElementEnabled(gDialog.OkButton, enable); SetElementEnabledById("AdvancedEditButton1", enable); } // Get and validate data from widgets. // Set attributes on globalElement so they can be accessed by AdvancedEdit() function ValidateData() { rows = ValidateNumber(gDialog.rowsInput, null, 1, maxRows, null, null, true) if (gValidationError) return false; columns = ValidateNumber(gDialog.columnsInput, null, 1, maxColumns, null, null, true) if (gValidationError) return false; // Set attributes: NOTE: These may be empty strings (last param = false) ValidateNumber(gDialog.borderInput, null, 0, maxPixels, globalElement, "border", false); // TODO: Deal with "BORDER" without value issue if (gValidationError) return false; ValidateNumber(gDialog.widthInput, gDialog.widthPixelOrPercentMenulist, 1, maxPixels, globalElement, "width", false); if (gValidationError) return false; return true; } function onAccept() { if (ValidateData()) { editorShell.BeginBatchChanges(); editorShell.CloneAttributes(tableElement, globalElement); // Create necessary rows and cells for the table var tableBody = editorShell.CreateElementWithDefaults("tbody"); if (tableBody) { tableElement.appendChild(tableBody); // Create necessary rows and cells for the table for (var i = 0; i < rows; i++) { var newRow = editorShell.CreateElementWithDefaults("tr"); if (newRow) { tableBody.appendChild(newRow); for (var j = 0; j < columns; j++) { var newCell = editorShell.CreateElementWithDefaults("td"); if (newCell) { newRow.appendChild(newCell); } } } } } // Detect when entire cells are selected: // Get number of cells selected var tagNameObj = new Object; var countObj = new Object; tagNameObj.value = ""; var element = editorShell.GetSelectedOrParentTableElement(tagNameObj, countObj); var deletePlaceholder = false; if (tagNameObj.value == "table") { //Replace entire selected table with new table, so delete the table editorShell.DeleteTable(); } else if (tagNameObj.value == "td") { if (countObj.value >= 1) { if (countObj.value > 1) { // Assume user wants to replace a block of // contiguous cells with a table, so // join the selected cells editorShell.JoinTableCells(false); // Get the cell everything was merged into element = editorShell.GetFirstSelectedCell(); // Collapse selection into just that cell editorShell.editorSelection.collapse(element,0); } if (element) { // Empty just the contents of the cell editorShell.DeleteTableCellContents(); // Collapse selection to start of empty cell... editorShell.editorSelection.collapse(element,0); // ...but it will contain a
placeholder deletePlaceholder = true; } } } try { // true means delete selection when inserting editorShell.InsertElementAtSelection(tableElement, true); } catch (e) { dump("Exception occured in InsertElementAtSelection\n"); } if (deletePlaceholder && tableElement && tableElement.nextSibling) { // Delete the placeholder
editorShell.DeleteElement(tableElement.nextSibling); } editorShell.EndBatchChanges(); SaveWindowLocation(); return true; } return false; }