hardlounge/client/js/socket-events/init.js

84 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-05-18 16:08:54 -04:00
"use strict";
const $ = require("jquery");
2017-08-28 16:06:28 -04:00
const escape = require("css.escape");
2017-05-18 16:08:54 -04:00
const socket = require("../socket");
const render = require("../render");
2017-07-10 15:47:03 -04:00
const webpush = require("../webpush");
2017-05-18 16:08:54 -04:00
const sidebar = $("#sidebar");
const storage = require("../localStorage");
2017-08-28 11:03:27 -04:00
const utils = require("../utils");
2017-05-18 16:08:54 -04:00
socket.on("init", function(data) {
2017-08-28 11:03:27 -04:00
$("#loading-page-message, #connection-error").text("Rendering…");
const lastMessageId = utils.lastMessageId;
2017-08-28 16:06:28 -04:00
let previousActive = 0;
2017-08-28 11:03:27 -04:00
if (lastMessageId > -1) {
2017-08-28 16:06:28 -04:00
previousActive = sidebar.find(".active").data("id");
2017-08-28 11:03:27 -04:00
sidebar.find(".networks").empty();
}
2017-05-18 16:08:54 -04:00
if (data.networks.length === 0) {
2017-08-28 11:03:27 -04:00
sidebar.find(".empty").show();
2017-05-18 16:08:54 -04:00
$("#footer").find(".connect").trigger("click", {
pushState: false,
});
} else {
render.renderNetworks(data);
}
2017-08-28 11:03:27 -04:00
if (lastMessageId > -1) {
$("#connection-error").removeClass("shown");
$(".show-more-button, #input").prop("disabled", false);
$("#submit").show();
} else {
if (data.token) {
storage.set("token", data.token);
}
2017-05-18 16:08:54 -04:00
2017-08-28 11:03:27 -04:00
webpush.configurePushNotifications(data.pushSubscription, data.applicationServerKey);
2017-07-10 15:47:03 -04:00
2017-08-28 11:03:27 -04:00
$("body").removeClass("signed-out");
$("#loading").remove();
$("#sign-in").remove();
}
2017-05-18 16:08:54 -04:00
2017-08-28 16:06:28 -04:00
openCorrectChannel(previousActive, data.active);
2017-05-18 16:08:54 -04:00
});
2017-08-28 16:06:28 -04:00
function openCorrectChannel(clientActive, serverActive) {
let target;
// Open last active channel
if (clientActive > 0) {
target = sidebar.find("[data-id='" + clientActive + "']");
}
// Open window provided in location.hash
if (!target && window.location.hash) {
target = $("#footer, #sidebar").find("[data-target='" + escape(window.location.hash) + "']");
}
// Open last active channel according to the server
if (!target) {
target = sidebar.find("[data-id='" + serverActive + "']");
}
// If target channel is found, open it
if (target) {
target.trigger("click", {
replaceHistory: true
});
return;
}
// Open the connect window
$("#footer .connect").trigger("click", {
pushState: false
});
}