Gestion du top 20 (gestion de la duplication à faire) mais correction du 'localStorageInterface' et du modele global

This commit is contained in:
xdrm-brackets 2016-09-30 10:22:21 +02:00
parent f1d96e0627
commit fb93be99ea
6 changed files with 31 additions and 97 deletions

View File

@ -1,8 +1,7 @@
function inputPhoneContact(a,c){this.container=a;this.nav_container=c}inputPhoneContact.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null};inputPhoneContact.prototype.check=function(a){return!isNaN(a.existing)||0<a.username.length};
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$('[data-sublink="phone"] article.contact-panel .new-contact'),c=0;c<a.length;c++){var b=(new FormDeflater(a[c],["input","select"],["data-name"])).deflate();if(this.check(b)){var d={uid:parseInt(b.uid),username:b.username,call:parseInt(b.call),sms:parseInt(b.sms),countcall:parseInt(b.countcall),countsms:parseInt(b.countsms),existing:isNaN(b.existing)?".":parseInt(b.existing)};d.hash=crc32(JSON.stringify(d));
lsi.set("p_contacts",parseInt(b.uid),d)}}};
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");if(null==a||null==a.uid||isNaN(a.uid))return!1;a.username=null!=a.username?a.username:"";a.call=null!=a.call?a.call:-1;a.sms=null!=a.sms?a.sms:-1;a.countcall=null!=a.countcall?a.countcall:0;a.countsms=null!=a.countsms?a.countsms:0;a.existing=null!=a.existing?a.existing:".";var c=lsi["export"]("p_friends");a.contacts="";for(var b in c)a.contacts+="\t\t<option value='"+b+"'>"+c[b].name+"</option>\n";this.container.innerHTML+=pContactBuilder.build(a);
b=$('[data-sublink="phone"] article.contact-panel .new-contact input[data-name="uid"][value="'+a.uid+'"] ~ span select[data-name="existing"]>option[value="'+a.existing+'"]');null!=b&&b.setAttribute("selected","selected");a=$$('[data-sublink="phone"] article.contact-panel .new-contact');var d=this;for(b=0;b<a.length;b++)a[b].removeEventListener("click",function(a){d.nav(a.target);d.handler(a.target)},!1),a[b].addEventListener("click",function(a){d.nav(a.target);d.handler(a.target)},!1)};
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$('[data-sublink="phone"] article.contact-panel .new-contact'),c=0;c<a.length;c++){var b=(new FormDeflater(a[c],["input","select"],["data-name"])).deflate();if(this.check(b)){var d={uid:parseInt(b.uid),username:b.username,existing:isNaN(b.existing)?".":parseInt(b.existing)};d.hash=crc32(JSON.stringify(d));lsi.set("p_contacts",parseInt(b.uid),d)}}};
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");if(null==a||null==a.uid||isNaN(a.uid))return!1;a.username=null!=a.username?a.username:"";a.existing=null!=a.existing?a.existing:".";var c=lsi["export"]("p_friends");a.contacts="";for(var b in c)a.contacts+="\t\t<option value='"+b+"'>"+c[b].name+"</option>\n";this.container.innerHTML+=pContactBuilder.build(a);b=$('[data-sublink="phone"] article.contact-panel .new-contact input[data-name="uid"][value="'+a.uid+'"] ~ span select[data-name="existing"]>option[value="'+
a.existing+'"]');null!=b&&b.setAttribute("selected","selected");a=$$('[data-sublink="phone"] article.contact-panel .new-contact');var d=this;for(b=0;b<a.length;b++)a[b].removeEventListener("click",function(a){d.nav(a.target);d.handler(a.target)},!1),a[b].addEventListener("click",function(a){d.nav(a.target);d.handler(a.target)},!1)};
inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi.keys("p_contacts");this.container.innerHTML="";for(var c=this.selected+10,b=this.selected;b<c&&b<a.length;b++)this.add(lsi.get("p_contacts",a[b]));c>=a.length&&this.add({uid:a.length});this.updateNavBar()};
inputPhoneContact.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"p_nav-contact"!=a.parentNode.id)return!1;for(var c=$$('[data-sublink="phone"] #p_nav-contact > span.active'),b=0;b<c.length;b++)c[b].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
inputPhoneContact.prototype.updateNavBar=function(){var a=lsi.keys("p_contacts").length;if(this.nav_container.children.length!=a){this.nav_container.innerHTML="";for(var c=0;c<a;c+=10)this.nav_container.innerHTML+='<span data-n="'+c+'">'+(1+c/10)+"</span>"}this.nav($('[data-sublink="phone"] #p_nav-contact [data-n="'+this.selected+'"]'))};

View File

@ -50,12 +50,6 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
// number: deflated.number,
username: deflated.username,
call: parseInt(deflated.call),
sms: parseInt(deflated.sms),
countcall: parseInt(deflated.countcall),
countsms: parseInt(deflated.countsms),
existing: (!isNaN(deflated.existing)) ? parseInt(deflated.existing) : '.'
};
@ -94,10 +88,6 @@ inputPhoneContact.prototype.add = function(objectData){
// {0} On formatte l'object //
// objectData.number = (objectData.number != null) ? objectData.number : '';
objectData.username = (objectData.username != null) ? objectData.username : '';
objectData.call = (objectData.call != null) ? objectData.call : -1;
objectData.sms = (objectData.sms != null) ? objectData.sms : -1;
objectData.countcall = (objectData.countcall != null) ? objectData.countcall : 0;
objectData.countsms = (objectData.countsms != null) ? objectData.countsms : 0;
objectData.existing = (objectData.existing != null) ? objectData.existing : '.';

View File

@ -12,10 +12,9 @@ for(b=0;b<c.length;b++)c[b].value==a.famsit?c[b].setAttribute("checked","checked
for(b=0;b<c.length;b++)c[b].value==a.loc?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="context"]');for(b=0;b<c.length;b++)c[b].value==a.context?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq"]');
for(b=0;b<c.length;b++)-1<a.freq.indexOf(c[b].value)?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('[data-sublink="phone"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="connect"]');for(b=0;b<c.length;b++)-1<a.connect.indexOf(c[b].value)?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked")};
inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi["export"]("p_fiches");this.container.innerHTML="";for(var b in a)a[b].uid==this.selected&&this.add(a[b]);this.updateNavBar()};
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");var a=lsi["export"]("p_contacts"),b=[],c;for(c in a){if(-1<a[c].call){var e=a[c].call;b.push(e);var d=lsi.get("p_fiches",e);null==d&&(d=this.defaultData);d.uid=e;d.contact=parseInt(c);lsi.set("p_fiches",e,d)}-1<a[c].sms&&(e=10+a[c].sms,b.push(e),d=lsi.get("p_fiches",e),null==d&&(d=this.defaultData),d.uid=e,d.contact=parseInt(c),lsi.set("p_fiches",e,d))}e=20>lsi.keys("p_contacts").length?lsi.keys("p_contacts").length:20;if(b.length<
e)for(c in a){for(a=0;-1<b.indexOf(a)&&a<e;)a++;b.push(a);d=lsi.get("p_fiches",a);null==d&&(d=this.defaultData);d.uid=a;d.contact=parseInt(c);lsi.set("p_fiches",a,d);if(b.length>=e)break}var d=lsi["export"]("p_fiches"),f;for(f in d)b=lsi.get("p_contacts",d[f].contact),null!=b&&-1!=b.sms&&-1!=b.call&&(b=10>parseInt(f)?10+b.sms:b.call,b=d[b],null==b||b.timestamp>=d[f].timestamp||(c=d[f],c.uid=b.uid,lsi.set("p_fiches",b.uid,c)))};
inputPhoneFiche.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"p_nav-fiche"!=a.parentNode.id)return!1;for(var b=$$('[data-sublink="phone"] #p_nav-fiche > span.active'),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
inputPhoneFiche.prototype.updateNavBar=function(){var a=lsi["export"]("p_fiches");this.nav_container.innerHTML="";for(var b=Object.keys(a),c=0;c<b.length;c++){var e=parseInt(b[c]);0==e&&(this.nav_container.innerHTML+="<span>APPELS</span>");10>e&&c<b.length-1&&10<=b[c+1]?this.nav_container.innerHTML+='<span data-n="'+e+'" class="lc">'+(e%10+1)+"</span>&nbsp;&nbsp;":(10==e&&(this.nav_container.innerHTML+='<span class="fc">SMS</span>'),this.nav_container.innerHTML+='<span data-n="'+e+'">'+(e%10+1)+"</span>")}for(var d in a)b=
$('[data-sublink="phone"] #p_nav-fiche [data-n="'+a[d].uid+'"]'),null!=b&&(!0===a[d].valid?b.addClass("done"):b.remClass("done"));this.nav($('[data-sublink="phone"] #p_nav-fiche [data-n="'+this.selected+'"]'))};
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");var a=lsi["export"]("p_contacts"),b=[],c=40>lsi.keys("p_contacts").length?lsi.keys("p_contacts").length:40;if(b.length<c)for(var e in a){for(var d=0;-1<b.indexOf(d)&&d<c;)d++;b.push(d);a=lsi.get("p_fiches",d);null==a&&(a=this.defaultData);a.uid=d;a.contact=parseInt(e);lsi.set("p_fiches",d,a);if(b.length>=c)break}var a=lsi["export"]("p_fiches"),f;for(f in a)b=lsi.get("p_contacts",a[f].contact),null!=b&&(b=20>parseInt(f)?20+b.sms:
b.call,b=a[b],null==b||b.timestamp>=a[f].timestamp||(c=a[f],c.uid=b.uid,lsi.set("p_fiches",b.uid,c)))};inputPhoneFiche.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"p_nav-fiche"!=a.parentNode.id)return!1;for(var b=$$('[data-sublink="phone"] #p_nav-fiche > span.active'),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
inputPhoneFiche.prototype.updateNavBar=function(){var a=lsi["export"]("p_fiches");this.nav_container.innerHTML="";for(var b=Object.keys(a),c=0;c<b.length;c++){var e=parseInt(b[c]);0==e&&(this.nav_container.innerHTML+="<span>APPELS</span>");20>e&&c<b.length-1&&20<=b[c+1]?this.nav_container.innerHTML+='<span data-n="'+e+'" class="lc">'+(e%20+1)+"</span>&nbsp;&nbsp;":(20==e&&(this.nav_container.innerHTML+='<br><span class="fc">SMS</span>'),this.nav_container.innerHTML+='<span data-n="'+e+'">'+(e%20+
1)+"</span>")}for(var d in a)b=$('[data-sublink="phone"] #p_nav-fiche [data-n="'+a[d].uid+'"]'),null!=b&&(!0===a[d].valid?b.addClass("done"):b.remClass("done"));this.nav($('[data-sublink="phone"] #p_nav-fiche [data-n="'+this.selected+'"]'))};
inputPhoneFiche.prototype.check=function(a){if(2>a.city.length||isNaN(parseInt(a.duration[0]))&&0<a.duration[0].length||isNaN(parseInt(a.duration[1]))&&0<a.duration[1].length||0==a.duration[0].length+a.duration[1].length||"."==a.job||"."==a.studies||"."==a.age||""==a.sexe||""==a.famsit||""==a.reltype||""==a.loc||""==a.context)return!1;for(var b=0;b<a.freq.length;b++)if(""==a.freq[b])return!1;for(b=0;b<a.connect.length;b++)if(""==a.connect[b])return!1;return"10"==a.reltype&&2>a.reltypeSpecial.length||
"11"==a.context&&2>a.contextSpecial[0].length||"12"==a.context&&2>a.contextSpecial[1].length||"13"==a.context&&2>a.contextSpecial[2].length?!1:!0};inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("p_fiches");this.storageToFields();this.handler=a;var b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};

View File

@ -349,64 +349,14 @@ inputPhoneFiche.prototype.sync = function(){
var contacts = lsi.export('p_contacts');
var addedFicheUids = []; // Contiendra les uids des fiches qui seront crées
/* (2) Pour chaque CONTACT, on met à jour/crée la FICHE associée, si dans le TOP 10 des APPELS ou des SMS */
for( var uid in contacts ){
var inCallTop10 = false;
/* (3) Indice de 0 à 9 si dans le TOP 10 des APPELS */
if( contacts[uid].call > -1 ){
// On calcule le rang de la fiche en fonction du classement
var ficheIndex = contacts[uid].call;
addedFicheUids.push(ficheIndex);
// On récupère les informations de la FICHE (si elle existe) */
var ficheData = lsi.get('p_fiches', ficheIndex);
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
if( ficheData == null )
ficheData = this.defaultData;
// On met à jour la fiche ET on l'enregistre
ficheData.uid = ficheIndex;
ficheData.contact = parseInt(uid);
lsi.set('p_fiches', ficheIndex, ficheData);
}
/* (4) Indice de 10 à 19 si dans le TOP 10 des SMS */
if( contacts[uid].sms > -1 ){
// On calcule le rang de la fiche en fonction du classement
var ficheIndex = 10+contacts[uid].sms;
addedFicheUids.push(ficheIndex);
// On récupère les informations de la FICHE (si elle existe) */
var ficheData = lsi.get('p_fiches', ficheIndex);
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
if( ficheData == null )
ficheData = this.defaultData;
// On met à jour la fiche ET on l'enregistre
ficheData.uid = ficheIndex;
ficheData.contact = parseInt(uid);
lsi.set('p_fiches', ficheIndex, ficheData);
}
}
/* (2) Mise à jour en fonction des contacts APRÈS SAISIE MANUELLE
---------------------------------------------------------*/
// Nombre maximum de fiches (20, sauf si moins de 20 contacts, dans ce cas, le nombre de contacts);
var nbMaxFiche = lsi.keys('p_contacts').length < 20 ? lsi.keys('p_contacts').length : 20;
// Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts);
var nbMaxFiche = lsi.keys('p_contacts').length < 40 ? lsi.keys('p_contacts').length : 40;
// Si moins de 10+10 contacts crées, on les complètes en fonction des contacts séquentiellement
// Si moins de 20+20 contacts crées, on les complètes en fonction des contacts séquentiellement
if( addedFicheUids.length < nbMaxFiche ){
/* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée*/
@ -433,14 +383,14 @@ inputPhoneFiche.prototype.sync = function(){
lsi.set('p_fiches', ficheUid, ficheData);
/* (5) Si on a déja crée 10+10 fiches, on arrête */
/* (5) Si on a déja crée 20+20 fiches, on arrête */
if( addedFicheUids.length >= nbMaxFiche )
break;
}
}
/* (3) Mise à jour des fiches dupliquées entre le top 10 des APPELS et celui des SMS
/* (3) Mise à jour des fiches dupliquées entre le top 20 des APPELS et celui des SMS
---------------------------------------------------------*/
ficheData = lsi.export('p_fiches');
@ -452,13 +402,9 @@ inputPhoneFiche.prototype.sync = function(){
if( associatedContact == null )
continue;
/* (2) Si la fiche n'est pas dans les 2 top 10 (APPELS et SMS) */
if( associatedContact.sms == -1 || associatedContact.call == -1 )
continue; // On passe au suivant
/* (3) On récupère l'autre fiche (clone) */
var inCall = parseInt(key) < 10; // Si on est dans le top 10 des APPELS, sinon dans celui des SMS
var cloneIndex = inCall ? 10+associatedContact.sms : associatedContact.call; // Contient l'index du clone dans l'autre top (APPELS ou SMS)
var inCall = parseInt(key) < 20; // Si on est dans le top 20 des APPELS, sinon dans celui des SMS
var cloneIndex = inCall ? 20+associatedContact.sms : associatedContact.call; // Contient l'index du clone dans l'autre top (APPELS ou SMS)
var clone = ficheData[cloneIndex];
@ -524,22 +470,22 @@ inputPhoneFiche.prototype.updateNavBar = function(){
// Si 1ère valeur du top 10 des APPELS, on ajoute le bandeau "APPELS"
// Si 1ère valeur du top 20 des APPELS, on ajoute le bandeau "APPELS"
if( i == 0 )
this.nav_container.innerHTML += '<span>APPELS</span>';
// Si fin du top 10 des APPELS, on met un espace et un border-right
if( i < 10 && k < keys.length-1 && keys[k+1] >= 10 )
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%10 + 1)+'</span>&nbsp;&nbsp;';
// Si fin du top 20 des APPELS, on met un espace et un border-right
if( i < 20 && k < keys.length-1 && keys[k+1] >= 20 )
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%20 + 1)+'</span>&nbsp;&nbsp;';
// Si début du top 10 des SMS, on met le label 'SMS' et un border-left
else if( i == 10 ){
this.nav_container.innerHTML += '<span class="fc">SMS</span>';
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
// Si début du top 20 des SMS, on met le label 'SMS' et un border-left
else if( i == 20 ){
this.nav_container.innerHTML += '<br><span class="fc">SMS</span>';
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
// Sinon, on ajoute juste le bouton
}else
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%20 + 1)+'</span>';
}
/* (3) On montre les FICHES qui sont correctes */

View File

@ -1,5 +1,5 @@
function localStorageInterface(){}
localStorageInterface.prototype={dataset:[],dataset_keys:[],storage:localStorage,setStorage:function(a){if(a!=localStorage&&a!=sessionStorage)return!1;this.storage=a},set:function(a,b,d){b=!isNaN(b)&&b.toString()||null;if(!b)return!1;var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),this.storage.setItem(a,JSON.stringify(this.dataset_keys[c])));this.storage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return(b=!isNaN(b)&&
b.toString()||null)&&-1!=this.dataset.indexOf(a)?JSON.parse(this.storage.getItem(a+"_"+b)):!1},del:function(a,b){b=!isNaN(b)&&b.toString()||null;if(!b)return!1;var d=this.dataset.indexOf(a);if(-1==d)return!1;var c=this.dataset_keys[d].indexOf(b);if(-1==c)return!1;this.storage.removeItem(a+"_"+b);this.dataset_keys[d].splice(c,1);this.storage.setItem(a,JSON.stringify(this.dataset_keys[d]));return!0},createDataset:function(a){if("string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;var b=
localStorageInterface.prototype={dataset:[],dataset_keys:[],storage:localStorage,setStorage:function(a){if(a!=localStorage&&a!=sessionStorage)return!1;this.storage=a},set:function(a,b,d){b=null!=b&&b.toString()||null;if(!1===b)return!1;var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),this.storage.setItem(a,JSON.stringify(this.dataset_keys[c])));this.storage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){b=null!=b&&b.toString()||
null;return!1===b||-1==this.dataset.indexOf(a)?!1:JSON.parse(this.storage.getItem(a+"_"+b))},del:function(a,b){b=null!=b&&b.toString()||null;if(!1===b)return!1;var d=this.dataset.indexOf(a);if(-1==d)return!1;var c=this.dataset_keys[d].indexOf(b);if(-1==c)return!1;this.storage.removeItem(a+"_"+b);this.dataset_keys[d].splice(c,1);this.storage.setItem(a,JSON.stringify(this.dataset_keys[d]));return!0},createDataset:function(a){if("string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;var b=
this.storage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),this.storage.setItem(a,JSON.stringify([])));return!0},keys:function(a){a=this.dataset.indexOf(a);return-1==a?!1:this.dataset_keys[a]},"export":function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;for(var d={},c=0;c<this.dataset_keys[b].length;c++)d[this.dataset_keys[b][c]]=this.get(a,this.dataset_keys[b][c]);return d},"import":function(a,b){~this.dataset.indexOf(a)&&
this.createDataset(a)||this.clear(a);for(var d in b)this.set(a,d,b[d]);return!0},clear:function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;var d=this["export"](a),c;for(c in d)this.del(a,c);this.dataset_keys[b]=[];this.storage.setItem(a,JSON.stringify(this.dataset_keys[b]));return!0}};var lsi=new localStorageInterface;

View File

@ -28,9 +28,9 @@ localStorageInterface.prototype = {
*/
set: function(dataset_name, key, value){
// On met la clé en <String>
key = !isNaN(key) && key.toString() || null;
key = key != null && key.toString() || null;
if( !key ) return false;
if( key === false ) return false;
/* (1) Si le 'dataset' n'existe pas */
var index = this.dataset.indexOf(dataset_name);
@ -58,9 +58,9 @@ localStorageInterface.prototype = {
*/
get: function(dataset_name, key){
// On met la clé en <String>
key = !isNaN(key) && key.toString() || null;
key = key != null && key.toString() || null;
if( !key ) return false;
if( key === false ) return false;
/* (1) Si le 'dataset' n'existe pas */
if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur
@ -79,9 +79,9 @@ localStorageInterface.prototype = {
*/
del: function(dataset, key){
// On met la clé en <String>
key = !isNaN(key) && key.toString() || null;
key = key != null && key.toString() || null;
if( !key ) return false;
if( key === false ) return false;
/* (1) Si le 'dataset' n'existe pas */
var index = this.dataset.indexOf(dataset);