Author: michiel
Date: 2010-03-17 23:27:03 +0100 (Wed, 17 Mar 2010)
New Revision: 41483

Modified:
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/Searcher.js.jsp
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspf
   
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspx
Log:
implemented 'select' button, and restored old functionality

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/Searcher.js.jsp
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/Searcher.js.jsp
    2010-03-17 19:58:07 UTC (rev 41482)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/Searcher.js.jsp
    2010-03-17 22:27:03 UTC (rev 41483)
@@ -62,13 +62,23 @@
     this.related       = {};    // related nodes
     this.unrelated     = {};    // unrelated nodes
     this.deleterels    = {};    // relations to delete
+
+
     this.logger        = new MMBaseLogger();
     this.logger.debug(d);
     this.logger.debug("setting up current");
     this.current       = $(d).find(".mm_relate_current")[0];
-    this.instant       = $(d).hasClass("instant");  // instant action
-    this.canUnrelate   = $(d).hasClass("can_unrelate");
+    this.instant       = $(d).hasClass("instant");  // instant action, no 
submit button needed
+    this.select        = $(d).hasClass("select");
+
+    if (this.select) {
+        this.selectedForRelate   = {};
+        this.selectedForUnrelate = {};
+    }
+
+    this.canUnrelate      = $(d).hasClass("can_unrelate");
     this.canEditrelations = $(d).hasClass("can_editrelations");
+
     if (this.current != null) {
         this.addSearcher(this.current, "current");
     } else {
@@ -95,7 +105,19 @@
     }
     this.sessionName = null;
     var self = this;
+    if (this.select) {
+        $(this.div).find("a.move").click(
+            function(ev) {
+                self.moveSelections();
+                if (self.instant) {
+                    self.commit(this);
+                }
+            }
+        );
+    }
+
     $(this.div).trigger("mmsrRelaterReady", [self]);
+
 }
 
 /**
@@ -156,16 +178,16 @@
  * Commits makes changes to MMBase. Depends on a jsp 
/mmbase/searchrelate/relate.jsp to do the actual work.
  * This jsp, in turn, depends on the query in the user's session which defines 
precisely what must happen.
  */
-MMBaseRelater.prototype.commit = function(ev) {
+MMBaseRelater.prototype.commit = function(button) {
     var relatedNumbers   = this.getNumbers(this.related);
     var unrelatedNumbers = this.getNumbers(this.unrelated);
     var deletedRelations = this.getNumbers(this.deleterels);
-
     if (relatedNumbers != "" || unrelatedNumbers != "" || deletedRelations != 
"") {
-        var a = ev.target;
-        $(a).addClass("submitting");
-        $(a).removeClass("failed");
-        $(a).removeClass("succeeded");
+        if (button != null) {
+            $(button).addClass("submitting");
+            $(button).removeClass("failed");
+            $(button).removeClass("succeeded");
+        }
 
         this.logger.debug("Commiting changed relations of " + this.div.id);
         var id = this.div.id;
@@ -174,15 +196,14 @@
         this.logger.debug("+ " + relatedNumbers);
         this.logger.debug("- " + unrelatedNumbers);
         this.logger.debug("d " + deletedRelations);
-        if (!this.instant) {
-            this.commitSelections(id);
-        }
+
         var params = {id: id, related: relatedNumbers, unrelated: 
unrelatedNumbers, deleted: deletedRelations};
         if (this.transaction != null) {
             params.transaction = this.transaction;
         }
         var self = this;
-        $.ajax({async: false, url: url, type: "GET", dataType: "xml", data: 
params,
+        $.ajax({async: false,
+                url: url, type: "GET", dataType: "xml", data: params,
                 complete: function(res, status){
                     $(a).removeClass("submitting");
                     if (status == "success") {
@@ -213,6 +234,9 @@
                     }
                 }
             });
+        // alert("hoi " + relatedNumbers + " " + unrelatedNumbers + " " + 
deletedRelations);
+        // return false;
+
     } else {
         this.logger.debug("No changes, no need to commit");
         $(this.div).trigger("mmsrCommitted", [a, "nochanges", this]);
@@ -223,27 +247,29 @@
 /**
  * Commits selected items after acknowledgment
  */
-MMBaseRelater.prototype.commitSelections = function(id) {
-    var div = $('#' + id + ' div.mm_relate_current');
+MMBaseRelater.prototype.moveSelections = function() {
     var self = this;
     var done = false;
 
     // unrelate
-    $.each(self.deleterels, function(key, value) {
+    $.each(self.selectedForUnrelate, function(key, value) {
         self.logger.debug("= unrelated: " + key);
-        self.unrelate(value);
-        self.deleterels[key] = null;
+        self.unrelate(value, true);
         done = true;
     });
+    self.selectedForUnrelate = {};
 
     // relate
-    $.each(self.related, function(key, value) {
+    $.each(self.selectedForRelate, function(key, value) {
         self.logger.debug("= related: " + key);
-        if (value != null) { self.relate(value); }
-        self.related[key] = null;
+        if (value != null) {
+            self.relate(value);
+        }
         done = true;
     });
+    self.selectedForRelate = {};
 
+
     if (done) {
         self.logger.debug("done");
     }
@@ -297,59 +323,68 @@
 MMBaseRelater.prototype.bindEvents = function(rep, type) {
     var self = this;
     if (type == "repository") {
-        $(rep).find("tr.click").each(function() {
-            var nr = self.getNumber(this);
-            if (typeof(self.related[nr]) != "undefined") {
-                $(this).toggleClass('selected');
-                self.logger.debug("found selected");
-            }
-
-            $(this).click(function(ev) {
-                if (self.instant) {
-                    self.relate(this);
-                    self.commit(ev);
-                } else {
+        $(rep).find("tr.click").each(
+            function() {
+                var nr = self.getNumber(this);
+                if (typeof(self.related[nr]) != "undefined") {
                     $(this).toggleClass('selected');
-                    if (typeof(self.related[nr]) == "undefined") {
-                        self.related[nr] = this;
-                        self.logger.debug("selected (relate): " + nr);
-                    } else {
-                        self.related[nr] = null;
-                        self.logger.debug("unselected (relate): " + nr);
-                    }
+                    self.logger.debug("found selected");
                 }
-                return false;
+
+                $(this).click(
+                    function(ev) {
+                        if (self.select) {
+                            $(this).toggleClass('selected');
+                            if (typeof(self.selectedForRelate[nr]) == 
"undefined") {
+                                self.selectedForRelate[nr] = this;
+                                self.logger.debug("selected (relate): " + nr);
+                            } else {
+                                self.selectedForRelate[nr] = null;
+                                self.logger.debug("unselected (relate): " + 
nr);
+                            }
+                        } else {
+                            self.relate(this);
+                            if (self.instant) {
+                                self.commit();
+                            }
+                        }
+
+                        return false;
+                    });
             });
-        });
     }
     if (type == "current") {
-        $(rep).find("tr.click").each(function() {
-            var rel = self.getRelationNumber(this);
-            if (typeof(self.deleterels[rel]) != "undefined") {
-                self.logger.debug(self.deleterels[rel]);
-                self.logger.debug("found selected");
-                $(this).toggleClass('selected');
-            }
+        $(rep).find("tr.click").each(
+            function() {
+                var  rel = self.getRelationNumber(this);
+                if (typeof(self.deleterels[rel]) != "undefined") {
+                    self.logger.debug(self.deleterels[rel]);
+                    self.logger.debug("found selected");
+                    $(this).toggleClass('selected');
+                }
 
-            if ($(this).hasClass("new") || (self != null && self.canUnrelate)) 
{    // TODO: hasClass new moet nog wat mee
-                $(this).click(function(ev) {
-                    if (self.instant) {
-                        self.unrelate(this);
-                        self.commit(ev);
-                    } else {
-                        $(this).toggleClass('selected');
-                        if (typeof(self.deleterels[rel]) == "undefined") {
-                            self.deleterels[rel] = this;
-                            self.logger.debug("selected (unrelate): " + rel);
-                        } else {
-                            self.deleterels[rel] = null;
-                            self.logger.debug("unselected (unrelate): " + rel);
-                        }
-                    }
-                    return false;
-                });
-            }
-        });
+                if ($(this).hasClass("new") || (self != null && 
self.canUnrelate)) {    // TODO: hasClass new moet nog wat mee
+                    $(this).click(
+                        function(ev) {
+                            if (self.select) {
+                                $(this).toggleClass('selected');
+                                if (typeof(self.selectedForUnrelate[rel]) == 
"undefined") {
+                                    self.selectedForUnrelate[rel] = this;
+                                    self.logger.debug("selected (unrelate): " 
+ rel);
+                                } else {
+                                    self.selectedForUnrelate[rel] = null;
+                                    self.logger.debug("unselected (unrelate): 
" + rel);
+                                }
+                            } else {
+                                self.unrelate(this);
+                                if (self.instant) {
+                                    self.commit();
+                                }
+                            }
+                            return false;
+                        });
+                }
+            });
 
         if (self.canEditrelations) self.bindSaverelation(rep);
     }
@@ -408,20 +443,24 @@
         $(tr).unbind();
 
         var self = this;
-        $(tr).click(function(ev) {
-            if (self.instant) {
-                self.unrelate(this);
-                self.commit(ev);
-            } else {
-                // TODO: need to have relation nr here (maybe reload data?)
-                $(this).toggleClass('selected');
-                if (typeof(self.unrelated[number]) == "undefined") {
-                    self.unrelated[number] = this;
+        $(tr).click(
+            function(ev) {
+
+                if (self.select) {
+                    // TODO: need to have relation nr here (maybe reload data?)
+                    $(this).toggleClass('selected');
+                    if (typeof(self.selectedForUnrelate[number]) == 
"undefined") {
+                        self.selectedForUnrelate[number] = this;
+                    } else {
+                        self.selectedForUnrelate[number] = null;
+                    }
                 } else {
-                    self.unrelated[number] = null;
+                    self.unrelate(this);
+                    if (self.instant) {
+                        self.commit();
+                    }
                 }
-            }
-        });
+            });
     }
     if (this.relateCallBack != null) {
         this.relateCallBack(tr);
@@ -439,18 +478,18 @@
 /**
  * Moves a node from the list of related nodes to the 'unrelated' repository.
  */
-MMBaseRelater.prototype.unrelate = function(tr) {
+MMBaseRelater.prototype.unrelate = function(tr, userelationnumber) {
     var number = this.getNumber(tr);
-    var relnr = this.getRelationNumber(tr);
+    var relnr  = this.getRelationNumber(tr);
     var relationTrs = this.getRelationTrs(number);
     this.logger.debug("Unrelating node #" + number + ", relation #" + relnr);
 
     // Set up data
     if (typeof(this.unrelated[number]) == "undefined" && 
typeof(this.unrelated[relnr] == "undefined")) {
-        if (this.instant) {
+        if (userelationnumber == null || ! userelationnumber) {
             this.unrelated[number] = tr;
         } else {
-            this.unrelated[relnr] = tr;
+            this.deleterels[relnr] = tr;
         }
     }
     this.related[number] = null;
@@ -475,20 +514,24 @@
     // Events
     $(tr).unbind();
     var self = this;
-    $(tr).click(function(ev) {
-        if (self.instant) {
-            self.relate(this);
-            self.commit(ev);
-        } else {
-            $(this).toggleClass('selected');
-            if (typeof(self.related[number]) == "undefined") {
-                self.related[number] = this;
-            } else {
-                self.related[number] = null;
+    $(tr).click(
+        function(ev) {
+            if (self.select) {
+                $(this).toggleClass('selected');
+                if (typeof(self.related[number]) == "undefined") {
+                    self.selectedForRelate[number] = this;
+                } else {
+                    self.selectedForRelate[number] = null;
+                }
+            }  else {
+                self.relate(this);
+                if (self.instant) {
+                    self.commit();
+                }
             }
+            return false;
         }
-        return false;
-    });
+    );
     $(this.div).trigger("mmsrUnrelate", [tr, this]);
 };
 
@@ -593,8 +636,11 @@
     }
 };
 
-/*
- * 
***********************************************************************************************************************
+/**
+ * 
********************************************************************************
+ * Follows the implementation of the Search part.
+ * This can also be used stand-alone, using mm-sr:search
+ * 
********************************************************************************
  */
 
 function MMBaseSearcher(d, r, type, logger) {
@@ -862,8 +908,11 @@
                     }
                     $(rep).find('input[type="submit"]').attr("disabled", 
"disabled");
                     self.validator.validateHook = function(valid) {
-                        if (valid) 
$(rep).find('input[type="submit"]').removeAttr("disabled");
-                        else 
$(rep).find('input[type="submit"]').attr("disabled", "disabled");
+                        if (valid) {
+                            
$(rep).find('input[type="submit"]').removeAttr("disabled");
+                        } else {
+                            
$(rep).find('input[type="submit"]').attr("disabled", "disabled");
+                        }
                     };
                     var options = {
                         url: "${mm:link('/mmbase/searchrelate/create.jspx')}",

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspf
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspf
        2010-03-17 19:58:07 UTC (rev 41482)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspf
        2010-03-17 22:27:03 UTC (rev 41483)
@@ -1,3 +1,4 @@
+
 <mm:listnodes referid="related" jspvar="n">
   <jsp:expression>Queries.addToResult(current, n)</jsp:expression>
 </mm:listnodes>
@@ -2,2 +3,3 @@
 <mm:listnodes referid="unrelated" jspvar="n">
+  R:<jsp:expression>n.getNumber()</jsp:expression>
  <jsp:expression>Queries.removeFromResult(current, n)</jsp:expression>
@@ -10,7 +12,7 @@
   <mm:listnodes referid="deleted">
     <mm:maydelete>
       <mm:hasfield name="dnumber">
-        <mm:field name="dnumber" /> <mm:deletenode /> 
+        <mm:field name="dnumber" /> <mm:deletenode />
       </mm:hasfield>
     </mm:maydelete>
   </mm:listnodes>

Modified: 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspx
===================================================================
--- 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspx
        2010-03-17 19:58:07 UTC (rev 41482)
+++ 
mmbase/branches/MMBase-1_9/applications/searchrelate/src/main/webapp/mmbase/searchrelate/relate.jspx
        2010-03-17 22:27:03 UTC (rev 41483)
@@ -13,6 +13,8 @@
       <mm:import externid="unrelated" vartype="list" required="true" />
       <mm:import externid="deleted"   vartype="list" />
       <mm:import from="session" externid="${id}_current" id="current" 
required="true" jspvar="current" vartype="org.mmbase.bridge.Query" />
+
+      [${current.sql}]
       <mm:import externid="transaction" />
       <mm:isempty referid="transaction">
         <jsp:directive.include file="relate.jspf" />

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to