Author: vmolotkov
Date: 2007-12-22 11:58:48 -0500 (Sat, 22 Dec 2007)
New Revision: 4993
Modified:
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/SelectItem.js
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js
trunk/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx
Log:
new implementation of selection functionality
Modified:
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
===================================================================
---
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2007-12-22
16:58:48 UTC (rev 4993)
@@ -4,7 +4,9 @@
package org.richfaces.renderkit;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
@@ -16,6 +18,7 @@
import javax.faces.context.ResponseWriter;
import javax.faces.convert.Converter;
+import org.ajax4jsf.component.UIDataAdaptor;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.javascript.ScriptString;
@@ -529,4 +532,21 @@
return ScriptUtils.toScript(result);
}
+
+ public String getColumnClassesAsJSArray(FacesContext context, UIComponent component) {
+ return ScriptUtils.toScript(getClassesAsList(context, component,
"columnClasses"));
+ }
+
+ public String getRowClassesAsJSArray(FacesContext context, UIComponent component) {
+ return ScriptUtils.toScript(getClassesAsList(context, component,
"rowClasses"));
+ }
+
+ protected List getClassesAsList(FacesContext context, UIComponent component, String
attr) {
+
+ String value = (String) ((UIDataAdaptor) component).getAttributes().get(attr);
+ if (value != null && (value.length() != 0)) {
+ return Arrays.asList(value.split(","));
+ }
+ return null;
+ }
}
Modified:
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java
===================================================================
---
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingListRendererBase.java 2007-12-22
16:58:48 UTC (rev 4993)
@@ -1,9 +1,12 @@
package org.richfaces.renderkit;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -14,6 +17,7 @@
import javax.faces.convert.Converter;
import org.ajax4jsf.component.UIDataAdaptor;
+import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.renderkit.ComponentVariables;
import org.ajax4jsf.renderkit.ComponentsVariableResolver;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js 2007-12-22
16:58:48 UTC (rev 4993)
@@ -33,7 +33,7 @@
Richfaces.ListBase.prototype = {
initialize : function(containerId, contentTableId, headerTableId, focusKeeperId,
- onclickControlId, controlClass) {
+ onclickControlId, controlClass, columnsClasses, rowClasses) {
this.selectedItems = new Array();
//this.layoutManager = layoutManager;
@@ -52,6 +52,10 @@
this.activeItem = null;
this.pseudoActiveItem = null; //it services for items selection by Shift+click
this.items = null;
+
+ //FIX
+ this.rowClasses = rowClasses;
+ this.columnsClasses = columnsClasses;
this.retrieveShuttleItems(containerId, controlClass);
@@ -136,7 +140,7 @@
}
if (this.activeItem) {
- this.activeItem.item.doActive();
+ this.activeItem.item.doActive(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
}
},
@@ -161,7 +165,7 @@
this.setFocus();
- this.saveState();
+ //this.saveState();
//this.layoutManager.widthSynchronization();
}
},
@@ -182,8 +186,8 @@
this.selectAll();
Event.stop(event);
}
- this.activeItem.item.doActive();
- this.saveState();
+ this.activeItem.item.doActive(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
+ //this.saveState();
break;
}
},
@@ -199,15 +203,16 @@
this.autoScrolling(action, event);
- this.saveState();
+ //this.saveState();
//this.layoutManager.widthSynchronization();
},
changeActiveItems : function(newItem, item) {
+ item.item.doNormal();
this.resetMarked();
- newItem.item.doSelect();
- newItem.item.doActive();
+ newItem.item.doSelect(this.getExtRowClass(newItem.rowIndex), this.columnsClasses);
+ newItem.item.doActive(this.getExtRowClass(newItem.rowIndex), this.columnsClasses);
this.setActiveItem(newItem);
this.selectedItems.push(newItem);
},
@@ -235,9 +240,9 @@
this.selectedItems[0] = markedShuttleItem;
}*/
if (activeItem.item.isSelected()) {
- activeItem.item.doNormal();
+ activeItem.item.doNormal(this.getExtRowClass(activeItem.rowIndex),
this.columnsClasses);
} else {
- activeItem.item.doSelect();
+ activeItem.item.doSelect(this.getExtRowClass(activeItem.rowIndex),
this.columnsClasses);
this.selectedItems[0] = markedShuttleItem; //TODO: delete
}
//}
@@ -260,25 +265,25 @@
if (activeItem.item.isSelected()) {
this.selectedItems.remove(markedShuttleItem); //TODO :delete
- activeItem.item.doNormal();
+ activeItem.item.doNormal(this.getExtRowClass(activeItem.rowIndex),
this.columnsClasses);
} else {
- activeItem.item.doSelect();
+ activeItem.item.doSelect(this.getExtRowClass(activeItem.rowIndex),
this.columnsClasses);
this.selectedItems.push(markedShuttleItem); //TODO :delete
}
if ((this.activeItem != null) && (this.activeItem.rowIndex !=
activeItem.rowIndex)) {
//reset activity of an element
if (this.activeItem.item.isSelected()) {
- this.activeItem.item.doSelect();
+ this.activeItem.item.doSelect(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
} else {
- this.activeItem.item.doNormal();
+ this.activeItem.item.doNormal(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
}
}
/*if (this.activeItem && !this.getSelectItemByNode(this.activeItem)._selected)
{
Richfaces.SelectItems.doNormal(this.activeItem);
}*/
- this.saveState();
+ //this.saveState();
},
/**
@@ -306,21 +311,18 @@
selectItemRange : function(startIndex, endIndex) {
var rows = this.shuttleTbody.rows;
for (var i = startIndex; i <= endIndex; i++) {
- rows[i].item.doSelect();
- //if (this.selectedItems.indexOf(rows[i]) == -1) {
- this.selectedItems.push(rows[i]);
- //}
+ rows[i].item.doSelect(this.getExtRowClass(rows[i].rowIndex), this.columnsClasses);
+ this.selectedItems.push(rows[i]);
}
-
- this.saveState();
+ //this.saveState();
},
resetMarked : function() {
- var rows = this.shuttleTbody.rows;
- for (var i = 0; i < rows.length; i++) {
+ var rows = this.selectedItems;
+ var length = rows.length;
+ for (var i = 0; i < length; i++) {
var shuttleItem = rows[i];
- shuttleItem.item.doNormal();
- //this.getSelectItemByNode(shuttleItem)._selected = false; //FIXME
+ shuttleItem.item.doNormal(this.getExtRowClass(shuttleItem.rowIndex),
this.columnsClasses);
}
this.selectedItems.length = 0;
@@ -376,9 +378,9 @@
if (this.activeItem) {
if (this.activeItem.item.isSelected()) {
- this.activeItem.item.doSelect();
+ this.activeItem.item.doSelect(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
} else {
- this.activeItem.item.doNormal();
+ this.activeItem.item.doNormal(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
}
}
},
@@ -402,14 +404,7 @@
return false;
},
- saveState : function() {
- for (var i = 0; i < this.shuttleItems.length; i++) {
- var item = this.shuttleItems[i];
-
- item.saveState();
- }
+ getExtRowClass : function(index) {
+ return Richfaces.getExternalClass(this.rowClasses, index);
}
-
-}
-
-
+}
\ No newline at end of file
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-12-22
16:58:48 UTC (rev 4993)
@@ -20,8 +20,8 @@
Richfaces.OrderingList = Class.create(Richfaces.ListBase, {
- initialize: function($super, containerId, contentTableId, headerTableId, focusKeeperId,
ids, onclickControlId, onorderchanged, controlClass) {
- $super(containerId, contentTableId, headerTableId, focusKeeperId, onclickControlId,
controlClass);
+ initialize: function($super, containerId, contentTableId, headerTableId, focusKeeperId,
ids, onclickControlId, onorderchanged, controlClass, columnsClasses, rowClasses) {
+ $super(containerId, contentTableId, headerTableId, focusKeeperId, onclickControlId,
controlClass, columnsClasses, rowClasses);
if (onorderchanged) {
this.container.observe("rich:onorderchanged", onorderchanged);
@@ -80,7 +80,7 @@
moveActiveItem : function($super, action, event) {
$super(action, event);
- this.saveState();
+ //this.saveState();
this.controlListManager();
},
@@ -129,7 +129,7 @@
this.container.fire("rich:onorderchanged", {});
this.controlListManager();
- this.saveState();
+ //this.saveState();
}
},
@@ -159,8 +159,8 @@
this.selectAll();
Event.stop(event);
}
- this.activeItem.item.doActive();
- this.saveState();
+ this.activeItem.item.doActive(this.getExtRowClass(this.activeItem.rowIndex),
this.columnsClasses);
+ //this.saveState();
this.controlListManager();
break;
}
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/SelectItem.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/SelectItem.js 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/SelectItem.js 2007-12-22
16:58:48 UTC (rev 4993)
@@ -1,5 +1,16 @@
if (!window.Richfaces) { window.Richfaces = {}; }
+Richfaces.getExternalClass = function(classes, index) {
+ if (classes) {
+ var len = classes.length;
+ while (index >= len) {
+ index -= len;
+ }
+ return (classes[index]) ? classes[index] : "";
+ }
+ return "";
+}
+
Richfaces.SelectItem = Class.create();
Richfaces.SelectItem.prototype = {
@@ -17,34 +28,43 @@
this.active = /^s?a/.test(this.input.value);
},
- doActive : function() {
+ doActive : function(rowStoredClass, cellStoredClasses) {
var classes = this.CLASSES;
var row = this._node;
+ var rowClass = classes.ROW.ACTIVE;
+ var cellClass = classes.CELL.ACTIVE;
+ if (this.isSelected()) {
+ rowClass = classes.ROW.SELECTED + " " + classes.ROW.ACTIVE;
+ cellClass = classes.CELL.SELECTED + " " + classes.CELL.ACTIVE;
+ }
+ this.changeClass(row, rowClass, cellClass, rowStoredClass, cellStoredClasses);
- this.addClass(row, classes.ROW.ACTIVE, classes.CELL.ACTIVE);
-
this.active = true;
+
+ this.saveState();
},
- doSelect : function() {
+ doSelect : function(rowStoredClass, cellStoredClasses) {
var row = this._node;
var classes = this.CLASSES;
- this.addClass(row, classes.ROW.SELECTED, classes.CELL.SELECTED);
- this.removeClass(row, classes.ROW.ACTIVE, classes.CELL.ACTIVE);
+ this.changeClass(row, classes.ROW.SELECTED, classes.CELL.SELECTED, rowStoredClass,
cellStoredClasses);
this.selected = true;
+
+ this.saveState();
},
- doNormal : function() {
+ doNormal : function(rowStoredClass, cellStoredClasses) {
var row = this._node;
var classes = this.CLASSES;
- this.removeClass(row, classes.ROW.SELECTED, classes.CELL.SELECTED);
- this.removeClass(row, classes.ROW.ACTIVE, classes.CELL.ACTIVE);
+ this.changeClass(row, classes.ROW.NORMAL, classes.CELL.NORMAL, rowStoredClass,
cellStoredClasses);
this.active = false;
this.selected = false;
+
+ this.saveState();
},
isSelected : function() {
@@ -55,7 +75,16 @@
return this.active;
},
- addClass : function(row, classNameRow, classNameCell) {
+ changeClass : function(row, rowClassName, cellClassName, rowStoredClass,
cellStoredClasses) {
+ row.className = rowStoredClass + " " + rowClassName;
+ var cells = row.cells;
+ for (var i = 0; i < cells.length; i++) {
+ var cell = cells[i];
+ cell.className = Richfaces.getExternalClass(cellStoredClasses, cell.cellIndex) +
" " + cellClassName;
+ }
+ },
+
+ /*addClass : function(row, classNameRow, classNameCell) {
if (row.addClassName) {
row.addClassName(classNameRow);
} else {
@@ -65,7 +94,6 @@
var cells = row.cells;
for (var i = 0; i < cells.length; i++) {
var cell = cells[i];
-
if (cell.addClassName) {
cell.addClassName(classNameCell);
} else {
@@ -80,7 +108,6 @@
} else {
Element.removeClassName(row, classNameRow);
}
-
var cells = row.cells;
for (var i = 0; i < cells.length; i++) {
var cell = cells[i];
@@ -91,7 +118,7 @@
Element.removeClassName(cell, classNameCell);
}
}
- },
+ },*/
saveState: function() {
var regex = /^s?a?/;
Modified:
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js
===================================================================
---
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js 2007-12-22
16:58:48 UTC (rev 4993)
@@ -26,11 +26,10 @@
Array.prototype.remove = function(object) {
var index = this.indexOf(object, 0, this.length);
+ if (index == -1) return;
if (index == 0) {
this.shift();
} else {
this.splice(index, 1);
}
-}
-
-
+}
\ No newline at end of file
Modified: trunk/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx
===================================================================
---
trunk/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx 2007-12-22
16:58:38 UTC (rev 4992)
+++
trunk/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx 2007-12-22
16:58:48 UTC (rev 4993)
@@ -89,7 +89,13 @@
var clientId = '#{cId}';
Event.onReady(function() {
var cotrolsIdPrefix = [['up', 'disup'], ['down',
'disdown'], ['last', 'dislast'],
['first','disfirst']];
- var shuttle = new Richfaces.OrderingList('#{cId}',
'#{cId}internal_tab', '#{cId}internal_header_tab',
'#{cId}focusKeeper', cotrolsIdPrefix, '#{cId}sortLabel',
#{this:getAsEventHandler(context, component, "onorderchanged")},
Richfaces.OrderingListSelectItem);
+ var shuttle = new Richfaces.OrderingList('#{cId}',
'#{cId}internal_tab',
+ '#{cId}internal_header_tab', '#{cId}focusKeeper',
+ cotrolsIdPrefix, '#{cId}sortLabel',
+ #{this:getAsEventHandler(context, component, "onorderchanged")},
+ Richfaces.OrderingListSelectItem,
+ #{this:getColumnClassesAsJSArray(context, component)},
+ #{this:getRowClassesAsJSArray(context, component)});
var layoutManager = new LayoutManager('#{clientId}internal_header_tab',
'#{clientId}internal_tab');
layoutManager.widthSynchronization();
});