function localStorageInterface(){} localStorageInterface.prototype = { dataset: [], // Contiendra les différents 'dataset' dataset_keys: [], // Contiendra les clés de chaque 'dataset' /* AJOUTE UN ELEMENT AU DATASET DONNE * * @dataset_name Nom du dataset en question * @key Clé à donner à l'élément * @value Valeur de l'élément * * @return error Retourne FALSE si erreur, sinon TRUE * */ set: function(dataset_name, key, value){ var index = this.dataset.indexOf(dataset_name); /* (1) Si le 'dataset' n'existe pas */ if( index == -1 ) return false; // erreur /* (2) On enregistre la nouvelle clé, si elle est nouvelle */ if( this.dataset_keys[index].indexOf(key) == -1 ){ this.dataset_keys[index].push(key); localStorage.setItem(dataset_name, JSON.stringify(this.dataset_keys[index])); } /* (3) On propage au 'localStorage' */ localStorage.setItem(dataset_name+'_'+key, JSON.stringify(value) ); return true; }, /* RETOURNE UN ELEMENT AU DATASET DONNE * * @dataset_name Nom du dataset en question * @key Clé de l'élément * * @return value Retourne la valeur de l'élément, sinon FALSE si erreur * */ get: function(dataset_name, key){ /* (1) Si le 'dataset' n'existe pas */ if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur /* (2) On propage au 'localStorage' */ return JSON.parse( localStorage.getItem(dataset_name+'_'+key) ); }, /* SUPPRIME UN ELEMENT D'UN DATASET DONNE * * @dataset Nom du dataset en question * @key Clé de l'élément * * @return status 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 * * @name Nom du dataset à créer ou récupérer * * @return error Retourne true si tout s'est bien passé, sinon false * */ createDataset: function(name){ /* (1) On vérifie que le @name est correct */ if( typeof name != 'string' ) return false; // erreur /* (2) Si le dataset est déjà enregistré, on ne fais rien */ var datasetIndex = this.dataset.indexOf(name); if( datasetIndex > -1 ) return true; /* (3) On charge le dataset s'il existe */ var storedDataset = localStorage.getItem(name); if( storedDataset != null ){ // Si le dataset existe, on charge les données this.dataset.push(name); this.dataset_keys.push( JSON.parse(storedDataset) ); /* (4) Sinon, on crée le 'dataset' */ }else{ this.dataset.push(name); this.dataset_keys.push([]); localStorage.setItem(name, JSON.stringify([])); } return true; }, keys: function(dataset_name){ /* (1) Si le 'dataset' n'existe pas */ var index = this.dataset.indexOf(dataset_name); if( index == -1 ) return false; // erreur /* (2) On retourne la liste des clés pour ce dataset */ return this.dataset_keys[index]; }, export: function(dataset){ /* (1) Si le 'dataset' n'existe pas */ var index = this.dataset.indexOf(dataset); if( index == -1 ) return false; // erreur /* (2) On remplit l'objet avec toutes les données du dataset */ var obj = {}; for( var i = 0 ; i < this.dataset_keys[index].length ; i++ ) obj[this.dataset_keys[index][i]] = this.get(dataset, this.dataset_keys[index][i]); /* (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; } }; var lsi = new localStorageInterface();