/** * Automatic ajax validation * * @see http://drupal.org/project/ajax * @see irc://freenode.net/#drupy * @depends Drupal 6 * @author brendoncrawford * @note This file uses a 79 character width limit. * * */ Drupal.Ajax = new Object; Drupal.Ajax.plugins = {}; Drupal.Ajax.firstRun = false; /** * Init function. * This is being executed by Drupal behaviours. * See bottom of script. * * @param {HTMLElement} context * @return {Bool} */ Drupal.Ajax.init = function(context) { var f, s; if (f = $('.ajax-form', context)) { if (!Drupal.Ajax.firstRun) { Drupal.Ajax.invoke('init'); Drupal.Ajax.firstRun = true; } s = $('input[type="submit"]', f); s.click(function(){ this.form.ajax_activator = $(this); return true; }); f.each(function(){ this.ajax_activator = null; $(this).submit(function(){ if (this.ajax_activator === null) { this.ajax_activator = $('#edit-submit', this); } if (this.ajax_activator.hasClass('ajax-trigger')) { Drupal.Ajax.go($(this), this.ajax_activator); return false; } else { return true; } }); return true; }); } return true; }; /** * Invokes plugins * * @param {Object} formObj * @param {Object} submitter */ Drupal.Ajax.invoke = function(hook, args) { var plugin, r, ret; ret = true; for (plugin in Drupal.Ajax.plugins) { r = Drupal.Ajax.plugins[plugin](hook, args); if (r === false) { ret = false; } } return ret; }; /** * Handles submission * * @param {Object} submitter_ * @return {Bool} */ Drupal.Ajax.go = function(formObj, submitter) { var submitterVal, submitterName, extraData; Drupal.Ajax.invoke('submit', {submitter:submitter}); submitterVal = submitter.val(); submitterName = submitter.attr('name'); submitter.val(Drupal.t('Loading...')); extraData = {}; extraData[submitterName] = submitterVal; extraData['drupal_ajax'] = '1'; formObj.a_ajaxSubmit({ extraData : extraData, beforeSubmit : function(data) { data[data.length] = { name : submitterName, value : submitterVal }; data[data.length] = { name : 'drupal_ajax', value : '1' }; return true; }, dataType : 'json', error: function (XMLHttpRequest, textStatus, errorThrown) { window.alert(Drupal.t('ajax.module: An unknown error has occurred.')); if (window.console) { console.log('error', arguments); } return true; }, success: function(data){ submitter.val(submitterVal); Drupal.Ajax.response(submitter, formObj, data); return true; } }); return false; }; /** * Handles messaging * * @param {Object} formObj * @param {Object} submitter * @param {Object} data * @param {Object} options * @return {Bool} */ Drupal.Ajax.message = function(formObj, submitter, data, options) { var args; data.local = { submitter : submitter, form : formObj }; if (Drupal.Ajax.invoke('message', data)) { Drupal.Ajax.writeMessage(data.local.form, data.local.submitter, options); Drupal.Ajax.invoke('afterMessage', data); } return true; }; /** * Writes message * * @param {Object} formObj * @param {Object} submitter * @param {Object} options * @return {Bool} */ Drupal.Ajax.writeMessage = function(formObj, submitter, options) { var i, _i, thisItem, log, errBox, h, data; if (options.action === 'notify') { // Cleanups $('.messages, .ajax-preview', formObj).remove(); $('input, textarea').removeClass('error status warning required'); // Preview if (options.type === 'preview') { log = $('
').addClass('ajax-preview'); log.html(options.messages); formObj.prepend(log); } // Status, Error, Message else { log = $('