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.