/* ***** 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): * Daniel Glazman (glazman@netscape.com) * Charles Manske (cmanske@netscape.com) * * 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 ***** */ //Cancel() is in EdDialogCommon.js var insertNew = true; var tagname = "TAG NAME" var gColor = ""; var LastPickedColor = ""; var ColorType = "Text"; var TextType = false; var HighlightType = false; var TableOrCell = false; var LastPickedIsDefault = true; var NoDefault = false; var gColorObj; // dialog initialization code function Startup() { if (!window.arguments[1]) { dump("EdColorPicker: Missing color object param\n"); return; } // window.arguments[1] is object to get initial values and return color data gColorObj = window.arguments[1]; gColorObj.Cancel = false; gDialog.ColorPicker = document.getElementById("ColorPicker"); gDialog.ColorInput = document.getElementById("ColorInput"); gDialog.LastPickedButton = document.getElementById("LastPickedButton"); gDialog.LastPickedColor = document.getElementById("LastPickedColor"); gDialog.CellOrTableGroup = document.getElementById("CellOrTableGroup"); gDialog.TableRadio = document.getElementById("TableRadio"); gDialog.CellRadio = document.getElementById("CellRadio"); gDialog.ColorSwatch = document.getElementById("ColorPickerSwatch"); gDialog.Ok = document.documentElement.getButton("accept"); // The type of color we are setting: // text: Text, Link, ActiveLink, VisitedLink, // or background: Page, Table, or Cell if (gColorObj.Type) { ColorType = gColorObj.Type; // Get string for dialog title from passed-in type // (note constraint on editor.properties string name) var prefs = GetPrefs(); var IsCSSPrefChecked = prefs.getBoolPref("editor.use_css"); if (GetCurrentEditor()) { if (ColorType == "Page" && IsCSSPrefChecked && IsHTMLEditor()) document.title = GetString("BlockColor"); else document.title = GetString(ColorType + "Color"); } } gDialog.ColorInput.value = ""; var tmpColor; var haveTableRadio = false; switch (ColorType) { case "Page": tmpColor = gColorObj.PageColor; if (tmpColor && tmpColor.toLowerCase() != "window") gColor = tmpColor; break; case "Table": if (gColorObj.TableColor) gColor = gColorObj.TableColor; break; case "Cell": if (gColorObj.CellColor) gColor = gColorObj.CellColor; break; case "TableOrCell": TableOrCell = true; document.getElementById("TableOrCellGroup").collapsed = false; haveTableRadio = true; if (gColorObj.SelectedType == "Cell") { gColor = gColorObj.CellColor; gDialog.CellOrTableGroup.selectedItem = gDialog.CellRadio; gDialog.CellRadio.focus(); } else { gColor = gColorObj.TableColor; gDialog.CellOrTableGroup.selectedItem = gDialog.TableRadio; gDialog.TableRadio.focus(); } break; case "Highlight": HighlightType = true; if (gColorObj.HighlightColor) gColor = gColorObj.HighlightColor; break; default: // Any other type will change some kind of text, TextType = true; tmpColor = gColorObj.TextColor; if (tmpColor && tmpColor.toLowerCase() != "windowtext") gColor = gColorObj.TextColor; break; } // Set initial color in input field and in the colorpicker SetCurrentColor(gColor); gDialog.ColorPicker.initColor(gColor); // Use last-picked colors passed in, or those persistent on dialog if (TextType) { if ( !("LastTextColor" in gColorObj) || !gColorObj.LastTextColor) gColorObj.LastTextColor = gDialog.LastPickedColor.getAttribute("LastTextColor"); LastPickedColor = gColorObj.LastTextColor; } else if (HighlightType) { if ( !("LastHighlightColor" in gColorObj) || !gColorObj.LastHighlightColor) gColorObj.LastHighlightColor = gDialog.LastPickedColor.getAttribute("LastHighlightColor"); LastPickedColor = gColorObj.LastHighlightColor; } else { if ( !("LastBackgroundColor" in gColorObj) || !gColorObj.LastBackgroundColor) gColorObj.LastBackgroundColor = gDialog.LastPickedColor.getAttribute("LastBackgroundColor"); LastPickedColor = gColorObj.LastBackgroundColor; } gDialog.LastPickedColor.setAttribute("style","background-color: "+LastPickedColor); // Set method to detect clicking on OK button // so we don't get fooled by changing "default" behavior gDialog.Ok.setAttribute("onclick", "SetDefaultToOk()"); // Make the "Last-picked" the default button // until the user selects a color gDialog.Ok.removeAttribute("default"); gDialog.LastPickedButton.setAttribute("default","true"); // Caller can prevent user from submitting an empty, i.e., default color NoDefault = gColorObj.NoDefault; if (NoDefault) { // Hide the "Default button -- user must pick a color document.getElementById("DefaultColorButton").collapsed = true; } // Set focus to colorpicker if not set to table radio buttons above if (!haveTableRadio) gDialog.ColorPicker.focus(); SetWindowLocation(); } function ChangePalette(palette) { gDialog.ColorPicker.setAttribute("palettename", palette); window.sizeToContent(); } function SelectColor() { var color = gDialog.ColorPicker.color; if (color) SetCurrentColor(color); } function RemoveColor() { SetCurrentColor(""); gDialog.ColorInput.focus(); SetDefaultToOk(); } function SelectColorByKeypress(aEvent) { if (aEvent.charCode == aEvent.DOM_VK_SPACE) { SelectColor(); SetDefaultToOk(); } } function SelectLastPickedColor() { SetCurrentColor(LastPickedColor); if ( onAccept() ) //window.close(); return true; return false; } function SetCurrentColor(color) { // TODO: Validate color? if(!color) color = ""; gColor = TrimString(color).toLowerCase(); if (gColor == "mixed") gColor = ""; gDialog.ColorInput.value = gColor; SetColorSwatch(); } function SetColorSwatch() { // TODO: DON'T ALLOW SPACES? var color = TrimString(gDialog.ColorInput.value); if (color) { gDialog.ColorSwatch.setAttribute("style",("background-color:"+color)); gDialog.ColorSwatch.removeAttribute("default"); } else { gDialog.ColorSwatch.setAttribute("style",("background-color:inherit")); gDialog.ColorSwatch.setAttribute("default","true"); } } function SetDefaultToOk() { gDialog.LastPickedButton.removeAttribute("default"); gDialog.Ok.setAttribute("default","true"); LastPickedIsDefault = false; } function ValidateData() { if (LastPickedIsDefault) gColor = LastPickedColor; else gColor = gDialog.ColorInput.value; gColor = TrimString(gColor).toLowerCase(); // TODO: Validate the color string! if (NoDefault && !gColor) { ShowInputErrorMessage(GetString("NoColorError")); SetTextboxFocus(gDialog.ColorInput); return false; } return true; } function onAccept() { if (!ValidateData()) return false; // Set return values and save in persistent color attributes if (TextType) { gColorObj.TextColor = gColor; if (gColor.length > 0) { gDialog.LastPickedColor.setAttribute("LastTextColor", gColor); gColorObj.LastTextColor = gColor; } } else if (HighlightType) { gColorObj.HighlightColor = gColor; if (gColor.length > 0) { gDialog.LastPickedColor.setAttribute("LastHighlightColor", gColor); gColorObj.LastHighlightColor = gColor; } } else { gColorObj.BackgroundColor = gColor; if (gColor.length > 0) { gDialog.LastPickedColor.setAttribute("LastBackgroundColor", gColor); gColorObj.LastBackgroundColor = gColor; } // If table or cell requested, tell caller which element to set on if (TableOrCell && gDialog.TableRadio.selected) gColorObj.Type = "Table"; } SaveWindowLocation(); return true; // do close the window } function onCancelColor() { // Tells caller that user canceled gColorObj.Cancel = true; SaveWindowLocation(); return true; }