PageSourceSearch

https://www.eae.es/modules/custom/sb_forms/js/sb_forms.js?tm5vw8

js eae.es collected 2026-10-02 04:26:46 UTC 3,917 bytes, 117 lines download raw bytes

1/**
2 * @file
3 * JS file to manage modals.
4 */
5
6(function ($, Drupal, drupalSettings, once) {
7  Drupal.behaviors.sbForms = {
8    attach: function attach(context, settings) {
9
10      // Change pattern.
11      let storagePatternPhone = localStorage.getItem('pattern-phone-default');
12      const ESPattern = '^[6789]{1}\\d{2}(?!.*(.)\\1{4})\\d{6}$';
13
14      if (storagePatternPhone == "undefined" || storagePatternPhone == null) {
15        let fieldPhoneNumber = context.querySelector('[name$="_phonenumber"]');
16        let field = fieldPhoneNumber;
17        if (fieldPhoneNumber != null && fieldPhoneNumber.length > 1) {
18          field = fieldPhoneNumber.first();
19        }
20        storagePatternPhone = field.getAttribute('pattern');
21        localStorage.setItem('pattern-phone-default', storagePatternPhone);
22      }
23
24      // Initialize country field form as slimselect.
25
26      let residenceCountryFields = context.querySelectorAll('[name$="_residencecountry"]');
27
28      if (residenceCountryFields.length < 1) { 
29        return;
30      }
31
32      const setPhonePattern = (c, p) => p.setAttribute('pattern', c === 'ES' ? ESPattern : storagePatternPhone);
33      const noAccents = s => s.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
34
35      // Búsqueda sin acentos
36      const fixSearch = () => setTimeout(() => document.querySelectorAll('.ss-search input').forEach(i => {
37        const orig = i.oninput;
38        i.oninput = function (e) {
39          if (!this.value.trim()) { 
40            return orig && orig.call(this, e);
41          }
42
43          const list = this.closest('.ss-content').querySelector('.ss-list');
44          const term = noAccents(this.value.trim());
45          let found = false;
46
47          list.querySelectorAll('.ss-option').forEach(o => {
48            const match = noAccents(o.textContent).includes(term);
49            o.classList[match ? 'remove' : 'add']('ss-hide');
50            if (match) { 
51              found = true;
52            }
53          });
54
55          const msg = list.querySelector('.ss-search-not-found');
56          if (!found && !msg) { 
57            list.appendChild(
58              Object.assign(document.createElement('div'), {
59                className: 'ss-search-not-found',
60                textContent: Drupal.t("Resultado no encontrado")
61              })
62            ); 
63          } else if (found && msg) { 
64            msg.remove();
65          }
66        };
67      }), 100);
68
69      residenceCountryFields.forEach( select => {
70
71        const data_id = select.getAttribute('data-id');
72        const id = select.getAttribute('id');
73        const selectWrapper = select.closest('.form-type-select');
74        const parentForm = select.closest('form');
75        const phoneNumber = parentForm.querySelector('[name$="_phonenumber"]');
76
77        let country = select.value;
78
79        if (!data_id || (data_id && data_id.indexOf('ss-') != 0)) {
80          new SlimSelect({
81            select: `#${id}`,
82            settings: {
83              contentLocation: selectWrapper,
84              contentPosition: 'relative',
85              showSearch: true,
86              selectByGroup: false,
87              searchPlaceholder: ' ',
88              searchText: Drupal.t("Resultado no encontrado"),
89              searchFilter: (o, s) => noAccents(o.text).includes(noAccents(s))
90            },
91            events: {
92              afterChange: () => {
93                select.dispatchEvent(new Event('change', { bubbles: true }));
94              }
95            }
96          });
97          fixSearch();
98        }
99
100        if (!select.classList.contains('sb_form')) {
101
102          setPhonePattern(country, phoneNumber);
103
104          select.addEventListener('change', () => {
105            country = select.value;
106            setPhonePattern(country, phoneNumber);
107          });
108
109          select.classList.add('sb_form');
110        }
111
112      });
113
114    }// End attach
115  };
116  
117})(jQuery, Drupal, drupalSettings, once);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.