diff -r 000000000000 -r c357d5b60635 test/emission_fichiers/ajax-responder.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/emission_fichiers/ajax-responder.js Fri Feb 11 14:02:37 2011 +0100 @@ -0,0 +1,347 @@ +// $Id: ajax-responder.js,v 1.18.2.6 2010/01/22 06:48:08 merlinofchaos Exp $ +/** + * @file + * + * CTools flexible AJAX responder object. + */ + +(function ($) { + Drupal.CTools = Drupal.CTools || {}; + Drupal.CTools.AJAX = Drupal.CTools.AJAX || {}; + Drupal.CTools.AJAX.commands = Drupal.CTools.AJAX.commands || {}; + + /** + * Success callback for an ajax request. + * + * This function expects to receive a packet of data from a JSON object + * which is essentially a list of commands. Each commands must have a + * 'command' setting and this setting must resolve to a function in the + * Drupal.CTools.AJAX.commands space. + */ + Drupal.CTools.AJAX.respond = function(data) { + for (i in data) { + if (data[i]['command'] && Drupal.CTools.AJAX.commands[data[i]['command']]) { + Drupal.CTools.AJAX.commands[data[i]['command']](data[i]); + } + } + }; + + /** + * Generic replacement click handler to open the modal with the destination + * specified by the href of the link. + */ + Drupal.CTools.AJAX.clickAJAXLink = function() { + if ($(this).hasClass('ctools-ajaxing')) { + return false; + } + + var url = $(this).attr('href'); + var object = $(this); + $(this).addClass('ctools-ajaxing'); + try { + url = url.replace(/nojs/g, 'ajax'); + $.ajax({ + type: "POST", + url: url, + data: { 'js': 1, 'ctools_ajax': 1 }, + global: true, + success: Drupal.CTools.AJAX.respond, + error: function(xhr) { + Drupal.CTools.AJAX.handleErrors(xhr, url); + }, + complete: function() { + object.removeClass('ctools-ajaxing'); + }, + dataType: 'json' + }); + } + catch (err) { + alert("An error occurred while attempting to process " + url); + $(this).removeClass('ctools-ajaxing'); + return false; + } + + return false; + }; + + /** + * Generic replacement click handler to open the modal with the destination + * specified by the href of the link. + */ + Drupal.CTools.AJAX.clickAJAXButton = function() { + if ($(this).hasClass('ctools-ajaxing')) { + return false; + } + + // Put our button in. + this.form.clk = this; + + var url = Drupal.CTools.AJAX.findURL(this); + $(this).addClass('ctools-ajaxing'); + var object = $(this); + try { + if (url) { + url = url.replace('/nojs/', '/ajax/'); + $.ajax({ + type: "POST", + url: url, + data: { 'js': 1, 'ctools_ajax': 1 }, + global: true, + success: Drupal.CTools.AJAX.respond, + error: function(xhr) { + Drupal.CTools.AJAX.handleErrors(xhr, url); + }, + complete: function() { + object.removeClass('ctools-ajaxing'); + }, + dataType: 'json' + }); + } + else { + var form = this.form; + url = $(form).attr('action'); + url = url.replace('/nojs/', '/ajax/'); + $(form).ajaxSubmit({ + type: "POST", + url: url, + data: { 'js': 1, 'ctools_ajax': 1 }, + global: true, + success: Drupal.CTools.AJAX.respond, + error: function(xhr) { + Drupal.CTools.AJAX.handleErrors(xhr, url); + }, + complete: function() { + object.removeClass('ctools-ajaxing'); + }, + dataType: 'json' + }); + } + } + catch (err) { + alert("An error occurred while attempting to process " + url); + $(this).removeClass('ctools-ajaxing'); + return false; + } + return false; + }; + + /** + * Display error in a more fashion way + */ + Drupal.CTools.AJAX.handleErrors = function(xhr, path) { + var error_text = ''; + + if ((xhr.status == 500 && xhr.responseText) || xhr.status == 200) { + error_text = xhr.responseText; + + // Replace all < and > by < and > + error_text = error_text.replace("/&(lt|gt);/g", function (m, p) { + return (p == "lt")? "<" : ">"; + }); + + // Now, replace all html tags by empty spaces + error_text = error_text.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi,""); + + // Fix end lines + error_text = error_text.replace(/[\n]+\s+/g,"\n"); + } + else if (xhr.status == 500) { + error_text = xhr.status + ': ' + Drupal.t("Internal server error. Please see server or PHP logs for error information."); + } + else { + error_text = xhr.status + ': ' + xhr.statusText; + } + + alert(Drupal.t("An error occurred at @path.\n\nError Description: @error", {'@path': path, '@error': error_text})); + } + + /** + * Generic replacement for change handler to execute ajax method. + */ + Drupal.CTools.AJAX.changeAJAX = function () { + if ($(this).hasClass('ctools-ajaxing')) { + return false; + } + + var url = Drupal.CTools.AJAX.findURL(this); + $(this).addClass('ctools-ajaxing'); + var object = $(this); + var form_id = $(object).parents('form').get(0).id; + try { + if (url) { + url = url.replace('/nojs/', '/ajax/'); + $.ajax({ + type: "POST", + url: url, + data: {'ctools_changed': $(this).val(), 'js': 1, 'ctools_ajax': 1 }, + global: true, + success: Drupal.CTools.AJAX.respond, + error: function(xhr) { + Drupal.CTools.AJAX.handleErrors(xhr, url); + }, + complete: function() { + object.removeClass('ctools-ajaxing'); + if ($(object).hasClass('ctools-ajax-submit-onchange')) { + $('form#' + form_id).submit(); + } + }, + dataType: 'json' + }); + } + else { + if ($(object).hasClass('ctools-ajax-submit-onchange')) { + $('form#' + form_id).submit(); + } + return false; + } + } + catch (err) { + alert("An error occurred while attempting to process " + url); + $(this).removeClass('ctools-ajaxing'); + return false; + } + return false; + }; + + /** + * Find a URL for an AJAX button. + * + * The URL for this gadget will be composed of the values of items by + * taking the ID of this item and adding -url and looking for that + * class. They need to be in the form in order since we will + * concat them all together using '/'. + */ + Drupal.CTools.AJAX.findURL = function(item) { + var url = ''; + var url_class = '.' + $(item).attr('id') + '-url'; + $(url_class).each( + function() { + if (url && $(this).val()) { + url += '/'; + } + url += $(this).val(); + }); + return url; + }; + + Drupal.CTools.AJAX.commands.prepend = function(data) { + $(data.selector).prepend(data.data); + Drupal.attachBehaviors($(data.selector)); + }; + + Drupal.CTools.AJAX.commands.append = function(data) { + $(data.selector).append(data.data); + Drupal.attachBehaviors($(data.selector)); + }; + + Drupal.CTools.AJAX.commands.replace = function(data) { + $(data.selector).replaceWith(data.data); + Drupal.attachBehaviors($(data.selector)); + }; + + Drupal.CTools.AJAX.commands.after = function(data) { + var object = $(data.data); + $(data.selector).after(object); + Drupal.attachBehaviors(object); + }; + + Drupal.CTools.AJAX.commands.before = function(data) { + var object = $(data.data); + $(data.selector).before(object); + Drupal.attachBehaviors(object); + }; + + Drupal.CTools.AJAX.commands.html = function(data) { + $(data.selector).html(data.data); + Drupal.attachBehaviors($(data.selector)); + }; + + Drupal.CTools.AJAX.commands.remove = function(data) { + $(data.selector).remove(); + }; + + Drupal.CTools.AJAX.commands.changed = function(data) { + if (!$(data.selector).hasClass('changed')) { + $(data.selector).addClass('changed'); + if (data.star) { + $(data.selector).find(data.star).append(' * '); + } + } + }; + + Drupal.CTools.AJAX.commands.alert = function(data) { + alert(data.text, data.title); + }; + + Drupal.CTools.AJAX.commands.css = function(data) { + /* + if (data.selector && data.selector.contains('* html ')) { + // This indicates an IE hack and we should only do it if we are IE. + if (!jQuery.browser.msie) { + return; + } + data.selector = data.selector.replace('* html ', ''); + } + */ + $(data.selector).css(data.argument); + }; + + Drupal.CTools.AJAX.commands.settings = function(data) { + $.extend(Drupal.settings, data.argument); + }; + + Drupal.CTools.AJAX.commands.data = function(data) { + $(data.selector).data(data.name, data.value); + }; + + Drupal.CTools.AJAX.commands.attr = function(data) { + $(data.selector).attr(data.name, data.value); + }; + + Drupal.CTools.AJAX.commands.restripe = function(data) { + // :even and :odd are reversed because jquery counts from 0 and + // we count from 1, so we're out of sync. + $('tbody tr:not(:hidden)', $(data.selector)) + .removeClass('even') + .removeClass('odd') + .filter(':even') + .addClass('odd') + .end() + .filter(':odd') + .addClass('even'); + }; + + Drupal.CTools.AJAX.commands.redirect = function(data) { + location.href = data.url; + }; + + Drupal.CTools.AJAX.commands.reload = function(data) { + location.reload(); + }; + + Drupal.CTools.AJAX.commands.submit = function(data) { + $(data.selector).submit(); + } + + + /** + * Bind links that will open modals to the appropriate function. + */ + Drupal.behaviors.CToolsAJAX = function(context) { + // Bind links + $('a.ctools-use-ajax:not(.ctools-use-ajax-processed)', context) + .addClass('ctools-use-ajax-processed') + .click(Drupal.CTools.AJAX.clickAJAXLink); + + // Bind buttons + $('input.ctools-use-ajax:not(.ctools-use-ajax-processed), button.ctools-use-ajax:not(.ctools-use-ajax-processed)', context) + .addClass('ctools-use-ajax-processed') + .click(Drupal.CTools.AJAX.clickAJAXButton); + + // Bind select + $('select, input:text, input:radio, input:checkbox', context) + .filter('.ctools-use-ajax-onchange:not(.ctools-use-ajax-processed)') + .addClass('ctools-use-ajax-processed') + .change(Drupal.CTools.AJAX.changeAJAX); + }; +})(jQuery);