bookish_admin-1.0.x-dev/modules/bookish_tags/js/tag-widget.js

modules/bookish_tags/js/tag-widget.js
(function ($, Drupal) {

  Drupal.behaviors.bookishAdminTagsWidget = {
    attach: function attach(context, settings) {
      once('bookish-tags-widget', 'input.bookish-tags-widget', context).forEach(function (input) {
          var tagify = new Tagify(input, {
            whitelist:[],
          }),
          controller;

        new DragSort(tagify.DOM.scope, {
          selector: '.' + tagify.settings.classNames.tag,
          callbacks: {
              dragEnd: function (elm) {
                tagify.updateValueByDOMTags()
              }
          }
        })

        var onInput = Drupal.debounce(function (e) {
          var value = e.detail.value;
          tagify.whitelist = null;

          // https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort
          controller && controller.abort();
          controller = new AbortController();

          // show loading animation and hide the suggestions dropdown
          tagify.loading(true);

          fetch($(input).attr('data-autocomplete-url') + '?q=' + encodeURIComponent(value), {signal: controller.signal})
            .then(res => res.json())
            .then(function (data) {
              var newData = [];
              data.forEach(function (current) {
                newData.push({
                  value: current.label,
                  entity_id: current.value.match(/.+\s\(([^\)]+)\)/)[1],
                });
              });
              tagify.whitelist = newData;
              tagify.loading(false);
              tagify.dropdown.show(value);
            });
        }, 500);
        tagify.on('input', onInput)
      });
    }
  };

})(jQuery, Drupal);

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

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