2024-09-13 17:43:01 +02:00
|
|
|
// AlertifyJS default settings
|
|
|
|
alertify.defaults = {
|
|
|
|
// dialogs defaults
|
|
|
|
modal: true,
|
|
|
|
movable: true,
|
|
|
|
resizable: true,
|
|
|
|
closable: true,
|
|
|
|
maximizable: true,
|
|
|
|
pinnable: true,
|
|
|
|
pinned: true,
|
|
|
|
padding: true,
|
|
|
|
overflow: true,
|
|
|
|
maintainFocus: true,
|
|
|
|
transition: "fade",
|
|
|
|
|
|
|
|
// notifier defaults
|
|
|
|
notifier: {
|
|
|
|
// auto-dismiss wait time (in seconds)
|
|
|
|
delay: 0,
|
|
|
|
// default position
|
|
|
|
position: "top-right",
|
|
|
|
},
|
|
|
|
|
|
|
|
// language resources
|
|
|
|
glossary: {
|
|
|
|
// Dialog title text
|
|
|
|
title: "Confirmation",
|
|
|
|
// ok button text
|
|
|
|
ok: "OK",
|
|
|
|
// cancel button text
|
|
|
|
cancel: "Annuler",
|
|
|
|
},
|
|
|
|
theme: {
|
|
|
|
// class name attached to prompt dialog input textbox.
|
|
|
|
input: "ajs-input form-control",
|
|
|
|
// class name attached to ok button
|
|
|
|
ok: "ajs-ok btn btn-primary",
|
|
|
|
// class name attached to cancel button
|
|
|
|
cancel: "ajs-cancel btn btn-default",
|
|
|
|
},
|
|
|
|
// global hooks
|
2024-09-21 17:23:21 +02:00
|
|
|
hooks: {
|
2024-09-13 17:43:01 +02:00
|
|
|
// invoked before initializing any dialog
|
2024-09-21 17:23:21 +02:00
|
|
|
preinit: function (instance) {},
|
2024-09-13 17:43:01 +02:00
|
|
|
// invoked after initializing any dialog
|
2024-09-21 17:23:21 +02:00
|
|
|
postinit: function (instance) {},
|
|
|
|
},
|
2024-09-13 17:43:01 +02:00
|
|
|
};
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#cats").collapse({
|
|
|
|
toggle: false,
|
2016-09-06 01:12:46 +02:00
|
|
|
});
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_title_click = function (event) {
|
|
|
|
if (event.target.tagName == "BUTTON") {
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var title = $(this);
|
|
|
|
var panel = title.parent().parent();
|
|
|
|
var panel_collapse = panel.find(".panel-collapse");
|
|
|
|
var show = !panel_collapse.hasClass("in");
|
|
|
|
$(".panel-collapse").each(function (idx, div) {
|
|
|
|
$(div).collapse("hide");
|
2016-09-06 01:12:46 +02:00
|
|
|
});
|
2024-09-21 17:23:21 +02:00
|
|
|
if (show) panel_collapse.collapse("show");
|
2024-09-21 17:07:52 +02:00
|
|
|
set_location(
|
2024-09-21 17:23:21 +02:00
|
|
|
title.data("scase").name,
|
|
|
|
show ? title.data("cat").name : null,
|
|
|
|
title.data("trash") ? "trash" : null
|
2024-09-21 17:07:52 +02:00
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Add scase
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_add_scase_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#add_scase_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_add_scase_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var name = $("#add_scase_name")[0].value;
|
|
|
|
if (name == "") {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Vous devez saisir le nom de la valise !", "error", 5);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var nameshake = scases.byName(name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (nameshake) {
|
|
|
|
if (nameshake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Une valise de ce nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Cette valise existe déjà !", "error", 5);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.newSCase(name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#add_scase_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_add_scase_modal = function () {
|
|
|
|
$("#add_scase_name").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_add_scase_modal = function () {
|
|
|
|
$("#add_scase_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Rename scase
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_rename_scase_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#rename_scase_name")[0].value = $("#cats").data("scase");
|
|
|
|
$("#rename_scase_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_rename_scase_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var name = $("#rename_scase_name")[0].value;
|
|
|
|
if (name == "") {
|
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir le nouveau nom de la valise !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
if ($("#cats").data("scase") != name) {
|
|
|
|
var nameshake = scases.byName(name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (nameshake) {
|
|
|
|
if (nameshake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Une valise portant ce nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Une valise portant ce nom existe déjà !", "error", 5);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.renameSCase($("#cats").data("scase"), name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-21 17:23:21 +02:00
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en renomant la valise...",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#rename_scase_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_rename_scase_modal = function () {
|
|
|
|
$("#rename_scase_name").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_rename_scase_modal = function () {
|
|
|
|
$("#rename_scase_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Copy scase
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_copy_scase_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#copy_scase_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_copy_scase_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var name = $("#copy_scase_name")[0].value;
|
|
|
|
if (name == "") {
|
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir le nom de la nouvelle valise !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var nameshake = scases.byName(name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (nameshake) {
|
|
|
|
if (nameshake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Une valise portant ce nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Une valise portant ce nom existe déjà !", "error", 5);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.copySCase($("#cats").data("scase"), name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-21 17:23:21 +02:00
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en copiant la valise...",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#copy_scase_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_copy_scase_modal = function () {
|
|
|
|
$("#copy_scase_name").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_copy_scase_modal = function () {
|
|
|
|
$("#copy_scase_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2016-09-07 00:30:25 +02:00
|
|
|
/***********************
|
|
|
|
* Reset scase
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_reset_scase_btn_click = function (event) {
|
2016-09-07 00:30:25 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-07 00:30:25 +02:00
|
|
|
if (scase) {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Réinitialisation de la valise ${scase.name}`,
|
|
|
|
`Voulez-vous vraiment réinitialiser la valise ${scase.name} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
scases.resetSCase(scase.name);
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2016-09-07 00:30:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
/***********************
|
|
|
|
* Delete scase
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_delete_scase_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Suppression de la valise ${scase.name}`,
|
|
|
|
`Voulez-vous vraiment supprimer la valise ${scase.name} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
scases.removeSCase(scase.name);
|
|
|
|
scases.save();
|
|
|
|
show_scases();
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_restore_scase_btn_click = function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = event.data.scase;
|
2017-09-17 18:55:25 +02:00
|
|
|
if (scase) {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Restauration de la valise ${scase.name}`,
|
|
|
|
`Voulez-vous vraiment restaurer la valise ${scase.name} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
scase.restore();
|
|
|
|
scases.save();
|
|
|
|
show_scases();
|
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_scase_trash_btn_click = function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
event.preventDefault();
|
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2017-09-17 18:55:25 +02:00
|
|
|
if (scase) {
|
|
|
|
show_scase_trash(scase);
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2016-09-06 01:12:46 +02:00
|
|
|
/***********************
|
|
|
|
* Add cat
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_add_cat_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#add_cat_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_add_cat_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var name = $("#add_cat_name")[0].value;
|
|
|
|
if (name == "") {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Vous devez saisir le nom de la catégorie !", "error", 5);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var nameshake = scase.cats.byName(name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (nameshake) {
|
|
|
|
if (nameshake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Une catégorie portant ce nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une catégorie portant ce nom existe déjà !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.newCat(name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#add_cat_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_add_cat_modal = function () {
|
|
|
|
$("#add_cat_name").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_add_cat_modal = function () {
|
|
|
|
$("#add_cat_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Rename cat
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_rename_cat_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#rename_cat_modal").data("cat", event.data.cat.name);
|
|
|
|
$("#rename_cat_name")[0].value = event.data.cat.name;
|
|
|
|
$("#rename_cat_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_rename_cat_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var name = $("#rename_cat_name")[0].value;
|
|
|
|
if (name == "") {
|
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir le nouveau nom de la catégorie !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
|
|
|
if (scase.cats.byName(name)) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var namesake = scase.cats.byName(name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (namesake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Une catégorie de se nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Cette catégorie existe déjà !", "error", 5);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.renameCat($("#rename_cat_modal").data("cat"), name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#rename_cat_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_rename_cat_modal = function () {
|
|
|
|
$("#rename_cat_name").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_rename_cat_modal = function () {
|
|
|
|
$("#rename_cat_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Delete cat
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_delete_cat_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = event.data.cat.name;
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Suppression de la catégorie ${cat}`,
|
|
|
|
`Voulez-vous vraiment supprimer la catégorie ${cat} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
scase.cats.removeCat(cat);
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_restore_cat_btn_click = function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2017-09-17 18:55:25 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = event.data.cat.name;
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Restauration de la catégorie ${cat}`,
|
|
|
|
`Voulez-vous vraiment restaurer la catégorie ${cat} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
scase.cats.restoreCat(cat);
|
|
|
|
scases.save();
|
|
|
|
show_scase(scase);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2016-09-06 01:12:46 +02:00
|
|
|
/************************
|
|
|
|
* Check/Uncheck thing
|
|
|
|
***********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_li_click = function (event) {
|
|
|
|
if (event.target.tagName != "LI") return;
|
|
|
|
var li = $(this);
|
|
|
|
var ul = li.parent();
|
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.byName(ul.data("cat"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var thing = cat.byLabel(li.data("label"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (thing) {
|
2024-09-21 17:23:21 +02:00
|
|
|
li.toggleClass("checked");
|
|
|
|
thing.setChecked(li.hasClass("checked"));
|
2016-09-06 01:12:46 +02:00
|
|
|
scases.save();
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Add thing
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_li_add_click = function (event) {
|
|
|
|
var li = $(this);
|
|
|
|
var cat = li.parent().data("cat");
|
|
|
|
var modal = $("#add_thing_modal");
|
|
|
|
modal.data("cat", cat);
|
|
|
|
modal.modal("show");
|
|
|
|
};
|
|
|
|
|
|
|
|
on_valid_add_thing_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2017-09-17 12:18:45 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var modal = $("#add_thing_modal");
|
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.byName(modal.data("cat"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var things = [];
|
|
|
|
var labels = [];
|
|
|
|
var error = false;
|
|
|
|
var add_thing_nbs = $("input.add_thing_nb");
|
|
|
|
$("input.add_thing_label").each(function (idx, input) {
|
|
|
|
var label = $(input).val();
|
|
|
|
if (label && label != "") {
|
|
|
|
if (labels.indexOf(label) > -1) {
|
|
|
|
alertify.notify(
|
|
|
|
"Deux élements ne peuvent porter le même nom !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
error = true;
|
2017-09-17 12:18:45 +02:00
|
|
|
return;
|
|
|
|
}
|
2017-09-17 19:43:57 +02:00
|
|
|
if (cat.byLabel(label)) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"L'élément '" + label + "' existe déjà !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
error = true;
|
2017-09-17 12:18:45 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var nb = 1;
|
2017-09-17 19:43:57 +02:00
|
|
|
if (add_thing_nbs[idx]) {
|
2024-09-21 17:23:21 +02:00
|
|
|
nb = parseInt($(add_thing_nbs[idx]).val());
|
|
|
|
if (!nb || nb == 0) {
|
|
|
|
nb = 1;
|
2017-09-17 19:43:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
things.push({
|
2024-09-21 17:23:21 +02:00
|
|
|
label: label,
|
|
|
|
nb: nb,
|
2017-09-17 19:43:57 +02:00
|
|
|
});
|
|
|
|
labels.push(label);
|
2017-09-17 12:18:45 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
if (error) {
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
if (things.length == 0) {
|
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir au moins un nom d'élément !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2017-09-17 12:18:45 +02:00
|
|
|
return;
|
|
|
|
}
|
2017-09-17 19:43:57 +02:00
|
|
|
for (idx in things) {
|
2024-09-21 17:23:21 +02:00
|
|
|
cat.newThing(things[idx]["label"], things[idx]["nb"]);
|
2017-09-17 12:18:45 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
modal.modal("hide");
|
|
|
|
};
|
|
|
|
|
|
|
|
on_show_add_thing_modal = function () {
|
|
|
|
$(".add_thing_other").remove();
|
|
|
|
$("input.add_thing_label").val("");
|
|
|
|
$("input.add_thing_nb").val("");
|
|
|
|
$("input.add_thing_label").first().focus();
|
|
|
|
};
|
|
|
|
|
|
|
|
on_close_add_thing_modal = function () {
|
|
|
|
$("#add_thing_modal form")[0].reset();
|
|
|
|
};
|
|
|
|
|
|
|
|
on_add_thing_label_focus = function (event) {
|
|
|
|
if ($("input.add_thing_label").last()[0] == event.target) {
|
|
|
|
var new_input_group = $('<div class="form-group add_thing_other"></div>');
|
|
|
|
var new_input_label = $(
|
|
|
|
'<input type="text" class="form-control add_thing_label" placeholder="Encore un ?"/>'
|
|
|
|
);
|
|
|
|
var new_input_nb = $(
|
|
|
|
'<input type="number" class="form-control add_thing_nb" placeholder="Nb"/>'
|
|
|
|
);
|
2017-09-17 19:43:57 +02:00
|
|
|
new_input_group.append(new_input_label);
|
2024-09-21 17:23:21 +02:00
|
|
|
new_input_group.append(" ");
|
2017-09-17 19:43:57 +02:00
|
|
|
new_input_group.append(new_input_nb);
|
2024-09-21 17:23:21 +02:00
|
|
|
new_input_label.bind("focus", on_add_thing_label_focus);
|
2017-09-17 12:18:45 +02:00
|
|
|
$(event.target).parent().after(new_input_group);
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
2017-09-17 19:43:57 +02:00
|
|
|
* Edit thing
|
2016-09-06 01:12:46 +02:00
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_edit_thing_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#edit_thing_modal").data("cat", event.data.cat.name);
|
|
|
|
$("#edit_thing_modal").data("thing", event.data.thing.label);
|
|
|
|
$("#edit_thing_label").val(event.data.thing.label);
|
|
|
|
$("#edit_thing_nb").val(event.data.thing.nb);
|
|
|
|
$("#edit_thing_modal").modal("show");
|
|
|
|
};
|
|
|
|
|
|
|
|
on_valid_edit_thing_modal = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var label = $("#edit_thing_label").val();
|
|
|
|
if (label == "") {
|
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir le nouveau nom de l'élément !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var nb = parseInt($("#edit_thing_nb").val());
|
|
|
|
if (!nb || nb == 0) {
|
|
|
|
nb = 1;
|
2017-09-17 19:43:57 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.byName($("#edit_thing_modal").data("cat"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
2024-09-21 17:23:21 +02:00
|
|
|
if (label != $("#edit_thing_modal").data("thing")) {
|
|
|
|
var namesake = cat.byLabel(label);
|
2017-09-17 19:43:57 +02:00
|
|
|
if (namesake) {
|
|
|
|
if (namesake.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Un élément de ce nom existe dans la corbeille !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.notify("Un élément de ce nom existe déjà !", "error", 5);
|
2017-09-17 19:43:57 +02:00
|
|
|
}
|
|
|
|
return;
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var thing = cat.renameThing(
|
|
|
|
$("#edit_thing_modal").data("thing"),
|
|
|
|
label
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
var thing = cat.byLabel(label);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
if (thing) {
|
2017-09-17 19:43:57 +02:00
|
|
|
thing.setNb(nb);
|
2016-09-06 01:12:46 +02:00
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#edit_thing_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_edit_thing_modal = function () {
|
|
|
|
$("#edit_thing_label").focus();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_edit_thing_modal = function () {
|
|
|
|
$("#edit_thing_modal form")[0].reset();
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Delete thing
|
|
|
|
**********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
on_delete_thing_btn_click = function (event) {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2016-09-06 01:12:46 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.byName(event.data.cat.name);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var thing = event.data.thing.label;
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Suppression de l'élément ${thing}`,
|
|
|
|
`Voulez-vous vraiment supprimer l'élément ${thing} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
cat.removeThing(thing);
|
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_restore_thing_btn_click = function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var scase = scases.byName($("#cats").data("scase"));
|
2017-09-17 18:55:25 +02:00
|
|
|
if (scase) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var cat = scase.cats.byName(event.data.cat.name);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (cat) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var thing = event.data.thing.label;
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
`Restauration de l'élément ${thing}`,
|
|
|
|
`Voulez-vous vraiment restaurer l'élément ${thing} ?`,
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-13 17:43:01 +02:00
|
|
|
cat.restoreThing(thing);
|
|
|
|
scases.save();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase(scase, cat.name);
|
2024-09-21 17:07:52 +02:00
|
|
|
auto_sync_local_data();
|
2024-09-13 17:43:01 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2016-09-06 01:12:46 +02:00
|
|
|
/********************
|
|
|
|
* Show one scase
|
|
|
|
*******************/
|
2024-09-21 17:23:21 +02:00
|
|
|
show_cat = function (scase, cat, displayed) {
|
|
|
|
var panel = $('<div class="panel panel-default"></div>');
|
|
|
|
var panel_heading = $('<div class="panel-heading" role="tab"></div>');
|
|
|
|
var panel_title = $('<h4 class="panel-title">' + cat.name + " </h4>");
|
|
|
|
panel_title.data("scase", scase);
|
|
|
|
panel_title.data("cat", cat);
|
|
|
|
panel_title.bind("click", on_title_click);
|
|
|
|
|
|
|
|
var stats = cat.stats();
|
|
|
|
var tag = $('<span class="count-tag pull-right"></span>');
|
|
|
|
if (stats.things == stats.done) {
|
|
|
|
tag.append(
|
|
|
|
$(
|
|
|
|
'<span class="label label-success"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></span>'
|
|
|
|
)
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
tag.append(
|
|
|
|
$('<span class="badge">' + stats.done + " / " + stats.things + "</span>")
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var delete_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-trash"></button>'
|
|
|
|
);
|
|
|
|
delete_btn.bind("click", { cat: cat }, on_delete_cat_btn_click);
|
2016-09-06 01:12:46 +02:00
|
|
|
tag.append(delete_btn);
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var rename_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-edit"></button>'
|
|
|
|
);
|
|
|
|
rename_btn.bind("click", { cat: cat }, on_rename_cat_btn_click);
|
2016-09-06 01:12:46 +02:00
|
|
|
tag.append(rename_btn);
|
|
|
|
|
|
|
|
panel_title.append(tag);
|
|
|
|
|
|
|
|
panel_heading.append(panel_title);
|
|
|
|
panel.append(panel_heading);
|
2024-09-21 17:23:21 +02:00
|
|
|
var panel_collapse = $(
|
|
|
|
'<div class="panel-collapse collapse" role="tabpanel"></div>'
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
if (displayed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
panel_collapse.addClass("in");
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var ul = $('<ul class="list-group" data-cat="' + cat.name + '"></ul>');
|
2016-09-06 01:12:46 +02:00
|
|
|
for (idx in cat.things) {
|
2017-09-17 18:55:25 +02:00
|
|
|
if (cat.things[idx].removed) {
|
|
|
|
continue;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var li = $(
|
|
|
|
'<li class="list-group-item checkable" data-label="' +
|
|
|
|
cat.things[idx].label +
|
|
|
|
'">' +
|
|
|
|
cat.things[idx].label +
|
|
|
|
"</li>"
|
|
|
|
);
|
|
|
|
if (cat.things[idx].nb > 1) {
|
|
|
|
li.append(" <em>(" + cat.things[idx].nb + ")</em>");
|
2017-09-17 19:43:57 +02:00
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
if (cat.things[idx].checked) {
|
2024-09-21 17:23:21 +02:00
|
|
|
li.addClass("checked");
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
li.bind("click", on_li_click);
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var li_actions = $('<span class="actions pull-right"></span>');
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var delete_el_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-trash"></button>'
|
|
|
|
);
|
|
|
|
delete_el_btn.bind(
|
|
|
|
"click",
|
|
|
|
{ cat: cat, thing: cat.things[idx] },
|
|
|
|
on_delete_thing_btn_click
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
li_actions.append(delete_el_btn);
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var edit_el_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-edit"></button>'
|
|
|
|
);
|
|
|
|
edit_el_btn.bind(
|
|
|
|
"click",
|
|
|
|
{ cat: cat, thing: cat.things[idx] },
|
|
|
|
on_edit_thing_btn_click
|
|
|
|
);
|
2017-09-17 19:43:57 +02:00
|
|
|
li_actions.append(edit_el_btn);
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
li.append(li_actions);
|
|
|
|
|
|
|
|
ul.append(li);
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var li = $(
|
|
|
|
'<li class="list-group-item"><span class="glyphicon glyphicon-plus-sign"></span> Ajouter un élément</li>'
|
|
|
|
);
|
|
|
|
li.bind("click", on_li_add_click);
|
2016-09-06 01:12:46 +02:00
|
|
|
ul.append(li);
|
|
|
|
panel_collapse.append(ul);
|
|
|
|
panel.append(panel_collapse);
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#cats").append(panel);
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase = function (scase, display_cat) {
|
|
|
|
clear_page(
|
|
|
|
'<h3><span class="glyphicon glyphicon-briefcase" aria-hidden="true"></span> ' +
|
|
|
|
scase.name +
|
|
|
|
'</h3><div class="panel-group" id="cats" role="tablist" aria-multiselectable="true" data-scase="' +
|
|
|
|
scase.name +
|
|
|
|
'"></div>'
|
|
|
|
);
|
|
|
|
scase.cats.each(function (idx, cat) {
|
2017-09-17 18:55:25 +02:00
|
|
|
if (cat.removed) {
|
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
show_cat(scase, cat, cat.name == display_cat);
|
2016-09-06 01:12:46 +02:00
|
|
|
});
|
2024-09-21 17:07:52 +02:00
|
|
|
set_location(scase.name, display_cat);
|
2024-09-21 17:23:21 +02:00
|
|
|
show_menu("scase");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_back_to_scases_btn_click = function (e) {
|
2016-09-06 01:12:46 +02:00
|
|
|
e.preventDefault();
|
|
|
|
navbar_collapse_hide();
|
|
|
|
show_scases();
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2017-09-17 18:55:25 +02:00
|
|
|
/********************
|
|
|
|
* Show scase trash
|
|
|
|
*******************/
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scase_trash = function (scase, display_cat) {
|
|
|
|
clear_page(
|
|
|
|
'<h3><span class="glyphicon glyphicon-trash" aria-hidden="true"></span>' +
|
|
|
|
scase.name +
|
|
|
|
' : Corbeille <button class="btn btn-default btn-xs" id="back_btn"><span class="glyphicon glyphicon-arrow-left"></button></h3><div class="panel-group" id="cats" role="tablist" aria-multiselectable="true" data-scase="' +
|
|
|
|
scase.name +
|
|
|
|
'"></div>'
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#content h3 #back_btn").bind("click", { scase: scase }, function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
show_scase(event.data.scase);
|
|
|
|
});
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
scase.cats.each(function (idx, cat) {
|
|
|
|
show_cat_trash(scase, cat, cat.name == display_cat);
|
2017-09-17 18:55:25 +02:00
|
|
|
});
|
2024-09-21 17:23:21 +02:00
|
|
|
if ($("#cats .panel").length == 0) {
|
|
|
|
$("#content").append('<p class="center">La corbeille est vide.</p>');
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
set_location(scase.name, display_cat, "trash");
|
|
|
|
show_menu("scase");
|
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
show_cat_trash = function (scase, cat, displayed) {
|
|
|
|
var panel = $('<div class="panel panel-default"></div>');
|
|
|
|
var panel_heading = $('<div class="panel-heading" role="tab"></div>');
|
|
|
|
var panel_title = $('<h4 class="panel-title">' + cat.name + " </h4>");
|
|
|
|
panel_title.data("scase", scase);
|
|
|
|
panel_title.data("cat", cat);
|
|
|
|
panel_title.data("trash", true);
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var tag = $('<span class="count-tag pull-right"></span>');
|
2017-09-17 18:55:25 +02:00
|
|
|
|
|
|
|
panel_title.append(tag);
|
|
|
|
|
|
|
|
panel_heading.append(panel_title);
|
|
|
|
panel.append(panel_heading);
|
|
|
|
|
|
|
|
if (cat.removed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var stats = cat.stats();
|
|
|
|
tag.append($('<span class="badge">' + stats.things + "</span>"));
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var restore_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-ok"></button>'
|
|
|
|
);
|
|
|
|
restore_btn.bind("click", { cat: cat }, on_restore_cat_btn_click);
|
2017-09-17 18:55:25 +02:00
|
|
|
tag.append(restore_btn);
|
2024-09-21 17:23:21 +02:00
|
|
|
} else {
|
|
|
|
var deleted_things = [];
|
2017-09-17 18:55:25 +02:00
|
|
|
for (idx in cat.things) {
|
|
|
|
if (cat.things[idx].removed) {
|
|
|
|
deleted_things.push(cat.things[idx]);
|
|
|
|
}
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
if (deleted_things.length == 0) {
|
2017-09-17 18:55:25 +02:00
|
|
|
return true;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
panel_title.bind("click", on_title_click);
|
|
|
|
tag.append($('<span class="badge">' + deleted_things.length + "</span>"));
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var panel_collapse = $(
|
|
|
|
'<div class="panel-collapse collapse" role="tabpanel"></div>'
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
if (displayed) {
|
2024-09-21 17:23:21 +02:00
|
|
|
panel_collapse.addClass("in");
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var ul = $('<ul class="list-group" data-cat="' + cat.name + '"></ul>');
|
2017-09-17 18:55:25 +02:00
|
|
|
for (idx in deleted_things) {
|
2024-09-21 17:23:21 +02:00
|
|
|
var li = $(
|
|
|
|
'<li class="list-group-item" data-label="' +
|
|
|
|
deleted_things[idx].label +
|
|
|
|
'">' +
|
|
|
|
deleted_things[idx].label +
|
|
|
|
"</li>"
|
|
|
|
);
|
|
|
|
var li_actions = $('<span class="actions pull-right"></span>');
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var restore_el_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-ok"></button>'
|
|
|
|
);
|
|
|
|
restore_el_btn.bind(
|
|
|
|
"click",
|
|
|
|
{ cat: cat, thing: deleted_things[idx] },
|
|
|
|
on_restore_thing_btn_click
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
li_actions.append(restore_el_btn);
|
|
|
|
|
|
|
|
li.append(li_actions);
|
|
|
|
|
|
|
|
ul.append(li);
|
|
|
|
}
|
|
|
|
panel_collapse.append(ul);
|
|
|
|
panel.append(panel_collapse);
|
|
|
|
}
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#cats").append(panel);
|
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_back_to_scase_btn_click = function (e) {
|
2017-09-17 18:55:25 +02:00
|
|
|
e.preventDefault();
|
|
|
|
navbar_collapse_hide();
|
|
|
|
show_scase(e.data.scase);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2016-09-06 01:12:46 +02:00
|
|
|
/********************
|
|
|
|
* Show scases
|
|
|
|
*******************/
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scases = function () {
|
2016-09-07 19:06:11 +02:00
|
|
|
clear_page('<h3>Vos valises</h3><ul class="list-group" id="scases"></ul>');
|
2024-09-21 17:23:21 +02:00
|
|
|
scases.each(function (idx, scase) {
|
2017-09-17 18:55:25 +02:00
|
|
|
if (scase.removed) {
|
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var stats = scase.stats();
|
|
|
|
var tag = '<span class="count-tag pull-right">';
|
|
|
|
if (stats.things == stats.done) {
|
|
|
|
tag +=
|
|
|
|
'<span class="label label-success"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></span>';
|
|
|
|
} else {
|
|
|
|
tag +=
|
|
|
|
'<span class="badge">' + stats.done + " / " + stats.things + "</span>";
|
2016-09-07 19:06:11 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
tag += "</span>";
|
|
|
|
|
|
|
|
var li = $(
|
|
|
|
'<li class="list-group-item" data-name="' +
|
|
|
|
scase.name +
|
|
|
|
'"><span class="scase-name"><span class="glyphicon glyphicon-briefcase" aria-hidden="true"></span> ' +
|
|
|
|
scase.name +
|
|
|
|
"</span>" +
|
|
|
|
tag +
|
|
|
|
"</li>"
|
|
|
|
);
|
|
|
|
li.bind("click", on_scase_click);
|
|
|
|
$("#scases").append(li);
|
2016-09-06 01:12:46 +02:00
|
|
|
});
|
2024-09-21 17:07:52 +02:00
|
|
|
set_location();
|
2024-09-21 17:23:21 +02:00
|
|
|
show_menu("scases");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_scase_click = function (event) {
|
|
|
|
var li = $(this);
|
|
|
|
var scase = scases.byName(li.data("name"));
|
2016-09-06 01:12:46 +02:00
|
|
|
show_scase(scase);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2017-09-17 18:55:25 +02:00
|
|
|
/********************
|
|
|
|
* Show scases trash
|
|
|
|
*******************/
|
2024-09-21 17:23:21 +02:00
|
|
|
show_scases_trash = function () {
|
|
|
|
clear_page(
|
|
|
|
'<h3>Corbeille <button class="btn btn-default btn-xs" id="back_btn"><span class="glyphicon glyphicon-arrow-left"></button></h3><ul class="list-group" id="scases"></ul>'
|
|
|
|
);
|
|
|
|
$("#content h3 #back_btn").bind("click", function (event) {
|
2017-09-17 18:55:25 +02:00
|
|
|
show_scases();
|
|
|
|
});
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
scases.each(function (idx, scase) {
|
2017-09-17 18:55:25 +02:00
|
|
|
if (!scase.removed) {
|
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
var stats = scase.stats();
|
|
|
|
var tags = $('<span class="count-tag pull-right"></span>');
|
|
|
|
tags.append('<span class="badge">' + stats.things + "</span>");
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var restore_btn = $(
|
|
|
|
'<button class="btn btn-default btn-xs pull-right"><span class="glyphicon glyphicon-ok"></button>'
|
|
|
|
);
|
|
|
|
restore_btn.bind("click", { scase: scase }, on_restore_scase_btn_click);
|
2017-09-17 18:55:25 +02:00
|
|
|
tags.append(restore_btn);
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
var li = $(
|
|
|
|
'<li class="list-group-item" data-name="' +
|
|
|
|
scase.name +
|
|
|
|
'"><span class="scase-name"><span class="glyphicon glyphicon-briefcase" aria-hidden="true"></span> ' +
|
|
|
|
scase.name +
|
|
|
|
"</span></li>"
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
li.append(tags);
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#scases").append(li);
|
2017-09-17 18:55:25 +02:00
|
|
|
});
|
2024-09-21 17:23:21 +02:00
|
|
|
if ($("#scases li").length == 0) {
|
|
|
|
$("#content").append(
|
|
|
|
'<p class="center">Aucune valise dans la corbeille.</p>'
|
|
|
|
);
|
2017-09-17 18:55:25 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
show_menu("scases");
|
|
|
|
};
|
2017-09-17 18:55:25 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_scases_trash_btn = function (e) {
|
2017-09-17 20:04:30 +02:00
|
|
|
e.preventDefault();
|
|
|
|
navbar_collapse_hide();
|
|
|
|
show_scases_trash();
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-09-17 20:04:30 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
clear_page = function (new_content) {
|
2016-09-06 01:12:46 +02:00
|
|
|
if (new_content) {
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#content").html(new_content);
|
|
|
|
} else {
|
|
|
|
$("#content").html("");
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/************************
|
|
|
|
* Show menu
|
|
|
|
***********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
show_menu = function (menu) {
|
|
|
|
$(".menu").css("display", "none");
|
|
|
|
$(".menu-" + menu).css("display", "block");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/*******************
|
|
|
|
* pleaseWaitDialog
|
|
|
|
*******************/
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
pleaseWaitShow = function () {
|
|
|
|
$("#please_wait_modal").modal("show");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
pleaseWaitHide = function () {
|
|
|
|
$("#please_wait_modal").modal("hide");
|
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/****************
|
|
|
|
* Nav bars
|
|
|
|
****************/
|
2024-09-21 17:23:21 +02:00
|
|
|
navbar_collapse_hide = function () {
|
|
|
|
if ($("#navbar-top-collapse").hasClass("in")) {
|
|
|
|
$("#navbar-top-collapse").collapse("hide");
|
2016-09-06 01:12:46 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
|
|
|
/********************
|
|
|
|
* Clear local data
|
|
|
|
********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
clear_local_data = function () {
|
2016-09-06 01:12:46 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-13 17:43:01 +02:00
|
|
|
alertify.confirm(
|
|
|
|
"Suppression de toutes les données locales",
|
|
|
|
"Etes-vous sûre de vouloir supprimer les données locales (action irréversible) ?",
|
|
|
|
on_confirm_clear_local_data,
|
|
|
|
null
|
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_confirm_clear_local_data = function (data) {
|
2016-09-06 01:12:46 +02:00
|
|
|
delete localStorage.scases;
|
|
|
|
location.reload();
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:07:52 +02:00
|
|
|
/********************
|
|
|
|
* Clear local data
|
|
|
|
********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
load_example_data = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
navbar_collapse_hide();
|
|
|
|
alertify.confirm(
|
|
|
|
"Chargement des données d'exemple",
|
|
|
|
"Etes-vous sûre de vouloir charger les données d'exemple à la place de vos propres données (action irréversible) ?",
|
2024-09-21 17:23:21 +02:00
|
|
|
function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
delete localStorage.scases;
|
2024-09-21 17:23:21 +02:00
|
|
|
scases = new SCaseList();
|
2024-09-21 17:07:52 +02:00
|
|
|
scases.importExampleData();
|
|
|
|
scases.save();
|
|
|
|
show_scases();
|
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2017-10-25 01:31:23 +02:00
|
|
|
/*******************************
|
|
|
|
* Import/Export local data
|
|
|
|
*******************************/
|
2024-09-21 17:23:21 +02:00
|
|
|
export_local_data = function () {
|
2017-10-25 01:31:23 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#export_local_data").attr(
|
|
|
|
"href",
|
|
|
|
"data:application/json;base64," + btoa(JSON.stringify(scases.export()))
|
|
|
|
);
|
|
|
|
};
|
2017-10-25 01:31:23 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
import_local_data = function () {
|
2017-10-25 01:31:23 +02:00
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
var input = $('<input type="file" accept="application/json">');
|
|
|
|
input.css("display", "none");
|
|
|
|
input.bind("change", { input: input }, function (e) {
|
2017-10-25 01:31:23 +02:00
|
|
|
pleaseWaitShow();
|
2024-09-21 17:23:21 +02:00
|
|
|
var input = e.data.input;
|
|
|
|
var file = input.prop("files")[0];
|
2017-10-25 01:31:23 +02:00
|
|
|
if (file) {
|
|
|
|
var reader = new FileReader();
|
2024-09-21 17:23:21 +02:00
|
|
|
$(reader).bind("load", function (e) {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (
|
2024-09-21 17:23:21 +02:00
|
|
|
$.type(e.target.result) != "string" ||
|
|
|
|
!e.target.result.startsWith("data:application/json;base64,")
|
2024-09-21 17:07:52 +02:00
|
|
|
) {
|
|
|
|
pleaseWaitHide();
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify("Fichier.", "error", 5);
|
2024-09-21 17:07:52 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
try {
|
2024-09-21 17:23:21 +02:00
|
|
|
json_data = atob(
|
|
|
|
e.target.result.replace("data:application/json;base64,", "")
|
|
|
|
);
|
|
|
|
data = JSON.parse(json_data);
|
|
|
|
} catch (e) {
|
2024-09-21 17:07:52 +02:00
|
|
|
pleaseWaitHide();
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify("Impossible de décodé le fichier.", "error", 5);
|
2024-09-21 17:07:52 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
pleaseWaitHide();
|
|
|
|
alertify.confirm(
|
|
|
|
"Importation depuis un fichier",
|
|
|
|
"Etes-vous sûre de vouloir écraser vos données locales par celle issues de ce fichier ?",
|
2024-09-21 17:23:21 +02:00
|
|
|
function () {
|
|
|
|
var backData = scases.export();
|
|
|
|
scases = new SCaseList();
|
2024-09-21 17:07:52 +02:00
|
|
|
if (scases.loadFromJsonData(data)) {
|
|
|
|
alertify.notify("Le fichier a bien été importé.", "success", 3);
|
2024-09-21 17:23:21 +02:00
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en chargeant ce fichier. Restauration des données précédentes...",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2024-09-21 17:07:52 +02:00
|
|
|
if (scases.loadFromJsonData(backData)) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Les données précédentes ont bien été restaurées.",
|
|
|
|
"success",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en restaurant les données précédentes.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2024-09-21 17:07:52 +02:00
|
|
|
}
|
2017-10-25 01:31:23 +02:00
|
|
|
}
|
2024-09-21 17:07:52 +02:00
|
|
|
show_scases();
|
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2017-10-25 01:31:23 +02:00
|
|
|
});
|
|
|
|
reader.readAsDataURL(file);
|
|
|
|
}
|
|
|
|
});
|
2024-09-21 17:23:21 +02:00
|
|
|
$("body").append(input);
|
2017-10-25 01:31:23 +02:00
|
|
|
input[0].click();
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2017-10-25 01:31:23 +02:00
|
|
|
|
2024-09-21 17:07:52 +02:00
|
|
|
/******************************
|
|
|
|
* Authentication
|
|
|
|
******************************/
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
show_user = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (user.connected()) {
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#login").parent().css("display", "none");
|
|
|
|
$("#logout").parent().css("display", "block");
|
|
|
|
$("#username").html(user.name);
|
|
|
|
} else {
|
|
|
|
$("#login").parent().css("display", "block");
|
|
|
|
$("#logout").parent().css("display", "none");
|
|
|
|
$("#username").html("");
|
2024-09-21 17:07:52 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_login_button_click = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (user.connected()) return;
|
|
|
|
navbar_collapse_hide();
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#login_modal").modal("show");
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_valid_login_modal = function (e) {
|
2024-09-21 17:07:52 +02:00
|
|
|
e.preventDefault();
|
2024-09-21 17:23:21 +02:00
|
|
|
var username = $("#login_username").val();
|
|
|
|
var password = $("#login_password").val();
|
2024-09-21 17:07:52 +02:00
|
|
|
if (!username || !password) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Vous devez saisir votre nom d'utilisateur et votre mot de passe !",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2024-09-21 17:07:52 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$.post("login", {
|
|
|
|
username: username,
|
|
|
|
password: password,
|
|
|
|
})
|
|
|
|
.done(function (data) {
|
|
|
|
if (data.username && data.token) {
|
|
|
|
user.token = data.token;
|
|
|
|
user.username = data.username;
|
|
|
|
user.name = data.name ? data.name : username;
|
|
|
|
user.save();
|
|
|
|
$("#login_modal").modal("hide");
|
|
|
|
show_user();
|
|
|
|
alertify.notify("Connecté.", "success", 3);
|
|
|
|
propose_sync_local_data();
|
|
|
|
} else {
|
|
|
|
alertify.notify("Nom d'utilisateur ou mot de passe.", "error", 5);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.fail(function () {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en vous identifiant. Merci de réessayer ultèrieument.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
});
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_show_login_modal = function () {
|
|
|
|
$("#login_username").val(user.username ? user.username : "");
|
|
|
|
if (user.username) $("#login_password").focus();
|
|
|
|
else $("#login_username").focus();
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_close_login_modal = function () {
|
|
|
|
$("#login_modal form")[0].reset();
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_logout_button_click = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (!user.connected()) return;
|
|
|
|
navbar_collapse_hide();
|
|
|
|
alertify.confirm(
|
|
|
|
"Déconnexion",
|
|
|
|
"Voulez-vous vraiment vous déconnecter ?",
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
|
|
|
$.post("logout", {
|
|
|
|
username: user.username,
|
|
|
|
token: user.token,
|
|
|
|
})
|
|
|
|
.done(function (data) {
|
|
|
|
if (data.success) {
|
|
|
|
user.reset();
|
|
|
|
user.save();
|
|
|
|
show_user();
|
|
|
|
alertify.notify("Déconnecté.", "success", 3);
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en vous déconnectant. Merci de réessayer ultèrieument.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.fail(function () {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en vous déconnectant. Merci de réessayer ultèrieument.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
});
|
2024-09-21 17:07:52 +02:00
|
|
|
},
|
|
|
|
null
|
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
is_connected = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
return user && user.token;
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
|
|
|
/*******************************
|
|
|
|
* Sync local data with server
|
|
|
|
*******************************/
|
2024-09-21 17:23:21 +02:00
|
|
|
sync_local_data = function (callback) {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (!is_connected()) {
|
|
|
|
if (callback) callback(false);
|
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
$.post("sync", {
|
|
|
|
username: user.username,
|
|
|
|
token: user.token,
|
|
|
|
data: JSON.stringify(scases.export()),
|
|
|
|
})
|
|
|
|
.done(function (data) {
|
|
|
|
if (data.scases) {
|
|
|
|
var backData = scases.export();
|
|
|
|
scases = new SCaseList();
|
|
|
|
if (scases.loadFromJsonData(data)) {
|
|
|
|
scases.save();
|
|
|
|
alertify.notify("Données synchronisées.", "success", 3);
|
|
|
|
if (callback) callback(true);
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en chargeant les données issues du serveur. Restauration des données précédentes...",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
if (scases.loadFromJsonData(backData)) {
|
|
|
|
alertify.notify(
|
|
|
|
"Les données précédentes ont bien été restaurées.",
|
|
|
|
"success",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en restaurant les données précédentes.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if (callback) callback(false);
|
2024-09-21 17:07:52 +02:00
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en synchronisant vos données. Merci de réessayer ultèrieument.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2024-09-21 17:07:52 +02:00
|
|
|
if (callback) callback(false);
|
|
|
|
}
|
2024-09-21 17:23:21 +02:00
|
|
|
})
|
|
|
|
.fail(function (xhr, status, error) {
|
|
|
|
if (xhr.status == 401) {
|
|
|
|
user.token = null;
|
|
|
|
user.save();
|
|
|
|
show_user();
|
|
|
|
alertify.notify(
|
|
|
|
"Votre session semble avoir expirée, merci de vous réauthentifier.",
|
|
|
|
"error",
|
|
|
|
8
|
|
|
|
);
|
|
|
|
$("#login_modal").modal("show");
|
|
|
|
} else {
|
|
|
|
alertify.notify(
|
|
|
|
"Une erreur est survenue en synchronisant vos données. Merci de réessayer ultèrieument.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
}
|
2024-09-21 17:07:52 +02:00
|
|
|
if (callback) callback(false);
|
2024-09-21 17:23:21 +02:00
|
|
|
});
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
_auto_sync_timeout = false;
|
2024-09-21 17:23:21 +02:00
|
|
|
auto_sync_local_data = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
if (_auto_sync_timeout) clearTimeout(_auto_sync_timeout);
|
|
|
|
if (!is_connected() || !navigator.onLine) return;
|
|
|
|
_auto_sync_timeout = setTimeout(sync_local_data, 3000);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
|
|
|
on_sync_local_data_btn_click = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
navbar_collapse_hide();
|
|
|
|
if (!is_connected()) {
|
2024-09-21 17:23:21 +02:00
|
|
|
alertify.notify(
|
|
|
|
"Vous devez vous connecter avant de pouvoir synchroniser vos données.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
|
|
|
$("#login_modal").modal("show");
|
2024-09-21 17:07:52 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
pleaseWaitShow();
|
2024-09-21 17:23:21 +02:00
|
|
|
sync_local_data(function (success) {
|
2024-09-21 17:07:52 +02:00
|
|
|
pleaseWaitHide();
|
|
|
|
});
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
|
|
|
propose_sync_local_data = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
alertify.confirm(
|
|
|
|
"Synchronisation de vos valises depuis le serveur",
|
|
|
|
"Voulez-vous synchroniser vos valises depuis le serveur ?",
|
2024-09-21 17:23:21 +02:00
|
|
|
function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
pleaseWaitShow();
|
2024-09-21 17:23:21 +02:00
|
|
|
sync_local_data(function (success) {
|
|
|
|
pleaseWaitHide();
|
|
|
|
if (!success) return;
|
|
|
|
if (scases.count() == 0) propose_example_data();
|
|
|
|
else refresh_location();
|
|
|
|
});
|
2024-09-21 17:07:52 +02:00
|
|
|
},
|
|
|
|
refresh_location
|
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Manage location hash
|
|
|
|
***********************/
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
set_location = function (scase, cat, detail) {
|
2024-09-21 17:07:52 +02:00
|
|
|
console.log(`set_location(${scase}, ${cat}, ${detail})`);
|
|
|
|
var parts = [];
|
|
|
|
if (scase) parts[0] = scase;
|
|
|
|
if (cat) parts[1] = cat;
|
|
|
|
if (detail) parts[2] = detail;
|
|
|
|
location.hash = parts.join("|");
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
parse_location = function (value) {
|
2024-09-21 17:07:52 +02:00
|
|
|
value = typeof value == "undefined" ? location.hash : value;
|
|
|
|
console.log(`parse_location(${value})`);
|
2024-09-21 17:23:21 +02:00
|
|
|
parts = (typeof value == "undefined" ? location.hash : value).split("|");
|
2024-09-21 17:07:52 +02:00
|
|
|
return {
|
2024-09-21 17:23:21 +02:00
|
|
|
scase: parts[0] ? decodeURI(parts[0].substring(1)) : null,
|
|
|
|
cat: parts[0] && parts[1] ? decodeURI(parts[1]) : null,
|
2024-09-21 17:07:52 +02:00
|
|
|
detail: parts[2] ? decodeURI(parts[2]) : null,
|
|
|
|
};
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
refresh_location = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
var info = parse_location();
|
|
|
|
console.log(`refresh_location(${info.scase}, ${info.cat}, ${info.detail})`);
|
|
|
|
var scase = info.scase ? scases.byName(info.scase) : null;
|
2024-09-21 17:23:21 +02:00
|
|
|
if (!scase) show_scases();
|
|
|
|
else if (info.detail == "trash") show_scase_trash(scase, info.cat);
|
|
|
|
else show_scase(scase, info.cat);
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
|
|
|
/***********************
|
|
|
|
* Welcome modal
|
|
|
|
***********************/
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_welcome_connect_click = function () {
|
|
|
|
$("#welcome_modal").modal("hide");
|
|
|
|
$("#login_modal").modal("show");
|
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
on_welcome_annonymous_click = function () {
|
|
|
|
$("#welcome_modal").modal("hide");
|
2024-09-21 17:07:52 +02:00
|
|
|
if (scases.count() == 0) propose_example_data();
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
propose_example_data = function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
alertify.confirm(
|
|
|
|
"Un exemple de valise ?",
|
|
|
|
"Souhaitez-vous charger un exemple de valise pour commencer ?",
|
2024-09-21 17:23:21 +02:00
|
|
|
function () {
|
2024-09-21 17:07:52 +02:00
|
|
|
scases.importExampleData();
|
|
|
|
scases.save();
|
|
|
|
refresh_location();
|
|
|
|
},
|
2024-09-21 17:23:21 +02:00
|
|
|
null
|
2024-09-21 17:07:52 +02:00
|
|
|
);
|
2024-09-21 17:23:21 +02:00
|
|
|
};
|
2024-09-21 17:07:52 +02:00
|
|
|
|
2016-09-06 01:12:46 +02:00
|
|
|
/*********************
|
|
|
|
* Activate
|
|
|
|
*********************/
|
2024-09-21 17:23:21 +02:00
|
|
|
$(document).ready(function () {
|
|
|
|
if (typeof localStorage === "undefined") {
|
2024-09-21 17:07:52 +02:00
|
|
|
alertify.notify(
|
2024-09-21 17:23:21 +02:00
|
|
|
"Votre navigateur internet ne support pas le stockage de données locale. Vous ne pouvez donc malheureusment pas utiliser cette application.",
|
|
|
|
"error",
|
|
|
|
5
|
|
|
|
);
|
2016-09-06 01:12:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-09-21 17:07:52 +02:00
|
|
|
pleaseWaitShow();
|
2016-09-06 01:12:46 +02:00
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
$("#clear_local_data").bind("click", clear_local_data);
|
|
|
|
$("#load_example_data").bind("click", load_example_data);
|
|
|
|
$("#import_local_data").bind("click", import_local_data);
|
|
|
|
$("#export_local_data").bind("click", export_local_data);
|
|
|
|
$("#sync_local_data").bind("click", on_sync_local_data_btn_click);
|
|
|
|
|
|
|
|
$("#add_scase_btn").bind("click", on_add_scase_btn_click);
|
|
|
|
$("#add_scase_submit").bind("click", on_valid_add_scase_modal);
|
|
|
|
$("#add_scase_modal").on("shown.bs.modal", on_show_add_scase_modal);
|
|
|
|
$("#add_scase_modal").on("hidden.bs.modal", on_close_add_scase_modal);
|
|
|
|
$("#add_scase_modal form").bind("submit", on_valid_add_scase_modal);
|
|
|
|
|
|
|
|
$("#scases_trash_btn").bind("click", on_scases_trash_btn);
|
|
|
|
|
|
|
|
$("#rename_scase_btn").bind("click", on_rename_scase_btn_click);
|
|
|
|
$("#rename_scase_submit").bind("click", on_valid_rename_scase_modal);
|
|
|
|
$("#rename_scase_modal").on("shown.bs.modal", on_show_rename_scase_modal);
|
|
|
|
$("#rename_scase_modal").on("hidden.bs.modal", on_close_rename_scase_modal);
|
|
|
|
$("#rename_scase_modal form").bind("submit", on_valid_rename_scase_modal);
|
|
|
|
|
|
|
|
$("#copy_scase_btn").bind("click", on_copy_scase_btn_click);
|
|
|
|
$("#copy_scase_submit").bind("click", on_valid_copy_scase_modal);
|
|
|
|
$("#copy_scase_modal").on("shown.bs.modal", on_show_copy_scase_modal);
|
|
|
|
$("#copy_scase_modal").on("hidden.bs.modal", on_close_copy_scase_modal);
|
|
|
|
$("#copy_scase_modal form").bind("submit", on_valid_copy_scase_modal);
|
|
|
|
|
|
|
|
$("#reset_scase_btn").bind("click", on_reset_scase_btn_click);
|
|
|
|
$("#delete_scase_btn").bind("click", on_delete_scase_btn_click);
|
|
|
|
$("#scase_trash_btn").bind("click", on_scase_trash_btn_click);
|
|
|
|
|
|
|
|
$("#add_cat_btn").bind("click", on_add_cat_btn_click);
|
|
|
|
$("#add_cat_submit").bind("click", on_valid_add_cat_modal);
|
|
|
|
$("#add_cat_modal").on("shown.bs.modal", on_show_add_cat_modal);
|
|
|
|
$("#add_cat_modal").on("hidden.bs.modal", on_close_add_cat_modal);
|
|
|
|
$("#add_cat_modal form").bind("submit", on_valid_add_cat_modal);
|
|
|
|
|
|
|
|
$("#rename_cat_submit").bind("click", on_valid_rename_cat_modal);
|
|
|
|
$("#rename_cat_modal").on("shown.bs.modal", on_show_rename_cat_modal);
|
|
|
|
$("#rename_cat_modal").on("hidden.bs.modal", on_close_rename_cat_modal);
|
|
|
|
$("#rename_cat_modal form").bind("submit", on_valid_rename_cat_modal);
|
|
|
|
|
|
|
|
$("#back_to_scases").bind("click", on_back_to_scases_btn_click);
|
|
|
|
|
|
|
|
$("input.add_thing_label").bind("focus", on_add_thing_label_focus);
|
|
|
|
$("#add_thing_submit").bind("click", on_valid_add_thing_modal);
|
|
|
|
$("#add_thing_modal").on("shown.bs.modal", on_show_add_thing_modal);
|
|
|
|
$("#add_thing_modal").on("hidden.bs.modal", on_close_add_thing_modal);
|
|
|
|
$("#add_thing_modal form").bind("submit", on_valid_add_thing_modal);
|
|
|
|
|
|
|
|
$("#edit_thing_submit").bind("click", on_valid_edit_thing_modal);
|
|
|
|
$("#edit_thing_modal").on("shown.bs.modal", on_show_edit_thing_modal);
|
|
|
|
$("#edit_thing_modal").on("hidden.bs.modal", on_close_edit_thing_modal);
|
|
|
|
$("#edit_thing_modal form").bind("submit", on_valid_edit_thing_modal);
|
|
|
|
|
|
|
|
$("#login").bind("click", on_login_button_click);
|
|
|
|
$("#logout").bind("click", on_logout_button_click);
|
|
|
|
$("#login_submit").bind("click", on_valid_login_modal);
|
|
|
|
$("#login_modal").on("shown.bs.modal", on_show_login_modal);
|
|
|
|
$("#login_modal").on("hidden.bs.modal", on_close_login_modal);
|
|
|
|
$("#login_modal form").bind("submit", on_valid_login_modal);
|
|
|
|
|
|
|
|
$("#welcome_connect").bind("click", on_welcome_connect_click);
|
|
|
|
$("#welcome_annonymous").bind("click", on_welcome_annonymous_click);
|
|
|
|
|
|
|
|
$("#app-name").bind("click", show_scases);
|
|
|
|
|
|
|
|
user = new User();
|
2024-09-21 17:07:52 +02:00
|
|
|
user.loadFromLocalStorage();
|
|
|
|
show_user();
|
|
|
|
|
2024-09-21 17:23:21 +02:00
|
|
|
scases = new SCaseList();
|
|
|
|
switch (scases.loadFromLocalStorage()) {
|
2024-09-21 17:07:52 +02:00
|
|
|
case null:
|
|
|
|
pleaseWaitHide();
|
2024-09-21 17:23:21 +02:00
|
|
|
if (is_connected()) propose_sync_local_data();
|
|
|
|
else $("#welcome_modal").modal("show");
|
2024-09-21 17:07:52 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case false:
|
|
|
|
alertify.confirm(
|
|
|
|
"Erreur en chargeant les données locales",
|
2024-09-21 17:23:21 +02:00
|
|
|
"Une erreur est survenue en chargeant les données locales. On les purges ?",
|
|
|
|
function (data) {
|
2024-09-21 17:07:52 +02:00
|
|
|
delete localStorage.scases;
|
|
|
|
location.reload();
|
|
|
|
},
|
2024-09-21 17:23:21 +02:00
|
|
|
function (data) {
|
2024-09-21 17:07:52 +02:00
|
|
|
pleaseWaitHide();
|
|
|
|
location.reload();
|
2024-09-21 17:23:21 +02:00
|
|
|
}
|
2024-09-21 17:07:52 +02:00
|
|
|
);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case true:
|
|
|
|
refresh_location();
|
|
|
|
pleaseWaitHide();
|
|
|
|
break;
|
|
|
|
}
|
2016-09-06 01:12:46 +02:00
|
|
|
});
|