Update of /var/cvs/html/mmbase/validation
In directory james.mmbase.org:/tmp/cvs-serv31360

Modified Files:
        Widgets.js 
Log Message:
adapted 'twoMultiples' for use in a certain product from Redmond, WA. Still 
doesn't work 100% in it, but that simply is impossible to accomplish for mere 
mortals


See also: http://cvs.mmbase.org/viewcvs/html/mmbase/validation


Index: Widgets.js
===================================================================
RCS file: /var/cvs/html/mmbase/validation/Widgets.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- Widgets.js  10 Dec 2008 09:54:59 -0000      1.5
+++ Widgets.js  10 Dec 2008 11:28:01 -0000      1.6
@@ -9,7 +9,7 @@
  *  -  Widgets.instance.boxes(selector):  Makes select into a list of 
checkboxes (multiple) or radioboxes (single)
  *  -  Widgets.instance.twoMultiples(selector):  Splits up multiple selection 
into 2 boxes, the left one containing the selected values, the right one the 
optiosn which are not selected.
  *
- * @version $Id: Widgets.js,v 1.5 2008/12/10 09:54:59 michiel Exp $   BETA
+ * @version $Id: Widgets.js,v 1.6 2008/12/10 11:28:01 michiel Exp $   BETA
  * @author Michiel Meeuwissen
 
  */
@@ -207,11 +207,8 @@
     });
 };
 
-/**
- * Sets up the dbl-click event on option to move it from a to b.
- */
-Widgets.prototype.aToB = function(option, a, b) {
-    $(option).dblclick(function() {
+
+Widgets.prototype.moveFromAToB = function(option, a, b) {
         var options = b[0].options;
         var appended = false;
         for(var i = 0; i < options.length; i++) {
@@ -226,52 +223,71 @@
             b.append(option);
         }
         Widgets.prototype.aToB(option, b, a);
+}
+
+/**
+ * Sets up the dbl-click event on option to move it from a to b.
+ */
+Widgets.prototype.aToB = function(option, a, b) {
+    // IE simply does not properly support events on options.
+    // I can't be bothered any more. Double clicking on the options will only 
work in decent browsers.
+
+    // I HATE MICROSOFT INTERNET EXPLORER
+
+    $(option).dblclick(function(ev) {
+        Widgets.prototype.moveFromAToB(option, a, b);
     });
 }
 
 Widgets.prototype.twoMultiples = function(selector) {
     $(document).ready(function() {
         $(selector).each(function() {
+            var select = this;
             var t = $(this);
             var text  = $("<div class='mm_twomultiples'></div>");
             var left  = $("<select multiple='multiple' />");
             left.attr("name", t.attr("name"));
             left.attr("id", t.attr("id"));
             t.parents("form").submit(function() {
-                $(left[0].options).each(function() {
-                    this.selected = true;
-                });
+                for (var i = 0; i < left[0].options.length; i++) {
+                    left[0].options[i].selected = true;
+                }
             });
             var right = $("<select multiple='multiple' />");
-            $(this.options).each(function() {
-                this.originalPosition = this.index;
-            });
-            $(this.options).each(function() {
-                if (this.value == null || this.value == '') {
-                } else if (this.selected) {
-                    left.append(this);
-                    Widgets.prototype.aToB(this, left, right);
+            for (var i = 0; i < select.options.length; i++) {
+                var option = select.options[i];
+                option.originalPosition = option.index;
+            }
+            for (var i = 0; i < select.options.length; i++) {
+                var option = select.options[i];
+
+                if (option.value == null || option.value == '') {
+                } else if (option.selected) {
+                    left.append(option);
+                    Widgets.prototype.aToB(option, left, right);
                 } else {
-                    right.append(this);
-                    Widgets.prototype.aToB(this, right, left);
+                    right.append(option)[0];
+                    Widgets.prototype.aToB(option, right, left);
+                }
                 }
-            });
             var nobr = $("<nobr />");
             var buttonToLeft  = $("<input type='button' value=' &lt; ' />")
             buttonToLeft.click(function() {
-                $(right[0].options).each(function() {
-                    if (this.selected) {
-                        $(this).dblclick();
+                for (var i = 0; i < right[0].options.length; i++) {
+                    var o = right[0].options[i];
+                    if (o.selected) {
+                        Widgets.prototype.moveFromAToB(o, right, left);
+                    }
                     }
-                });
             });
             var buttonToRight = $("<input type='button' value=' &gt; ' />")
             buttonToRight.click(function() {
-                $(left[0].options).each(function() {
-                    if (this.selected) {
-                        $(this).dblclick();
+                for (var i = 0; i < left[0].options.length; i++) {
+                    var o = left[0].options[i];
+                    if (o.selected) {
+                        Widgets.prototype.moveFromAToB(o, left, right);
+                    }
                     }
-                });
             });
             
text.append(left).append(buttonToLeft).append(buttonToRight).append(right);
             t.after(text);
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to