Utilisateur:Pinocchio/création référence biblio.js

De BoyWiki

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
/* Affichage et gestion formulaire pour création de référence bibliographique */
/* Création d'une sous-page par édition et maj ou création page principale d'oeuvre */

/* charge mw.toolbar - gestion insertTags */
mw.loader.load("mediawiki.action.edit");


/* Affichage du premier formulaire - nom de page oeuvre */

function creatrefbib_form() {
   /* seulement pour page création réf. bib. et utilisateur ayant droit écriture pages biblio. */
   if (wgPageName != 'Utilisateur:Pinocchio/Création_Référence_Bibliographique') return;
   if (wgUserGroups == null || wgUserGroups.join(" ").match(/user|sysop|bureaucrat/) == null) return;
   if (wgAction != 'view') return;

   /* affiche formulaire création nom de page oeuvre */
   var contfrm = document.getElementById('creatrefbib');
   var contxt = '<fieldset><legend>Formation du nom de page de l’œuvre</legend>';
   contxt += '<div id="creatrefbib_visu">Référence:</div>';
   contxt += '<form method="post" action="#" name="creat_biblio_pgnm_frm">';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Titre original de l’œuvre</td><td><input name="pgnmtt" type="text" size="100%" onkeyup="creatrefbib_pgnm(1)" /></td></tr>';
   contxt += '<tr><td class="tit">Nom de l’auteur</td><td><input name="pgnmau" type="text" size="60%" onkeyup="creatrefbib_pgnm(2)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">sans le prénom (optionnel: seulement si titre trop imprécis)</td></tr>';
   contxt += '<tr><td class="tit"><b>ou</b> Choisir un nom de page existant</td><td><select name="reflst" onchange="creatrefbib_pgnm(-1)"><option>Recherche des références en cours...</option></select></td></tr>';
   contxt += '<tr><td><br /></td></tr>';
   contxt += '<tr><td></td><td><input type="button" name="valid" value="Valider" disabled onclick="creatrefbib_form2()" /></td></tr>';
   contxt += '</table></form></fieldset>';
   contfrm.innerHTML = contxt;

   /* init objet requete serveur */
   var xhr = createxhrobject();
   if (xhr == null) return;

   /* recherche pages oeuvres pour liste déroulante */
   xhr.open('GET', '/fr/api.php?action=query&list=embeddedin&eititle=Modèle:Référence&einamespace=104&eifilterredir=nonredirects&eilimit=500&format=xml&rawcontinue', false);
   xhr.send('');
   if (xhr.readyState != 4 || xhr.status != 200) {
      alert('Erreur requête - Abandon');
      return;
   }

   var pagesrch = xhr.responseXML.documentElement;
   var pglst = pagesrch.getElementsByTagName('embeddedin')[0].childNodes;

   var tabtit = new Array();
   for (var i = 0; i < pglst.length ; i++) tabtit[i] = pglst[i].getAttribute('title');
   tabtit.sort(alphacompare);

   /* remplit liste des pages */
   var lstr = document.forms['creat_biblio_pgnm_frm'].elements['reflst'];
   lstr.removeChild(lstr.firstChild);
   var opt = document.createElement('option');
   lstr.appendChild(opt);
   for (var i = 0; i < tabtit.length ; i++) {
      opt = document.createElement('option');
      var str = tabtit[i].replace(/&amp;/g,'&');
      var val = document.createTextNode(str.replace(/^Référence:/, ""));
      opt.appendChild(val);
      lstr.appendChild(opt);
   }

   /* affecte event à chaque champs saisie : récup dernier champs sélectionné (pour insertion car. spé. toolbar) */
   //var entries = contfrm.getElementsByTagName("input");
   //for (var j=0; j < entries.length; j++) {
   //   entries[j].onfocus = function() {currentFocused = this;};
   //}
}

addOnloadHook(creatrefbib_form);


/* Affichage du second formulaire - nom de sous-page édition */
/*   lance par bouton valider du formulaire 1 ou bouton 'créer une autre page' de fin création */

function creatrefbib_form2() {
   /* cas retour nouvelle création édition suite fin création précédente */
   if (document.forms['creat_biblio_pgnm_frm'].elements['args'] != undefined) var pgnm = document.forms['creat_biblio_pgnm_frm'].elements['args'].value.split(/\//)[0];
   else var pgnm = document.getElementById('creatrefbib_visu').innerHTML;

   /* init objet requete serveur */
   var xhr_object = createxhrobject();
   if (xhr_object == null) return;

   /* test si page oeuvre existe */
   var x = pgnm.replace(/&amp;/g,'\%26');
   x = x.replace(/\?/g,'\%3F');
   xhr_object.open('GET', '/fr/index.php?title='+x+'&action=raw&ctype=text/plain', false);
   xhr_object.send('');
   if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      if(confirm("La page «"+x+"» existe déjà\nContinuer ?") == false) return;
   }
   /* test si page oeuvre existe sans champs auteur */
   x = x.split(/ \(/);
   if(x[1] != undefined) {
      xhr_object.open('GET', '/fr/index.php?title='+x[0]+'&action=raw&ctype=text/plain', false);
      xhr_object.send('');
      if (xhr_object.readyState == 4 && xhr_object.status == 200) {
         if(confirm("Une page «"+x[0]+"» existe déjà\nContinuer ?") == false) return;
      }
   }
   
   /* affiche formulaire création nom de souspage édition */
   var contfrm = document.getElementById('creatrefbib');
   var contxt = '<fieldset><legend>Formation du nom de sous-page d’édition</legend>';
   contxt += '<div id="creatrefbib_visu">'+pgnm+'/</div>';
   contxt += '<form method="post" action="#" name="creat_biblio_pgnm_frm">';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Volume ou Partie</td><td><input name="pgnmvl" type="text" size="40%" onkeyup="creatrefbib_pgnm(3)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Volume (optionnel pour un livre), partie (obligatoire le cas échéant pour un article de périodique)</td></tr>';
   contxt += '<tr><td class="tit">Titre traduit</td><td><input name="pgnmtr" type="text" size="100%" onkeyup="creatrefbib_pgnm(4)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">(optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Éditeur ou Titre du périodique</td><td><input name="pgnmed" type="text" size="80%" onkeyup="creatrefbib_pgnm(5)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">éditeur (pour un livre ou un périodique), Titre du périodique (pour un article)</td></tr>';
   contxt += '<tr><td class="tit">Collection</td><td><input name="pgnmco" type="text" size="60%" onkeyup="creatrefbib_pgnm(6)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">(optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Année de publication</td><td><input name="pgnman" type="text" size="20%" onkeyup="creatrefbib_pgnm(7)" /></td></tr>';
   contxt += '<tr><td class="tit">Collaborateur important ou Numéro</td><td><input name="pgnmcb" type="text" size="40%" onkeyup="creatrefbib_pgnm(8)" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">collaborateur important (optionnel), Numéro (obligatoire pour un article de périodique)</td></tr>';
   contxt += '<tr><td class="tit"><b>ou</b> Choisir un nom de sous-page existant</td><td><select name="reflst" onchange="creatrefbib_pgnm(-2)"><option>Recherche des références en cours...</option></select></td></tr>';
   contxt += '<tr><td><br /></td></tr>';
   contxt += '<tr><td></td><td><input type="button" name="valid" value="Valider" disabled onclick="creatrefbib_form3()" /></td></tr>';
   contxt += '</table></form></fieldset>';
   contfrm.innerHTML = contxt;

/* recherche souspages éditions de la page oeuvre choisie pour liste déroulante */
   xhr_object.open('GET', '/fr/api.php?action=query&list=allpages&apfilterredir=nonredirects&apnamespace=104&apprefix='+pgnm.replace(/^Référence:/,'')+'&aplimit=500&format=xml&rawcontinue', false);
   xhr_object.send('');
   if (xhr_object.readyState != 4 || xhr_object.status != 200) {
      alert('Erreur requête - Abandon');
      return;
   }

   var lstr = document.forms['creat_biblio_pgnm_frm'].elements['reflst'];
   lstr.removeChild(lstr.firstChild);
   var pagesrch = xhr_object.responseXML.documentElement;
   var pglst = pagesrch.getElementsByTagName('allpages')[0].childNodes;
   var tabpg = new Array();
   for (var i = 0; i < pglst.length ; i++) tabpg[i] = pglst[i].getAttribute('title');

   /* remplit liste des souspages */
   var opt = document.createElement('option');
   var val = document.createTextNode('---');
   opt.appendChild(val);
   lstr.appendChild(opt);
   for (var i = 1; i < tabpg.length; i++) {
      opt = document.createElement('option');
      val = document.createTextNode(tabpg[i]);
      opt.appendChild(val);
      lstr.appendChild(opt);
   }

   /* affecte event à chaque champs saisie : récup dernier champs sélectionné pour insert car spé toolbar) */
   //var entries = contfrm.getElementsByTagName("input");
   //for (var j=0; j < entries.length; j++) {
   //   entries[j].onfocus = function() {currentFocused = this;};
   //}
}


/* Affichage du formulaire principal - contenu notice édition */
/*   lance par bouton valider du formulaire 2 */

function creatrefbib_form3() {
   /* récup champs du formulaire 2 */
   var frm = document.forms['creat_biblio_pgnm_frm'];
   var pgnm = document.getElementById('creatrefbib_visu').innerHTML.split(/\//);
   var sspgnm = pgnm[1];
   pgnm = pgnm[0];
   var pgnmtt = pgnm.split(/ \(|\)/);
   if (pgnmtt[1] != undefined) {
      var pgnmau = pgnmtt[1];
	  pgnmtt = pgnmtt[0].replace(/^Référence:/,'');
   }
   else {
      pgnmtt = pgnm.replace(/^Référence:/,'');
      var pgnmau = '';
   }
   var pgnmvl = frm.elements['pgnmvl'].value;
   var pgnmtr = frm.elements['pgnmtr'].value;
   var pgnmed = frm.elements['pgnmed'].value;
   var pgnmco = frm.elements['pgnmco'].value;
   var pgnman = frm.elements['pgnman'].value;
   var pgnmcb = frm.elements['pgnmcb'].value;
   
   /* affiche formulaire contenu référence édition */
   var contfrm = document.getElementById('creatrefbib');
   var contxt = '<form method="post" action="#" name="creat_biblio_pgnm_frm">';
   contxt += '<fieldset><legend>Titre et responsabilité</legend>';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Titre</td><td><input name="titr" type="text" size="100%" value="'+pgnmtt+'" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Titre de l’œuvre dans cette édition</td></tr>';
   contxt += '<tr><td class="tit">Sous-titre</td><td><input name="sstr" type="text" size="100%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Sous-titre (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Volume</td><td><input name="nvol" type="text" size="40%" value="'+pgnmvl+'" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Numéro, volume, tome (par ex: vol. II, tome 2) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Titre du volume</td><td><input name="ttvl" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Sous-titre du volume</td><td><input name="ssvl" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Titre langue2</td><td><input name="tito" type="text" size="100%" value="'+pgnmtr+'" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">si traduction (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Sous-titre langue2</td><td><input name="ssto" type="text" size="100%" /></td></tr>';
   contxt += '<tr><td class="tit">Volume langue2</td><td><input name="nvoo" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">Titre du volume langue2</td><td><input name="ttvo" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Sous-titre du volume langue2</td><td><input name="ssvo" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Lien titre</td><td><input name="lnti" type="text" size="100%" value="'+pgnmtt+'" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Lien interne vers l’article ou le texte de l’œuvre (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Auteurs - Précisions</td><td><input name="prea" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">S’il n’y a pas d’auteur du livre à proprement parler, mais un «responsable» ou «directeur» (indiquer par ex: edited by) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Auteurs - Précisions abrégées</td><td><input name="pbga" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Comme ci-dessus mais en abrégé pour les références courtes (indiquer par ex: eds.) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Auteur - Prénom</td><td><input name="aup1" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Auteur - Nom</td><td><input name="aun1" type="text" size="60%" value="'+pgnmau+'" /></td></tr>';
   contxt += '<tr><td class="tit">Lien auteur</td><td><input name="lnau" type="text" size="100%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Lien interne vers l’article sur l’auteur (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Auteur2 - Prénom</td><td><input name="aup2" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Auteur2 - Nom</td><td><input name="aun2" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Lien auteur2</td><td><input name="lna2" type="text" size="100%" /></td></tr>';
   contxt += '<tr><td class="tit">Auteur3 - Prénom</td><td><input name="aup3" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Auteur3 - Nom</td><td><input name="aun3" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Lien auteur3</td><td><input name="lna3" type="text" size="100%" /></td></tr>';
   contxt += '<tr><td class="tit">Auteurs - complément</td><td><input name="cpla" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Champs alternatif à "Auteurs - Précisions" mais placé après les auteurs (indiquer par ex: ed.) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Collaborateurs</td><td><input name="clbr" type="text" size="100%" value="'+pgnmcb+'" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Indiquer la chaîne complète en respectant la syntaxe, par ex: ill. Prénom Nom ; trad. Prénom Nom (optionnel)</td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Article</legend>';
   contxt += '<table border="0" align="left">';
   contxt += '<tr><td class="tit" style="padding-left:6px;">Lien vers page édition</td><td><select name="lnpe" style="width:110%;" onchange="creatrefbib_swarticle()"></select></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Cas particulier aux articles: indiquer la page édition de référence de l’article (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Emplacement article</td><td><input name="posa" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Cas particulier aux articles: indiquer emplacement dans l’ouvrage (p. ex.: p.10-15) (optionnel)</td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Publication</legend>';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Numéro édition</td><td><input name="nedt" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Ordre de cette édition dans un ensemble historique (p. ex.: 5ème éd. revue et corrigée) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Lieu édition</td><td><input name="lie1" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">Éditeur</td><td><input name="edt1" type="text" size="60%" value="'+pgnmed+'" /></td></tr>';
   contxt += '<tr><td class="tit">Lieu édition2</td><td><input name="lie2" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">Éditeur2</td><td><input name="edt2" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Lieu édition3</td><td><input name="lie3" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">Éditeur3</td><td><input name="edt3" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Année édition</td><td><input name="date" type="text" size="20%" value="'+pgnman+'" /></span></td></tr>';
   contxt += '<tr><td class="tit">Lieu impression</td><td><input name="liei" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">Imprimeur</td><td><input name="impr" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">Date impression</td><td><input name="dati" type="text" size="20%" /></td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Description</legend>';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Pages</td><td><input name="nbpg" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Nombre de pages (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Caractéristiques</td><td><input name="cart" type="text" size="50%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Autres caractéristiques (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Format</td><td><input name="frmt" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Format ou dimensions en cm (optionnel)</td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Collection</legend>';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">Collection</td><td><input name="col1" type="text" size="60%" value="'+pgnmco+'" /></td></tr>';
   contxt += '<tr><td class="tit">ISSN</td><td><input name="issn" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Numéro collection</td><td><input name="nco1" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Numéro dans la collection (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Collection2</td><td><input name="col2" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">ISSN2</td><td><input name="iss2" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Numéro collection2</td><td><input name="nco2" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Collection3</td><td><input name="col3" type="text" size="60%" /></td></tr>';
   contxt += '<tr><td class="tit">ISSN3</td><td><input name="iss3" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Numéro collection3</td><td><input name="nco3" type="text" size="20%" /></td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Notes</legend>';
   contxt += '<table border="0" align="left">';
   contxt += '<tr><td class="tit" style="padding-left:20px;">Langue</td><td><input name="lang" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Langue de l’œuvre (anglais, latin, arabe...) (optionnel)</td></tr>';
   contxt += '<tr><td class="tit">Langue2</td><td><input name="lng2" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Notes</td><td><textarea name="nota" style="width:140%; height:5em; font-family:sans-serif; font-size:9pt;"></textarea></td></tr>';
   contxt += '<tr><td></td><td class="cmt">Notes additionnelles (isbn ajouté automatiquement à la suite des notes) (optionnel)</td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<fieldset><legend>Identification</legend>';
   contxt += '<table border="0" align="center">';
   contxt += '<tr><td class="tit">ISBN</td><td><input name="isbn" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Complément ISBN</td><td><input name="csbn" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">ISBN2</td><td><input name="isb2" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Complément ISBN2</td><td><input name="csb2" type="text" size="40%" /></td></tr>';
   contxt += '<tr><td class="tit">ISBN3</td><td><input name="isb3" type="text" size="20%" /></td></tr>';
   contxt += '<tr><td class="tit">Complément ISBN3</td><td><input name="csb3" type="text" size="40%" /></td></tr>';
   contxt += '</table></fieldset>';
   contxt += '<br />';
   contxt += '<input type="hidden" name="args" value="'+pgnm+'/'+sspgnm+'" />';
   contxt += '<span style="display:block; margin: 20px 35%;"><input type="button" name="valid" value="Créer cette référence" onclick="creatrefbib_valid(2)" /></span>';
   contxt += '</form>';
   contxt += '<div id="creatrefbib_end" style="margin:20px auto;"></div>';
   contfrm.innerHTML = contxt;
   var frm = document.forms['creat_biblio_pgnm_frm'];

   /* init objet requete serveur */
   var xhr_object = createxhrobject();
   if (xhr_object == null) return;

   /* test si souspage existe */
   var x = pgnm+'/'+sspgnm;
   x = x.replace(/&amp;/g,'\%26');
   x = x.replace(/\?/g,'\%3F');
   xhr_object.open('GET', '/fr/index.php?title='+x+'&action=raw&ctype=text/plain', false);
   xhr_object.send('');
   if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      /* si existe */
      /* mode modification souspage existante */
      frm.elements['valid'].value = 'Enregistrer les modifications pour cette référence';
      frm.elements['valid'].onclick = function() {creatrefbib_valid(1);};

      /* recup contenu des attrib=val dans souspage */
      var tabsspgcont = xhr_object.responseText.split(/\n\||\n<!--.*-->/);
      /* affecte champs du formulaire avec val recup */
      var attr = new Array('titre','sous-titre','volume','titre-volume','sous-titre-volume','titre-langue2','sous-titre-langue2','volume-langue2','titre-volume-langue2','sous-titre-volume-langue2','lien-titre','précisions-auteurs','précisions-abrégées','prénom','nom','lien-auteur','prénom2','nom2','lien-auteur2','prénom3','nom3','lien-auteur3','complément-auteurs','collaborateurs','lien-page-article','emplacement-article','no-édition','lieu','éditeur','lieu2','éditeur2','lieu3','éditeur3','année','lieu-impr','imprimeur','date-impr','pages','caractéristiques','format','collection','issn','no-collection','collection2','issn2','no-collection2','collection3','issn3','no-collection3','langue','langue2','notes','notes-article','isbn','complément-isbn','isbn2','complément-isbn2','isbn3','complément-isbn3');
      var elem = new Array('titr','sstr','nvol','ttvl','ssvl','tito','ssto','nvoo','ttvo','ssvo','lnti','prea','pbga','aup1','aun1','lnau','aup2','aun2','lna2','aup3','aun3','lna3','cpla','clbr','lnpe','posa','nedt','lie1','edt1','lie2','edt2','lie3','edt3','date','liei','impr','dati','nbpg','cart','frmt','col1','issn','nco1','col2','iss2','nco2','col3','iss3','nco3','lang','lng2','nota','nota','isbn','csbn','isb2','csb2','isb3','csb3');
      for (var i = 1; i < tabsspgcont.length; i++) {
         if (tabsspgcont[i].length < 2) continue;
         /* cherche attributs dans tableau */
         for (var j = 0; j < attr.length; j++) {
            if (tabsspgcont[i].split(/=/)[0] == attr[j]) {
               /* applique valeurs à éléments formulaire */
               if (attr[j] == 'lien-page-article') {
                  var opt = document.createElement('option');
                  var val = tabsspgcont[i].split(/=/)[1].replace(/^Référence:/,'');
                  opt.appendChild(document.createTextNode(val));
                  frm.elements['lnpe'].appendChild(opt);
                  creatrefbib_swarticle();
               }
               else if (attr[j] == 'emplacement-article') {
                  if (!tabsspgcont[i].split(/=/)[1].match(/emplacement-article/)) frm.elements[elem[j]].value = tabsspgcont[i].split(/=/)[1];
               }
               else if (attr[j] == 'notes-article') {
                  if (!tabsspgcont[i].split(/=/)[1].match(/notes-article/)) frm.elements[elem[j]].value = tabsspgcont[i].split(/=/)[1];
               }
               else frm.elements[elem[j]].value = tabsspgcont[i].split(/=/)[1];
               break;
            }
         }
      }
   }

   /* recherche toutes les souspages éditions pour liste déroulante lien-page-article */
   xhr_object.open('GET', '/fr/api.php?action=query&list=embeddedin&eititle=Modèle:Édition&einamespace=104&eifilterredir=nonredirects&eilimit=500&format=xml&rawcontinue', true);
   xhr_object.onreadystatechange = function() {
      if (xhr_object.readyState != 4 || xhr_object.status != 200) return;

      var pagesrch = xhr_object.responseXML.documentElement;
      var pglst = pagesrch.getElementsByTagName('embeddedin')[0].childNodes;
      var tabtit = new Array();
      for (var i = 0; i < pglst.length ; i++) tabtit[i] = pglst[i].getAttribute('title');
      tabtit.sort(alphacompare);

      /* remplit liste des souspages */
      var opt = document.createElement('option');
      frm.elements['lnpe'].appendChild(opt);
      for (var i = 0; i < tabtit.length ; i++) {
         if (!tabtit[i].match(/\//)) continue;
         var opt = document.createElement('option');
         var val = tabtit[i].replace(/^Référence:/,'');
         opt.appendChild(document.createTextNode(val));
         frm.elements['lnpe'].appendChild(opt);
      }
   }
   xhr_object.send('');

   /* affecte event à chaque champs saisie : récup dernier champs sélectionné (pour insert car spé toolbar) */
   //var entries = contfrm.getElementsByTagName("input");
   //for (var j=0; j < entries.length; j++) {
   //   entries[j].onfocus = function() {currentFocused = this;};
   //}
}



/* Logique de test et formation visu nom de page et souspage */
/*   lancé par event onkeyup */

function creatrefbib_pgnm(c) {
   var frm = document.forms['creat_biblio_pgnm_frm'];
   /* gestion inhib bouton */
   if(c==1) {
      if(frm.elements['pgnmtt'].value.length >3) frm.elements['valid'].disabled = false;
      else frm.elements['valid'].disabled = true;
   }
   if(c>2) {
      /* test condition if(année && (editeur || (collec && collab)) && nbc =< 4 && nbc >= 2) */
      var nbc = 0;
      if(frm.elements['pgnmtr'].value.length >3) nbc++;
      if(frm.elements['pgnmvl'].value.length >2) nbc++;
      if(frm.elements['pgnmed'].value.length >2) nbc++;
      if(frm.elements['pgnmco'].value.length >2) nbc++;
      if(frm.elements['pgnmcb'].value.length) nbc++;
      if(frm.elements['pgnman'].value.length >2 
        && (frm.elements['pgnmed'].value.length >2 || (frm.elements['pgnmco'].value.length >3 && frm.elements['pgnmcb'].value.length >3)) 
        && nbc <= 3 && nbc >= 1) {
          frm.elements['valid'].disabled = false;
      }
      else frm.elements['valid'].disabled = true;
   }
   /* affichage zone visu */
   if (c==1 || c==2) {
      var pgnm = "Référence:"+frm.elements['pgnmtt'].value;
      if (frm.elements['pgnmau'].value.length) pgnm += " ("+frm.elements['pgnmau'].value+")";
      document.getElementById('creatrefbib_visu').innerHTML = pgnm;
   }
   if(c>2) {
      var pgnm = document.getElementById('creatrefbib_visu').innerHTML.split(/\//);
      pgnm = pgnm[0]+'/';
      if(frm.elements['pgnmtr'].value.length >3) pgnm += frm.elements['pgnmtr'].value+' – ';
      if(frm.elements['pgnmvl'].value.length >2) pgnm += frm.elements['pgnmvl'].value+', ';
      if(frm.elements['pgnmed'].value.length >2) pgnm += frm.elements['pgnmed'].value;
      if(frm.elements['pgnmco'].value.length >2) pgnm += '-'+frm.elements['pgnmco'].value;
      if(frm.elements['pgnman'].value.length >2) pgnm += ', '+frm.elements['pgnman'].value;
      if(frm.elements['pgnmcb'].value.length) pgnm += ' ('+frm.elements['pgnmcb'].value+')';
      document.getElementById('creatrefbib_visu').innerHTML = pgnm;
   }
   /* cas choix dans liste déroulante */
   if(c==-1) {
      frm.elements['valid'].disabled = false;
	  document.getElementById('creatrefbib_visu').innerHTML = 'Référence:'+frm.elements['reflst'].options[frm.elements['reflst'].selectedIndex].text;
   }
   if(c==-2) {
      if (frm.elements['reflst'].selectedIndex == 0) {
         frm.elements['valid'].disabled = true;
         var nm = document.getElementById('creatrefbib_visu').innerHTML.split(/\//)[0];
         document.getElementById('creatrefbib_visu').innerHTML = nm+'/';
      } else {
         frm.elements['valid'].disabled = false;
         var nm = document.getElementById('creatrefbib_visu').innerHTML.split(/\//)[0];
         nm += '/'+frm.elements['reflst'].options[frm.elements['reflst'].selectedIndex].text;
         document.getElementById('creatrefbib_visu').innerHTML = nm;
      }
   }
}



/* Active/désactive champs suivants sur cas article */
/*   lancé par onchange sur "lien vers page édition" */
function creatrefbib_swarticle() {
   var frm = document.forms['creat_biblio_pgnm_frm'];
   var elem = new Array('nedt','lie1','edt1','lie2','edt2','lie3','edt3','date','liei','impr','dati','nbpg','cart','frmt','col1','issn','nco1','col2','iss2','nco2','col3','iss3','nco3','lang','lng2','isbn','csbn','isb2','csb2','isb3','csb3');
   if(frm.elements['lnpe'].options[frm.elements['lnpe'].selectedIndex].text.length >3) var val = 1;
   else var val = 0;
   for (var i = 0; i < elem.length; i++) {
      frm.elements[elem[i]].disabled = val;
   }
}



/* Création pages lancée par bouton validation formulaire principal */
/*   création sous-page édition */
/*   création ou ajout texte à page oeuvre en mode création (creat=1) */

function creatrefbib_valid(creat) {
   /* inhib bouton et message */
   var frm = document.forms['creat_biblio_pgnm_frm'];
   frm.elements['valid'].disabled = true;
   document.getElementById('creatrefbib_end').innerHTML = 'La création des pages prend quelques secondes...';
   /* récup args */
   var pgname = frm.elements['args'].value.split(/\//)[0];
   var sspgname = frm.elements['args'].value.split(/\//)[1];
   var lnpgarticle = 'Référence:'+frm.elements['lnpe'].options[frm.elements['lnpe'].selectedIndex].text;
   var pgrefctnt = '<!-- En saisie manuelle insérer sous la ligne switch des lignes de la forme |param=val.\n<!-- Liste des attributs disponible dans la documentation du modèle Édition.\n-->';
   if (lnpgarticle.length >13) {
      /* init contenu nouvelle page article */
      pgrefctnt += '{{{{#switch:{{{1}}}|check|réf=Réf édition|isbd=Réf isbd article|isbdmod=Réf isbdmod article|refcourte=Réf courte article|#default=Édition}}\n';
      var attr = new Array('titre','sous-titre','volume','titre-volume','sous-titre-volume','titre-langue2','sous-titre-langue2','volume-langue2','titre-volume-langue2','sous-titre-volume-langue2','lien-titre','précisions-auteurs','précisions-abrégées','prénom','nom','lien-auteur','prénom2','nom2','lien-auteur2','prénom3','nom3','lien-auteur3','complément-auteurs','collaborateurs','lien-page-article','emplacement-article','notes-article');
      var elem = new Array('titr','sstr','nvol','ttvl','ssvl','tito','ssto','nvoo','ttvo','ssvo','lnti','prea','pbga','aup1','aun1','lnau','aup2','aun2','lna2','aup3','aun3','lna3','cpla','clbr','lnpe','posa','nota');
   } else {
      /* init contenu nouvelle page édition */
      pgrefctnt += '{{{{#switch:{{{1}}}|check|réf=Réf édition|isbd=Réf isbd|isbdmod=Réf isbdmod|refcourte=Réf courte|#default=Édition}}\n';
      var attr = new Array('titre','sous-titre','volume','titre-volume','sous-titre-volume','titre-langue2','sous-titre-langue2','volume-langue2','titre-volume-langue2','sous-titre-volume-langue2','lien-titre','précisions-auteurs','précisions-abrégées','prénom','nom','lien-auteur','prénom2','nom2','lien-auteur2','prénom3','nom3','lien-auteur3','complément-auteurs','collaborateurs','no-édition','lieu','éditeur','lieu2','éditeur2','lieu3','éditeur3','année','lieu-impr','imprimeur','date-impr','pages','caractéristiques','format','collection','issn','no-collection','collection2','issn2','no-collection2','collection3','issn3','no-collection3','langue','langue2','notes','isbn','complément-isbn','isbn2','complément-isbn2','isbn3','complément-isbn3');
      var elem = new Array('titr','sstr','nvol','ttvl','ssvl','tito','ssto','nvoo','ttvo','ssvo','lnti','prea','pbga','aup1','aun1','lnau','aup2','aun2','lna2','aup3','aun3','lna3','cpla','clbr','nedt','lie1','edt1','lie2','edt2','lie3','edt3','date','liei','impr','dati','nbpg','cart','frmt','col1','issn','nco1','col2','iss2','nco2','col3','iss3','nco3','lang','lng2','nota','isbn','csbn','isb2','csb2','isb3','csb3');
   }
   for (var i=0; i < attr.length; i++) {
      if (frm.elements[elem[i]].value.length) {
         if (elem[i] == 'lnpe') pgrefctnt += '|'+attr[i]+'='+lnpgarticle+'\n';
         else pgrefctnt += '|'+attr[i]+'='+frm.elements[elem[i]].value+'\n';
      }
   }
   pgrefctnt += '<!-- Ne pas modifier après cette ligne. -->\n';
   pgrefctnt += '|commentaires={{{commentaires|}}}\n';
   if (lnpgarticle.length <13) {
      pgrefctnt += '|emplacement-article={{{emplacement-article|}}}\n';
      pgrefctnt += '|notes-article={{{notes-article|}}}\n';
   }
   pgrefctnt += '}}';

   /* init objet requete serveur */
   var xhr_object = createxhrobject();
   if (xhr_object == null) return;
   
   /* test si page oeuvre existe */
   var x = pgname.replace(/&/g,'\%26');
   x = x.replace(/\?/g,'\%3F');
   xhr_object.open('GET', '/fr/index.php?title='+x+'&action=raw&ctype=text/plain', false);
   xhr_object.send('');
   /* si page oeuvre n'existe pas */
   if (xhr_object.readyState == 4 && xhr_object.status == 404) {
      var mode = 0;
      /* init contenu nouvelle page oeuvre */
      var pgeuvctnt = "{{"+"Référence}}\n\n== Éditions ==\n<!-- Attention : cette partie ne doit faire qu'inclure les sous-pages (une par édition). Pour ajouter une édition, il faut créer une nouvelle sous-page. -->\n\n";
   }
   /* si page oeuvre existe déjà */
   if (xhr_object.readyState == 4 && xhr_object.status == 200) {
      var mode = 1;
      var pgeuvctnt = "\n\n";
   }
   if (xhr_object.readyState != 4 || (xhr_object.status != 404 && xhr_object.status != 200)) {
      alert("Erreur inconnue");
      return;
   }
   
   /* init contenu page oeuvre */
   /* cas titre du lien différent du contenu du lien (titre dans sspgname p.e. édition étrangère) */
   var y = sspgname.split(/ – /);
   if (y[1] != undefined) pgeuvctnt += "=== [["+pgname+"/"+sspgname+"|''"+y[0]+"'', "+y[1]+"]] ===";
   else pgeuvctnt += "=== [["+pgname+"/"+sspgname+"|''"+pgname.replace(/^Référence:/,'')+"'', "+sspgname+"]] ===";
   pgeuvctnt += "\n\n{{"+pgname+"/"+sspgname+"}}";
   
   
   /* Création des pages */
   /* page oeuvre - seulement si creat=2 (sinon recrée seulement page édition) */
   if (creat == 2) {
      x = pgname.replace(/&/g,'\%26');
      x = x.replace(/\?/g,'\%3F');
      xhr_object.open('GET', '/fr/index.php?title='+x+'&action=edit', false);
      xhr_object.send('');
      if (xhr_object.readyState != 4 || xhr_object.status != 200) {
         alert("Erreur edit page "+x);
         return;
      }
      var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
   
      /* si page oeuvre existe déjà récup contenu */
      if (mode == 1) {
         var pgdit = pagedit[1];
         pgdit = pgdit.replace(/\n+$/,'');
         pgdit = pgdit.replace(/&lt;/g, '<');
         pgdit = pgdit.replace(/&gt;/g, '>');
         pgdit = pgdit.replace(/&amp;/g, '&');
         pgdit = pgdit.replace(/&quot;/g, '"');
         pgeuvctnt = pgdit+pgeuvctnt;
      }

      /* récup variables */
      pagedit = pagedit[0]+pagedit[2];
      pagedit = pagedit.replace(/\n/g, '');
      var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
      startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
      var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
      editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
      var editoken = pagedit.match(/.{80}name="wpEditToken/i);
      editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
      var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
      autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
      var summary = 'Routine création référence biblio.';

      /* init requete serveur - maj page oeuvre */
      var boundary = '--------------23242526272829';
      var data = '';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAutoSummary"\r\n\r\n'+autosummary+'\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
      data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+pgeuvctnt+'\r\n';
      data += '--'+boundary+'--\r\n';

      xhr_object.open('POST', '/fr/index.php?title='+x+'&action=submit', false);
      //xhr_object.setRequestHeader("Host", "www.boywiki.org");
      xhr_object.setRequestHeader("Charset", "utf-8");
      xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
      xhr_object.setRequestHeader("Content-Length", String(data.length));
      xhr_object.send(data);

      if (xhr_object.readyState != 4 || xhr_object.status != 200) {
         alert('Erreur écriture page '+x);
         return;
      }
   }

   /* sous-page édition ou article (la page est supposée nouvelle donc vide sinon elle est recréée) */
   x = pgname+'/'+sspgname;
   x = x.replace(/&/g,'\%26');
   x = x.replace(/\?/g,'\%3F');
   xhr_object.open('GET', '/fr/index.php?title='+x+'&action=edit', false);
   xhr_object.send('');
   if (xhr_object.readyState != 4 || xhr_object.status != 200) {
      alert("Erreur edit page "+x);
      return;
   }
   
   /* récup variables */
   pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
   pagedit = pagedit[0]+pagedit[2];
   pagedit = pagedit.replace(/\n/g, '');
   var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
   startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
   var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
   editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
   var editoken = pagedit.match(/.{80}name="wpEditToken/i);
   editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
   var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
   autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
   var summary = 'Routine création référence biblio.';

   /* init requete serveur - maj page édition */
   var boundary = '--------------23242526272829';
   var data = '';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAutoSummary"\r\n\r\n'+autosummary+'\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
   data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+pgrefctnt+'\r\n';
   data += '--'+boundary+'--\r\n';

   xhr_object.open('POST', '/fr/index.php?title='+x+'&action=submit', false);
   //xhr_object.setRequestHeader("Host", "fr.boywiki.org");
   xhr_object.setRequestHeader("Charset", "utf-8");
   xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
   xhr_object.setRequestHeader("Content-Length", String(data.length));
   xhr_object.send(data);
   
   if (xhr_object.readyState != 4 || xhr_object.status != 200) {
      alert('Erreur écriture page '+x);
      return;
   }
   alert('Fin création');
   /* boutons retour */
   document.getElementById('creatrefbib_end').innerHTML = '<span style="display:block; margin: 20px 25%;"><input type="button" value="Ajouter une autre sous-page du même ouvrage" onclick="creatrefbib_form2()" /><input type="button" value="Revenir au début" onclick="javascript:window.location.reload()" /></span>';
}