// $Id$ Drupal.behaviors.cckManageFields = function(context) { attachUpdateSelects(context); }; function attachUpdateSelects(context) { var widgetTypes = Drupal.settings.contentWidgetTypes; var fields = Drupal.settings.contentFields; // Store the default text of widget selects. $('#content-field-overview .content-widget-type-select', context).each(function() { this.initialValue = this.options[0].text; }); // 'Field type' select updates its 'Widget' select. $('#content-field-overview .content-field-type-select', context).each(function() { this.targetSelect = $('.content-widget-type-select', $(this).parents('tr').eq(0)); $(this).change(function() { var selectedFieldType = this.options[this.selectedIndex].value; var options = (selectedFieldType in widgetTypes) ? widgetTypes[selectedFieldType] : [ ]; this.targetSelect.contentPopulateOptions(options); }); // Trigger change on initial pageload to get the right widget options // when field type comes pre-selected (on failed validation). $(this).trigger('change'); }); // 'Existing field' select updates its 'Widget' select and 'Label' textfield. $('#content-field-overview .content-field-select', context).each(function() { this.targetSelect = $('.content-widget-type-select', $(this).parents('tr').eq(0)); this.targetTextfield = $('.content-label-textfield', $(this).parents('tr').eq(0)); $(this).change(function(e, updateText) { var updateText = (typeof(updateText) == 'undefined') ? true : updateText; var selectedField = this.options[this.selectedIndex].value; var selectedFieldType = (selectedField in fields) ? fields[selectedField].type : null; var selectedFieldWidget = (selectedField in fields) ? fields[selectedField].widget : null var options = (selectedFieldType && (selectedFieldType in widgetTypes)) ? widgetTypes[selectedFieldType] : [ ]; this.targetSelect.contentPopulateOptions(options, selectedFieldWidget); if (updateText) { $(this.targetTextfield).attr('value', (selectedField in fields) ? fields[selectedField].label : ''); } }); // Trigger change on initial pageload to get the right widget options // and label when field type comes pre-selected (on failed validation). $(this).trigger('change', false); }); } jQuery.fn.contentPopulateOptions = function(options, selected) { return this.each(function() { var disabled = false; if (options.length == 0) { options = [this.initialValue]; disabled = true; } // If possible, keep the same widget selected when changing field type. // This is based on textual value, since the internal value might be // different (optionwidgets_buttons vs. nodereference_buttons). var previousSelectedText = this.options[this.selectedIndex].text; var html = ''; jQuery.each(options, function(value, text) { // Figure out which value should be selected. The 'selected' param // takes precedence. var is_selected = ((typeof(selected) !== 'undefined' && value == selected) || (typeof(selected) == 'undefined' && text == previousSelectedText)); html += ''; }); $(this) .html(html) .attr('disabled', disabled ? 'disabled' : ''); }); }