rocket-pinboard/static/js/wishlists.js

160 lines
4.4 KiB
JavaScript

var lists;
var bgColors = ["info", "primary", "danger", "success", "warning", "secondary"];
var textColors = ["light", "light", "light", "light", "dark", "dark" ];
function getUrlListId() {
var hash = window.location.hash;
if (hash.length <= 1) {
return undefined;
} else {
return hash.substr(1, hash.length);
}
}
function initLists() {
$.ajax({
url: '/lists',
headers: { 'Accept': 'application/json' }
}).done(function(allLists) {
lists = allLists;
lists.forEach(updateList);
var curListId = getUrlListId();
selectList(curListId);
});
}
function getListElem(listId) {
return $('.list[data-list-id="' + listId + '"]');
}
function selectList(listId) {
if (listId) {
console.debug("Selecting list " + listId);
lists.forEach(function(list) {
var listElem = getListElem(list.id);
if (list.id == listId) {
listElem.show(200);
} else {
listElem.hide(200);
}
});
} else {
console.debug("Showing all lists");
lists.forEach(function(list) {
var listElem = getListElem(list.id);
listElem.show(200);
});
}
$("#navbarNav").collapse('hide');
}
function updateList(list) {
var listElem = $('.list[data-list-id="' + list.id + '"]');
listElem.addClass("bg-" + bgColors[list.index])
.addClass("text-" + textColors[list.index]);
$('.list-name', listElem).text(list.name);
mtime = new Date(list.mtime.secs_since_epoch * 1000);
$('.list-updated-at', listElem).text('Laatste aanpassing op ' +
mtime.toLocaleDateString("nl") + ' om ' + mtime.toLocaleTimeString("nl"));
$('.list-data', listElem).val(list.data);
updateListHTML(listElem);
disableListEditMode(listElem);
}
function updateListHTML(listElem) {
var listId = listElem.data("list-id");
$.ajax({
url: '/lists/' + listId,
headers: { 'Accept': 'text/html' }
}).done(function(html) {
var listHtmlElem = $('.list-html', listElem)
listHtmlElem.html(html);
$("ul > li", listHtmlElem).has('input[type="checkbox"]')
.parent()
.addClass("tasklist");
});
}
function saveListChanges(listElem) {
var listId = listElem.data("list-id");
var list = lists.find(function(list) { return list.id == listId });
list.data = $('.list-data', listElem).val();
$.ajax({
method: 'PUT',
url: '/lists/' + listId,
headers: { 'Accept': 'application/json',
'Content-Type': 'application/json' },
data: JSON.stringify(list)
}).done(updateList);
}
function revertListChanges(listElem) {
var listId = listElem.data("list-id");
var list = lists.find(function(list) { return list.id == listId });
disableListEditMode(listElem);
$('.list-data', listElem).val(list.data);
}
function disableListEditMode(listElem) {
$('.list-data', listElem).hide(200)
.popover('hide');
$('.list-html', listElem).show(200);
$('.list-edit-buttons', listElem).hide(200);
$('.list-edit-mode-buttons', listElem).show(200);
$('.list-edit-help', listElem).removeClass('active')
.popover('hide');
}
function enableListEditMode(listElem) {
$('.list-data', listElem).show(200);
$('.list-html', listElem).hide(200);
$('.list-edit-mode-buttons', listElem).hide(200);
$('.list-edit-buttons', listElem).show(200);
}
$(function() {
$('.list-cancel-button').on('click', function() {
var listElem = $(this).parents(".list");
console.debug("Cancelling the edit of list " + listElem.data("list-id"));
revertListChanges(listElem);
});
$('.list-edit-button').on('click', function() {
var listElem = $(this).parents(".list");
console.debug("Going to edit list " + listElem.data("list-id"));
enableListEditMode(listElem);
});
$('.list-edit-help').on('click', function() {
var listElem = $(this).parents(".list");
var listDataElem = $('.list-data', listElem);
$(this).toggleClass('active')
listDataElem.popover('toggle');
});
$('.list-save-button').on('click', function() {
var listElem = $(this).parents(".list");
console.debug("Saving the changes for list " + listElem.data("list-id"));
saveListChanges(listElem);
});
$('.list-select').on('click', function() {
listId = $(this).data('list-id');
selectList(listId);
});
initLists();
$('textarea').popover({
html: true,
trigger: 'manual'
});
});