diff --git a/client/components/App.vue b/client/components/App.vue
index bc1642c3..14edd9e9 100644
--- a/client/components/App.vue
+++ b/client/components/App.vue
@@ -3,7 +3,7 @@
-
+
@@ -21,9 +21,6 @@ export default {
Sidebar,
ImageViewer,
},
- props: {
- activeWindow: String,
- },
computed: {
viewportClasses() {
return {
diff --git a/client/js/router.js b/client/js/router.js
index f0a0eca6..202cab6c 100644
--- a/client/js/router.js
+++ b/client/js/router.js
@@ -17,26 +17,21 @@ const RoutedChat = require("../components/RoutedChat.vue").default;
const router = new VueRouter({
routes: [
{
+ name: "SignIn",
path: "/sign-in",
component: SignIn,
- meta: {
- isChat: false,
- windowName: "SignIn",
- },
},
],
});
router.afterEach((to) => {
- if (!router.app.initialized) {
- return;
+ if (router.app.initialized) {
+ router.app.closeSidebarIfNeeded();
}
- router.app.closeSidebarIfNeeded();
-
- if (!to.meta.isChat) {
+ if (to.name !== "RoutedChat") {
// Navigating out of a chat window
- store.commit("activeWindow", to.meta.windowName);
+ store.commit("activeWindow", to.name);
if (store.state.activeChannel && store.state.activeChannel.channel) {
router.app.switchOutOfChannel(store.state.activeChannel.channel);
@@ -49,60 +44,34 @@ router.afterEach((to) => {
function initialize() {
router.addRoutes([
{
- path: "/sign-in",
- component: SignIn,
- meta: {
- isChat: false,
- windowName: "SignIn",
- },
- },
- {
+ name: "Connect",
path: "/connect",
component: Connect,
- meta: {
- isChat: false,
- windowName: "Connect",
- },
},
{
+ name: "Settings",
path: "/settings",
component: Settings,
- meta: {
- isChat: false,
- windowName: "Settings",
- },
},
{
+ name: "Help",
path: "/help",
component: Help,
- meta: {
- isChat: false,
- windowName: "Help",
- },
},
{
+ name: "Changelog",
path: "/changelog",
component: Changelog,
- meta: {
- isChat: false,
- windowName: "Changelog",
- },
},
{
+ name: "NetworkEdit",
path: "/edit-network/:uuid",
component: NetworkEdit,
- meta: {
- isChat: false,
- windowName: "NetworkEdit",
- },
},
{
+ name: "RoutedChat",
path: "/chan-*",
component: RoutedChat,
- meta: {
- isChat: true,
- windowName: "RoutedChat",
- },
},
]);
}
diff --git a/client/js/socket-events/init.js b/client/js/socket-events/init.js
index f126de3f..2fc1e4f4 100644
--- a/client/js/socket-events/init.js
+++ b/client/js/socket-events/init.js
@@ -1,10 +1,8 @@
"use strict";
const $ = require("jquery");
-const escape = require("css.escape");
const socket = require("../socket");
const webpush = require("../webpush");
-const sidebar = $("#sidebar");
const storage = require("../localStorage");
const constants = require("../constants");
const {vueApp, initChannel} = require("../vue");
@@ -16,8 +14,6 @@ socket.on("init", function(data) {
$("#loading-page-message").text(store.state.currentUserVisibleError);
- const previousActive = store.state.activeChannel && store.state.activeChannel.channel.id;
-
store.commit("networks", mergeNetworkData(data.networks));
store.commit("isConnected", true);
store.commit("currentUserVisibleError", null);
@@ -54,9 +50,23 @@ socket.on("init", function(data) {
window.removeEventListener("error", window.g_LoungeErrorHandler);
window.g_LoungeErrorHandler = null;
}
+
+ if (!vueApp.$route.name || vueApp.$route.name === "SignIn") {
+ const channel = store.getters.findChannel(data.active);
+
+ if (channel) {
+ vueApp.switchToChannel(channel.channel);
+ } else if (store.state.networks.length > 0) {
+ // Server is telling us to open a channel that does not exist
+ // For example, it can be unset if you first open the page after server start
+ vueApp.switchToChannel(store.state.networks[0].channels[0]);
+ } else {
+ // TODO: Use vue router
+ $("#footer .connect").trigger("click");
+ }
+ }
}
- vueApp.$nextTick(() => openCorrectChannel(previousActive, data.active));
vueApp.synchronizeNotifiedState();
if (document.body.classList.contains("public")) {
@@ -67,44 +77,6 @@ socket.on("init", function(data) {
}
});
-function openCorrectChannel(clientActive, serverActive) {
- let target = $();
-
- // Open last active channel
- if (clientActive > 0) {
- target = sidebar.find(`.chan[data-id="${clientActive}"]`);
- }
-
- // Open window provided in location.hash
- if (target.length === 0 && window.location.hash) {
- target = $(`[data-target="${escape(window.location.hash)}"]`).first();
- }
-
- // Open last active channel according to the server
- if (serverActive > 0 && target.length === 0) {
- target = sidebar.find(`.chan[data-id="${serverActive}"]`);
- }
-
- // Open first available channel
- if (target.length === 0) {
- target = sidebar.find(".chan").first();
- }
-
- // If target channel is found, open it
- if (target.length > 0) {
- target.trigger("click", {
- replaceHistory: true,
- });
-
- return;
- }
-
- // Open the connect window
- $("#footer .connect").trigger("click", {
- pushState: false,
- });
-}
-
function mergeNetworkData(newNetworks) {
const collapsedNetworks = new Set(JSON.parse(storage.get("thelounge.networks.collapsed")));
diff --git a/client/js/vue.js b/client/js/vue.js
index 0c11edd8..adef4b95 100644
--- a/client/js/vue.js
+++ b/client/js/vue.js
@@ -48,9 +48,9 @@ const vueApp = new Vue({
document.body.classList.add("is-apple");
}
- document.addEventListener("visibilitychange", this.synchronizeNotifiedState());
- document.addEventListener("focus", this.synchronizeNotifiedState());
- document.addEventListener("click", this.synchronizeNotifiedState());
+ document.addEventListener("visibilitychange", this.synchronizeNotifiedState);
+ document.addEventListener("focus", this.synchronizeNotifiedState);
+ document.addEventListener("click", this.synchronizeNotifiedState);
// TODO: Hackfix because socket-events require vueApp somewhere
// and that breaks due to cyclical depenency as by this point vue.js