translations_pack-1.0.0-beta3/translations_moderation_pack/js/sync_states.js

translations_moderation_pack/js/sync_states.js
(function(Drupal) {
Drupal.behaviors.translation_moderation_tabs = {
  initialized: false,
  attach: function(context, settings) {
    if (context.nodeName != '#document' || this.initialized) {
      return;
    }
    this.initialized = true;
    var selector = 'form div.translation-pack.field-moderation_state';
    var wrapper = document.querySelector(selector);
    if (!wrapper) {
      return;
    }

    var sync_states = wrapper.querySelector('input.sync-states[type="checkbox"]');
    var master_select = wrapper.querySelector('.field--name-moderation-state.active select');
    var other_selects = wrapper.querySelectorAll('.field--name-moderation-state:not(.active) select');
    var master_label_language = '';
    var pack_tabs = Drupal.behaviors.translation_tabs.tabs;

    if (sync_states.checked) {
      wrapper.querySelectorAll('[data-lang-pack]').forEach(function(elm) {
        var code = elm.dataset.langPack;
        elm.classList.remove('field-language-' + code);
      });
      
      var active = wrapper.querySelector('.active[data-lang-pack]');
      active.classList.remove('active');
      active.style.display = 'block';
      var labels = active.querySelectorAll('label');
      for (let label_iter of labels) {
        master_label_language = label_iter.textContent.match(/ \(.+\)$/);
        if (master_label_language) {
          label_iter.textContent = label_iter.textContent.replace(master_label_language[0], '');
        }
      }
    }

    sync_states.addEventListener('change', function(event) {
      wrapper.querySelectorAll('[data-lang-pack]').forEach(function(elm) {
        var code = elm.dataset.langPack;

        if (sync_states.checked) {
          if (code == 'original') {
            elm.classList.remove('active');
            elm.style.display = 'block';

            var labels = elm.querySelectorAll('label');
            for (let label_iter of labels) {
              master_label_language = label_iter.textContent.match(/ \(.+\)$/);
              if (master_label_language) {
                label_iter.textContent = label_iter.textContent.replace(master_label_language[0], '');
              }
            }
          }
          else {
            elm.classList.remove('field-language-' + code);
            elm.classList.remove('active');
          }
        }
        else {
          var active_code = pack_tabs.item_list.querySelector('.active').dataset.code;


          if (code == 'original') {
            elm.style.display = null;
            if (elm.classList.contains('field-language-' + active_code)) {
              elm.classList.add('active');
            }
            if (master_label_language) {
              var labels = elm.querySelectorAll('label');
              for (let label_iter of labels) {
                label_iter.textContent = label_iter.textContent + master_label_language[0];
              }
            }
          }
          else {
            elm.classList.add('field-language-' + code);
            if (code == active_code) {
              elm.classList.add('active');
            }
          }
        }
      });
    });

    master_select.addEventListener('change', function(event) {
      if (!sync_states.checked) {
        return;
      }
      for (other_select of other_selects) {
        other_select.selectedIndex = event.target.selectedIndex;
      }
    });

    wrapper.addEventListener('change', (event) => {
      if (event.target.tagName != 'SELECT') {
        return;
      }
      var new_state = event.target.value;
      var all_selects = wrapper.querySelectorAll('.field--name-moderation-state select');
      var disabled = false;
      for (let select_itr of all_selects) {
        if (select_itr.value != new_state) {
          disabled = true;
        }
      }
      if (disabled) {
        sync_states.disabled = true;
      }
    });

  }
}

})(Drupal);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc