add_msg(null, "xhr_error", msg);
},
"load": function () {
- data = JSON.parse(this.responseText);
+ var response_data;
+ try {
+ response_data = JSON.parse(this.responseText);
+ } catch {
+ response_data = this.responseText;
+ }
if (this.status === 401) {
- maybe_redirect(data);
+ maybe_redirect(response_data);
} else if (callback) {
- callback(data);
+ callback(response_data);
}
}
},
var messages_header = _.dgEBCN0("messages_header");
_.clear_children(messages_header.children[0]);
_.clear_children(messages_header.children[1]);
- _.clear_after(messages_header.children[1]);
+ _.clear_after(messages_header.children[2]);
}
function clear_channel() {
_.clear_children(_.dgEBCN0("messages"));
clear_messages_header();
- _.dgEBCN0("messages_header").style.display = "none";
+ _.dgEBCN0("messages_header").children[0].appendChild(_.dcTN("Chat"));
_.dgEBCN0("messages_footer").children[0].disabled = true;
}
messages_header.children[0].appendChild(
this.item_to_tn(this.items_per_id[this.msg_data.recipient_id])
);
- messages_header.style.display = "block";
+ // messages_header.style.display = "block";
};
this.items_url = "/api/user/";
this.items_classname = "users";
});
messages_header.appendChild(btn);
messages_header.children[1].style.display = "none";
- messages_header.style.display = "block";
+ // messages_header.style.display = "block";
};
this.items_url = "/api/channel/";
this.items_classname = "channels";
}
}
+ function logout() {
+ window.location.href = "/logout/";
+ }
+
window.addEventListener(
"load",
function (event) {
- var messages_footer;
+ var messages_footer = _.dgEBCN0("messages_footer");
var ws;
- messages_footer = _.dgEBCN0("messages_footer");
set_channel.call(window);
event = event || window.event;
if (event.target.readyState !== "complete") {
);
messages_footer.children[0].value = "";
messages_footer.children[1].addEventListener("click", send_msg);
+ _.dgEBCN0("messages_header").children[2].addEventListener(
+ "click",
+ logout
+ );
}
);
}());
-[ ] logout button
+[ ] "load more" button
+[ ] reconnect ws button; reload current channel, channel list and user list on reconnect
[ ] show message timestamps and message edit/delete menus
- privileged users can edit / delete any message
[ ] edit existing messages
-[ ] "load more" button
[ ] new message(s) indicators in left panel
-[ ] update address bar for different views
+[ ] update address bar per channel (fragment for now?)
[ ] channel management: channel admin
[ ] write email to user
-[ ] ws client infrastructure: auto-reconnect, notify-throttle
-[ ] server-side throttling
+[ ] ws client infrastructure: repeated automatic reconnects, notify-throttle
+[ ] server-side throttling, but that needs to be accounted for on the client
[ ] tests for pg-trigger→notify websocket
- somehow test each trigger statement individually, that is 4 statements * 5 models
[ ] ws and chat tests?
-[ ] media uploads: images, gifs, even video files?
-[ ] moderation functions: report messages to MANAGERS, including private ones
+[ ] media uploads and view methods: download, image, video/audio player...
+[ ] moderation: report messages to MANAGERS, including private ones