//============================================================================== // 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); } }