Usuario:Ciencia Al Poder/buscador.js

De Wikipedia, la enciclopedia libre

Nota: Después de guardar, debes refrescar la caché de tu navegador para ver los cambios. Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar. Firefox: mientras presionas Mayús pulsas el botón Actualizar, (o presiona Ctrl-Shift-R). Los usuarios de Google Chrome y Safari pueden simplemente pulsar el botón Recargar. Para más detalles e instrucciones acerca de otros exploradores, véase Ayuda:Cómo limpiar la caché.

/* Referencias:
* [[Usuario:Ciencia Al Poder/Notas#Funci.C3.B3n_addOnloadHook|Función addOnloadHook]]
* [[Usuario:Ciencia Al Poder/Notas#A.C3.B1adir_nuevas_p.C3.A1ginas_de_javascript|Añadir nuevas páginas de javascript]] (para añadirlo en vuestra página)
* [[Usuario:Ciencia Al Poder/monobook.js|monobook.js]]
* [[Usuario:Ciencia Al Poder/monobook.css|monobook.css]]
<pre><nowiki> */

/* *********

Módulo de búsqueda modificado.
Programado por [[Usuario:Ciencia Al Poder]]
Para consultas, quejas y demás contacten conmigo en mi discusión.
Si usáis esto enlazado desde mi javascript (no lo copiáis y pegáis
 en una página vuestra) por favor, poned arriba de todo de
 vuestro javascript personal (antes incluso que un <nowiki>)
 la siguiente línea para saber quién me lo enlaza y avisarle si
 hago cambios raros:

[[Usuario:Ciencia Al Poder/buscador.js]]

Disfrutad!

Se puede mejorar la presentación modificando vuestra hoja de
 estilos personal, por ejemplo, añadiendo:

#selecBusqueda {
  width: 11.1em;
  margin: 0.5em 0 0.5em;
  font-size: 95%;
}

label img {
  margin: -0.5em 0 0;
  padding: 0;
  font-size: xx-small;
}

******** */

// Este array es bidimensional, y contendrá una lista
// de (etiqueta, acción, nombre_campo_busca, parámetro_opcional1[], parámetro_opcional2[])
var arrayBuscador = new Array();

////////////////////////
// Para añadir buscadores llamar a la función addFrmBusquedaActions()
// pasándole los campos necesarios y una llamada para cada buscador.
// Para saber cómo añadir más, podéis consultar mi monobook.js para
// ver cómo lo he hecho, o si copiáis esto en un archivo vuestro,
// seguid el ejemplo del final de todo.
// addFrmBusquedaActions(etiqueta a mostrar, action, nombre del parámetro de búsqueda[, parámetro opcional 1, valor 1[, parámetro opcional 2, valor 2]]);
function addFrmBusquedaActions(label, action, nombreCampo, param1, value1, param2, value2){
  var arrayParam1 = new Array(param1, value1);
  var arrayParam2 = new Array(param2, value2);
  if (param1 && value1){
    if (param2 && value2){
      var frmBusActions = new Array(label, action, nombreCampo, arrayParam1, arrayParam2);
    }else{
      var frmBusActions = new Array(label, action, nombreCampo, arrayParam1);
    }
  }else{
    var frmBusActions = new Array(label, action, nombreCampo);
  }

  arrayBuscador[arrayBuscador.length] = frmBusActions;
}

////////////////////////
// Añade los buscadores del array
function addOptionsToSelectBusqueda(nItem){
  for (var i = 0; i < arrayBuscador.length; i++){
    var newOption = document.createElement('option');
    newOption.setAttribute('value', i);
    newOption.setAttribute('id', 'bus-opt-' + i);
    var tdText = document.createTextNode(arrayBuscador[i][0]); 
    newOption.appendChild(tdText);
    var select = document.getElementById('selecBusqueda');
    select.appendChild(newOption);
  }
}

////////////////////////////////////
// Actualiza los parámetros del formulario para que concuerden
// con la opción que hemos seleccionado. Se llama justo al hacer el submit
function actualizaFormBusca(){
  var formBusca = document.getElementById('searchform');
  var selDonde = document.getElementById('selecBusqueda');
  var cajaBusca = document.getElementById('searchInput');
  if (document.getElementById('newwindowchk').checked){
    formBusca.setAttribute('target', '_blank');
  }else{
    formBusca.removeAttribute('target');
  }
  var nItem = parseInt(selDonde.value);
  formBusca.action = arrayBuscador[nItem][1];
  cajaBusca.setAttribute('name', arrayBuscador[nItem][2]);

  var hidInput1 = document.getElementById('hidInput1');
  if (arrayBuscador[nItem][3]){
    hidInput1.setAttribute('name', arrayBuscador[nItem][3][0]);
    hidInput1.setAttribute('value', arrayBuscador[nItem][3][1]);
  }else{
    hidInput1.removeAttribute('name');
    hidInput1.removeAttribute('value');
  }

  var hidInput2 = document.getElementById('hidInput2');
  if (arrayBuscador[nItem][4]){
    hidInput2.setAttribute('name', arrayBuscador[nItem][4][0]);
    hidInput2.setAttribute('value', arrayBuscador[nItem][4][1]);
  }else{
    hidInput2.removeAttribute('name');
    hidInput2.removeAttribute('value');
  }
}

//////////////////////////
// Modifica el módulo de búsqueda. Función principal

function moduloBusqueda(){
  var formBusca = document.getElementById('searchform');
  formBusca.setAttribute('target', '_blank');
  if (formBusca.addEventListener){
    formBusca.addEventListener('submit', actualizaFormBusca, false); 
  }else if (formBusca.attachEvent){
    formBusca.attachEvent('onsubmit', actualizaFormBusca);
  }
  formBusca.setAttribute('onsubmit', 'actualizaFormBusca();');
  var childDiv = formBusca.childNodes.item(0);
  var selDonde = document.createElement('select');
  selDonde.setAttribute('id', 'selecBusqueda');
  var bnIr = document.getElementById('searchGoButton');
  childDiv.insertBefore(selDonde, bnIr);

  var hidInput1 = document.createElement('input');
  hidInput1.setAttribute('type', 'hidden');
  hidInput1.setAttribute('id', 'hidInput1');
  childDiv.insertBefore(hidInput1, selDonde);

  var hidInput2 = document.createElement('input');
  hidInput2.setAttribute('type', 'hidden');
  hidInput2.setAttribute('id', 'hidInput2');
  childDiv.insertBefore(hidInput2, selDonde);

  addOptionsToSelectBusqueda();

  var lblNw = document.createElement('label');
  lblNw.setAttribute('id', 'busnewwindow');
  childDiv.appendChild(lblNw);

  var newWin = document.createElement('input');
  newWin.setAttribute('type', 'checkbox');
  newWin.setAttribute('id', 'newwindowchk');
  newWin.setAttribute('value', 'true');
  newWin.setAttribute('checked', 'checked');
  lblNw.appendChild(newWin);

  var contlbl = document.createElement('img');
  contlbl.setAttribute('src', '/skins-1.5/monobook/external.png');
  contlbl.setAttribute('width', '10');
  contlbl.setAttribute('height', '10');
  contlbl.setAttribute('alt', 'N');
  contlbl.setAttribute('title', 'Nueva ventana');
  lblNw.appendChild(contlbl);
}

// Añade por defecto el buscador de Wikipedia (faltaba más :D)
addFrmBusquedaActions('Wikipedia:es', 'http://es.wikipedia.org/wiki/Special:Search', 'search');

// Añade la función que modifica el módulo de búsqueda a la cola de funciones
// que se cargarán al inicio de la página.
$(moduloBusqueda);

// </nowiki></pre>