blob: 848346cf9b6cd3241b83e1ab78e8033609580e68 [file] [log] [blame]
<?xml version="1.0"?>
<!-- $Id$ -->
<!DOCTYPE script PUBLIC
"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
<script>
<!--
input symbols:
palette - the Palette instance
selectImage - reference to the select image
selectDisabledImage - referece to the disabled select image
deselectImage - reference to the deselect image
deselectDisabledImage - reference to the disbled deselect image
upImage - reference to the move up image
upDisabledImage - reference to the disabled move up image
downImage - reference to the move down image
downDisabledImage - reference to the disabled move down image
Note: "reference" means the result of Body.getPreloadedImageReference(). The
up and down images are only needed if user sorting is enabled.
output symbols:
formSubmitFunctionName - name of a function to be executed when the form submits
availableName - the name of the available element
selectImageName - the name to use for the select image (inside the select link)
selectOnClickScript - the script to assign to the select link's onclick attribute
deselectOnClickScript - the script to assign to the deselect link's onclick attribute
deselectImageName - the name to use for the deselect image (inside the deselect link)
upImageName - the name of the up image (inside the up link)
downImageName the name of the move down image (inside the down link)
upOnClickScript - the script to assign to the up link's onclick attribute
downOnClickScript - the script to assign to the down link's onclick attribute
-->
<include-script resource-path="/org/apache/tapestry/html/PracticalBrowserSniffer.js"/>
<include-script resource-path="/org/apache/tapestry/contrib/palette/PaletteFunctions.js"/>
<input-symbol key="palette" class="org.apache.tapestry.contrib.palette.Palette" required="yes"/>
<input-symbol key="selectImage" class="java.lang.String" required="yes"/>
<input-symbol key="selectDisabledImage" class="java.lang.String" required="yes"/>
<input-symbol key="deselectImage" class="java.lang.String" required="yes"/>
<input-symbol key="deselectDisabledImage" class="java.lang.String" required="yes"/>
<input-symbol key="upImage" class="java.lang.String"/>
<input-symbol key="upDisabledImage" class="java.lang.String"/>
<input-symbol key="downImage" class="java.lang.String"/>
<input-symbol key="downDisabledImage" class="java.lang.String"/>
<set key="formName" expression="palette.form.name"/>
<set key="name" expression="palette.name"/>
<set key="sortLabel" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@LABEL"/>
<set key="sortValue" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@VALUE"/>
<set key="sortUser" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@USER"/>
<!-- baseName - base name from which other names are generated -->
<let key="baseName" unique="yes">
${name}
</let>
<let key="buttons">
${baseName}$buttons
</let>
<let key="selectDisabled">
${buttons}.selectDisabled
</let>
<let key="deselectDisabled">
${buttons}.deselectDisabled
</let>
<let key="upDisabled">
${buttons}.upDisabled
</let>
<let key="downDisabled">
${buttons}.downDisabled
</let>
<let key="availableName">
${name}$avail
</let>
<let key="updateFunctionName">
update_${baseName}
</let>
<let key="selectFunctionName">
select_${baseName}
</let>
<let key="selectOnClickScript">
javascript:${selectFunctionName}();
</let>
<let key="deselectFunctionName">
deselect_${baseName}
</let>
<let key="deselectOnClickScript">
javascript:${deselectFunctionName}();
</let>
<let key="formSubmitFunctionName">
onsubmit_${baseName}
</let>
<let key="selectImageName">
${baseName}$selectImage
</let>
<let key="selectImagePath">
document.${selectImageName}
</let>
<let key="deselectImageName">
${baseName}$deselectImage
</let>
<let key="deselectImagePath">
document.${deselectImageName}
</let>
<let key="formPath">
document.${formName}
</let>
<let key="selectedPath">
${formPath}.${name}
</let>
<let key="selectedChangeFunctionName">
onChange_${baseName}_selected
</let>
<let key="availablePath">
${formPath}.${availableName}
</let>
<let key="availableChangeFunctionName">
onChange_${baseName}_available
</let>
<let key="upImageName">
${baseName}$upimage
</let>
<let key="upImagePath">
document.${upImageName}
</let>
<let key="downImageName">
${baseName}$downimage
</let>
<let key="downImagePath">
document.${downImageName}
</let>
<let key="moveUpFunctionName">
moveup_${baseName}
</let>
<let key="upOnClickScript">
javascript:${moveUpFunctionName}();
</let>
<let key="moveDownFunctionName">
movedown_${baseName}
</let>
<let key="downOnClickScript">
javascript:${moveDownFunctionName}();
</let>
<body>
<!-- A variable that is used to track which of the buttons are enabled
or disabled. All of the buttons are disabled until the page finishes
loading, at which point the update function will determine which
can be used. -->
var ${buttons} = new Object();
${selectDisabled} = true;
${deselectDisabled} = true;
<if expression="sortUser">
${upDisabled} = true;
${downDisabled} = true;
</if>
function ${updateFunctionName}()
{
var disabled = ${availablePath}.selectedIndex &lt; 0;
${selectDisabled} = disabled;
if (document.images)
${selectImagePath}.src =
disabled ? ${selectDisabledImage}
: ${selectImage};
var selected = ${selectedPath};
var index = selected.selectedIndex;
disabled = index &lt; 0;
${deselectDisabled} = disabled;
if (document.images)
${deselectImagePath}.src =
disabled ? ${deselectDisabledImage}
: ${deselectImage};
<if expression="sortUser">
var upImage = ${upImagePath};
var downImage = ${downImagePath};
${upDisabled} = true;
${downDisabled} = true;
if (document.images)
{
upImage.src = ${upDisabledImage};
downImage.src = ${downDisabledImage};
}
<!-- If there's no selection in the "selected" column, then leave
both buttons disabled. -->
if (disabled)
return;
<!-- Search for a second selected item -->
for (var i = index + 1; i &lt; selected.options.length; i++)
{
<!-- Found a second selected option, so leave buttons disabled. -->
if (selected.options[i].selected)
return;
}
${upDisabled} = (index == 0);
${downDisabled} = (index == selected.options.length - 1);
if (document.images)
{
if (!${upDisabled})
upImage.src = ${upImage};
if (!${downDisabled})
downImage.src = ${downImage};
}
</if>
}
function ${selectFunctionName}()
{
if (${selectDisabled})
return;
var source = ${availablePath};
var target = ${selectedPath};
palette_transfer_selections(source, target);
<if expression="sortLabel">
palette_sort_by_label(target);
</if>
<if expression="sortValue">
palette_sort_by_value(target);
</if>
${updateFunctionName}();
}
function ${deselectFunctionName}()
{
if (${deselectDisabled})
return;
var source = ${selectedPath};
var target = ${availablePath};
palette_transfer_selections(source, target);
<if expression="sortLabel">
palette_sort_by_label(target);
</if>
<if expression="sortValue">
palette_sort_by_value(target);
</if>
${updateFunctionName}();
}
function ${formSubmitFunctionName}()
{
palette_clear_selections(${availablePath});
palette_select_all(${selectedPath});
return true;
}
<if expression="sortUser">
function ${moveUpFunctionName}()
{
if (${upDisabled})
return;
var element = ${selectedPath};
var options = element.options;
palette_swap_options(options, element.selectedIndex, element.selectedIndex - 1);
${updateFunctionName}();
}
function ${moveDownFunctionName}()
{
if (${downDisabled})
return;
var element = ${selectedPath};
var options = element.options;
palette_swap_options(options, element.selectedIndex, element.selectedIndex + 1);
${updateFunctionName}();
}
</if>
function ${selectedChangeFunctionName}()
{
palette_clear_selections(${availablePath});
${updateFunctionName}();
}
function ${availableChangeFunctionName}()
{
palette_clear_selections(${selectedPath});
${updateFunctionName}();
}
</body>
<initialization>
${selectedPath}.onchange = ${selectedChangeFunctionName};
${selectedPath}.ondblclick = ${deselectFunctionName};
${availablePath}.onchange = ${availableChangeFunctionName};
${availablePath}.ondblclick = ${selectFunctionName};
</initialization>
</script>