if (Class == 'undefined') { var Class = { create : function() { return function() { this.initialize.apply(this, arguments); } } } } /** * Pour avoir des select avec form multiples */ var MultiSelect = Class.create(); MultiSelect.prototype = { initialize : function(idSelect) { this.sel = $(idSelect); this.sel.multiple = true; this.selectedObj = []; this.affect(); Event.observe(this.sel, 'click', this.doSelect .bindAsEventListener(this)); }, affect : function() { var len = this.sel.options.length; for ( var i = 0; i < len; i++) { this.selectedObj[i] = this.sel.options[i].selected; // alert(this.selectedObj[i]); } }, doSelect : function(e) { var len = this.sel.options.length; var nSel = this.sel.selectedIndex; this.selectedObj[nSel] = !this.selectedObj[nSel]; if (this.sel.selectedIndex != -1) { for ( var i = 0; i < len; i++) { this.sel.options[i].selected = false; this.sel.options[i].selected = this.selectedObj[i]; } } else { for ( var i = 0; i < len; i++) { this.sel.options[i].selected = false; this.selectedObj[i] = false; } } } } /** * Pour gerer les sous listes d'objet , a partir de selection ou autre exemple * d'utilisation : soit un select qui s'appelle "layers_map", et une image pour * ajouter une valeur "igplusl" var listeLayers= new * ListObjects('layersSelected',{'img_moins':'/dynmap/images/list-remove.png'}); * Event.observe('igplusl','click',listeLayers.addElementFromSelect.bind(listeLayers,'layers_map')); */ var ListObjects = Class.create(); ListObjects.prototype = { initialize : function(idDiv, options) { this.opt = { 'img_moins' : 'images/moins.gif' }.extend(options || {}); this.nomDiv = idDiv; this.obDiv = $(idDiv); this.elements = new Array(); this.nbel = 0; Element.hide(this.obDiv); }, addElement : function(idelem, libelElem) { try { console .debug('addElement demande valeurs %s %s', idelem, libelElem); } catch (e) { } ; this.nbel++; if (!this.elements[idelem]) { var divIn = document.createElement('div'); divIn.id = "listeObj" + idelem; divIn.innerHTML = ' ' + libelElem; divIn.innerHTML += ''; this.obDiv.appendChild(divIn); Element.show(this.obDiv); this.elements[idelem] = libelElem; var MyImg = $('listObji' + idelem); MyImg.onclick = this.removeElement.bindAsEventListener(this); } }, addElementFromSelect : function(idSelect) { try { console.debug('demande de recup select %s', idSelect); } catch (e) { } ; var sel = $(idSelect) var val = $F(idSelect); var libel = sel.options[sel.options.selectedIndex].innerHTML; this.addElement(val, libel); }, ae : function(idelem, libelElem) { this.addElement(idelem, libelElem); }, removeElement : function(igevt) { var igclick = Event.element(igevt); var Idenleve = igclick.getAttribute('idl'); this.obDiv.removeChild($("listeObj" + Idenleve)); this.elements[Idenleve] = undefined; this.nbel--; if (this.nbel == 0) { Element.hide(this.obDiv); } } } /** * Interractions avec le widget "liste hierarchique" * * @author ev */ var hierachicalList = Class.create(); hierachicalList.prototype = { /** * Initialise une liste hierarchique * * @param fieldId Identifiant du champ * @param maxLevel Nombre maximum de niveau * @param maxValues Nombre maximum de valeurs * @param url Url (base) pour atteindre le plugin * @param modelName Nom du modele * @param urlPlugin Url du plugin pour pouvoir utiliser un autre plugin par exemple **/ initialize : function(fieldId, maxLevel, maxValues, url, modelName, urlPlugin) { this.fieldId = fieldId; this.lstField = $(fieldId + "_lst"); this.valField = $(fieldId); this.labelsLst = $(fieldId + "_labels"); this.info = $(fieldId + "_info"); this.wait = $(fieldId + "_wait"); this.btDown = $(this.fieldId + '_down'); this.btUp = $(this.fieldId + '_up'); this.btAdd = $(this.fieldId + '_add'); this.peres = ''; this.maxLevel = maxLevel; this.maxValues = maxValues; this.level = 1; if ('undefined' == typeof (urlPlugin)) { urlPlugin = 'plugin=framework&cont=AdvancedFormFields&mod='+ modelName; } // if var lnkUrl = ((-1 != url.indexOf ('?', 0)) ? '&' : '?'); this.url = url + lnkUrl + urlPlugin; this.maxReached = false; if (this.maxValues == 1 && this.valField.value.length > 0) { this.maxReached = true; } else if (this.maxValues > 1 && this.valField.value.split(';').length >= this.maxValues) { this.maxReached = true; } this.toggleButtons(); }, hlLevelDown : function() { this.updateList('down', (parseInt(this.level) + 1)); }, hlLevelUp : function() { this.updateList('up', (parseInt(this.level) - 1)); }, hlGoLevel : function(lvl) { this.updateList('up', lvl); }, hlAddValue : function() { if (!this.labelsLst) return false; if (this.lstField.value != '') { this.toggleWait(1); var args = '&fieldName=' + this.valField.name + '&values=' + this.valField.value + '&refId=' + this.lstField.value + '&level=' + this.level; var myAjax = new Ajax.Request(this.url + '&event=hlAddValue', { method : "post", parameters : args, evalScripts : true, onComplete : this.ajaxAddValue.bind(this) }); } }, hlRemoveValue : function(obj, valToRem) { var pere = obj.parentNode; pere.parentNode.removeChild(pere); // suppr du chp hidden var existingVals = this.valField.value.split(';'); var newVal = []; for ( var i = 0; i < existingVals.length; i++) { if (existingVals[i] != valToRem) { newVal.push(existingVals[i]); } } this.valField.value = newVal.join(';'); this.maxReached = (newVal.length >= this.maxValues); this.toggleButtons(); }, /** * maj liste */ updateList : function(direction, lvl) { this.toggleWait(1); var args = '&fieldId=' + this.fieldId + '&fieldName=' + this.valField.name + '&refId=' + this.lstField.value + '&fromLevel=' + this.level + '&toLevel=' + lvl + '&direction=' + direction + '&peres=' + this.peres; this.level = lvl; this.toggleButtons(); var myAjax = new Ajax.Request(this.url + '&event=hlGetValuesByLevel', { method : "post", parameters : args, evalScripts : true, onComplete : this.ajaxUpdateList.bind(this) }); }, /** * recup ajax donnees liste */ ajaxUpdateList : function(ajaxResponse) { this.lstField.options.length = 0;// clear //this.lstField.innerHTML = ''; if (ajaxResponse.responseText != '') { eval('var res=' + ajaxResponse.responseText); var values = res.values; var count = values.length; for ( var i = 0; i < count; i++) { var objOption = new Option(values[i].L, values[i].V); this.lstField.add(objOption,this.lstField.options[null]); } // statut boutons // si pas d'elt, on masque le bouton 'DOWN' if (count == 0) { this.btDown.style.display = 'none'; this.btAdd.style.display = 'none'; this.lstField.options[0] = new Option('Aucune donnée', ''); } else if (!this.maxReached) { this.btAdd.style.display = ''; } // fil Ariane if (res.info) { this.info.innerHTML = res.filAriane; } else this.info.innerHTML = ''; this.peres = res.peres; } this.toggleWait(0); }, /** * ajout valeur chp hidden */ ajaxAddValue : function(ajaxResponse) { if (ajaxResponse.responseText != '') { eval('var res=' + ajaxResponse.responseText); // nb valeurs var nbVals = this.valField.value.split(';').length; // ajout valeur à la liste if (res.added) { // chp hidden this.valField.value = res.values; this.labelsLst.innerHTML += "
  • " + res.label + ' X
  • '; this.maxReached = res.maxReached; if (res.maxReached) { this.btAdd.style.display = 'none'; } } } this.toggleWait(0); }, /** * affichage/masquage des boutons up/down */ toggleButtons : function() { if (this.level >= this.maxLevel) { this.btDown.style.display = 'none'; } if (this.level > 0) { this.btUp.style.display = ''; } if (this.level < this.maxLevel && this.level > 0) { this.btDown.style.display = ''; } if (this.level == 1) { this.btUp.style.display = 'none'; } if (this.maxReached) { this.btAdd.style.display = 'none'; } else { this.btAdd.style.display = ''; } }, /** * Affiche/masque l'attente */ toggleWait : function(state) { if (state == 0) this.wait.style.display = 'none'; if (state == 1) this.wait.style.display = 'inline-block'; }, /** * Reproduit la fonction in_array (copie de Dynmap) */ indexOf : function(array, obj) { // use the build-in function if available. if (typeof array.indexOf == "function") { return array.indexOf(obj); } else { for ( var i = 0, len = array.length; i < len; i++) { if (array[i] == obj) { return i; } } return -1; } } }