Author: simoneg
Date: Wed Jul 28 10:59:48 2010
New Revision: 980018

URL: http://svn.apache.org/viewvc?rev=980018&view=rev
Log:
Better support for refresh of internal zones
Support for display of links that activate ajax calls

Added:
    
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuInternalDispatch.aj
Modified:
    
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuDispatch.aj
    
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/autoajax.js
    
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/custom.js

Modified: 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuDispatch.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuDispatch.aj?rev=980018&r1=980017&r2=980018&view=diff
==============================================================================
--- 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuDispatch.aj
 (original)
+++ 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuDispatch.aj
 Wed Jul 28 10:59:48 2010
@@ -2,6 +2,7 @@ package org.apache.magma.website.autoaja
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -25,7 +26,9 @@ import org.apache.magma.website.autoajax
 import org.apache.magma.website.autoajax.data.TimestampInvalidator;
 import org.apache.magma.website.autoajax.webdata.BrowserStateElement;
 import org.apache.magma.website.autoajax.webdata.CollectedAjaxInfo;
+import org.apache.magma.website.autoajax.webdata.InternalHtmlProducerAjaxInfo;
 import org.apache.magma.website.autoajax.webdata.LocalInvalidator;
+import org.apache.magma.website.autoajax.webdata.OrphanHtmlProducerAjaxInfo;
 import org.apache.magma.website.autoajax.webdata.TemplateAjaxInfo;
 import org.apache.magma.website.templating.Template;
 import org.apache.magma.website.templating.TemplateData;
@@ -83,6 +86,7 @@ public aspect AjaxBuDispatch {
                        rewrite.write("<div class='buroot'>");
                        rewrite.write("<div class='ajaxhead'>");
                        List<Change> computed = diff.compute();
+                       computed = normalize(computed);
                        for (Change change : computed) {
                                renderHead(change, head);
                        }
@@ -99,6 +103,23 @@ public aspect AjaxBuDispatch {
                }
        }
        
+       List<Change> normalize(List<Change> change) {
+               List<Change> ret = new ArrayList<Change>();
+               for (Change acc : change) {
+                       if (acc instanceof ChangeAdd) {
+                               LocalElement element = 
((ChangeAdd)acc).getElement();
+                               if (element instanceof 
InternalHtmlProducerAjaxInfo || element instanceof OrphanHtmlProducerAjaxInfo) {
+                                       ChangeRenew ren = new ChangeRenew();
+                                       
ren.setElement(((CollectedAjaxInfo)element).getParent());
+                                       ret.add(ren);
+                                       continue;
+                               }
+                       }
+                       ret.add(acc);
+               }
+               return ret;
+       }
+       
        public void renderHead(Change c, Head h) {
                if (c instanceof ChangeAdd) {
                        ((ChangeAdd)c).getElement().renderHead(h);

Added: 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuInternalDispatch.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuInternalDispatch.aj?rev=980018&view=auto
==============================================================================
--- 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuInternalDispatch.aj
 (added)
+++ 
labs/magma/trunk/website-autoajax/src/main/java/org/apache/magma/website/autoajax/AjaxBuInternalDispatch.aj
 Wed Jul 28 10:59:48 2010
@@ -0,0 +1,48 @@
+package org.apache.magma.website.autoajax;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.startup.Cycle;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.templating.Template;
+import org.apache.magma.website.Dispatch;
+import org.apache.magma.website.templating.Template;
+import org.apache.magma.website.Head;
+import java.io.OutputStream;
+
+public aspect AjaxBuInternalDispatch {
+
+       /**
+        * Handle an ajax-browser-update request for the internals of a single 
producer
+        * @param producer The target producer to produce
+        * @param req The HTTP request
+        * @param resp The HTTP respose
+        */
+       public void Dispatch.handleAJAXBUINT(HtmlProducer producer, 
HttpServletRequest req, HttpServletResponse resp) {
+               setHeaders(producer, resp);
+               try {
+                       OutputStream str = Cycle.get().getRewriting();
+                       if (producer instanceof HtmlProducer) {
+                               str.write("<div 
class=\"buintroot\">".getBytes("UTF-8"));
+                               str.write("<div 
class=\"ajaxhead\">".getBytes("UTF-8"));
+                               Head h = new Head(str);
+                               ((HtmlProducer)producer).head(h);
+                               str.write("</div>".getBytes("UTF-8"));
+                               str.write("<div class=\"ajaxbuint 
".getBytes("UTF-8"));
+                               
str.write(Template.computePartialProducerClasses((HtmlProducer) 
producer).getBytes("UTF-8"));
+                               str.write("\">".getBytes("UTF-8"));
+                       }
+                       producer.produceWithoutCompound(str);
+                       if (producer instanceof HtmlProducer) {
+                               str.write("</div>".getBytes("UTF-8"));
+                               str.write("</div>".getBytes("UTF-8"));
+                       }               
+               } catch (Exception e) {
+                       throw new MagmaException(e, "Error sending ajaxbuint 
response");
+               }
+       }
+       
+       
+}

Modified: 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/autoajax.js
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/autoajax.js?rev=980018&r1=980017&r2=980018&view=diff
==============================================================================
--- 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/autoajax.js
 (original)
+++ 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/autoajax.js
 Wed Jul 28 10:59:48 2010
@@ -99,6 +99,8 @@ magma.autoajax = new function() {
                                stategrp.children=new Array();
                        } else {
                                var ele = document.getElementById(id);
+                               var detached = false;
+                               
                                if (!ele) {
                                        delete(this.state.elements[id]);
                                } else {
@@ -196,7 +198,7 @@ magma.autoajax = new function() {
                        delete me.torenew;
                        return;
                }
-               // TODO better batching asing the server multiple parts
+               // TODO better batching using the server multiple parts
                var stateId = me.torenew[0];
                me.torenew.splice(0,1);
                setTimeout('magma.autoajax._intrenew()', 200);          
@@ -206,7 +208,8 @@ magma.autoajax = new function() {
                event.state = stategrp;
                jqele.trigger(event);
                var url = stategrp.localurl;
-               var real = me._buildUrl(url,".ajax");
+               var internal = (stategrp.type == 'int'); 
+               var real = me._buildUrl(url,".ajax" + (internal ? 'buint' : 
''));
                jQuery.ajax({
                        url: real,
                        type: "GET",
@@ -214,9 +217,12 @@ magma.autoajax = new function() {
                        complete: function(res, status){
                                if ( status == "success" || status == 
"notmodified" ) {
                                        var payload = $(res.responseText);
+                                       var wrapperclass = internal ? 
'ajaxbuint' : 'AjaxWrapper';
+                                       var headclass = internal ? '.ajaxhead' 
: '.AjaxHead';
+                                       // TODO use replaceWith?
                                        jqele.empty();
-                                       
jqele.append(payload.filter('.AjaxWrapper').removeClass('AjaxWrapper'));
-                                       
me.parseMagmaHead(payload.filter('.AjaxHead'), payload, function() {
+                                       jqele.append($('.' + 
wrapperclass,payload).children());
+                                       me.parseMagmaHead($(headclass,payload), 
payload, function() {
                                                var event = 
jQuery.Event("renewed");
                                                event.state = stategrp;
                                                jqele.trigger(event);
@@ -326,6 +332,8 @@ magma.autoajax = new function() {
         */
        this.ajaxBu = function(rel, otherparams) {
                var me = this;
+               var event = jQuery.Event("ajaxloading");
+               $(document).trigger(event);             
                // TODO send the request, parse the resulting
                // head and directives.
                var real = me._buildUrl(rel,".ajaxbu");
@@ -341,6 +349,8 @@ magma.autoajax = new function() {
                        dataType: "html",
                        data: otherparams,
                        complete: function(res, status){
+                               var event = jQuery.Event("ajaxloaded");
+                               $(document).trigger(event);             
                                if ( status == "success" || status == 
"notmodified" ) {
                                        var payload = $(res.responseText);
                                        var actions = payload.children();
@@ -390,6 +400,9 @@ magma.autoajax = new function() {
                                                });
                                        }
                                        //alert("Success");
+                               } else {
+                                       var event = jQuery.Event("ajaxerror");
+                                       $(document).trigger(event);             
        
                                }
                        }
                });             
@@ -548,6 +561,8 @@ magma.autoajax = new function() {
                // All liniks must go thru hash navigation
                jQuery('a', ele).live('click', function(event) {
                        if (me.matchesHashExclude(this)) return true;
+                       var nevent = jQuery.Event("ajaxclick");
+                       $(event.currentTarget).trigger(nevent);         
                        try {
                                me.hashNavigate(event.currentTarget.href);
                        } catch (e) {
@@ -562,6 +577,8 @@ magma.autoajax = new function() {
                        if (me.matchesHashExclude(this)) return true;
                        try {
                                var button = $(event.currentTarget);
+                               var nevent = jQuery.Event("ajaxclick");
+                               button.trigger(nevent);         
                                var form = button.closest('form');
                                var post = form.serializeArray();
                                post[post.length] = {name: button.attr('name'), 
value: button.attr('value') };                          
@@ -575,6 +592,8 @@ magma.autoajax = new function() {
                jQuery('form', ele).live('submit', function(event) {
                        if (me.matchesHashExclude(this)) return true;
                        try {
+                               var nevent = jQuery.Event("ajaxclick");
+                               $(event.currentTarget).trigger(nevent);         
                                me.hashNavigate(event.currentTarget.action, 
$(event.currentTarget).serializeArray());
                        } catch (e) {
                                alert(e);
@@ -617,6 +636,7 @@ magma.autoajax = new function() {
                }               
                return state;
        }
+       
        this.activateDebugClick = function() {
                var me = this;
                $('body').append($('<div id="debuginfo"></div>').css({position: 
'absolute', background:'white', opacity:'0.7',color:'black', border:'2px solid 
red',width:'200px', height: 'auto', textAlign:'left', padding: '2px'}));

Modified: 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/custom.js
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/custom.js?rev=980018&r1=980017&r2=980018&view=diff
==============================================================================
--- 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/custom.js
 (original)
+++ 
labs/magma/trunk/website-autoajax/src/main/resources/org/apache/magma/website/autoajax/custom.js
 Wed Jul 28 10:59:48 2010
@@ -9,4 +9,15 @@ jQuery(document).bind('renewed', functio
 });
 jQuery(document).bind('notrenewed', function(event) {
        $(event.target).css({opacity: 1, backgroundColor: 'gray'});
-});
\ No newline at end of file
+});
+jQuery(document).bind('ajaxloading', function(event) {
+       $('body').css({cursor: 'wait'});
+});
+jQuery(document).bind('ajaxloaded', function(event) {
+       $('body').css({cursor: 'auto'});
+       $('.ajaxloading').removeClass('ajaxloading');
+});
+jQuery(document).bind('ajaxclick', function(event) {
+       $(event.target).addClass('ajaxloading');
+});
+



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to