aboutsummaryrefslogtreecommitdiff
path: root/ui/static/js/entry_handler.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/static/js/entry_handler.js')
-rw-r--r--ui/static/js/entry_handler.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/ui/static/js/entry_handler.js b/ui/static/js/entry_handler.js
new file mode 100644
index 00000000..25d45c78
--- /dev/null
+++ b/ui/static/js/entry_handler.js
@@ -0,0 +1,110 @@
+class EntryHandler {
+ static updateEntriesStatus(entryIDs, status, callback) {
+ let url = document.body.dataset.entriesStatusUrl;
+ let request = new RequestBuilder(url);
+ request.withBody({entry_ids: entryIDs, status: status});
+ request.withCallback(callback);
+ request.execute();
+
+ if (status === "read") {
+ UnreadCounterHandler.decrement(1);
+ } else {
+ UnreadCounterHandler.increment(1);
+ }
+ }
+
+ static toggleEntryStatus(element) {
+ let entryID = parseInt(element.dataset.id, 10);
+ let statuses = {read: "unread", unread: "read"};
+
+ for (let currentStatus in statuses) {
+ let newStatus = statuses[currentStatus];
+
+ if (element.classList.contains("item-status-" + currentStatus)) {
+ element.classList.remove("item-status-" + currentStatus);
+ element.classList.add("item-status-" + newStatus);
+
+ this.updateEntriesStatus([entryID], newStatus);
+
+ let link = element.querySelector("a[data-toggle-status]");
+ if (link) {
+ this.toggleLinkStatus(link);
+ }
+
+ break;
+ }
+ }
+ }
+
+ static toggleLinkStatus(link) {
+ if (link.dataset.value === "read") {
+ link.innerHTML = link.dataset.labelRead;
+ link.dataset.value = "unread";
+ } else {
+ link.innerHTML = link.dataset.labelUnread;
+ link.dataset.value = "read";
+ }
+ }
+
+ static toggleBookmark(element) {
+ element.innerHTML = element.dataset.labelLoading;
+
+ let request = new RequestBuilder(element.dataset.bookmarkUrl);
+ request.withCallback(() => {
+ if (element.dataset.value === "star") {
+ element.innerHTML = element.dataset.labelStar;
+ element.dataset.value = "unstar";
+ } else {
+ element.innerHTML = element.dataset.labelUnstar;
+ element.dataset.value = "star";
+ }
+ });
+ request.execute();
+ }
+
+ static markEntryAsRead(element) {
+ if (element.classList.contains("item-status-unread")) {
+ element.classList.remove("item-status-unread");
+ element.classList.add("item-status-read");
+
+ let entryID = parseInt(element.dataset.id, 10);
+ this.updateEntriesStatus([entryID], "read");
+ }
+ }
+
+ static saveEntry(element) {
+ if (element.dataset.completed) {
+ return;
+ }
+
+ element.innerHTML = element.dataset.labelLoading;
+
+ let request = new RequestBuilder(element.dataset.saveUrl);
+ request.withCallback(() => {
+ element.innerHTML = element.dataset.labelDone;
+ element.dataset.completed = true;
+ });
+ request.execute();
+ }
+
+ static fetchOriginalContent(element) {
+ if (element.dataset.completed) {
+ return;
+ }
+
+ element.innerHTML = element.dataset.labelLoading;
+
+ let request = new RequestBuilder(element.dataset.fetchContentUrl);
+ request.withCallback((response) => {
+ element.innerHTML = element.dataset.labelDone;
+ element.dataset.completed = true;
+
+ response.json().then((data) => {
+ if (data.hasOwnProperty("content")) {
+ document.querySelector(".entry-content").innerHTML = data.content;
+ }
+ });
+ });
+ request.execute();
+ }
+}