168 lines
3.5 KiB
JavaScript
168 lines
3.5 KiB
JavaScript
let db;
|
|
|
|
const request = indexedDB.open("shopping", 1);
|
|
|
|
request.onupgradeneeded = function(event) {
|
|
db = event.target.result;
|
|
const store = db.createObjectStore(
|
|
"items",
|
|
{ keyPath: "provid" }
|
|
);
|
|
};
|
|
|
|
request.onsuccess = function(event) {
|
|
db = event.target.result;
|
|
checkDatabase();
|
|
};
|
|
|
|
function checkDatabase()
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readonly"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let request = store.count();
|
|
request.onsuccess = function(){
|
|
if (request.result > 0) {
|
|
renderLists();
|
|
} else {
|
|
importList(initialList);
|
|
}
|
|
};
|
|
}
|
|
|
|
function importList(list)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
list.forEach(item => {
|
|
item.done = false;
|
|
store.put(item);
|
|
});
|
|
tx.oncomplete = function(){
|
|
renderLists();
|
|
};
|
|
}
|
|
|
|
function renderLists()
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readonly"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let request = store.getAll();
|
|
request.onsuccess = function(){
|
|
let pending = "";
|
|
let completed = "";
|
|
request.result.forEach(item => {
|
|
let html = `
|
|
<div class="item">
|
|
<span class="name">
|
|
${item.provname}
|
|
</span>
|
|
|
|
<span>
|
|
${item.buy} ${item.unit}
|
|
</span>
|
|
|
|
<button onclick="completeItem(${item.provid})">
|
|
✓
|
|
</button>
|
|
</div>
|
|
`;
|
|
if (item.completed) {
|
|
completed += html;
|
|
} else {
|
|
pending += html;
|
|
}
|
|
});
|
|
document.getElementById("shoppingList").innerHTML = pending || "No items";
|
|
document.getElementById("completedList").innerHTML = completed || "No completed items";
|
|
};
|
|
}
|
|
|
|
function plus(id)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let req = store.get(id);
|
|
req.onsuccess = function(){
|
|
let item = req.result;
|
|
item.buy++;
|
|
store.put(item);
|
|
renderLists();
|
|
};
|
|
}
|
|
|
|
function minus(id)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let req = store.get(id);
|
|
req.onsuccess = function(){
|
|
let item = req.result;
|
|
item.buy--;
|
|
store.put(item);
|
|
renderLists();
|
|
};
|
|
}
|
|
|
|
function completeItem(id)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let request = store.get(id);
|
|
request.onsuccess = function(){
|
|
let item = request.result;
|
|
item.completed = true;
|
|
store.put(item);
|
|
renderLists();
|
|
};
|
|
}
|
|
|
|
function undo(id)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let req = store.get(id);
|
|
req.onsuccess = function(){
|
|
let item = req.result;
|
|
item.done = false;
|
|
store.put(item);
|
|
showList();
|
|
};
|
|
}
|
|
|
|
function done(id)
|
|
{
|
|
let tx = db.transaction(
|
|
"items",
|
|
"readwrite"
|
|
);
|
|
let store = tx.objectStore("items");
|
|
let req = store.get(id);
|
|
req.onsuccess = function(){
|
|
let item = req.result;
|
|
item.done = true;
|
|
store.put(item);
|
|
showList();
|
|
};
|
|
}
|