diff --git a/core/modules/translation_entity/translation_entity.admin.js b/core/modules/translation_entity/translation_entity.admin.js index 2f9f49f..402a3ac 100644 --- a/core/modules/translation_entity/translation_entity.admin.js +++ b/core/modules/translation_entity/translation_entity.admin.js @@ -33,4 +33,54 @@ Drupal.behaviors.translationEntity = { } }; +/** + * Removes unusable locked languages when not showing language selector. + * This behavior gets attached on the relevant entity edition form and + * the translation entity summary form. + */ + Drupal.behaviors.lockedSelector = { + attach: function (context) { + var $context = $(context); + + // Declare the function in scope and reuse it later. + var filterAvailableLanguages = function ($languageSelector, $checkbox) { + // Get the list of all languages and unlocked languages based on the original + // language selector options. + var $originalOptions = $languageSelector.data('originalOptions'); + if (typeof($originalOptions) !== 'undefined') { + var $unlockedOptions = $originalOptions.filter(function (index) { return !/^- .* -$/.test(this.text); }); + if ($checkbox.is(':checked')) { + $languageSelector.html($originalOptions); + $checkbox.siblings('.description').hide(); + } + else { + $languageSelector.html($unlockedOptions); + $checkbox.siblings('.description').show(); + } + }; + }; + + // Determine the kind of form we are dealing with + var $container = $('.bundle-settings .operations, .details-wrapper', context); + var lnSl = 'select[name*="[settings][language][langcode]"], select[name="default_language[langcode]"], select[name="language_configuration[langcode]"]'; + var chSl = 'input[name*="[settings][language][language_show]"], input[name="default_language[language_show]"], input[name="language_configuration[language_show]"]'; + + if ($container.size()) { + $container.once('locked-selector-options').each(function (index, element) { + var $languageSelector = $(lnSl, element); + var $checkbox = $(chSl, element); + // Store the data about original options in the language selector + $languageSelector.data('originalOptions', $('option', $languageSelector)); + + // Execute the function at the beginning and whenever the relevant checkbox + // is clicked + $checkbox.on('click', function (e) { + filterAvailableLanguages($languageSelector, $checkbox); + }); + filterAvailableLanguages($languageSelector, $checkbox); + }); + }; + } + }; + })(jQuery); diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module index b5108ed..59b2a01 100644 --- a/core/modules/translation_entity/translation_entity.module +++ b/core/modules/translation_entity/translation_entity.module @@ -728,6 +728,8 @@ function translation_entity_language_configuration_element_process(array $elemen if (empty($element['#translation_entity_skip_alter']) && user_access('administer entity translation')) { $form_state['translation_entity']['key'] = $element['#name']; $context = $form_state['language'][$element['#name']]; + $form['#attached']['library'][] = array('translation_entity', 'drupal.translation_entity.admin'); + $form['default_terms_language']['default_language']['language_show']['#description'] = t('Some default language options are hidden if the language selector is not shown.'); $element['translation_entity'] = array( '#type' => 'checkbox', @@ -843,6 +845,7 @@ function translation_entity_preprocess_language_content_settings_table(&$variabl array_unshift($rows[$bundle]['data'], $translatable); $rows[$bundle]['data'][1]['data']['#prefix'] = '