PageSourceSearch

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

js eae.es collected 2026-09-24 18:35:29 UTC 8,673 bytes, 192 lines download raw bytes

1(function (Drupal, drupalSettings, once) {
2  // Inyectar CSS para forzar visibilidad de campos en páginas SOLR
3  if (!window.solrSearchFormCSSInjected) {
4    var style = document.createElement('style');
5    style.id = 'solr-search-form-css';
6    style.innerHTML = `
7      body.path-search-solr select[name$="_interested"],
8      body.path-search-solr select[name$="_knowledge_areas"] {
9        display: inline-block !important;
10        visibility: visible !important;
11        height: auto !important;
12      }
13      
14      body.path-search-solr [class*="form-item-multiprogram-information-request-interested"],
15      body.path-search-solr [class*="form-item-multiprogram-information-request-knowledge"] {
16        display: block !important;
17        visibility: visible !important;
18        height: auto !important;
19        opacity: 1 !important;
20      }
21      
22      body.path-search-solr .js-webform-type-select[class*="multiprogram-information-request-interested"],
23      body.path-search-solr .js-webform-type-select[class*="multiprogram-information-request-knowledge"] {
24        display: block !important;
25        visibility: visible !important;
26        opacity: 1 !important;
27      }
28    `;
29    document.head.appendChild(style);
30    window.solrSearchFormCSSInjected = true;
31  }
32
33  Drupal.behaviors.solrSearchForm = {
34    attach: function (context, settings) {
35      var body = document.querySelector('body');
36      if (!body || !body.classList.contains('path-search-solr')) {
37        return;
38      }
39
40      // Función para limpiar y procesar formularios
41      var processSolrForms = function() {
42        // Encontrar todos los formularios multiprogram por clase
43        var forms = document.querySelectorAll('form[class*="webform-submission-multiprogram-information-request"]');
44        
45        if (!forms || forms.length === 0) {
46          return;
47        }
48
49        // Procesar cada formulario encontrado
50        forms.forEach(function(form) {
51          var programField = form.querySelector('[name$="_interested"]');
52          if (!programField) {
53            return;
54          }
55
56          // Mostrar wrapper del programa
57          var programFieldWrapper = programField.closest('.js-webform-type-select') ||
58                                    programField.closest('.webform-type-select') ||
59                                    programField.closest('.js-form-item') ||
60                                    programField.closest('.form-item') ||
61                                    programField.closest('.form-group');
62
63          if (programFieldWrapper) {
64            programFieldWrapper.removeAttribute('style');
65            programFieldWrapper.classList.remove('hidden', 'display-none', 'visually-hidden');
66          }
67
68          // Mostrar y hacer requerido el programa
69          programField.removeAttribute('style');
70          programField.classList.remove('hidden', 'display-none', 'visually-hidden');
71          programField.removeAttribute('disabled');
72          programField.removeAttribute('readonly');
73          programField.required = true;
74          programField.setAttribute('required', 'required');
75          
76          // RESTAURAR TODAS LAS OPCIONES desde drupalSettings
77          if (drupalSettings.sb_forms && drupalSettings.sb_forms.programData && drupalSettings.sb_forms.programData.programs) {
78            // Extraer la opción vacía original
79            var emptyOption = programField.querySelector('option[value=""], option[value="null"], option[value="_none"]');
80            var emptyOptionClone = emptyOption ? emptyOption.cloneNode(true) : null;
81            
82            // Limpiar opciones actuales
83            programField.innerHTML = '';
84            
85            // Restaurar la opción vacía original
86            if (emptyOptionClone) {
87              programField.appendChild(emptyOptionClone);
88            }
89            
90            // Agregar todos los programas desde drupalSettings
91            var allPrograms = drupalSettings.sb_forms.programData.programs;
92            for (var programId in allPrograms) {
93              if (allPrograms.hasOwnProperty(programId)) {
94                var program = allPrograms[programId];
95                var option = document.createElement('option');
96                option.value = programId;
97                option.textContent = program.title || 'Program ' + programId;
98                programField.appendChild(option);
99              }
100            }
101          }
102          
103          // LIMPIAR VALORES PREVIOS: En SOLR no hay contexto
104          // Forzar que el campo quede vacío sin selección
105          programField.value = '';
106
107          // Procesar campo de áreas de conocimiento
108          var knowledgeAreaField = form.querySelector('[name$="_knowledge_areas"]');
109          if (knowledgeAreaField) {
110            var areaFieldWrapper = knowledgeAreaField.closest('.js-webform-type-select') ||
111                                   knowledgeAreaField.closest('.webform-type-select') ||
112                                   knowledgeAreaField.closest('.js-form-item') ||
113                                   knowledgeAreaField.closest('.form-item') ||
114                                   knowledgeAreaField.closest('.form-group');
115
116            if (areaFieldWrapper) {
117              areaFieldWrapper.removeAttribute('style');
118              areaFieldWrapper.classList.remove('hidden', 'display-none', 'visually-hidden');
119            }
120
121            knowledgeAreaField.removeAttribute('style');
122            knowledgeAreaField.classList.remove('hidden', 'display-none', 'visually-hidden');
123            knowledgeAreaField.removeAttribute('disabled');
124            knowledgeAreaField.removeAttribute('readonly');
125            
126            // RESTAURAR TODAS LAS OPCIONES DE ÁREAS desde drupalSettings
127            if (drupalSettings.sb_forms && drupalSettings.sb_forms.knowledgeAreas) {
128              // Extraer la opción vacía original
129              var emptyAreaOption = knowledgeAreaField.querySelector('option[value=""], option[value="null"], option[value="_none"]');
130              var emptyAreaOptionClone = emptyAreaOption ? emptyAreaOption.cloneNode(true) : null;
131              
132              // Limpiar opciones actuales
133              knowledgeAreaField.innerHTML = '';
134              
135              // Restaurar la opción vacía original
136              if (emptyAreaOptionClone) {
137                knowledgeAreaField.appendChild(emptyAreaOptionClone);
138              }
139              
140              // Agregar todas las áreas desde drupalSettings
141              var allAreas = drupalSettings.sb_forms.knowledgeAreas;
142              for (var areaId in allAreas) {
143                if (allAreas.hasOwnProperty(areaId)) {
144                  var areaName = allAreas[areaId];
145                  var areaOption = document.createElement('option');
146                  areaOption.value = areaId;
147                  areaOption.textContent = areaName;
148                  knowledgeAreaField.appendChild(areaOption);
149                }
150              }
151            }
152            
153            // LIMPIAR VALORES PREVIOS: En SOLR no hay contexto
154            // Forzar que el campo quede vacío sin selección
155            knowledgeAreaField.value = '';
156          }
157
158          // Marcar programa como requerido en label
159          var label = form.querySelector('label[for="' + programField.id + '"]');
160          if (label && !label.querySelector('.form-required')) {
161            var requiredSpan = document.createElement('span');
162            requiredSpan.className = 'form-required';
163            requiredSpan.setAttribute('title', Drupal.t('This field is required.'));
164            requiredSpan.textContent = '*';
165            label.appendChild(requiredSpan);
166          }
167
168          // Disparar evento de actualización
169          if (drupalSettings.sb_forms && drupalSettings.sb_forms.programData) {
170            programField.dispatchEvent(new Event('drupal-form-update', { bubbles: true }));
171          }
172        });
173      };
174
175      // Ejecutar inmediatamente
176      processSolrForms();
177
178      // También ejecutar después de un pequeño delay para capturar valores que Drupal carga después
179      setTimeout(processSolrForms, 100);
180
181      // Y una última vez después de más delay
182      setTimeout(processSolrForms, 500);
183      
184      // MARCAR FALLBACK COMO ACTIVADO en SOLR para prevenir reseteos posteriores
185      // Esto evita que form_optimizer.js intente refiltar las opciones cuando cambia knowledge_areas
186      if (typeof window.FormUtils !== 'undefined') {
187        window.FormUtils.fallbackActivated = true;
188        window.FormUtils.fallbackWasActivatedOnce = true;
189      }
190    }
191  };
192})(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.