Ajout de local-storage-interface pour simuler la carte SD
This commit is contained in:
parent
434b3b08fb
commit
9404824628
|
@ -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<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){-1==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;
|
|
@ -0,0 +1,246 @@
|
||||||
|
function localStorageInterface(){}
|
||||||
|
|
||||||
|
localStorageInterface.prototype = {
|
||||||
|
|
||||||
|
dataset: [], // Contiendra les différents 'dataset'
|
||||||
|
dataset_keys: [], // Contiendra les clés de chaque 'dataset'
|
||||||
|
|
||||||
|
storage: localStorage, // Peut contenir 'localStorage' ou 'sessionStorage'
|
||||||
|
|
||||||
|
setStorage: function(storage){
|
||||||
|
// Si valeur incohérente
|
||||||
|
if( storage != localStorage && storage != sessionStorage )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Sinon on enregistre le type de storage
|
||||||
|
this.storage = storage;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* AJOUTE UN ELEMENT AU DATASET DONNE
|
||||||
|
*
|
||||||
|
* @dataset_name<String> Nom du dataset en question
|
||||||
|
* @key<String> Clé à donner à l'élément
|
||||||
|
* @value<String> Valeur de l'élément
|
||||||
|
*
|
||||||
|
* @return error<Bool> Retourne FALSE si erreur, sinon TRUE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
set: function(dataset_name, key, value){
|
||||||
|
// On met la clé en <String>
|
||||||
|
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<String> Nom du dataset en question
|
||||||
|
* @key<String> Clé de l'élément
|
||||||
|
*
|
||||||
|
* @return value<String> 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 <String>
|
||||||
|
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<String> Nom du dataset en question
|
||||||
|
* @key<String> Clé de l'élément
|
||||||
|
*
|
||||||
|
* @return status<boolean> Retourne FALSE si erreur
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
del: function(dataset, key){
|
||||||
|
// On met la clé en <String>
|
||||||
|
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<String> Nom du dataset à créer ou récupérer
|
||||||
|
*
|
||||||
|
* @return error<Bool> 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<String> Le nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return keys<Array> 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<String> Nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return object<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<String> Nom du dataset en question
|
||||||
|
* @data<Object> Objet contenant les données à mettre dan sle dataset, sur le modèle ({key1: value1, key2: value2})
|
||||||
|
*
|
||||||
|
* @return status<Boolean> 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<String> Nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return status<Boolean> 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();
|
|
@ -26,10 +26,11 @@
|
||||||
<title>Virtual Client</title>
|
<title>Virtual Client</title>
|
||||||
|
|
||||||
|
|
||||||
<script type='text/javascript' src='/js/lib/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
|
<script type='text/javascript' src='/js/lib/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
|
||||||
<script type='text/javascript' src='/js/lib/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
|
<script type='text/javascript' src='/js/lib/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
|
||||||
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
|
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
|
||||||
<script type='text/javascript' src='/js/lib/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) -->
|
<script type='text/javascript' src='/js/lib/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) -->
|
||||||
|
<script type='text/javascript' src='/js/lib/local-storage-interface.js' ></script> <!-- Interface pour le 'localStorage' -->
|
||||||
<style type='text/css'>
|
<style type='text/css'>
|
||||||
body{
|
body{
|
||||||
background: #1c384b;
|
background: #1c384b;
|
||||||
|
@ -238,6 +239,13 @@
|
||||||
/* (3) Variables de suivi */
|
/* (3) Variables de suivi */
|
||||||
var card = null;
|
var card = null;
|
||||||
var lastCard = null;
|
var lastCard = null;
|
||||||
|
var lsi = new localStorageInterface();
|
||||||
|
lsi.createDataset('STATES.CNF' );
|
||||||
|
lsi.createDataset('ACTIONS.CNF');
|
||||||
|
lsi.createDataset('USERS.CNF' );
|
||||||
|
lsi.createDataset('SERVER.CNF' );
|
||||||
|
lsi.createDataset('HISTORY.LOG');
|
||||||
|
lsi.createDataset('STATES.LOG' );
|
||||||
|
|
||||||
|
|
||||||
/* (4) Récupération des données de fonctionnement */
|
/* (4) Récupération des données de fonctionnement */
|
||||||
|
@ -248,6 +256,9 @@
|
||||||
action: response.actions,
|
action: response.actions,
|
||||||
state: response.states
|
state: response.states
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lsi.import('ACTIONS.CNF', SYSTEM.action);
|
||||||
|
lsi.import('STATES.CNF', SYSTEM.state);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* [1] Fonctions
|
/* [1] Fonctions
|
||||||
|
|
Loading…
Reference in New Issue