Gestion au niveau de `localStorageInterface` de la suppression d'un item (del) et de l'import (import) d'un dataset complet.

This commit is contained in:
xdrm-brackets 2016-05-02 21:21:09 +02:00
parent da69d09579
commit 741f69baaa
5 changed files with 107 additions and 11 deletions

View File

@ -1,3 +1,4 @@
function localStorageInterface(){}
localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},createDataset:function(a){if(null==a||"string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;
var b=localStorage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),localStorage.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}};var lsi=new localStorageInterface;
localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},del:function(a,b){var d=this.dataset.indexOf(a);if(-1==d)return!1;var c=this.dataset_keys[d].indexOf(b);
if(-1==c)return!1;localStorage.removeItem(a+"_"+b);this.dataset_keys[d].splice(c,1);localStorage.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=localStorage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),localStorage.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){if(-1==this.dataset.indexOf(a))this.createDataset(a);else{var d=this["export"](a),c;for(c in d)this.del(a,c)}for(c in b)this.set(a,c,b[c]);return!0}};var lsi=new localStorageInterface;

View File

@ -49,6 +49,36 @@ localStorageInterface.prototype = {
return JSON.parse( localStorage.getItem(dataset_name+'_'+key) );
},
/* SUPPRIME UN ELEMENT D'UN DATASET DONNE
*
* @dataset<String> Nom du dataset en question
* @key<String> Clé de l'élément
*
* @return status<boolean> Retourne FALSE si erreur
*
*/
del: function(dataset, key){
/* (1) Si le 'dataset' n'existe pas */
var index = this.dataset.indexOf(dataset);
if( index == -1 ) return false; // erreur
/* (2) On récupère la clé dans la liste des clés */
var keyIndex = this.dataset_keys[index].indexOf(key);
if( keyIndex == -1 ) return false; // erreur si la clé n'est pas référencée
/* (3) On supprime dans le 'localStorage' */
localStorage.removeItem(dataset+'_'+key);
/* (4) On supprime la clé dans la liste des clés */
this.dataset_keys[index].splice(keyIndex, 1);
/* (5) On met à jour dans le 'localStorage' */
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
return true;
},
/* CREATION D'UN DATASET OU RECUPERATION DES DONNEES S'IL EXISTE DEJA
*
@ -59,11 +89,12 @@ localStorageInterface.prototype = {
*/
createDataset: function(name){
/* (1) On vérifie que le @name est correct */
if( name == null || typeof name != 'string' ) return false; // erreur
if( typeof name != 'string' ) return false; // erreur
/* (2) Si le dataset est déjà enregistré, on ne fais rien */
if( this.dataset.indexOf(name) > -1 ) return true;
var datasetIndex = this.dataset.indexOf(name);
if( datasetIndex > -1 ) return true;
/* (3) On charge le dataset s'il existe */
var storedDataset = localStorage.getItem(name);
@ -72,7 +103,7 @@ localStorageInterface.prototype = {
this.dataset.push(name);
this.dataset_keys.push( JSON.parse(storedDataset) );
/* (4) Sinon, on le crée 'dataset' */
/* (4) Sinon, on crée le 'dataset' */
}else{
this.dataset.push(name);
@ -107,6 +138,32 @@ localStorageInterface.prototype = {
/* (3) On retourne le résultat */
return obj;
},
import: function(dataset, data){
/* (1) On récupère l'indice du dataset s'il existe déjà */
var index = this.dataset.indexOf(dataset);
/* (2) Cas 1 : Le dataset n'existe pas -> on le crée */
if( index == -1 )
this.createDataset(dataset);
/* (3) Cas 2 : Le dataset existe -> on supprime tout */
else{
var content = this.export(dataset);
// On supprime toutes les valeurs
for( var key in content )
this.del(dataset, key);
}
/* (2) On remplit le dataset avec toutes les données de l'objet */
for( var key in data )
this.set(dataset, key, data[key]);
/* (3) On retourne le résultat */
return true;
}

View File

@ -39,6 +39,8 @@
<h3 data-n='0' class='color4'>Effacer les données de la dernière enquête</h3>
<span data-space></span>
<h4 class='self color2' data-icon='e'>
<input type='submit' class='primary' id='export-all' value='Exporter les données'><br>
<input type='submit' class='primary' id='import-all' value='Importer des données'><br>
<input type='submit' class='primary' id='clear-all' value='Tout effacer'>
</h4>
<span data-space></span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long