// Global killswitch if (Drupal.jsEnabled) { $(document).ready(eventAutoAttach); } /** * Attaches the block update behaviour to links tagged with 'updateblock' class. */ function eventAutoAttach() { $("#block-event-0 div.content a.updateblock").click(function() { this.blockUpdater = new blockUpdater( $(this).parents(".content"), $(this).attr("href").replace("month", "block"), eventAutoAttach); return false; }); } blockUpdater.prototype.update = function (result, xmlHttp, blockUpdate) { if(!blockUpdate.dontUpdate) { blockUpdate.element.height(blockUpdate.styleHeight); //style.height = blockUpdate.styleHeight; blockUpdate.element.width(blockUpdate.styleWidth); if (result!=undefined) blockUpdate.element.html(result); else { blockUpdate.element.html(this.oldHTML); blockUpdate.dontUpdate = true; } if(blockUpdate.callback != undefined) blockUpdate.callback(); } } /** * create an instance of this object in the onClick handler for block update links. * * could be separated into misc/blockupdater.js */ function blockUpdater(element,url,callback) { var blockUpdate = this; element.blockUpdate = this; this.element = element; this.callback = callback; this.oldHTML = this.element.html(); // Keep block at it's current width/height to make the update less disruptive this.styleHeight = $(element).height(); this.styleWidth = $(element).width(); $(element).height(element.offsetHeight+"px"); $(element).width(element.offsetWidth+"px"); // Clear block contents $(element).html(""); // Insert progressbar this.progress = new Drupal.progressBar('updateprogress'); $(this.element).prepend(this.progress.element); var cancel = document.createElement("a"); $(cancel).text("cancel").attr("alt","cancel").addClass("cancel-update").attr("href","#").click(function() { this.parent().blockUpdate.update(undefined,undefined,blockUpdate); return false; }); this.element.prepend($(cancel)); this.dontUpdate = false; $(this).ajaxComplete(function(request, settings) { this.update(request, settings, this); } ); $.ajax({ type: "GET", url: url }); } blockUpdater.prototype.update = function (result, xmlHttp, blockUpdate) { if(!blockUpdate.dontUpdate) { blockUpdate.element.height(blockUpdate.styleHeight); //style.height = blockUpdate.styleHeight; blockUpdate.element.width(blockUpdate.styleWidth); if (result!=undefined) { blockUpdate.element.html(xmlHttp.responseText); } else { blockUpdate.element.html(this.oldHTML); blockUpdate.dontUpdate = true; } if(blockUpdate.callback != undefined) blockUpdate.callback(); } }