diff --git a/core/modules/translation_entity/translation_entity.admin.inc b/core/modules/translation_entity/translation_entity.admin.inc index 0e2316b..8be0dab 100644 --- a/core/modules/translation_entity/translation_entity.admin.inc +++ b/core/modules/translation_entity/translation_entity.admin.inc @@ -34,9 +34,22 @@ function translation_entity_field_sync_widget(array $field, FieldInstance $insta $element = array( '#type' => 'checkboxes', '#title' => t('Translatable elements'), + '#description' => t('Disabled field are not shown. Please enable the fields you need to make translatable first.'), '#options' => $options, '#default_value' => !empty($instance['settings']['translation_sync']) ? $instance['settings']['translation_sync'] : $default, ); + // Attach JS file and settings to prevent translation to be selected for + // disabled fields. + $element['#attached'] = array('js' => array( + array( + 'data' => drupal_get_path('module', 'translation_entity') . '/translation_entity.admin.js', + 'type' => 'file', + ), + array( + 'data' => array('translationEntity' => array('translation_sync' => array_keys($options))), + 'type' => 'setting', + ), + )); } return $element; diff --git a/core/modules/translation_entity/translation_entity.admin.js b/core/modules/translation_entity/translation_entity.admin.js index bf253a1..f6ffd11 100644 --- a/core/modules/translation_entity/translation_entity.admin.js +++ b/core/modules/translation_entity/translation_entity.admin.js @@ -50,4 +50,40 @@ Drupal.behaviors.translationEntity = { } }; +Drupal.behaviors.translationSyncColumns = { + attach: function (context) { + $.each(Drupal.settings.translationEntity.translation_sync, function (index, element) { + // Get the translatable element checkbox. + var $translatableCheckbox = $(':input[name="instance[settings][translation_sync][' + element + ']"][type="checkbox"]'); + // Try to guess the checkbox that enables the field. + var $enableCheckbox = $(':input[name="instance[settings][' + element + ']"][type="checkbox"]'); + if (!$enableCheckbox.length) { + // If the setting did not exist try adding _field. + $enableCheckbox = $(':input[name="instance[settings][' + element + '_field]"][type="checkbox"]'); + }; + if ($enableCheckbox.length) { + // If the field is not enabled then uncheck and disable the translation + // checkbox. + var uncheckHideCheckboxes = function ($checkbox) { + if (!$checkbox.is(':checked')) { + $translatableCheckbox.prop('checked', false); + // Finds the wrapper form item and hide it. + $translatableCheckbox.closest('.form-item').hide(); + } + else { + // Finds the wrapper form item and shows it. + $translatableCheckbox.closest('.form-item').show(); + } + }; + // Bind on change. + $enableCheckbox.on('change', function (e) { + uncheckHideCheckboxes($(e.target)); + }); + // Process first load. + uncheckHideCheckboxes($enableCheckbox); + } + }); + } +}; + })(jQuery);