Benjamin Renard commited on 2017-10-24 23:31:23
Showing 3 changed files, with 70 additions and 1 deletions.
| ... | ... |
@@ -871,6 +871,58 @@ on_confirm_clear_local_data=function(data) {
|
| 871 | 871 |
location.reload(); |
| 872 | 872 |
} |
| 873 | 873 |
|
| 874 |
+/******************************* |
|
| 875 |
+ * Import/Export local data |
|
| 876 |
+ *******************************/ |
|
| 877 |
+export_local_data=function() {
|
|
| 878 |
+ navbar_collapse_hide(); |
|
| 879 |
+ $('#export_local_data').attr('href','data:application/json;base64,' + btoa(JSON.stringify(scases.export())));
|
|
| 880 |
+} |
|
| 881 |
+ |
|
| 882 |
+import_local_data=function() {
|
|
| 883 |
+ navbar_collapse_hide(); |
|
| 884 |
+ var input=$('<input type="file" accept="application/json">');
|
|
| 885 |
+ input.css('display', 'none');
|
|
| 886 |
+ input.bind('change',{'input': input},function(e) {
|
|
| 887 |
+ pleaseWaitShow(); |
|
| 888 |
+ var input=e.data.input; |
|
| 889 |
+ var file=input.prop('files')[0];
|
|
| 890 |
+ if (file) {
|
|
| 891 |
+ var reader = new FileReader(); |
|
| 892 |
+ $(reader).bind('load',function(e) {
|
|
| 893 |
+ if ($.type(e.target.result)=='string') {
|
|
| 894 |
+ if (e.target.result.startsWith('data:application/json;base64,')) {
|
|
| 895 |
+ try {
|
|
| 896 |
+ json_data=atob(e.target.result.replace('data:application/json;base64,',''));
|
|
| 897 |
+ data=JSON.parse(json_data); |
|
| 898 |
+ pleaseWaitHide(); |
|
| 899 |
+ myconfirm('Etes-vous sûre de vouloir écraser vos données locales par celle issues de ce fichier ?',function() {
|
|
| 900 |
+ scases.save(); |
|
| 901 |
+ var backData=localStorage.scases; |
|
| 902 |
+ localStorage.scases=json_data; |
|
| 903 |
+ scases=new SCaseList(); |
|
| 904 |
+ scases.loadFromLocalStorage(backData); |
|
| 905 |
+ show_scases(); |
|
| 906 |
+ }); |
|
| 907 |
+ } |
|
| 908 |
+ catch (e) {
|
|
| 909 |
+ alert('Impossible de décodé le fichier.');
|
|
| 910 |
+ pleaseWaitHide(); |
|
| 911 |
+ } |
|
| 912 |
+ } |
|
| 913 |
+ else {
|
|
| 914 |
+ alert('Fichier invalide.');
|
|
| 915 |
+ pleaseWaitHide(); |
|
| 916 |
+ } |
|
| 917 |
+ } |
|
| 918 |
+ }); |
|
| 919 |
+ reader.readAsDataURL(file); |
|
| 920 |
+ } |
|
| 921 |
+ }); |
|
| 922 |
+ $('body').append(input);
|
|
| 923 |
+ input[0].click(); |
|
| 924 |
+} |
|
| 925 |
+ |
|
| 874 | 926 |
/********************* |
| 875 | 927 |
* Activate |
| 876 | 928 |
*********************/ |
| ... | ... |
@@ -888,6 +940,8 @@ $( document ).ready( function() {
|
| 888 | 940 |
} |
| 889 | 941 |
|
| 890 | 942 |
$('#clear_local_data').bind('click',clear_local_data);
|
| 943 |
+ $('#import_local_data').bind('click',import_local_data);
|
|
| 944 |
+ $('#export_local_data').bind('click',export_local_data);
|
|
| 891 | 945 |
|
| 892 | 946 |
$('#add_scase_btn').bind('click',on_add_scase_btn_click);
|
| 893 | 947 |
$('#add_scase_submit').bind('click',on_valid_add_scase_modal);
|
| ... | ... |
@@ -35,7 +35,7 @@ function SCaseList() {
|
| 35 | 35 |
} |
| 36 | 36 |
} |
| 37 | 37 |
|
| 38 |
- this.loadFromLocalStorage=function() {
|
|
| 38 |
+ this.loadFromLocalStorage=function(backData) {
|
|
| 39 | 39 |
if (jQuery.type(localStorage.scases)!='undefined') {
|
| 40 | 40 |
try {
|
| 41 | 41 |
var data=JSON.parse(localStorage.scases); |
| ... | ... |
@@ -50,6 +50,12 @@ function SCaseList() {
|
| 50 | 50 |
delete this[el]; |
| 51 | 51 |
} |
| 52 | 52 |
} |
| 53 |
+ if (jQuery.type(backData)!='undefined') {
|
|
| 54 |
+ alert('Erreur en chargeant les données. Restauration des données précédentes');
|
|
| 55 |
+ localStorage.scases=backData; |
|
| 56 |
+ return this.loadFromLocalStorage(); |
|
| 57 |
+ } |
|
| 58 |
+ else {
|
|
| 53 | 59 |
myconfirm('Erreur en chargeant les données locales. On les purges ?',
|
| 54 | 60 |
function(data) {
|
| 55 | 61 |
delete localStorage.scases; |
| ... | ... |
@@ -58,6 +64,7 @@ function SCaseList() {
|
| 58 | 64 |
); |
| 59 | 65 |
} |
| 60 | 66 |
} |
| 67 |
+ } |
|
| 61 | 68 |
else {
|
| 62 | 69 |
myconfirm("<h2>Bienvenu !</h2><p>Souhaitez-vous charger les données d'exemple ?</p>",
|
| 63 | 70 |
function(scases) {
|
| ... | ... |
@@ -51,7 +51,15 @@ |
| 51 | 51 |
<li><a href="#scase_trash" id="scase_trash_btn"><span class="glyphicon glyphicon-trash"></span> Voir la corbeille de la valise</a></li> |
| 52 | 52 |
</ul> |
| 53 | 53 |
</li> |
| 54 |
+ <li class="dropdown"> |
|
| 55 |
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class='glyphicon glyphicon-hdd'></span> Gérer vos données <b class="caret"></b></a> |
|
| 56 |
+ <ul class="dropdown-menu"> |
|
| 57 |
+ <li><a id='export_local_data' href='#' download='mysc_export.json'><span class='glyphicon glyphicon-save'></span> Sauvegarder vos données</a></li> |
|
| 58 |
+ <li><a id='import_local_data' href='#' download='mysc_export.json'><span class='glyphicon glyphicon-open'></span> Restaurer vos données</a></li> |
|
| 59 |
+ <li class="divider"></li> |
|
| 54 | 60 |
<li><a id='clear_local_data'><span class='glyphicon glyphicon-trash'></span> Purger les données locales</a></li> |
| 61 |
+ </ul> |
|
| 62 |
+ </li> |
|
| 55 | 63 |
<li><a id='update_app'><span class='glyphicon glyphicon-refresh'></span> Mise à jour de l'application</a></li> |
| 56 | 64 |
</ul> |
| 57 | 65 |
</div> |
| 58 | 66 |