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]