<?xml version="1.0"?> | |
<!-- | |
Copyright 2004, 2005 The Apache Software Foundation | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
--> | |
<!DOCTYPE script PUBLIC | |
"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN" | |
"http://tapestry.apache.org/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/contrib/palette/PaletteFunctions.js"/> | |
<input-symbol key="palette" required="yes"/> | |
<input-symbol key="selectImage" required="yes"/> | |
<input-symbol key="selectDisabledImage" required="yes"/> | |
<input-symbol key="deselectImage" required="yes"/> | |
<input-symbol key="deselectDisabledImage" required="yes"/> | |
<input-symbol key="upImage" /> | |
<input-symbol key="upDisabledImage" /> | |
<input-symbol key="downImage" /> | |
<input-symbol key="downDisabledImage" /> | |
<set key="formName" expression="palette.form.name"/> | |
<set key="name" expression="palette.clientId"/> | |
<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"> | |
tapestry.update_${baseName} | |
</let> | |
<let key="selectFunctionName"> | |
tapestry.select_${baseName} | |
</let> | |
<let key="selectOnClickScript"> | |
javascript:${selectFunctionName}(); | |
</let> | |
<let key="deselectFunctionName"> | |
tapestry.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"> | |
dojo.byId('${formName}') | |
</let> | |
<let key="selectedPath"> | |
dojo.byId('${palette.clientId}') | |
</let> | |
<let key="selectedChangeFunctionName"> | |
tapestry.onChange_${baseName}_selected | |
</let> | |
<let key="availablePath"> | |
dojo.byId("${availableName}") | |
</let> | |
<let key="availableChangeFunctionName"> | |
tapestry.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"> | |
tapestry.moveup_${baseName} | |
</let> | |
<let key="upOnClickScript"> | |
javascript:${moveUpFunctionName}(); | |
</let> | |
<let key="moveDownFunctionName"> | |
tapestry.movedown_${baseName} | |
</let> | |
<let key="downOnClickScript"> | |
javascript:${moveDownFunctionName}(); | |
</let> | |
<let key="submitListenerFunction"> | |
${baseName}FormSubmitted | |
</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> | |
${updateFunctionName}=function() { | |
var disabled = ${availablePath}.selectedIndex < 0; | |
${selectDisabled} = disabled; | |
if (document.images) { | |
${selectImagePath}.src = | |
disabled ? ${selectDisabledImage} | |
: ${selectImage}; | |
} | |
var selected = ${selectedPath}; | |
var index = selected.selectedIndex; | |
disabled = index < 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 < 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> | |
} | |
${selectFunctionName}=function() { | |
if (${selectDisabled}) { return; } | |
var source = ${availablePath}; | |
var target = ${selectedPath}; | |
tapestry.palette.transferSelections(source,target); | |
<if expression="sortLabel"> | |
tapestry.palette.sortByLabel(target); | |
</if> | |
<if expression="sortValue"> | |
tapestry.palette.sortByValue(target); | |
</if> | |
${updateFunctionName}(); | |
} | |
${deselectFunctionName}=function(){ | |
if (${deselectDisabled}) { return; } | |
var source = ${selectedPath}; | |
var target = ${availablePath}; | |
tapestry.palette.transferSelections(source,target); | |
<if expression="sortLabel"> | |
tapestry.palette.sortByLabel(target); | |
</if> | |
<if expression="sortValue"> | |
tapestry.palette.sortByValue(target); | |
</if> | |
${updateFunctionName}(); | |
} | |
tapestry.${formSubmitFunctionName}=function(event){ | |
tapestry.palette.clearSelections(${availablePath}); | |
tapestry.palette.selectAll(${selectedPath}); | |
} | |
<if expression="sortUser"> | |
${moveUpFunctionName}=function(){ | |
if (${upDisabled}) { return; } | |
var element = ${selectedPath}; | |
var options = element.options; | |
tapestry.palette.swapOptions(options, element.selectedIndex, element.selectedIndex - 1); | |
${updateFunctionName}(); | |
} | |
${moveDownFunctionName}=function(){ | |
if (${downDisabled}) { return; } | |
var element = ${selectedPath}; | |
var options = element.options; | |
tapestry.palette.swapOptions(options, element.selectedIndex, element.selectedIndex + 1); | |
${updateFunctionName}(); | |
} | |
</if> | |
${selectedChangeFunctionName}=function(){ | |
tapestry.palette.clearSelections(${availablePath}); | |
${updateFunctionName}(); | |
} | |
${availableChangeFunctionName}=function(){ | |
tapestry.palette.clearSelections(${selectedPath}); | |
${updateFunctionName}(); | |
} | |
tapestry.${submitListenerFunction}=function(form){ | |
form = dojo.byId(form); | |
if(!form){return;} | |
var id=form.getAttribute("id"); | |
if ("${formName}" != id){return;} | |
tapestry.${formSubmitFunctionName}(); | |
} | |
</body> | |
<initialization> | |
${selectedPath}.onchange = ${selectedChangeFunctionName}; | |
${selectedPath}.ondblclick = ${deselectFunctionName}; | |
${availablePath}.onchange = ${availableChangeFunctionName}; | |
${availablePath}.ondblclick = ${selectFunctionName}; | |
${updateFunctionName}(); | |
dojo.event.connect(dojo.byId("${formName}"), "onrefresh" , tapestry, "${formSubmitFunctionName}"); | |
dojo.event.connect(dojo.byId("${formName}"), "onsubmit" , tapestry, "${formSubmitFunctionName}"); | |
dojo.event.connect("before", tapestry.form, "submit", tapestry, "${submitListenerFunction}"); | |
dojo.event.connect("before", tapestry.form, "refresh", tapestry, "${submitListenerFunction}"); | |
dojo.event.connect("before", tapestry.form, "cancel", tapestry, "${submitListenerFunction}"); | |
dojo.event.connect("before", tapestry.form, "submitAsync", tapestry, "${submitListenerFunction}"); | |
</initialization> | |
</script> |