Author: konstantin.mishin
Date: 2009-07-10 08:29:16 -0400 (Fri, 10 Jul 2009)
New Revision: 14879
Modified:
branches/community/3.3.X/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
branches/community/3.3.X/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx
branches/community/3.3.X/ui/listShuttle/src/test/java/org/richfaces/renderkit/ListShuttleRenderingTest.java
Log:
RF-7493
Modified:
branches/community/3.3.X/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
===================================================================
---
branches/community/3.3.X/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2009-07-10
12:29:10 UTC (rev 14878)
+++
branches/community/3.3.X/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2009-07-10
12:29:16 UTC (rev 14879)
@@ -42,24 +42,30 @@
}
Richfaces.ListShuttle.prototype = {
- initialize: function(targetList, sourceList, clientId, controlIds, switchByClick,
switchByDblClick, events) {
- this.containerId = clientId;
+ HANDLERS : {
+ copy: function (e) { this.copy(); return false; },
+ copyAll: function (e) { this.copyAll(); return false; },
+ remove: function (e) { this.remove(); return false; },
+ removeAll: function (e) { this.removeAll(); return false; }
+ },
+
+ initialize: function(id, options) {
+ options = options || {};
this["rich:destructor"] = "destroy";
- this.container = $(this.containerId);
+ var internalOptions = options.internalOptions || {};
+ this.createLists(id, internalOptions);
+
+ this.container = $(id);
this.container.component = this;
+ this.events = options.events || {};
- this.targetList = targetList;
- this.sourceList = sourceList;
-
- this.events = events;
-
this.isFocused = false;
this.wasMouseDown = false;
this.skipBlurEvent = false;
- this.targetLayoutManager = targetList.layoutManager;
- this.sourceLayoutManager = sourceList.layoutManager;
+ this.targetLayoutManager = this.targetList.layoutManager;
+ this.sourceLayoutManager = this.sourceList.layoutManager;
//for focus\blur custom events
this.container.observe("focus", function (e)
{this.focusOrBlurHandlerLS(e);}.bindAsEventListener(this));
@@ -69,29 +75,29 @@
this.container.observe("click", function (e)
{this.focusOrBlurHandlerLS(e);}.bindAsEventListener(this));
this.container.observe("blur", function (e)
{this.focusOrBlurHandlerLS(e);}.bindAsEventListener(this));
- if (switchByClick == "true") {
+ if (options.switchByClick) {
this.targetList.shuttleTable.observe("click", function(e)
{this.moveItemByClick(window.event||e, this.targetList,
this.sourceList)}.bindAsEventListener(this));
this.sourceList.shuttleTable.observe("click", function(e)
{this.moveItemByClick(window.event||e, this.sourceList,
this.targetList)}.bindAsEventListener(this));
Event.stopObserving(this.sourceList.shuttleTable, "click",
this.sourceList.clckHandler);
Event.stopObserving(this.targetList.shuttleTable, "click",
this.targetList.clckHandler);
} else {
- if (switchByDblClick == "true"){
+ if (options.switchByDblClick){
this.targetList.shuttleTable.observe("dblclick", function(e)
{this.moveItemByClick(window.event||e, this.targetList,
this.sourceList)}.bindAsEventListener(this));
this.sourceList.shuttleTable.observe("dblclick", function(e)
{this.moveItemByClick(window.event||e, this.sourceList,
this.targetList)}.bindAsEventListener(this));
}
- sourceList._onclickHandler = sourceList.onclickHandler;
- sourceList.onclickHandler = function(e) { this.onclickHandler(e, sourceList);
}.bindAsEventListener(this);
- targetList._onclickHandler = targetList.onclickHandler;
- targetList.onclickHandler = function(e) { this.onclickHandler(e, targetList);
}.bindAsEventListener(this);
+ this.sourceList._onclickHandler = this.sourceList.onclickHandler;
+ this.sourceList.onclickHandler = function(e) { this.onclickHandler(e,
this.sourceList); }.bindAsEventListener(this);
+ this.targetList._onclickHandler = this.targetList.onclickHandler;
+ this.targetList.onclickHandler = function(e) { this.onclickHandler(e,
this.targetList); }.bindAsEventListener(this);
}
- sourceList._onkeydownHandler = sourceList.onkeydownHandler;
- sourceList.onkeydownHandler = function(e) { this.onkeydownHandler(e, sourceList);
}.bindAsEventListener(this);
- targetList._onkeydownHandler = targetList.onkeydownHandler;
- targetList.onkeydownHandler = function(e) { this.onkeydownHandler(e, targetList);
}.bindAsEventListener(this);
+ this.sourceList._onkeydownHandler = this.sourceList.onkeydownHandler;
+ this.sourceList.onkeydownHandler = function(e) { this.onkeydownHandler(e,
this.sourceList); }.bindAsEventListener(this);
+ this.targetList._onkeydownHandler = this.targetList.onkeydownHandler;
+ this.targetList.onkeydownHandler = function(e) { this.onkeydownHandler(e,
this.targetList); }.bindAsEventListener(this);
this.controlList = new Array();
- this.initControlList(clientId, controlIds);
+ this.initControlList(id);
for (var e in this.events) {
if (e && this.events[e]) {
@@ -100,23 +106,30 @@
}
},
+ createLists: function(id, options) {
+ this.sourceList = new Richfaces.ListShuttle.Source(id,
Richfaces.ListShuttle.Source.SelectItem, options.classes);
+ options.idFuffix = "tl";
+ options.itemClass = Richfaces.ListShuttle.Target.SelectItem;
+ this.targetList = new Richfaces.ListShuttle.Target(id, options);
+ },
+
destroy: function() {
this.container.component = null;
this.targetList.destroy();
this.sourceList.destroy();
},
- initControlList : function(clientId, ids) {
+ initControlList : function(containerId, ids) {
+ var ids = ['copy', 'copyAll', 'remove', 'removeAll'];
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
- var node = $(clientId + id[0]);
- var disNode = $(clientId + id[1]);
+ var node = $(containerId + id);
+ var disNode = $(containerId + "dis" + id);
if (node && disNode) {
- node.observe("click",
Richfaces.ListShuttle.HANDLERS[id[0]].bindAsEventListener(this));
- this.controlList[i] = new Richfaces.Control(node, disNode, false, false, id[0]);
+ node.observe('click', this.HANDLERS[id].bindAsEventListener(this));
+ this.controlList[i] = new Richfaces.Control(node, disNode, false, false, id);
}
}
- //this.controlListManager();
},
controlListManager : function() {
@@ -209,7 +222,7 @@
},
addItem : function(component, item) {
- item.doNormal(Richfaces.getExternalClass(item.rowIndex), component.columnsClasses);
+ item.doNormal(Richfaces.getExternalClass(item.rowIndex), component.columnClasses);
component.shuttleTbody.insertBefore(item._node, null);
component.shuttleItems.push(item);
@@ -339,11 +352,4 @@
this.isFocused = false;
this.container.fire("rich:onblur", {});
}
-};
-
-Richfaces.ListShuttle.HANDLERS = {
- copy: function (e) { this.copy(); return false; },
- copyAll: function (e) { this.copyAll(); return false; },
- remove: function (e) { this.remove(); return false; },
- removeAll: function (e) { this.removeAll(); return false; }
};
\ No newline at end of file
Modified:
branches/community/3.3.X/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx
===================================================================
---
branches/community/3.3.X/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx 2009-07-10
12:29:10 UTC (rev 14878)
+++
branches/community/3.3.X/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx 2009-07-10
12:29:16 UTC (rev 14879)
@@ -46,13 +46,7 @@
SelectionState targetSelectionState = new SelectionState();
variables.setVariable(SELECTION_STATE_VAR_NAME, targetSelectionState);
String encodedTargetRows = encodeRows(context, component, false);
-
- Boolean switchByClick = (Boolean)
component.getAttributes().get("switchByClick");
- variables.setVariable("switchByClick", switchByClick);
-
- Boolean switchByDblClick = (Boolean)
component.getAttributes().get("switchByDblClick");
- variables.setVariable("switchByDblClick", switchByDblClick);
-
+
variables.setVariable("baseClientId",
component.getBaseClientId(context));
]]>
</jsp:scriptlet>
@@ -130,13 +124,13 @@
<div class="rich-shuttle-target-items #{component.listClass}" >
<input autocomplete="off" type="hidden" value=":"
style="display: none;" name="#{baseClientId}" />
- <input id="#{clientId}tlFocusKeeper" type="button"
value="" style="width: 1px; position: absolute; left: -32767px;"/>
+ <input id="#{clientId}tlfocusKeeper" type="button"
value="" style="width: 1px; position: absolute; left: -32767px;"/>
- <table id="#{clientId}tlTable" cellpadding="0"
cellspacing="0" class="rich-shuttle-body">
+ <table id="#{clientId}tltable" cellpadding="0"
cellspacing="0" class="rich-shuttle-body">
<tbody>
<tr>
<td style="border:0px;padding : 0px;">
- <div id="#{clientId}tlHeaderBox"
class="rich-shuttle-list">
+ <div id="#{clientId}tlheaderBox"
class="rich-shuttle-list">
<jsp:scriptlet>
<![CDATA[
String trContentContainerStyle = "";
@@ -149,7 +143,7 @@
]]>
</jsp:scriptlet>
<div class="rich-shuttle-list-header"
style="#{trContentContainerStyle}">
- <table id="#{clientId}tlInternal_header_tab"
class="rich-shuttle-internal-header-tab" cellpadding="0"
cellspacing="0">
+ <table id="#{clientId}tlinternal_header_tab"
class="rich-shuttle-internal-header-tab" cellpadding="0"
cellspacing="0">
<f:call name="encodeTLHeader"/>
</table>
</div>
@@ -162,9 +156,9 @@
}
]]>
</jsp:scriptlet>
- <div id="#{clientId}tlContentBox"
class="rich-shuttle-list-content"
style="#{trContentContainerStyle}">
- <table id="#{clientId}tlInternal_tab"
class="rich-shuttle-internal-tab" cellpadding="0"
cellspacing="0">
- <tbody id="#{clientId}tlTbody">
+ <div id="#{clientId}tlcontentBox"
class="rich-shuttle-list-content"
style="#{trContentContainerStyle}">
+ <table id="#{clientId}tlinternal_tab"
class="rich-shuttle-internal-tab" cellpadding="0"
cellspacing="0">
+ <tbody id="#{clientId}tltbody">
<jsp:scriptlet><![CDATA[
writer.write(encodedTargetRows);
encodedTargetRows = null;
@@ -186,49 +180,30 @@
]]></jsp:scriptlet>
</div>
+ <c:scriptObject var="internalEvents">
+ <c:scriptOption attributes="onorderchanged, onorderchange, ontopclick,
onbottomclick, onupclick, ondownclick" wrapper="eventHandler" />
+ </c:scriptObject>
+ <c:scriptObject var="classes">
+ <c:scriptOption attributes="columnClasses, rowClasses"
wrapper="asArray" />
+ </c:scriptObject>
+ <c:scriptObject var="internalOptions">
+ <c:scriptOption name="events" value="#{internalEvents}"
/>
+ <c:scriptOption variables="classes" />
+ </c:scriptObject>
+ <c:scriptObject var="events">
+ <c:scriptOption attributes="onlistchanged, onlistchange, oncopyallclick,
oncopyclick, onremoveallclick, onremoveclick, onfocus, onblur"
wrapper="eventHandler" />
+ </c:scriptObject>
+ <c:scriptObject var="options">
+ <c:scriptOption attributes="switchByClick, switchByDblClick" />
+ <c:scriptOption variables="events, internalOptions" />
+ </c:scriptObject>
<script type="text/javascript">
- var clientId = '#{clientId}';
- new Richfaces.ListShuttle(
- new Richfaces.ListShuttle.Target(
- '#{clientId}',
- '#{clientId}tlInternal_tab',
- '#{clientId}tlInternal_header_tab',
- '#{clientId}tlFocusKeeper',
- [['up', 'disup'], ['down', 'disdown'],
['last', 'dislast'], ['first','disfirst']],
- '#{clientId}sortLabel',
- {onorderchanged:#{this:getAsEventHandler(context, component,
"onorderchanged")},
- onorderchange:#{this:getAsEventHandler(context, component,
"onorderchange")},
- ontopclick:#{this:getAsEventHandler(context, component,
"ontopclick")},
- onbottomclick:#{this:getAsEventHandler(context, component,
"onbottomclick")},
- onupclick:#{this:getAsEventHandler(context, component,
"onupclick")},
- ondownclick:#{this:getAsEventHandler(context, component,
"ondownclick")}},
- Richfaces.ListShuttle.Target.SelectItem,
- #{this:getColumnClassesAsJSArray(context, component)},
- #{this:getRowClassesAsJSArray(context, component)}
- ),
- new Richfaces.ListShuttle.Source(
- '#{clientId}',
- '#{clientId}internal_tab',
- '#{clientId}internal_header_tab',
- '#{clientId}focusKeeper',
- undefined,
- Richfaces.ListShuttle.Source.SelectItem,
- #{this:getColumnClassesAsJSArray(context, component)},
- #{this:getRowClassesAsJSArray(context, component)}),
- "#{clientId}",
- [['copy', 'discopy'], ['copyAll',
'discopyAll'], ['remove', 'disremove'],
['removeAll','disremoveAll']],
- "#{switchByClick}",
- "#{switchByDblClick}",
- {onlistchanged:#{this:getAsEventHandler(context, component,
"onlistchanged")},
- onlistchange:#{this:getAsEventHandler(context, component,
"onlistchange")},
- oncopyallclick:#{this:getAsEventHandler(context, component,
"oncopyallclick")},
- oncopyclick:#{this:getAsEventHandler(context, component,
"oncopyclick")},
- onremoveallclick:#{this:getAsEventHandler(context, component,
"onremoveallclick")},
- onremoveclick:#{this:getAsEventHandler(context, component,
"onremoveclick")},
- onfocus:#{this:getAsEventHandler(context, component, "onfocus")},
- onblur:#{this:getAsEventHandler(context, component, "onblur")}
- }
- );
+ new Richfaces.ListShuttle(
+ "#{clientId}"
+ <c:if test="#{not empty options}">
+ , <f:writeAsScript value="#{options}" />
+ </c:if>
+ );
</script>
</td>
</tr>
Modified:
branches/community/3.3.X/ui/listShuttle/src/test/java/org/richfaces/renderkit/ListShuttleRenderingTest.java
===================================================================
---
branches/community/3.3.X/ui/listShuttle/src/test/java/org/richfaces/renderkit/ListShuttleRenderingTest.java 2009-07-10
12:29:10 UTC (rev 14878)
+++
branches/community/3.3.X/ui/listShuttle/src/test/java/org/richfaces/renderkit/ListShuttleRenderingTest.java 2009-07-10
12:29:16 UTC (rev 14879)
@@ -202,7 +202,7 @@
assertNotNull(inputs);
assertEquals(1, inputs.size());
inputs = view.getDocumentHtmlElement().
- getHtmlElementsByAttribute(HTML.INPUT_ELEM, HTML.id_ATTRIBUTE,
listShuttle.getClientId(facesContext) + "tlFocusKeeper");
+ getHtmlElementsByAttribute(HTML.INPUT_ELEM, HTML.id_ATTRIBUTE,
listShuttle.getClientId(facesContext) + "tlfocusKeeper");
assertNotNull(inputs);
assertEquals(1, inputs.size());