99 lines
2 KiB
JavaScript
99 lines
2 KiB
JavaScript
$(document).ready(function () {
|
|
$("#importExportModal").on("shown.bs.modal", function () {
|
|
var data = JSON.stringify(bookmarkList, null, 4);
|
|
if (data != null)
|
|
$("#exportText").text(data);
|
|
else
|
|
$("#exportText").text("[]");
|
|
});
|
|
|
|
$("#btnImport").click(importBookmarks);
|
|
|
|
$("#exportText").click(function () {
|
|
$("#exportText").select();
|
|
});
|
|
});
|
|
|
|
function importBookmarks() {
|
|
try {
|
|
var newData = $.parseJSON($("#importText").val());
|
|
} catch (err) {
|
|
console.error("Import failed: " + err.message);
|
|
window.alert("Invalid Format");
|
|
return;
|
|
}
|
|
|
|
if (verifyBookmarks(newData)) {
|
|
setList(newData);
|
|
|
|
$("#importExportModal").modal("hide");
|
|
} else {
|
|
window.alert("Invalid Format");
|
|
}
|
|
}
|
|
|
|
function setList(data) {
|
|
// empty the DB and fill it with the new data
|
|
bookmarkList = data;
|
|
|
|
try {
|
|
indexedDB.deleteDatabase("bookmarks");
|
|
} catch (err) {
|
|
// it's OK if the DB doesn't exist
|
|
if (err.name != "NotFoundError") {
|
|
console.error(err);
|
|
return;
|
|
}
|
|
}
|
|
var openDBRequest = window.indexedDB.open("bookmarks", 1);
|
|
|
|
openDBRequest.onsuccess = function (e) {
|
|
dbVersion = db.version;
|
|
db.close();
|
|
loadBookmarks();
|
|
}
|
|
|
|
openDBRequest.onerror = function (err) { console.error(err); }
|
|
|
|
openDBRequest.onupgradeneeded = function (e) {
|
|
db = e.target.result;
|
|
|
|
var groupStore = initDB(db);
|
|
|
|
// create the object stores
|
|
for (var i = 0; i < data.length; i++) {
|
|
addGroup(data[i], groupStore, db, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
function verifyBookmarks(bookmarks) {
|
|
if (!Array.isArray(bookmarks))
|
|
return false;
|
|
|
|
for (var i = 0; i < bookmarks.length; i++) {
|
|
var item = bookmarks[i];
|
|
|
|
if (item == null || typeof item != "object")
|
|
return false;
|
|
|
|
if (item.title == null || typeof item.title != "string")
|
|
return false;
|
|
|
|
for (var j = 0; j < item.bookmarks.length; j++) {
|
|
var bkmk = item.bookmarks[j];
|
|
|
|
if (bkmk == null || typeof bkmk != "object")
|
|
return false;
|
|
|
|
if (bkmk.name == null || typeof bkmk.name != "string")
|
|
return false;
|
|
|
|
if (bkmk.address == null || typeof bkmk.address != "string")
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|