selectize.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import $ from 'jquery';
  2. import 'selectize';
  3. import '../../utils/selectize-required-fix';
  4. import '../../utils/selectize-option-click';
  5. const PagesRoute = {
  6. option: function(item, escape) {
  7. const label = escape(item.text).split(' ');
  8. const arrows = label.shift();
  9. const slug = label.shift();
  10. return `<div class="selectize-route-option">
  11. <span class="text-grey">${arrows}</span>
  12. <span>
  13. <span class="text-update">${slug.replace('(', '/').replace(')', '')}</span>
  14. <span>${label.join(' ')}</span>
  15. </span>
  16. </div>`;
  17. }
  18. };
  19. export default class SelectizeField {
  20. constructor(options = {}) {
  21. this.options = Object.assign({}, options);
  22. this.elements = [];
  23. $('[data-grav-selectize]').each((index, element) => this.add(element));
  24. $('body').on('mutation._grav', this._onAddedNodes.bind(this));
  25. }
  26. add(element) {
  27. element = $(element);
  28. let tag = element.prop('tagName').toLowerCase();
  29. let isInput = tag === 'input' || tag === 'select';
  30. let data = (isInput ? element.closest('[data-grav-selectize]') : element).data('grav-selectize') || {};
  31. let field = (isInput ? element : element.find('input, select'));
  32. if (field.attr('name') === 'data[route]') {
  33. data = $.extend({}, data, { render: PagesRoute });
  34. }
  35. if (!field.length || field.get(0).selectize) { return; }
  36. const plugins = $.merge(data.plugins ? data.plugins : [], ['required-fix']);
  37. field.selectize($.extend({}, data, { plugins }));
  38. this.elements.push(field.data('selectize'));
  39. }
  40. _onAddedNodes(event, target/* , record, instance */) {
  41. let fields = $(target).find('select.fancy, input.fancy, [data-grav-selectize]');
  42. if (!fields.length) { return; }
  43. fields.each((index, field) => this.add(field));
  44. }
  45. }
  46. export let Instance = new SelectizeField();