fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2011-06-17 08:09 am

[dw-free] delcommentcomplete event not called when the AJAX request errors

[commit: http://hg.dwscoalition.org/dw-free/rev/2015deb1e51c]

http://bugs.dwscoalition.org/show_bug.cgi?id=3745

Set our calling widget as the context (this) of the underlying ajaxtip
widget, so we can throw up accurate events on completion.

Patch by [personal profile] fu.

Files modified:
  • htdocs/js/jquery.ajaxtip.js
  • htdocs/js/jquery.commentmanage.js
  • htdocs/js/jquery.contextualhover.js
  • htdocs/js/jquery.poll.js
  • views/dev/tests/commentmanage.js
--------------------------------------------------------------------------------
diff -r e3d81dc5d30e -r 2015deb1e51c htdocs/js/jquery.ajaxtip.js
--- a/htdocs/js/jquery.ajaxtip.js	Fri Jun 17 16:03:18 2011 +0800
+++ b/htdocs/js/jquery.ajaxtip.js	Fri Jun 17 16:09:27 2011 +0800
@@ -106,6 +106,7 @@
             type: opts.formmethod || "POST",
             url : opts.endpoint ? self._endpointurl( opts.endpoint) : opts.url,
             data: opts.data,
+            context: opts.context,
 
             dataType: "json",
             complete: function() {
@@ -120,10 +121,11 @@
             success: opts.success,
             error: opts.error ? opts.error : function( jqxhr, status, error ) {
                 if ( status == "abort" )
-                    self.element.ajaxtip("cancel");
+                    this.element.ajaxtip("cancel");
                 else
-                    self.element.ajaxtip( "error", "Error contacting server. " + error);
-                self._trigger( "complete" );
+                    this.element.ajaxtip( "error", "Error contacting server. " + error);
+
+                this._trigger( "complete" );
             }
         });
 
@@ -145,17 +147,24 @@
 });
 
 $.extend( $.dw.ajaxtip, {
-    closeall: function() {
+    closeall: function(e) {
         $(".ajaxtip:visible").each(
             function(){
-                $(this).trigger("close");
+                var $this = $(this);
+
+                console.log($this, e.target, $this.has( e.target ).length > 0 );
+                if ( e && e.target && $this.has( e.target ).length > 0 ) {
+                    // clicked inside this popup; do nothing
+                } else {
+                    $(this).trigger("close");
+                }
             })
     }
 })
 })(jQuery);
 
 jQuery(function($) {
-    $(document).click(function() {
-        $.dw.ajaxtip.closeall();
+    $(document).click(function(e) {
+        $.dw.ajaxtip.closeall(e);
     });
 });
diff -r e3d81dc5d30e -r 2015deb1e51c htdocs/js/jquery.commentmanage.js
--- a/htdocs/js/jquery.commentmanage.js	Fri Jun 17 16:03:18 2011 +0800
+++ b/htdocs/js/jquery.commentmanage.js	Fri Jun 17 16:09:27 2011 +0800
@@ -92,6 +92,7 @@
                 })
                 .ajaxtip("load", {
                     url: posturl,
+                    context: self,
                     data: {
                         talkid  : self.linkdata.id,
                         journal : self.options.journal,
@@ -161,6 +162,7 @@
                 .ajaxtip("load", {
                     url: posturl,
                     data: postdata,
+                    context: self,
                     success: function( data, status, jqxhr ) {
                         if ( data.error ) {
                             self.element.ajaxtip( "error", "Error while trying to delete comment: " + data.error )
diff -r e3d81dc5d30e -r 2015deb1e51c htdocs/js/jquery.contextualhover.js
--- a/htdocs/js/jquery.contextualhover.js	Fri Jun 17 16:03:18 2011 +0800
+++ b/htdocs/js/jquery.contextualhover.js	Fri Jun 17 16:09:27 2011 +0800
@@ -83,6 +83,7 @@
             .ajaxtip( "load", {
                 endpoint: "ctxpopup",
                 formmethod: "GET",
+                context: self,
                 data: {
                     "user": opts.username || "",
                     "userid": opts.userid || 0,
@@ -331,6 +332,7 @@
 
     $link.ajaxtip({namespace: "changerelation"}).ajaxtip("load", {
         endpoint: "changerelation",
+        context: self,
         data: {
             target: info.username,
             action: action,
diff -r e3d81dc5d30e -r 2015deb1e51c htdocs/js/jquery.poll.js
--- a/htdocs/js/jquery.poll.js	Fri Jun 17 16:03:18 2011 +0800
+++ b/htdocs/js/jquery.poll.js	Fri Jun 17 16:09:27 2011 +0800
@@ -24,6 +24,7 @@
             .ajaxtip({namespace: "pollanswer"})
             .ajaxtip("load", {
                 endpoint: "poll",
+                context: self,
                 data: {
                     pollid  : pollid,
                     pollqid : pollqid,
@@ -86,6 +87,7 @@
             $submit.ajaxtip({namespace: "pollsubmit"})
                 .ajaxtip("load", {
                     endpoint: "pollvote",
+                    context: self,
                     data: $poll.serialize(),
                     success: function( data, status, jqxhr ) {
                         if ( data.error ) {
diff -r e3d81dc5d30e -r 2015deb1e51c views/dev/tests/commentmanage.js
--- a/views/dev/tests/commentmanage.js	Fri Jun 17 16:03:18 2011 +0800
+++ b/views/dev/tests/commentmanage.js	Fri Jun 17 16:09:27 2011 +0800
@@ -285,7 +285,7 @@
                 .attr("checked", "checked")
                 .end()
             .find("input[value='Delete']")
-                .click();
+                .click()
 
     this.server.respond();
 } );
--------------------------------------------------------------------------------