blob: 497353613aaad0a7cfee1715e59216cbee53af6e [file] [log] [blame]
// $Id: PaletteFunctions.js,v 1.3 2002/05/03 20:03:06 hship Exp $
// Requires: /org/apache/tapestry/html/PracticalBrowserSniffer.js
function palette_clear_selections(element)
{
var options = element.options;
for (var i = 0; i < options.length; i++)
options[i].selected = false;
}
function palette_select_all(element)
{
var options = element.options;
for (var i = 0; i < options.length; i++)
options[i].selected = true;
}
function palette_sort(element, sorter)
{
var options = element.options;
var list = new Array();
var index = 0;
var isNavigator = (navigator.family == "nn4" || navigator.family == "gecko");
while (options.length > 0)
{
var option = options[0];
if (isNavigator)
{
// Can't transfer option in nn4, nn6
if (navigator.family == 'gecko')
var copy = document.createElement("OPTION");
else
var copy = new Option(option.text, option.value);
copy.text = option.text;
copy.value = option.value;
copy.selected = options.selected;
list[index++] = copy;
}
else
list[index++] = option;
options[0] = null;
}
list.sort(sorter);
for (var i = 0; i < list.length; i++)
{
options[i] = list[i];
}
}
function palette_label_sorter(a, b)
{
var a_text = a.text;
var b_text = b.text;
if (a_text == b_text)
return 0;
if (a_text < b.text)
return -1;
return 1;
}
function palette_sort_by_label(element)
{
palette_sort(element, palette_label_sorter);
}
function palette_value_sorter(a, b)
{
var a_value = a.value;
var b_value = b.value;
if (a_value == b_value)
return 0;
if (a_value < b_value)
return -1;
return 1;
}
function palette_sort_by_value(element)
{
palette_sort(element, palette_value_sorter);
}
function palette_transfer_selections(source, target)
{
var sourceOptions = source.options;
var targetOptions = target.options;
var targetIndex = target.selectedIndex;
var offset = 0;
palette_clear_selections(target);
for (var i = 0; i < sourceOptions.length; i++)
{
var option = sourceOptions[i];
if (option.selected)
{
if (navigator.family == 'nn4' || navigator.family == 'gecko')
{
// Can't share options between selects in NN4
var newOption = new Option(option.text, option.value, false, true);
sourceOptions[i] = null;
// Always added to end in NN4
targetOptions[targetOptions.length] = newOption;
}
else
{
sourceOptions.remove(i);
if (targetIndex < 0)
targetOptions.add(option);
else
targetOptions.add(option, targetIndex + offset++);
}
i--;
}
}
}
function palette_swap_options(options, selectedIndex, targetIndex)
{
var option = options[selectedIndex];
// It's very hard to reorder options in NN4
if (navigator.family == 'nn4' || navigator.family == 'gecko')
{
var swap = options[targetIndex];
var hold = swap.text;
swap.text = option.text;
option.text = hold;
hold = swap.value;
swap.value = option.value;
option.value = hold;
hold = swap.selected;
swap.selected = option.selected;
option.selected = hold;
// defaultSelected isn't relevant to the Palette
return;
}
// Sensible browsers ...
options.remove(selectedIndex);
options.add(option, targetIndex);
}