Implement deleting bookmarks
This commit is contained in:
parent
08875d4f53
commit
2143a3dde8
|
@ -6,6 +6,7 @@ $(document).ready(function () {
|
|||
.text("New Group"));
|
||||
|
||||
for (let group of bookmarkList) {
|
||||
if (group != null)
|
||||
combo.append($("<option>").attr({ "value": group.title })
|
||||
.text(group.title));
|
||||
}
|
||||
|
@ -37,6 +38,7 @@ function addNewBookmark(e) {
|
|||
var openDBRequest = window.indexedDB.open("bookmarks", dbVersion + 1);
|
||||
openDBRequest.onupgradeneeded = function (e) {
|
||||
var db = e.target.result;
|
||||
dbVersion++;
|
||||
|
||||
if (db.objectStoreNames.contains(newGroup.title)) {
|
||||
window.alert("The group already exists");
|
||||
|
@ -57,16 +59,25 @@ function addNewBookmark(e) {
|
|||
openDBRequest.onsuccess = function (e) {
|
||||
var db = e.target.result;
|
||||
|
||||
db.transaction(["groupIndexes"], "readwrite")
|
||||
.objectStore("groupIndexes")
|
||||
.add({ "title": newGroup.title, "groupIndex": bookmarkList.length });
|
||||
var indexStore = db.transaction(["groupIndexes"], "readwrite")
|
||||
.objectStore("groupIndexes");
|
||||
|
||||
bookmarkList.push(newGroup);
|
||||
indexStore.getAll().onsuccess = function (evt) {
|
||||
var items = evt.target.result;
|
||||
var largest = 0;
|
||||
for (let item of items) {
|
||||
if (item.groupIndex >= largest)
|
||||
largest = item.groupIndex + 1;
|
||||
}
|
||||
|
||||
indexStore.add({ "title": newGroup.title, "groupIndex": largest });
|
||||
bookmarkList[largest] = newGroup;
|
||||
|
||||
db.close();
|
||||
loadBookmarks();
|
||||
$(".modal").modal("hide");
|
||||
}
|
||||
}
|
||||
|
||||
openDBRequest.onerror = function (e) { console.log(e); }
|
||||
} else { // add to existing group
|
||||
|
|
|
@ -1,6 +1,85 @@
|
|||
$(document).ready(function () {
|
||||
$("#btnEdit").click(function (e) {
|
||||
// TODO: editing bookmarks
|
||||
window.alert("Editing is currently not implemented");
|
||||
});
|
||||
$("#btnEdit").click(toggleEditing);
|
||||
});
|
||||
|
||||
function toggleEditing (e) {
|
||||
var btnEdit = $("#btnEdit");
|
||||
if (btnEdit.hasClass("btn-warning")) {
|
||||
btnEdit.removeClass("btn-warning");
|
||||
$("#btnImport").prop("disabled", false);
|
||||
$("#btnAdd").prop("disabled", false);
|
||||
|
||||
if ($("#btnAbout").hasClass("btn-light")) {
|
||||
btnEdit.addClass("btn-light");
|
||||
} else {
|
||||
btnEdit.addClass("btn-dark");
|
||||
}
|
||||
|
||||
$(".btnDel").hide(200);
|
||||
$(".btnDelGroup").hide(200);
|
||||
$(".bookmark").off("click", disableLink);
|
||||
$(".btnDel").off("click", deleteBookmark);
|
||||
$(".btnDelGroup").off("click", deleteGroup);
|
||||
} else {
|
||||
btnEdit.removeClass("btn-light btn-dark").addClass("btn-warning");
|
||||
$("#btnImport").prop("disabled", true);
|
||||
$("#btnAdd").prop("disabled", true);
|
||||
|
||||
$(".btnDel").show(200);
|
||||
$(".btnDelGroup").show(200);
|
||||
$(".bookmark").click(disableLink);
|
||||
$(".btnDel").click(deleteBookmark);
|
||||
$(".btnDelGroup").click(deleteGroup);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteBookmark(e) {
|
||||
var item = $(this);
|
||||
var group = item.data("group");
|
||||
var key = item.data("key");
|
||||
|
||||
var openDBRequest = window.indexedDB.open("bookmarks");
|
||||
|
||||
openDBRequest.onsuccess = function (e) {
|
||||
var db = e.target.result;
|
||||
var deleteRequest = db.transaction(group, "readwrite").objectStore(group).delete(key);
|
||||
deleteRequest.onsuccess = function (evt) {
|
||||
$("#" + group + "-" + key).remove();
|
||||
}
|
||||
}
|
||||
|
||||
openDBRequest.onerror = function (evt) {
|
||||
console.log("Error", evt);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteGroup(e) {
|
||||
var group = $(this); // the delete group button
|
||||
var groupName = group.data("group");
|
||||
|
||||
var openDBRequest = window.indexedDB.open("bookmarks", dbVersion + 1);
|
||||
|
||||
openDBRequest.onupgradeneeded = function (e) {
|
||||
var db = e.target.result;
|
||||
dbVersion++;
|
||||
|
||||
var deleteRequest = db.deleteObjectStore(groupName);
|
||||
}
|
||||
|
||||
openDBRequest.onsuccess = function (e) {
|
||||
var db = e.target.result;
|
||||
|
||||
var indexStore = db.transaction("groupIndexes", "readwrite").objectStore("groupIndexes");
|
||||
indexStore.delete(groupName).onsuccess = function (evt) {
|
||||
$("#group-" + groupName.replace(" ", "-")).parent().remove();
|
||||
};
|
||||
}
|
||||
|
||||
openDBRequest.onerror = function (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
function disableLink(e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ $(document).ready(function () {
|
|||
$("#exportText").text("[]");
|
||||
});
|
||||
|
||||
$("#btnImport").click(importBookmarks);
|
||||
$("#btnImportDialog").click(importBookmarks);
|
||||
|
||||
$("#exportText").click(function () {
|
||||
$("#exportText").select();
|
||||
|
|
|
@ -16,12 +16,15 @@ function loadBookmarks() {
|
|||
.getAll()
|
||||
.onsuccess = function (indexEvt) {
|
||||
var indexes = indexEvt.target.result;
|
||||
indexes.sort(function (a, b) {
|
||||
return a.groupIndex - b.groupIndex;
|
||||
});
|
||||
|
||||
// use a placholder because getting the group info is async
|
||||
// and groups could finish loading in a different order
|
||||
var cardList = $("#cardList");
|
||||
for (var i = 0; i < indexes.length; i++) {
|
||||
$("<div>").attr("id", "group-" + i).appendTo(cardList);
|
||||
$("<div>").attr("id", "group-" + indexes[i].groupIndex).appendTo(cardList);
|
||||
}
|
||||
|
||||
for (let item of indexes) {
|
||||
|
@ -84,6 +87,12 @@ function buildGroup(groupInfo, placeholder) {
|
|||
var groupRequest = groupStore.getAll();
|
||||
groupRequest.onsuccess = function (e) {
|
||||
var bookmarks = e.target.result;
|
||||
var keyRequest = groupStore.getAllKeys();
|
||||
keyRequest.onsuccess = function (evt) {
|
||||
var keys = evt.target.result;
|
||||
for (var i = 0; i < bookmarks.length; i++) {
|
||||
bookmarks[i].key = keys[i];
|
||||
}
|
||||
|
||||
bookmarkList[groupInfo.groupIndex] = {
|
||||
"title": groupInfo.title,
|
||||
|
@ -93,33 +102,45 @@ function buildGroup(groupInfo, placeholder) {
|
|||
buildCard(groupInfo.title, bookmarks).appendTo(placeholder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildCard(title, itemList) {
|
||||
var card = $(document.createElement("div"));
|
||||
var card = $("<div>");
|
||||
card.attr({
|
||||
"id": "group-" + title,
|
||||
"class": "card bookmarkGroup"
|
||||
"id": "group-" + title.replace(" ", "-"),
|
||||
"class": "card"
|
||||
});
|
||||
|
||||
var cardHead = $(document.createElement("div"));
|
||||
cardHead.attr({ "class": "card-header" });
|
||||
var cardHead = $("<div>");
|
||||
cardHead.addClass("card-header");
|
||||
cardHead.text(title);
|
||||
var btnDel = $("<span>")
|
||||
.attr("data-group", title)
|
||||
.addClass("btnDelGroup far fa-trash-alt float-right mt-1 start-hidden text-danger clickable");
|
||||
btnDel.appendTo(cardHead);
|
||||
card.append(cardHead);
|
||||
|
||||
var cardList = $(document.createElement("div"));
|
||||
cardList.attr({ "class": "list-group list-group-flush" });
|
||||
var cardList = $("<div>");
|
||||
cardList.addClass("list-group list-group-flush bookmarkGroup").attr("data-group", title);
|
||||
card.append(cardList);
|
||||
|
||||
for (var i = 0; i < itemList.length; i++) {
|
||||
var item = itemList[i];
|
||||
var link = $(document.createElement("a"));
|
||||
link.attr({
|
||||
"class": "list-group-item list-group-item-action",
|
||||
"href": item.address
|
||||
});
|
||||
link.text(item.name);
|
||||
|
||||
cardList.append(link);
|
||||
var del = $("<span>")
|
||||
.attr({"data-group": title, "data-key": item.key})
|
||||
.addClass("btnDel far fa-trash-alt float-right mt-1 start-hidden text-danger");
|
||||
del.css("cursor: pointer;");
|
||||
|
||||
$("<a>")
|
||||
.attr({
|
||||
"id": title + "-" + item.key,
|
||||
"class": "list-group-item list-group-item-action bookmark",
|
||||
"href": item.address,
|
||||
})
|
||||
.text(item.name)
|
||||
.append(del)
|
||||
.appendTo(cardList);
|
||||
}
|
||||
|
||||
return card;
|
||||
|
|
13
main.css
13
main.css
|
@ -24,6 +24,11 @@ body {
|
|||
padding-bottom: 0.4em;
|
||||
}
|
||||
|
||||
.start-hidden {
|
||||
display: none;
|
||||
height: 16px; /* prvents problems with height jumping with jquery show/hide */
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
padding-top: .4rem;
|
||||
padding-bottom: .4rem;
|
||||
|
@ -34,6 +39,10 @@ body {
|
|||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
||||
}
|
||||
|
||||
.list-group {
|
||||
min-height: 31px;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
background: transparent !important;
|
||||
}
|
||||
|
@ -59,6 +68,10 @@ pre {
|
|||
background: rgba(255, 255, 255, 0.24);
|
||||
}
|
||||
|
||||
.clickable {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* set the width of the main container based on element width */
|
||||
@media (max-width: 34em) {
|
||||
#wrapper {
|
||||
|
|
Loading…
Reference in a new issue