danielebarchiesi@0: /** danielebarchiesi@0: * @file danielebarchiesi@0: * danielebarchiesi@0: * CTools flexible AJAX responder object. danielebarchiesi@0: */ danielebarchiesi@0: danielebarchiesi@0: (function ($) { danielebarchiesi@0: Drupal.CTools = Drupal.CTools || {}; danielebarchiesi@0: Drupal.CTools.AJAX = Drupal.CTools.AJAX || {}; danielebarchiesi@0: /** danielebarchiesi@0: * Grab the response from the server and store it. danielebarchiesi@0: * danielebarchiesi@0: * @todo restore the warm cache functionality danielebarchiesi@0: */ danielebarchiesi@0: Drupal.CTools.AJAX.warmCache = function () { danielebarchiesi@0: // Store this expression for a minor speed improvement. danielebarchiesi@0: $this = $(this); danielebarchiesi@0: var old_url = $this.attr('href'); danielebarchiesi@0: // If we are currently fetching, or if we have fetched this already which is danielebarchiesi@0: // ideal for things like pagers, where the previous page might already have danielebarchiesi@0: // been seen in the cache. danielebarchiesi@0: if ($this.hasClass('ctools-fetching') || Drupal.CTools.AJAX.commandCache[old_url]) { danielebarchiesi@0: return false; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Grab all the links that match this url and add the fetching class. danielebarchiesi@0: // This allows the caching system to grab each url once and only once danielebarchiesi@0: // instead of grabbing the url once per . danielebarchiesi@0: var $objects = $('a[href="' + old_url + '"]') danielebarchiesi@0: $objects.addClass('ctools-fetching'); danielebarchiesi@0: try { danielebarchiesi@0: url = old_url.replace(/\/nojs(\/|$)/g, '/ajax$1'); danielebarchiesi@0: $.ajax({ danielebarchiesi@0: type: "POST", danielebarchiesi@0: url: url, danielebarchiesi@0: data: { 'js': 1, 'ctools_ajax': 1}, danielebarchiesi@0: global: true, danielebarchiesi@0: success: function (data) { danielebarchiesi@0: Drupal.CTools.AJAX.commandCache[old_url] = data; danielebarchiesi@0: $objects.addClass('ctools-cache-warmed').trigger('ctools-cache-warm', [data]); danielebarchiesi@0: }, danielebarchiesi@0: complete: function() { danielebarchiesi@0: $objects.removeClass('ctools-fetching'); danielebarchiesi@0: }, danielebarchiesi@0: dataType: 'json' danielebarchiesi@0: }); danielebarchiesi@0: } danielebarchiesi@0: catch (err) { danielebarchiesi@0: $objects.removeClass('ctools-fetching'); danielebarchiesi@0: return false; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return false; danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Cachable click handler to fetch the commands out of the cache or from url. danielebarchiesi@0: */ danielebarchiesi@0: Drupal.CTools.AJAX.clickAJAXCacheLink = function () { danielebarchiesi@0: $this = $(this); danielebarchiesi@0: if ($this.hasClass('ctools-fetching')) { danielebarchiesi@0: $this.bind('ctools-cache-warm', function (event, data) { danielebarchiesi@0: Drupal.CTools.AJAX.respond(data); danielebarchiesi@0: }); danielebarchiesi@0: return false; danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: if ($this.hasClass('ctools-cache-warmed') && Drupal.CTools.AJAX.commandCache[$this.attr('href')]) { danielebarchiesi@0: Drupal.CTools.AJAX.respond(Drupal.CTools.AJAX.commandCache[$this.attr('href')]); danielebarchiesi@0: return false; danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: return Drupal.CTools.AJAX.clickAJAXLink.apply(this); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Find a URL for an AJAX button. danielebarchiesi@0: * danielebarchiesi@0: * The URL for this gadget will be composed of the values of items by danielebarchiesi@0: * taking the ID of this item and adding -url and looking for that danielebarchiesi@0: * class. They need to be in the form in order since we will danielebarchiesi@0: * concat them all together using '/'. danielebarchiesi@0: */ danielebarchiesi@0: Drupal.CTools.AJAX.findURL = function(item) { danielebarchiesi@0: var url = ''; danielebarchiesi@0: var url_class = '.' + $(item).attr('id') + '-url'; danielebarchiesi@0: $(url_class).each( danielebarchiesi@0: function() { danielebarchiesi@0: var $this = $(this); danielebarchiesi@0: if (url && $this.val()) { danielebarchiesi@0: url += '/'; danielebarchiesi@0: } danielebarchiesi@0: url += $this.val(); danielebarchiesi@0: }); danielebarchiesi@0: return url; danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: // Hide these in a ready to ensure that Drupal.ajax is set up first. danielebarchiesi@0: $(function() { danielebarchiesi@0: Drupal.ajax.prototype.commands.attr = function(ajax, data, status) { danielebarchiesi@0: $(data.selector).attr(data.name, data.value); danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: danielebarchiesi@0: Drupal.ajax.prototype.commands.redirect = function(ajax, data, status) { danielebarchiesi@0: if (data.delay > 0) { danielebarchiesi@0: setTimeout(function () { danielebarchiesi@0: location.href = data.url; danielebarchiesi@0: }, data.delay); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: location.href = data.url; danielebarchiesi@0: } danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: Drupal.ajax.prototype.commands.reload = function(ajax, data, status) { danielebarchiesi@0: location.reload(); danielebarchiesi@0: }; danielebarchiesi@0: danielebarchiesi@0: Drupal.ajax.prototype.commands.submit = function(ajax, data, status) { danielebarchiesi@0: $(data.selector).submit(); danielebarchiesi@0: } danielebarchiesi@0: }); danielebarchiesi@0: })(jQuery);