mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 08:35:26 +00:00
302 lines
9.7 KiB
JavaScript
302 lines
9.7 KiB
JavaScript
// This is mostly a modified version of code in EdColorProps.xul
|
|
// TODO: Factor out common code to reduce code size
|
|
// and make a new utility.js to eliminate duplication
|
|
// in editor.js and EdDialogCommon.js
|
|
|
|
// Initialize in case we can't get them from prefs???
|
|
var defaultTextColor="#000000";
|
|
var defaultLinkColor="#000099";
|
|
var defaultActiveColor="#000099";
|
|
var defaultVisitedColor="#990099";
|
|
var defaultBackgroundColor="#FFFFFF";
|
|
|
|
var customTextColor;
|
|
var customLinkColor;
|
|
var customActiveColor;
|
|
var customVisitedColor;
|
|
var customBackgroundColor;
|
|
var previewBGColor;
|
|
var backgroundImage = "";
|
|
|
|
// Strings we use often
|
|
var styleStr = "style";
|
|
var textStr = "text";
|
|
var linkStr = "link";
|
|
var vlinkStr = "vlink";
|
|
var alinkStr = "alink";
|
|
var bgcolorStr = "bgcolor";
|
|
var backgroundStr = "background";
|
|
var colorStyle = "color: ";
|
|
var backColorStyle = "background-color: ";
|
|
var backImageStyle = "; background-image: url(";
|
|
|
|
var browserColors;
|
|
var dialog;
|
|
|
|
function Startup()
|
|
{
|
|
dialog = new Object;
|
|
if (!dialog)
|
|
return false;
|
|
|
|
dialog.ColorPreview = document.getElementById("ColorPreview");
|
|
dialog.NormalText = document.getElementById("NormalText");
|
|
dialog.LinkText = document.getElementById("LinkText");
|
|
dialog.ActiveLinkText = document.getElementById("ActiveLinkText");
|
|
dialog.VisitedLinkText = document.getElementById("VisitedLinkText");
|
|
dialog.DefaultColorsRadio = document.getElementById("DefaultColorsRadio");
|
|
dialog.CustomColorsRadio = document.getElementById("CustomColorsRadio");
|
|
dialog.BackgroundImageInput = document.getElementById("BackgroundImageInput");
|
|
|
|
// The data elements that hold the pref values
|
|
dialog.NormalData = document.getElementById("textData");
|
|
dialog.LinkData = document.getElementById("linkData");
|
|
dialog.ActiveLinkData = document.getElementById("aLinkData");
|
|
dialog.VisitedLinkData = document.getElementById("fLinkData");
|
|
dialog.BackgroundColorData = document.getElementById("backgroundColorData");
|
|
dialog.BackgroundImageData = document.getElementById("backgroundImageData");
|
|
|
|
browserColors = GetDefaultBrowserColors();
|
|
|
|
// Use author's browser pref colors passed into dialog
|
|
defaultTextColor = browserColors.TextColor;
|
|
defaultLinkColor = browserColors.LinkColor;
|
|
// Note: Browser doesn't store a value for ActiveLinkColor
|
|
defaultActiveColor = defaultLinkColor;
|
|
defaultVisitedColor = browserColors.VisitedLinkColor;
|
|
defaultBackgroundColor= browserColors.BackgroundColor;
|
|
|
|
// Get the colors and image set by prefs init code
|
|
customTextColor = dialog.NormalData.getAttribute("value");
|
|
customLinkColor = dialog.LinkData.getAttribute("value");
|
|
customActiveColor = dialog.ActiveLinkData.getAttribute("value");
|
|
customVisitedColor = dialog.VisitedLinkData.getAttribute("value");
|
|
customBackgroundColor = dialog.BackgroundColorData.getAttribute("value");
|
|
backgroundImage = dialog.BackgroundImageData.getAttribute("value");
|
|
if (backgroundImage)
|
|
dialog.BackgroundImageInput.value = backgroundImage;
|
|
|
|
// "value" attribute value is a string conversion of boolean!
|
|
if( document.getElementById( "useCustomColors" ).value == "true" )
|
|
UseCustomColors();
|
|
else
|
|
UseDefaultColors();
|
|
|
|
return true;
|
|
}
|
|
|
|
function GetColorAndUpdate(ColorWellID)
|
|
{
|
|
// Only allow selecting when in custom mode
|
|
if (!dialog.CustomColorsRadio.checked) return;
|
|
|
|
var colorObj = new Object;
|
|
var colorWell = document.getElementById(ColorWellID);
|
|
if (!colorWell) return;
|
|
|
|
// Don't allow a blank color, i.e., using the "default"
|
|
colorObj.NoDefault = true;
|
|
|
|
switch( ColorWellID )
|
|
{
|
|
case "textCW":
|
|
colorObj.Type = "Text";
|
|
colorObj.TextColor = customTextColor;
|
|
break;
|
|
case "linkCW":
|
|
colorObj.Type = "Link";
|
|
colorObj.TextColor = customLinkColor;
|
|
break;
|
|
case "activeCW":
|
|
colorObj.Type = "ActiveLink";
|
|
colorObj.TextColor = customActiveColor;
|
|
break;
|
|
case "visitedCW":
|
|
colorObj.Type = "VisitedLink";
|
|
colorObj.TextColor = customVisitedColor;
|
|
break;
|
|
case "backgroundCW":
|
|
colorObj.Type = "Page";
|
|
colorObj.PageColor = customBackgroundColor;
|
|
break;
|
|
}
|
|
|
|
window.openDialog("chrome://editor/content/EdColorPicker.xul", "_blank", "chrome,close,titlebar,modal", "", colorObj);
|
|
|
|
// User canceled the dialog
|
|
if (colorObj.Cancel)
|
|
return;
|
|
|
|
var color = "";
|
|
switch( ColorWellID )
|
|
{
|
|
case "textCW":
|
|
color = customTextColor = colorObj.TextColor;
|
|
dialog.NormalData.setAttribute("value", color);
|
|
break;
|
|
case "linkCW":
|
|
color = customLinkColor = colorObj.TextColor;
|
|
dialog.LinkData.setAttribute("value", color);
|
|
break;
|
|
case "activeCW":
|
|
color = customActiveColor = colorObj.TextColor;
|
|
dialog.ActiveLinkData.setAttribute("value", color);
|
|
break;
|
|
case "visitedCW":
|
|
color = customVisitedColor = colorObj.TextColor;
|
|
dialog.VisitedLinkData.setAttribute("value", color);
|
|
break;
|
|
case "backgroundCW":
|
|
color = customBackgroundColor = colorObj.BackgroundColor;
|
|
dialog.BackgroundColorData.setAttribute("value", color);
|
|
break;
|
|
}
|
|
setColorWell(ColorWellID, color);
|
|
SetColorPreview(ColorWellID, color);
|
|
}
|
|
|
|
function SetColorPreview(ColorWellID, color)
|
|
{
|
|
switch( ColorWellID )
|
|
{
|
|
case "textCW":
|
|
dialog.NormalText.setAttribute(styleStr,colorStyle+color);
|
|
break;
|
|
case "linkCW":
|
|
dialog.LinkText.setAttribute(styleStr,colorStyle+color);
|
|
break;
|
|
case "activeCW":
|
|
dialog.ActiveLinkText.setAttribute(styleStr,colorStyle+color);
|
|
break;
|
|
case "visitedCW":
|
|
dialog.VisitedLinkText.setAttribute(styleStr,colorStyle+color);
|
|
break;
|
|
case "backgroundCW":
|
|
// Must combine background color and image style values
|
|
var styleValue = backColorStyle+color;
|
|
if (backgroundImage)
|
|
styleValue += ";"+backImageStyle+backgroundImage+");";
|
|
|
|
dialog.ColorPreview.setAttribute(styleStr,styleValue);
|
|
previewBGColor = color;
|
|
break;
|
|
}
|
|
}
|
|
|
|
function UseCustomColors()
|
|
{
|
|
SetElementEnabledById("TextButton", true);
|
|
SetElementEnabledById("LinkButton", true);
|
|
SetElementEnabledById("ActiveLinkButton", true);
|
|
SetElementEnabledById("VisitedLinkButton", true);
|
|
SetElementEnabledById("BackgroundButton", true);
|
|
SetElementEnabledById("Text", true);
|
|
SetElementEnabledById("Link", true);
|
|
SetElementEnabledById("Active", true);
|
|
SetElementEnabledById("Visited", true);
|
|
SetElementEnabledById("Background", true);
|
|
|
|
SetColorPreview("textCW", customTextColor);
|
|
SetColorPreview("linkCW", customLinkColor);
|
|
SetColorPreview("activeCW", customActiveColor);
|
|
SetColorPreview("visitedCW", customVisitedColor);
|
|
SetColorPreview("backgroundCW", customBackgroundColor);
|
|
|
|
setColorWell("textCW", customTextColor);
|
|
setColorWell("linkCW", customLinkColor);
|
|
setColorWell("activeCW", customActiveColor);
|
|
setColorWell("visitedCW", customVisitedColor);
|
|
setColorWell("backgroundCW", customBackgroundColor);
|
|
|
|
dialog.NormalData.setAttribute("value", customTextColor);
|
|
dialog.LinkData.setAttribute("value", customLinkColor);
|
|
dialog.ActiveLinkData.setAttribute("value", customActiveColor);
|
|
dialog.VisitedLinkData.setAttribute("value", customVisitedColor);
|
|
dialog.BackgroundColorData.setAttribute("value", customBackgroundColor);
|
|
}
|
|
|
|
function UseDefaultColors()
|
|
{
|
|
SetColorPreview("textCW", defaultTextColor);
|
|
SetColorPreview("linkCW", defaultLinkColor);
|
|
SetColorPreview("activeCW", defaultActiveColor);
|
|
SetColorPreview("visitedCW", defaultVisitedColor);
|
|
SetColorPreview("backgroundCW", defaultBackgroundColor);
|
|
|
|
// Setting to blank color will remove color from buttons,
|
|
setColorWell("textCW", "");
|
|
setColorWell("linkCW", "");
|
|
setColorWell("activeCW", "");
|
|
setColorWell("visitedCW", "");
|
|
setColorWell("backgroundCW", "");
|
|
|
|
// Disable color buttons and labels
|
|
SetElementEnabledById("TextButton", false);
|
|
SetElementEnabledById("LinkButton", false);
|
|
SetElementEnabledById("ActiveLinkButton", false);
|
|
SetElementEnabledById("VisitedLinkButton", false);
|
|
SetElementEnabledById("BackgroundButton", false);
|
|
SetElementEnabledById("Text", false);
|
|
SetElementEnabledById("Link", false);
|
|
SetElementEnabledById("Active", false);
|
|
SetElementEnabledById("Visited", false);
|
|
SetElementEnabledById("Background", false);
|
|
|
|
// Note that we leave custom colors set even if
|
|
// custom colors pref is false (we just ignore the colors)
|
|
}
|
|
|
|
function ChooseImageFile()
|
|
{
|
|
// Get a local image file, converted into URL format
|
|
var fileName = GetLocalFileURL("img");
|
|
if (fileName)
|
|
{
|
|
dialog.BackgroundImageInput.value = fileName;
|
|
ValidateAndPreviewImage(true);
|
|
}
|
|
SetTextboxFocus(dialog.BackgroundImageInput);
|
|
}
|
|
|
|
function ChangeBackgroundImage()
|
|
{
|
|
// Don't show error message for image while user is typing
|
|
ValidateAndPreviewImage(false);
|
|
}
|
|
|
|
function ValidateAndPreviewImage(ShowErrorMessage)
|
|
{
|
|
// First make a string with just background color
|
|
var styleValue = backColorStyle+previewBGColor+";";
|
|
|
|
var image = dialog.BackgroundImageInput.value.trimString();
|
|
if (image)
|
|
{
|
|
if (IsValidImage(image))
|
|
{
|
|
backgroundImage = image;
|
|
// Append image style
|
|
styleValue += backImageStyle+backgroundImage+");";
|
|
}
|
|
else
|
|
{
|
|
backgroundImage = "";
|
|
if (ShowErrorMessage)
|
|
{
|
|
SetTextboxFocus(dialog.BackgroundImageInput);
|
|
// Tell user about bad image
|
|
ShowInputErrorMessage(GetString("MissingImageError"));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
backgroundImage = "";
|
|
|
|
// Set style on preview (removes image if not valid)
|
|
dialog.ColorPreview.setAttribute(styleStr, styleValue);
|
|
|
|
// Set the pref data so pref code saves it
|
|
dialog.BackgroundImageData.setAttribute("value", backgroundImage ? backgroundImage : "");
|
|
}
|
|
|