From: <tc...@us...> - 2009-08-07 01:33:22
|
Revision: 9672 http://wonder.svn.sourceforge.net/wonder/?rev=9672&view=rev Author: tcripps Date: 2009-08-07 01:33:16 +0000 (Fri, 07 Aug 2009) Log Message: ----------- More proactive about making sure the selections are actually in the set of choices. Properly escaping possibleValues strings for use in Javascript. Got rid of borders on the + and - buttons in Firefox. Modified Paths: -------------- branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.html branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.wod branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXJSToManyRelationshipEditor.java Modified: branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.html =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.html 2009-08-06 22:56:26 UTC (rev 9671) +++ branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.html 2009-08-07 01:33:16 UTC (rev 9672) @@ -17,6 +17,7 @@ var selectedValue = popupEl.value; if (selectedValue) { + selectedValue = parseInt(selectedValue); if (this.selectedValues.indexOf(selectedValue) == -1) { this.selectedValues.push(selectedValue); this.selectedValues.sort(function(a, b) { return a - b }); @@ -34,7 +35,7 @@ var hiddenFieldEl = document.getElementById(hiddenFieldName); var index = this.selectedValues.indexOf(value); - if (index > 0) { + if (index >= 0) { this.selectedValues.splice(index, 1); } @@ -53,7 +54,7 @@ // Create the cell for the display string. var nameCell = document.createElement('td'); - var displayStringNode = document.createTextNode(this.possibleValues[value]) + var displayStringNode = document.createTextNode(this.possibleValues[value]); nameCell.appendChild(displayStringNode); newRow.appendChild(nameCell); @@ -86,6 +87,9 @@ }, addValueToAvailableValuesPopup: function(value) { + if (this.possibleValues[value] === undefined) { // The item is not in the list of possible values + return; + } var popupName = 'ERXJSToManyRelationshipEditor_SelectedValuesPopup_' + this.elementID; var popupEl = document.getElementById(popupName); var options = popupEl.options; Modified: branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.wod =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.wod 2009-08-06 22:56:26 UTC (rev 9671) +++ branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Components/Nonlocalized.lproj/ERXJSToManyRelationshipEditor.wo/ERXJSToManyRelationshipEditor.wod 2009-08-07 01:33:16 UTC (rev 9672) @@ -5,6 +5,7 @@ AddImage: WOImage { alt = "Add"; + border = 0; filename = "plus.gif"; framework = "ERExtensions"; height = 14; @@ -31,6 +32,7 @@ RemoveImageTemplate: WOImage { alt = "Remove"; + border = 0; filename = "minus.gif"; framework = "ERExtensions"; height = 14; @@ -41,6 +43,7 @@ RemoveImage: WOImage { alt = "Remove"; + border = 0; filename = "minus.gif"; framework = "ERExtensions"; height = 14; Modified: branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXJSToManyRelationshipEditor.java =================================================================== --- branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXJSToManyRelationshipEditor.java 2009-08-06 22:56:26 UTC (rev 9671) +++ branches/Wonder_2_0_0_Branch/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXJSToManyRelationshipEditor.java 2009-08-07 01:33:16 UTC (rev 9672) @@ -7,19 +7,21 @@ import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSMutableDictionary; +import org.apache.log4j.Logger; import java.util.Enumeration; -import org.apache.log4j.Logger; /** * A fancy to-many relationship editor component. * @author Travis Cripps * - * @binding displayString - * @binding item - * @binding list - * @binding selections - * @binding sortKey + * @binding displayString for the items in the menu, this should be a keyPath that will be resolved from each item to + * produce the display string for the item. + * @binding item to use as an iteration variable + * @binding list of items to display; equivalent to the possible values from which a user might choose + * @binding selections items from the list that are selected. The resulting selections will be pushed back into the + * parent component's variable that is bound to the <code>selections</code> binding. + * @binding sortKey (optional) to use in order to produce a sorted menu */ public class ERXJSToManyRelationshipEditor extends ERXNonSynchronizingComponent { @@ -88,7 +90,15 @@ */ public NSArray selections() { if (null == _selections) { - _selections = selectionsFromBindings(); + NSMutableArray selections = new NSMutableArray(); + // Prune out any items that are not in the base list. + for (Enumeration selectionsEnum = selectionsFromBindings().objectEnumerator(); selectionsEnum.hasMoreElements();) { + Object aSelection = selectionsEnum.nextElement(); + if (maybeSortedList().containsObject(aSelection)) { + selections.addObject(aSelection); + } + } + _selections = selections.immutableClone(); } return _selections; } @@ -204,7 +214,7 @@ for (Enumeration offsetsEnum = itemOffsets.objectEnumerator(); offsetsEnum.hasMoreElements();) { String offsetString = (String)offsetsEnum.nextElement(); int offset = ERXStringUtilities.integerWithString(offsetString); - if (offset < list.count()) { + if (offset >= 0 && offset < list.count()) { selections.addObject(list.objectAtIndex(offset)); } } @@ -294,7 +304,7 @@ sb.append("var ").append(editorName()).append(" = new ERXJSToManyRelationshipEditor();\n"); sb.append(editorName).append(".elementID = '").append(safeElementID).append("';\n"); sb.append(editorName).append(".possibleValues = ").append(possibleValuesHashForScript()).append(";\n"); - sb.append(editorName).append(".selectedValues = ").append(selectedValuesArrayForScript()); + sb.append(editorName).append(".selectedValues = ").append(selectedValuesArrayForScript()).append(";"); return sb.toString(); } @@ -307,6 +317,9 @@ NSMutableArray jsHashValues = new NSMutableArray(); for (int i = 0; i < valuesDict.count(); i++) { String displayString = (String)valuesDict.objectForKey(i); + if (displayString != null) { + displayString = displayString.replaceAll("'", "\\\\'"); + } jsHashValues.addObject(i + " : '" + displayString + "'"); } return "{ " + jsHashValues.componentsJoinedByString(", ") + " }"; @@ -321,7 +334,10 @@ NSArray sortedList = maybeSortedList(); for (Enumeration selectionsEnum = selections().objectEnumerator(); selectionsEnum.hasMoreElements();) { Object obj = selectionsEnum.nextElement(); - offsets.addObject(indexOfObjectInArrayUsingERXEOControlUtilitiesEOEquals(obj, sortedList)); + int offset = indexOfObjectInArrayUsingERXEOControlUtilitiesEOEquals(obj, sortedList); + if (offset >= 0) { + offsets.addObject(offset); + } } return "[" + offsets.componentsJoinedByString(", ") + "]"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |