// $Id$ (function ($) { /** * Retrieves the summary for the first element. */ $.fn.getSummary = function () { var callback = this.data('summaryCallback'); return (this[0] && callback) ? $.trim(callback(this[0])) : ''; }; /** * Sets the summary for all matched elements. * * @param callback * Either a function that will be called each time the summary is * retrieved or a string (which is returned each time). */ $.fn.setSummary = function (callback) { var that = this; // To facilitate things, the callback should always be a function. If it's // not, we wrap it into an anonymous function which just returns the value. if (typeof callback != 'function') { var val = callback; callback = function () { return val; }; } return this .data('summaryCallback', callback) // To prevent duplicate events, the handlers are first removed and then // (re-)added. .unbind('formUpdated.summary') .bind('formUpdated.summary', function () { that.trigger('summaryUpdated'); }) // The actual summaryUpdated handler doesn't fire when the callback is // changed, so we have to do this manually. .trigger('summaryUpdated'); }; /** * Sends a 'formUpdated' event each time a form element is modified. */ Drupal.behaviors.formUpdated = { attach: function (context) { // These events are namespaced so that we can remove them later. var events = 'change.formUpdated click.formUpdated blur.formUpdated keyup.formUpdated'; $(context) // Since context could be an input element itself, it's added back to // the jQuery object and filtered again. .find(':input').andSelf().filter(':input') // To prevent duplicate events, the handlers are first removed and then // (re-)added. .unbind(events).bind(events, function () { $(this).trigger('formUpdated'); }); } }; Drupal.behaviors.multiselectSelector = { attach: function (context, settings) { // Automatically selects the right radio button in a multiselect control. $('.multiselect select:not(.multiselectSelector-processed)', context) .addClass('multiselectSelector-processed').change(function () { $('.multiselect input:radio[value="' + this.id.substr(5) + '"]') .attr('checked', true); }); } }; /** * Automatically display the guidelines of the selected text format. */ Drupal.behaviors.filterGuidelines = { attach: function (context) { $('.filter-guidelines:not(.filter-guidelines-processed)', context) .addClass('filter-guidelines-processed') .find('label').hide() .parents('.filter-wrapper').find('select.filter-list') .bind('change', function () { $(this).parents('.filter-wrapper') .find('.filter-guidelines-item').hide() .siblings('#filter-guidelines-' + this.value).show(); }) .change(); } }; })(jQuery);