//==============================================================================
// Copyright 2002-2024 Moraware, Inc.
//
// Purpose: Support for a dynamic colour picker.
//
//==============================================================================
/* eslint no-unused-vars: "off", eqeqeq: "off", no-useless-assignment: "off",
no-global-assign: "off" */
/*global
g_objPicker
g_objPickerRelativePos
g_showPickerTimer
hidePicker
getContrastingColor
jsLintSafeEval
doPositionPicker
asyncShowPicker
*/
var usePopup = false,
oPopup = null,
// Define the named colours
colourNameArray = [
['Green', '#008000'],
['Lime', '#00FF00'],
['Teal', '#008080'],
['Aqua', '#00FFFF'],
['Cyan', '#00FFFF'],
['Gray', '#808080'],
['Silver', '#C0C0C0'],
['Black', '#000000'],
['White', '#FFFFFF'],
['Purple', '#800080'],
['Fuchsia', '#FF00FF'],
['Red', '#FF0000'],
['Maroon', '#800000'],
['Yellow', '#FFFF00'],
['Orange', '#FFA500'],
['Olive', '#808000'],
['Blue', '#0000FF'],
['Navy', '#000080']
];
// Convert from a numeric representation to a name...
function translateColourCodeToName(colorCode_) {
var i;
for (i = 0 ; i < colourNameArray.length ; ++i) {
if (colourNameArray[i][1].toLowerCase() == colorCode_.toLowerCase()) {
colorCode_ = colourNameArray[i][0];
break;
}
}
return colorCode_;
}
// Convert from a named colour to its numeric representation...
function translateColourNameToCode(colorName_) {
var i;
for (i = 0 ; i < colourNameArray.length ; ++i) {
if (colourNameArray[i][0].toLowerCase() == colorName_.toLowerCase()) {
colorName_ = colourNameArray[i][1];
break;
}
}
return colorName_;
}
function show_palette(str_target, str_color, allowClear_, pickedColorCallbackStr_, pickedColorCallbackParameterStr_) {
var colourName = translateColourCodeToName(str_color),
colourCode = translateColourNameToCode(str_color),
tableWidth = '',
str_buffer,
prefix = '';
if (usePopup) {
tableWidth = " width='100%' height='100%'";
prefix = "parent.";
}
if (!usePopup) {
// Show in div on page
oPopup = document.getElementById('pickerPopUp');
oPopup.hide = hidePicker;
}
// Check if popup opened
if (!oPopup) {
return;
}
// Open the palette table
str_buffer = "
\n";
var redArray = ['White', 'Red', '#ffeeee', '#ffcccc', '#ffaaaa', '#ff8888', '#ff6666', '#ff4444', '#ff2222', '#FF0000', '#ee0000', '#cc0000', '#aa0000', '#8a0000', '#800000', '#660000', '#550000', '#440000', '#330000'],
greenArray = ['White', 'Green', '#eeffee', '#ccffcc', '#aaffaa', '#88ff88', '#66ff66', '#44ff44', '#22ff22', '#00ff00', '#00ee00', '#00cc00', '#00aa00', '#008800', '#008000', '#006600', '#005500', '#004400', '#003300'],
blueArray = ['White', 'Blue', '#eeeeff', '#ccccff', '#aaaaff', '#8888ff', '#6666ff', '#4444ff', '#2222ff', '#0000FF', '#0000ee', '#0000cc', '#0000b0', '#0000a0', '#000088', '#000080', '#000055', '#000044', '#000033'],
yellowArray = ['Black', 'Yellow', '#ffffee', '#ffffcc', '#ffffaa', '#ffff88', '#ffff66', '#ffff44', '#ffff22', '#FFFF00', '#eeee00', '#cccc00', '#aFaF00', '#999900', '#808000', '#666600', '#555500', '#444400', '#333300'],
purpleArray = ['White', 'Purple', '#ffeeff', '#ffccff', '#ffaaff', '#ff88ff', '#ff66ff', '#ff44ff', '#ff22ff', '#ff00ff', '#ee00ee', '#cc00cc', '#aa00aa', '#8f008f', '#800080', '#680068', '#550055', '#440044', '#330033'],
orangeArray = ['Black', 'Orange', '#ffddd0', '#ffe0aa', '#ffdd88', '#ffcc77', '#ffbb66', '#ffaa55', '#ffaa44', '#FFA500', '#ff8833', '#ff7722', '#ff6622', '#ee5522', '#dd4411', '#cc3300', '#aa2200', '#882200', '#662200'],
aquaArray = ['Black', 'Aqua', '#eeffff', '#ccffff', '#aaffff', '#88ffff', '#66ffff', '#00ffff', '#00eeee', '#00dddd', '#00cccc', '#00bbbb', '#00aaaa', '#009999', '#008080', '#006666', '#005555', '#004444', '#003333'],
grayArray = ['White', 'Gray', '#ffffff', '#eeeeee', '#d8d8d8', '#c0c0c0', '#bbbbbb', '#aaaaaa', '#a0a0a0', '#909090', '#808080', '#777777', '#666666', '#555555', '#444444', '#333333', '#222222', '#111111', '#000000'],
arrColourArrays = [
redArray,
orangeArray,
yellowArray,
greenArray,
blueArray,
aquaArray,
purpleArray,
grayArray
],
tmpOnclick;
if (!pickedColorCallbackParameterStr_) {
pickedColorCallbackParameterStr_ = '';
}
for (var j = 0; j < 8; j++) {
str_buffer +=
"\n";
var theArray = arrColourArrays[j],
str_inner = '',
borderstyle = '',
theColourName,
strAdditionalV2Class,
cellText;
for (var i = 1; i < 19; i++) {
strAdditionalV2Class = '';
if ((theArray[i].toLowerCase() == colourName.toLowerCase()) || (theArray[i].toLowerCase() == colourCode.toLowerCase())) {
borderstyle = "border-color:" + getContrastingColor(translateColourNameToCode(theArray[i])) + ";";
strAdditionalV2Class = ' selected';
} else {
borderstyle = "border-color:" + theArray[i] + ";";
}
if (i == 1) {
theColourName = theArray[i];
cellText = theArray[i];
} else {
theColourName = translateColourCodeToName(theArray[i]);
cellText = " ";
}
if (pickedColorCallbackStr_) {
tmpOnclick = prefix + pickedColorCallbackStr_ + "(unescape('" + escape(pickedColorCallbackParameterStr_) + "'), '" + theColourName + "')";
} else {
tmpOnclick = prefix + str_target + ".value='" + theColourName + "'";
}
str_inner +=
"| " +
cellText +
" | \n";
}
str_buffer +=
str_inner +
"
\n";
}
if (allowClear_) {
if (pickedColorCallbackStr_) {
tmpOnclick = prefix + pickedColorCallbackStr_ + "(unescape('" + escape(pickedColorCallbackParameterStr_) + "'), '')";
} else {
tmpOnclick = prefix + str_target + ".value=''";
}
str_buffer +=
"" +
"| " +
"Clear" +
" | " +
"
";
}
// Close the palette table.
str_buffer += "
\n";
if (usePopup) {
var oPopBody = oPopup.document.body;
oPopBody.style.backgroundColor = "#000000";
oPopBody.style.border = "solid black 1px";
oPopBody.innerHTML = str_buffer;
oPopup.show(0, jsLintSafeEval(str_target).offsetHeight, 350, 200, jsLintSafeEval(str_target));
} else {
oPopup.style.backgroundColor = "#000000";
oPopup.style.border = "solid black 1px";
oPopup.innerHTML = str_buffer;
g_objPickerRelativePos = jsLintSafeEval(str_target);
g_objPicker = null;
doPositionPicker();
g_showPickerTimer = setTimeout(asyncShowPicker, 1);
}
}