entry_handler.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. class EntryHandler {
  2. static updateEntriesStatus(entryIDs, status, callback) {
  3. let url = document.body.dataset.entriesStatusUrl;
  4. let request = new RequestBuilder(url);
  5. request.withBody({entry_ids: entryIDs, status: status});
  6. request.withCallback(callback);
  7. request.execute();
  8. if (status === "read") {
  9. UnreadCounterHandler.decrement(1);
  10. } else {
  11. UnreadCounterHandler.increment(1);
  12. }
  13. }
  14. static toggleEntryStatus(element) {
  15. let entryID = parseInt(element.dataset.id, 10);
  16. let statuses = {read: "unread", unread: "read"};
  17. for (let currentStatus in statuses) {
  18. let newStatus = statuses[currentStatus];
  19. if (element.classList.contains("item-status-" + currentStatus)) {
  20. element.classList.remove("item-status-" + currentStatus);
  21. element.classList.add("item-status-" + newStatus);
  22. this.updateEntriesStatus([entryID], newStatus);
  23. let link = element.querySelector("a[data-toggle-status]");
  24. if (link) {
  25. this.toggleLinkStatus(link);
  26. }
  27. break;
  28. }
  29. }
  30. }
  31. static toggleLinkStatus(link) {
  32. if (link.dataset.value === "read") {
  33. link.innerHTML = link.dataset.labelRead;
  34. link.dataset.value = "unread";
  35. } else {
  36. link.innerHTML = link.dataset.labelUnread;
  37. link.dataset.value = "read";
  38. }
  39. }
  40. static toggleBookmark(element) {
  41. element.innerHTML = element.dataset.labelLoading;
  42. let request = new RequestBuilder(element.dataset.bookmarkUrl);
  43. request.withCallback(() => {
  44. if (element.dataset.value === "star") {
  45. element.innerHTML = element.dataset.labelStar;
  46. element.dataset.value = "unstar";
  47. } else {
  48. element.innerHTML = element.dataset.labelUnstar;
  49. element.dataset.value = "star";
  50. }
  51. });
  52. request.execute();
  53. }
  54. static markEntryAsRead(element) {
  55. if (element.classList.contains("item-status-unread")) {
  56. element.classList.remove("item-status-unread");
  57. element.classList.add("item-status-read");
  58. let entryID = parseInt(element.dataset.id, 10);
  59. this.updateEntriesStatus([entryID], "read");
  60. }
  61. }
  62. static saveEntry(element) {
  63. if (element.dataset.completed) {
  64. return;
  65. }
  66. element.innerHTML = element.dataset.labelLoading;
  67. let request = new RequestBuilder(element.dataset.saveUrl);
  68. request.withCallback(() => {
  69. element.innerHTML = element.dataset.labelDone;
  70. element.dataset.completed = true;
  71. });
  72. request.execute();
  73. }
  74. static fetchOriginalContent(element) {
  75. if (element.dataset.completed) {
  76. return;
  77. }
  78. element.innerHTML = element.dataset.labelLoading;
  79. let request = new RequestBuilder(element.dataset.fetchContentUrl);
  80. request.withCallback((response) => {
  81. element.innerHTML = element.dataset.labelDone;
  82. element.dataset.completed = true;
  83. response.json().then((data) => {
  84. if (data.hasOwnProperty("content")) {
  85. document.querySelector(".entry-content").innerHTML = data.content;
  86. }
  87. });
  88. });
  89. request.execute();
  90. }
  91. }