You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
6.4 KiB
JavaScript
243 lines
6.4 KiB
JavaScript
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
if (inStorage("notes")) {
|
|
var notes = JSON.parse(getStorage("notes"));
|
|
} else {
|
|
var notes = [];
|
|
setStorage("notes", "[]");
|
|
}
|
|
|
|
function findNote(number, street) {
|
|
for (i in notes) {
|
|
if (notes[i].number == number && notes[i].street.toUpperCase() == street.toUpperCase()) {
|
|
return notes[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function isDeliverable(number, street) {
|
|
var note = findNote(number, street);
|
|
|
|
var ok = true;
|
|
var reason = "";
|
|
|
|
if (note != null) {
|
|
for (t in note.toggles) {
|
|
if (!note.toggles.hasOwnProperty(t)) {
|
|
continue;
|
|
}
|
|
|
|
for (tt in SETTINGS.routenotetoggles) {
|
|
if (SETTINGS.routenotetoggles[tt].id == t) {
|
|
if (SETTINGS.routenotetoggles[tt].preventsDelivery == true && note.toggles[t] == true) {
|
|
ok = false;
|
|
reason = SETTINGS.routenotetoggles[tt].reason;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
ok: ok,
|
|
reason: reason
|
|
};
|
|
}
|
|
|
|
function saveNote(id) {
|
|
var exists = false;
|
|
var index = -1;
|
|
for (var i = 0; i < notes.length; i++) {
|
|
if (notes[i].id == id) {
|
|
exists = true;
|
|
index = i;
|
|
}
|
|
}
|
|
|
|
var note = {
|
|
id: id,
|
|
number: "",
|
|
street: "",
|
|
zipcode: "",
|
|
route: "",
|
|
notes: "",
|
|
forwards: "",
|
|
utfs: "",
|
|
toggles: {}
|
|
};
|
|
if (exists) {
|
|
note = notes[index];
|
|
}
|
|
|
|
note.number = $("input[name=number]").val().trim();
|
|
note.street = $("input[name=street]").val().trim();
|
|
note.zipcode = $("input[name=zipcode]").val().trim();
|
|
note.route = $("input[name=route]").val().trim().toUpperCase();
|
|
note.notes = $("textarea#notes").val().trim();
|
|
note.forwards = $("textarea#forwards").val().trim();
|
|
note.utfs = $("textarea#utfs").val().trim();
|
|
|
|
if (note.number == "") {
|
|
app.dialog.alert("Fill in an address number.", "Error");
|
|
return false;
|
|
}
|
|
if (note.street == "") {
|
|
app.dialog.alert("Fill in a street.", "Error");
|
|
return false;
|
|
}
|
|
if (note.zipcode == "") {
|
|
app.dialog.alert("Fill in a zip code.", "Error");
|
|
return false;
|
|
}
|
|
if (note.route == "" || /^[CRHG][0-9]{3}$/.test(note.route) != true) {
|
|
app.dialog.alert("Fill in a route (examples: C123, R001, H050).", "Error");
|
|
return false;
|
|
}
|
|
|
|
setStorage("lastrouteid", note.route);
|
|
setStorage("zipcode", note.zipcode);
|
|
|
|
for (i in SETTINGS.routenotetoggles) {
|
|
var toggle = SETTINGS.routenotetoggles[i];
|
|
note.toggles[toggle.id] = $(".note-toggle[data-id=" + toggle.id + "]").is(":checked");
|
|
}
|
|
if (exists) {
|
|
notes[index] = note;
|
|
} else {
|
|
notes.push(note);
|
|
}
|
|
|
|
|
|
setStorage("notes", JSON.stringify(notes));
|
|
|
|
if (exists) {
|
|
appendActivityLog("Edited note", note.number + " " + note.street, "", "fas fa-sticky-note");
|
|
} else {
|
|
appendActivityLog("Added note", note.number + " " + note.street, "", "fas fa-sticky-note");
|
|
}
|
|
|
|
app.toast.show({
|
|
text: "<i class='fas fa-check'></i> Note saved!",
|
|
position: "bottom",
|
|
destroyOnClose: true,
|
|
closeTimeout: 1000 * 3
|
|
});
|
|
}
|
|
|
|
function deleteNote(id) {
|
|
var note = {};
|
|
for (var i = 0; i < notes.length; i++) {
|
|
if (notes[i].id == id) {
|
|
note = notes[i];
|
|
notes.splice(i, 1);
|
|
}
|
|
}
|
|
setStorage("notes", JSON.stringify(notes));
|
|
appendActivityLog("Deleted note", note.number + " " + note.street, "", "fas fa-sticky-note");
|
|
}
|
|
|
|
$(".view-main").on("click", "#savenotebtn", function () {
|
|
saveNote($(this).data("noteid"));
|
|
});
|
|
|
|
$(".view-main").on("click", ".editnotebtn", function () {
|
|
var noteid = $(this).data("noteid");
|
|
|
|
var note = {};
|
|
for (var i = 0; i < notes.length; i++) {
|
|
if (notes[i].id == noteid) {
|
|
note = notes[i];
|
|
}
|
|
}
|
|
|
|
var toggles = [];
|
|
for (t in SETTINGS.routenotetoggles) {
|
|
var toggle = SETTINGS.routenotetoggles[t];
|
|
toggles.push({
|
|
id: toggle.id,
|
|
name: toggle.name,
|
|
checked: note.toggles[toggle.id] == true
|
|
});
|
|
}
|
|
|
|
if (typeof note.forwards == "undefined") {
|
|
note.forwards = "";
|
|
}
|
|
if (typeof note.utfs == "undefined") {
|
|
note.utfs = "";
|
|
}
|
|
|
|
router.navigate("/myroute/editnote", {
|
|
context: {
|
|
title: "Edit Note",
|
|
toggles: toggles,
|
|
noteid: noteid,
|
|
note: note
|
|
}
|
|
});
|
|
});
|
|
|
|
$(".view-main").on("click", ".deletenotebtn", function () {
|
|
var noteid = $(this).data("noteid");
|
|
app.dialog.confirm("Delete note?", "Confirm", function () {
|
|
deleteNote(noteid);
|
|
router.navigate("/myroute", {
|
|
reloadCurrent: true
|
|
})
|
|
});
|
|
});
|
|
|
|
$(".view-main").on("blur", "#notenumberinput,#notestreetinput", function () {
|
|
if (findNote($("#notenumberinput").val(), $("#notestreetinput").val()) != null) {
|
|
app.dialog.alert("A note already exists for that address.", "Warning");
|
|
}
|
|
});
|
|
|
|
/*
|
|
* Save note with Ctrl-S
|
|
*/
|
|
$(".view-main").on("keydown", ".page[data-name=editnote]", function (event) {
|
|
if (event.ctrlKey || event.metaKey) {
|
|
switch (String.fromCharCode(event.which).toLowerCase()) {
|
|
case 's':
|
|
event.preventDefault();
|
|
saveNote($("#savenotebtn").data("noteid"));
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
function getToggleName(id) {
|
|
for (i in SETTINGS.routenotetoggles) {
|
|
if (SETTINGS.routenotetoggles[i].id == id) {
|
|
return SETTINGS.routenotetoggles[i].name;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
function getToggleIcon(id) {
|
|
for (i in SETTINGS.routenotetoggles) {
|
|
if (SETTINGS.routenotetoggles[i].id == id) {
|
|
return SETTINGS.routenotetoggles[i].icon;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
Template7.registerHelper('notetogglename', function (key) {
|
|
return getToggleName(key);
|
|
});
|
|
|
|
Template7.registerHelper('notetoggleicon', function (key) {
|
|
return getToggleIcon(key);
|
|
});
|
|
|
|
Template7.registerHelper('newlinestobr', function (text) {
|
|
return text.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
|
}); |