From 45afee86e7e3db9076617f0ee887c8218daaedb2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 18 Jul 2016 16:11:58 +0200 Subject: [PATCH] Ajout de local-storage-interface pour simuler la carte SD --- js/lib/local-storage-interface-min.js | 5 + js/lib/local-storage-interface.js | 246 ++++++++++++++++++++++++++ test/client/interface.php | 19 +- 3 files changed, 266 insertions(+), 4 deletions(-) create mode 100644 js/lib/local-storage-interface-min.js create mode 100644 js/lib/local-storage-interface.js diff --git a/js/lib/local-storage-interface-min.js b/js/lib/local-storage-interface-min.js new file mode 100644 index 0000000..c95d853 --- /dev/null +++ b/js/lib/local-storage-interface-min.js @@ -0,0 +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=b.toString();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){if(null==b)return null;b=b.toString();return-1== +this.dataset.indexOf(a)?!1:JSON.parse(this.storage.getItem(a+"_"+b))},del:function(a,b){b=b.toString();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 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){ + // On met la clé en + key = key.toString(); + + /* (1) Si le 'dataset' n'existe pas */ + var index = this.dataset.indexOf(dataset_name); + 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); + this.storage.setItem(dataset_name, JSON.stringify(this.dataset_keys[index])); + } + + /* (3) On propage au 'localStorage' */ + this.storage.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){ + if( key == null ) + return null; + + // On met la clé en + key = key.toString(); + + /* (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( this.storage.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){ + // On met la clé en + key = key.toString(); + + /* (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' */ + this.storage.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' */ + this.storage.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 = this.storage.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([]); + this.storage.setItem(name, JSON.stringify([])); + + } + + return true; + }, + + + /* RENVOIE UN TABLEAU CONTENANT LES CLÉS DU DATASET + * + * @dataset Le nom du dataset en question + * + * @return keys Retourne la liste des clés du dataset + * + */ + keys: function(dataset){ + /* (1) Si le 'dataset' n'existe pas */ + var index = this.dataset.indexOf(dataset); + if( index == -1 ) return false; // erreur + + /* (2) On retourne la liste des clés pour ce dataset */ + return this.dataset_keys[index]; + + }, + + + /* RENVOIE UN OBJET CORRESPONDANT AUX DONNÉES D'UN DATASET + * + * @dataset Nom du dataset en question + * + * @return object Object correspondant aux valeurs du dataset ({key1: value1, key2: value2}) + * + */ + 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; + }, + + + /* REMPLIT UN DATASET AVEC LES DONNÉES D'UN OBJET SUR LE PRINCIPE {CLÉ: VALEUR} + * + * @dataset Nom du dataset en question + * @data Objet contenant les données à mettre dan sle dataset, sur le modèle ({key1: value1, key2: value2}) + * + * @return status Retourne TRUE si tout s'est bien passé, sinon FALSE + * + */ + 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 le vide */ + else + this.clear(dataset); + + + + /* (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; + }, + + + /* EFFACE TOUTES LES DONNÉES D'UN DATASET + * + * @dataset Nom du dataset en question + * + * @return status Retourne TRUE si tout s'est bien passé, sinon FALSE + * + */ + clear: function(dataset){ + /* (1) On récupère l'indice du dataset s'il existe déjà */ + var index = this.dataset.indexOf(dataset); + + // Si le dataset n'existe pas, on retourne une erreur + if( index == -1 ) return false; + + /* (2) On supprime toutes les valeurs du dataset */ + var content = this.export(dataset); + + // On supprime toutes les valeurs + for( var key in content ) + this.del(dataset, key); + + /* (3) Par précaution, on supprime les clés du dataset */ + this.dataset_keys[index] = []; + this.storage.setItem(dataset, JSON.stringify(this.dataset_keys[index])); + + /* (4) On retourne que tout s'est bien passé */ + return true; + } + + +}; + + + +var lsi = new localStorageInterface(); diff --git a/test/client/interface.php b/test/client/interface.php index 8d88926..f89ba8b 100644 --- a/test/client/interface.php +++ b/test/client/interface.php @@ -26,10 +26,11 @@ Virtual Client - - - - + + + + +