From 566c5e3f7979da510916f807a45c36568e13bc42 Mon Sep 17 00:00:00 2001
From: pbarroca <pbarroca@afi-sa.fr>
Date: Wed, 26 Jul 2017 16:37:32 +0200
Subject: [PATCH] hotline #60748 : fix js interaction

---
 .../View/Helper/Admin/TagListeSuggestion.php  |  57 ++++----
 public/opac/js/tag_selection/tag_selection.js | 124 ++++++++++--------
 2 files changed, 96 insertions(+), 85 deletions(-)

diff --git a/library/ZendAfi/View/Helper/Admin/TagListeSuggestion.php b/library/ZendAfi/View/Helper/Admin/TagListeSuggestion.php
index f89ce5e6e8d..670babfa5c7 100644
--- a/library/ZendAfi/View/Helper/Admin/TagListeSuggestion.php
+++ b/library/ZendAfi/View/Helper/Admin/TagListeSuggestion.php
@@ -78,17 +78,25 @@ class ZendAfi_View_Helper_Admin_TagListeSuggestion
 
 
   protected function _renderTermInput() {
-    $html = str_repeat("&nbsp;",3). $this->_('Rechercher') . ' ';
-    $event="'".$this->_type."','".$this->_name."',this.value,min_cars=1";
-    $html.='<input id="'.$this->_name.'_champ" type="text" size="28" max-length="30" onkeyUp="getSuggest('.$event.')" >';
-    $html.=str_repeat("&nbsp;",3).'<a style="color:#D44100;text-decoration:none;" href="javascript:suggestClear(\''.$this->_name.'\',true)">&raquo;'.$this->_('Tout effacer').'</a>';
-
-    return $html;
+    return str_repeat('&nbsp;', 3) . $this->_('Rechercher')
+      . ' ' . $this->_tag('input', null,
+                          ['id' => $this->_name . '_champ',
+                           'type' => 'text',
+                           'size' => 28,
+                           'max-length' => 30,
+                           'onkeyup' => "getSuggest('".$this->_type."', '".$this->_name."', this.value ,min_cars=1)"])
+      . str_repeat('&nbsp;', 3)
+      . $this->_tag('a', '&raquo;'.$this->_('Tout effacer'),
+                    ['style' => 'color:#D44100;text-decoration:none;',
+                     'href' => 'javascript:suggestClear(\''.$this->_name.'\', true)']);
   }
 
 
   protected function _renderListPlaceholder() {
-    return '<div id="'. $this->_name .'_liste" style="margin-top:10px;padding-top:5px;border-top:1px solid #C8C8C8"></div>';
+    return $this
+      ->_tag('div', '',
+             ['id' => $this->_name .'_liste',
+              'style' => 'margin-top:10px;padding-top:5px;border-top:1px solid #C8C8C8;']);
   }
 
 
@@ -126,32 +134,27 @@ class ZendAfi_View_Helper_Admin_TagListeSuggestion
       return '';
 
     $label = $this->_config->isThesaurus()
-      ? $model->getIdOrigine().' : ' . Class_CodifThesaurus::getLibelleHierarchique($model)
+      ? $model->getIdOrigine() . ' : ' . Class_CodifThesaurus::getLibelleHierarchique($model)
       : $model->getLibelle();
 
-    return '&laquo;'. $model->getLibelle() . '&raquo;';
+    return $this->_tag('span', $label,
+                       ['class' => 'selected', 'clef' => $value]);
   }
 
 
   protected function _configFor($type) {
-    $dewey_pcdm4_options = [1 => $this->_('indice commence par'),
-                            2 => $this->_('libellé commence par'),
-                            3 => $this->_('libellé contient')];
+    $dewey_pcdm4_options = [1 => $this->_('Indice commence par'),
+                            2 => $this->_('Libellé commence par'),
+                            3 => $this->_('Libellé contient')];
 
     $map = [
-            'auteur' => ['Class_CodifAuteur', [1 => $this->_('commence par')]],
-
-            'matiere' => ['Class_CodifMatiere'],
-
-            'interet' => ['Class_CodifCentreInteret'],
-
-            'dewey' => ['Class_CodifDewey', $dewey_pcdm4_options],
-
-            'pcdm4' => ['Class_CodifPcdm4', $dewey_pcdm4_options],
-
+            'auteur'    => ['Class_CodifAuteur', [1 => $this->_('commence par')]],
+            'matiere'   => ['Class_CodifMatiere'],
+            'interet'   => ['Class_CodifCentreInteret'],
+            'dewey'     => ['Class_CodifDewey', $dewey_pcdm4_options],
+            'pcdm4'     => ['Class_CodifPcdm4', $dewey_pcdm4_options],
             'thesaurus' => ['Class_CodifThesaurus'],
-
-            'tag' => ['Class_CodifTags']
+            'tag'       => ['Class_CodifTags']
     ];
 
     return array_key_exists($type, $map)
@@ -185,8 +188,8 @@ class ZendAfi_View_Helper_Admin_TagListeSuggestionConfig extends Class_Entity {
 
 
   public function __construct() {
-    $this->setOptions([1 => $this->_('commence par'),
-                       2 => $this->_('contient')]);
+    $this->setOptions([1 => $this->_('Commence par'),
+                       2 => $this->_('Contient')]);
   }
 
 
@@ -211,7 +214,7 @@ class ZendAfi_View_Helper_Admin_TagListeSuggestionConfigThesaurus
     $this->setOptions([1 => $this->_('Hierarchie contient'),
                        2 => $this->_('Libellé commence par'),
                        3 => $this->_('Libellé contient'),
-                       4 => $this->_('indice commence par')]);
+                       4 => $this->_('Indice commence par')]);
   }
 
 
diff --git a/public/opac/js/tag_selection/tag_selection.js b/public/opac/js/tag_selection/tag_selection.js
index c09ddd436ba..27d529abce7 100644
--- a/public/opac/js/tag_selection/tag_selection.js
+++ b/public/opac/js/tag_selection/tag_selection.js
@@ -18,19 +18,17 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
-function ouvrirFermer(oImg,sId)
+function ouvrirFermer(oImg, sId)
 {
   sImg = oImg.src;
-  if(sImg.indexOf("ouvrir") > 0 )
-  {
-    oImg.src=sImg.replace("ouvrir", "fermer");
-    getId(sId).style.display="block";
-  }
-  else
-  {
-    oImg.src=sImg.replace("fermer", "ouvrir");
-    getId(sId).style.display="none";
+  if (sImg.indexOf("ouvrir") > 0) {
+    oImg.src = sImg.replace("ouvrir", "fermer");
+    getId(sId).style.display = "block";
+    return;
   }
+
+  oImg.src=sImg.replace("fermer", "ouvrir");
+  getId(sId).style.display = "none";
 }
 
 
@@ -102,72 +100,82 @@ function selectAll(sIdChamp,bMode,allSelectedAsNothingSelected)
 
 function getSuggest(sRubrique,sChamp,sValeur,nMinCars)
 {
-  if(sValeur.length < nMinCars)
-  { 
-    getId(sChamp + "_liste").innerHTML="";
+  if(sValeur.length < nMinCars) { 
+    getId(sChamp + "_liste").innerHTML = '';
     return;
   }
-  while(sValeur.indexOf(" ")>0)
-  {
-    sValeur=sValeur.replace(" ", "+");
-  }
-  sMode=getId("mode_" + sChamp).value;
-  sUrl=baseUrl + "/admin/ajax/listesuggestion?type_autorite=" + sRubrique + "&id_champ=" + sChamp + "&mode=" + sMode +"&valeur=" + sValeur;
-  $('#'+sChamp+'_liste').load(sUrl);
+
+  var params = {
+    type_autorite: sRubrique,
+    id_champ: sChamp,
+    mode: getId('mode_' + sChamp).value,
+    valeur: sValeur
+  };
+
+  $('#'+sChamp+'_liste')
+    .load(baseUrl + "/admin/ajax/listesuggestion?" + $.param(params));
 }
 
 
 function selectSuggest(sIdChamp, oItem)
 {
-  // Handles
-  oChampCodes=getId(sIdChamp);
-  oChampAff=getId(sIdChamp +"_aff");
-  
+  var oChampCodes = getId(sIdChamp);
+  var oChampAff = getId(sIdChamp + '_aff');
+
   // Controle s'il est deja la
-  sClef=oItem.getAttribute("clef");
-  sCodes=oChampCodes.value;
-  sControle=";" + sCodes + ";";
-  if(sControle.indexOf(";" + sClef + ";") >=0 )
-  { 
-    bRet=confirm("Cet élément a déjà été sélectionné.\n\nVoulez vous le supprimer ?");
-    if(bRet==true)
-    {
-      sControle=sControle.replace(";" + sClef + ";", ";");
-      if(sControle.substr(0,1)==";") sControle=sControle.substr(1);
-      if(sControle.substr(-1)==";") sControle=sControle.substr(0,sControle.length-1);
-      oChampCodes.value=sControle;
-      sAff=oChampAff.innerHTML;
-      sItemAff="«" + oItem.innerHTML + "»"
-      sAff=sAff.replace(sItemAff, "");
-      oChampAff.innerHTML=sAff;
-    }
+  var sClef = oItem.getAttribute('clef');
+  var sCodes = oChampCodes.value;
+  var sControle = ';' + sCodes + ';';
+
+  if (sControle.indexOf(';' + sClef + ';') >= 0) {
+    if(!confirm('Cet élément a déjà été sélectionné.\n\nVoulez vous le supprimer ?'))
+      return;
+
+    sControle = sControle.replace(';' + sClef + ';', ';');
+    if (sControle.substr(0,1) == ';')
+      sControle = sControle.substr(1);
+    
+    if (sControle.substr(-1) == ';')
+      sControle = sControle.substr(0, sControle.length-1);
+    
+    oChampCodes.value = sControle;
+
+    $(oChampAff).find('span[clef="' + sClef + '"]').remove();
+    $('#'+sIdChamp).change();
+    setFlagMaj(true);
     return;
   }
   
-  // Integration de 'item sélectionné
-  if(sCodes > "") sCodes+=";";
-  sCodes+=sClef;
-  oChampCodes.value=sCodes;
+  if(sCodes > '')
+    sCodes += ';';
+  sCodes += sClef;
+  oChampCodes.value = sCodes;
+
+  sAff = oChampAff.innerHTML;
+  if( sAff > '')
+    sAff += ' ';
+  sAff += '<span class="selected" clef="' + sClef + '">' + oItem.innerHTML + '</span>';
+  oChampAff.innerHTML = sAff;
   
-  sAff=oChampAff.innerHTML;
-  if( sAff > "") sAff +=" ";
-  sAff+='<span class="selected">' + oItem.innerHTML + "</span>"
-  oChampAff.innerHTML=sAff;
+  $('#' + sIdChamp).change();
   setFlagMaj(true);
 }
 
 
 function suggestClear(sIdChamp)
 {
-  oChampCodes=getId(sIdChamp);
-  if(oChampCodes.value=="")
-  { 
-    alert("Il n'y a aucun élément à effacer.");
+  var oChampCodes = getId(sIdChamp);
+  if(oChampCodes.value == '')
     return;
-  }
-  if(confirm("Etes vour sûr de vouloir effacer tous les élément sélectionnés ?")==false) return;
-  oChampAff=getId(sIdChamp +"_aff");
-  oChampCodes.value="";
-  oChampAff.innerHTML="";
+
+  if(!confirm('Etes vour sûr de vouloir effacer tous les élément sélectionnés ?'))
+    return;
+  
+  oChampCodes.value = '';
+  
+  var oChampAff = getId(sIdChamp + '_aff');
+  oChampAff.innerHTML = '';
+  
+  $('#'+sIdChamp).change();
   setFlagMaj(true);
 }
-- 
GitLab