/* * 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 dialog; // dialog initialization code function Startup() { if (!InitEditorShell()) return; doSetOKCancel(onOK, onCancel); tableElement = editorShell.CreateElementWithDefaults(tagName); if(!tableElement) { dump("Failed to create a new table!\n"); window.close(); } // Create dialog object to store controls for easy access dialog = new Object; dialog.rowsInput = document.getElementById("rowsInput"); dialog.columnsInput = document.getElementById("columnsInput"); dialog.widthInput = document.getElementById("widthInput"); dialog.borderInput = document.getElementById("borderInput"); dialog.widthPixelOrPercentMenulist = document.getElementById("widthPixelOrPercentMenulist"); // Make a copy to use for AdvancedEdit globalElement = tableElement.cloneNode(false); // 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 dialog.rowsInput.value = 2; dialog.columnsInput.value = 2; // If no default value on the width, set to 100% if (dialog.widthInput.value.length == 0) { dialog.widthInput.value = "100"; dialog.widthPixelOrPercentMenulist.selectedIndex = 1; } // Resize window window.sizeToContent(); SetTextfieldFocus(dialog.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 dialog.widthInput.value = InitPixelOrPercentMenulist(globalElement, tableElement, "widthInput","widthPixelOrPercentMenulist", gPercent); dialog.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 SetElementEnabledById("ok", dialog.rowsInput.value.length > 0 && dialog.rowsInput.value > 0 && dialog.columnsInput.value.length > 0 && dialog.columnsInput.value > 0); } // Get and validate data from widgets. // Set attributes on globalElement so they can be accessed by AdvancedEdit() function ValidateData() { rows = ValidateNumberString(dialog.rowsInput.value, 1, maxRows); if (rows == "") { // Set focus to the offending control dialog.rowsInput.focus(); return false; } columns = ValidateNumberString(dialog.columnsInput.value, 1, maxColumns); if (columns == "") { // Set focus to the offending control SetTextfieldFocus(dialog.columnsInput); return false; } // Set attributes: NOTE: These may be empty strings var borderText = TrimString(dialog.borderInput.value); if (borderText) { // Set the other attributes on the table if (ValidateNumberString(borderText, 0, maxPixels)) globalElement.setAttribute("border", borderText); } var maxLimit; var isPercent = (dialog.widthPixelOrPercentMenulist.selectedIndex == 1); var widthText = TrimString(dialog.widthInput.value); if (widthText.length > 0) { if (isPercent) maxLimit = 100; else // Upper limit when using pixels maxLimit = maxPixels; widthText = ValidateNumberString(widthText, 1, maxLimit); if (widthText.length == 0) return false; if (isPercent) widthText += "%"; globalElement.setAttribute("width", widthText); } return true; } function onOK() { if (ValidateData()) { editorShell.BeginBatchChanges(); editorShell.CloneAttributes(tableElement, globalElement); // Create necessary rows and cells for the table // AFTER BUG 30378 IS FIXED, DON'T INSERT TBODY! 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 tabl, 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; }