shared-events.js

by Kevin Lawver

This file powers the yummy Shared Events module (live example), which is related to the My Events module (live example). This is just for the presentation so I can project code in a big enough font without messing up my text editor's settings.

Contents

if ( !sharedevents ) {
	var sharedevents={
		isinit:false,
		standalone:false,
		debug:false
	};
	
	if ( sharedevents.standalone && !sharedevents.isinit ) {
		var head=document.getElementsByTagName("head")[0];		
	    	djConfig={ baseScriptUri:"http://www.aimpages.com/.resource/jssdk/dojo-0.2.2", isDebug:true };
	    	lop_dojoBaseScriptUri="http://www.aimpages.com/.resource/jssdk/dojo-0.2.2";
	    	
	    	var ds=document.createElement("script");
	    		ds.setAttribute("type","text/javascript");
	    		ds.setAttribute("src","http://o.aolcdn.com/iamalpha/.resource/jssdk/dojo-0.2.2/dojo.js");
	    	var ls=ds.cloneNode(true);
	    		ls.setAttribute("src","http://www.aimpages.com/.resource/jssdk/lop.js");
	    	head.appendChild(ds);
	    	head.appendChild(ls);
	}
}

sharedevents.init=function(instance,action) {
	var module,view;
		
	module=dojo.byId(instance);
	view=dojo.html.getElementsByClass("view",module,"div")[0];
	
	if ( !instance ) {
		instance="shared-events";
		action="view";
	}
	
	if (lop_isEditDomain()) {
		var notice=view.getElementsByTagName("p")[0];
		notice.innerHTML="This module will look for an events module on your visitors' pages and then display any events you have in common.";
		if ( dojo.event.topic && !sharedevents.isinit) {
			dojo.event.topic.subscribe("pageSaveImminent",sharedevents,"onsave");
		}
	} else {
		sharedevents.view(instance,module,view);
	}
	
	sharedevents.isinit=true;
}

sharedevents.onsave=function(module) {
	var ps=dojo.html.getElementsByClass("shared-events-notice",dojo.html.body(),"p"), n=ps.length;
	for (var i=0;i<n;i++) {
		ps[i].innerHTML="<!-- -->";
	}
}

sharedevents.view=function(instance,module,view) {
	var sn=pub.visitor.getNormalizedScreenName(), notice=view.getElementsByTagName("p")[0];
	if (!sn || sn.length<1) {
		notice.innerHTML="I can't figure out who you are, so I can't see if we share any events.  Oh well!";
		return;
	}
	if (pub.visitor.isAuthor()) {
		notice.innerHTML="Hey, you own this page, it would be silly to show anything here.";
		return;
	} 
	
	var url, ajx=new lop.Ajax(), success, error, myModules=dojo.html.getElementsByClass("view my-events"), myLinks, myURLs=[], myTitles=[], yourURLs=[], yourTitles=[], sharedLinks=[], yourLinks, i, n, shared="", nShared=0;
	
	if (myModules.length<1) {
		notice.innerHTML="Oops, I don't have any events.  Silly me!";
		return;
	}
	
	success=function(req,data) {
		sharedevents.dbg("sharedevents: Success!");
		var dom=req.responseXML;
		if (req.responseText.length<1) {
			notice.innerHTML="We don't share any events.  Why is that?";
		}
		sharedevents.dbg("sharedevents: returned: "+req.responseText);
		var yourLinks=dom.getElementsByTagName("a");
		sharedevents.dbg("sharedevents: yourLinks.length: "+yourLinks.length);
		if (yourLinks.length>0) {
			n=yourLinks.length;
			for (i=0;i<n;i++) {
				var l=yourLinks[i];
				yourURLs[yourURLs.length]=l.href;
			}
			
			var nModules=myModules.length;
			for (i=0;i<nModules;i++) {
				myLinks=myModules[i].getElementsByTagName("a");
				var nl=myLinks.length;
				for (var k=0;k<nl;k++ ) {
					var l=myLinks[k];
					if (dojo.lang.inArray(yourURLs,l.href)) {
						shared+="<li><a href='"+l.href+"'>"+dojo.dom.textContent(l)+"</a></li>";
						nShared++;
					}
				}
			}
			sharedevents.dbg("sharedevents: nShared:"+nShared);
			if (nShared>0) {
				notice.innerHTML="Hey, we share "+nShared+" events!";
				var dest=view.getElementsByTagName("ul")[0];
				dest.innerHTML=shared;
			} else {
				notice.innerHTML="We don't share any events.  Why is that?";
			}
		} else {
			notice.innerHTML="We don't share any events.  Why is that?";
		}
	}
	
	error=function() {
		notice.innerHTML="There was some error getting your profile.  I'm sure it's all my fault though.";
	}
	
	url="http://www.aimpages.com/"+sn+"/profile.html?moduleid=my-events-0";
	
	ajx.simpleGet(url,success,error,null);
	
}

sharedevents.dbg=function(msg) {
	if (sharedevents.debug && console && console.debug) {
		console.debug(msg);
	}
}

sharedevents.n=function() {}