diff --git a/index.html b/index.html index 6f30e9b5..c1440954 100644 --- a/index.html +++ b/index.html @@ -258,6 +258,35 @@ return hash; } + // Parse hash as in http://www.example.com/path#hash as if it were + // path and arguments. + function parseUrlHash(hash) { + var parser = document.createElement('a'); + parser.href = '/' + location.hash.substr(1); + var params = {}; + parser.search.substr(1).split("&").forEach(function(part) { + var item = part.split("="); + if (item[0]) { + params[decodeURIComponent(item[0])] = decodeURIComponent(item[1]); + } + }); + return {path: parser.pathname, params: params}; + } + + function composeUrlHash(path, params) { + var url = path; + var args = []; + for (var key in params) { + if (params.hasOwnProperty(key)) { + args.push(key + "=" + params[key]); + } + } + if (args.length > 0) { + url += "?" + args.join("&"); + } + return url. + } + // Detect server address from the URL function detectServerAddress() { var host = DEFAULT_HOST; @@ -289,18 +318,6 @@ return card; } - // Construct a user discovery tag - function to_tags(tagsObj) { - if (tagsObj && Object.keys(tagsObj).length > 0) { - var tags = []; - for (var key in tagsObj) { - tags.push(key + ":" + tagsObj[key]); - } - return tags; - } - return undefined; - } - // Deep-shallow compare two arrays. function arrayEqual(a, b) { // Compare lengths first. @@ -3755,7 +3772,7 @@ } }, handleHashRoute: function(e) { - console.log("hashchange", location.hash, e.oldURL, e.newURL); + console.log("hashchange", location.hash); }, handleOnline: function(online) { var newState = {liveConnection: online}; @@ -3937,6 +3954,7 @@ handleTopicSelected: function(topicName, unused_index, online, acs) { if (topicName) { // Contact selected + location.hash = topicName; this.setState({ topicSelected: topicName, mobilePanel: 'topic-view', @@ -3947,6 +3965,7 @@ infoPanelShowMembers: Tinode.getTopicType(topicName) === "grp" }); } else { + location.hash = null; // Currently selected contact deleted this.setState({ topicSelected: null, @@ -4126,10 +4145,8 @@ handleLogout: function() { localStorage.removeItem("auth-token"); - // Tell Tinode to close connection and clear the caches. - // Re-initialize state. - // Re-initialize Tinode. - console.log("Logout not fully implemented"); + this.setState(this.getInitialState()); + this.tnSetup(this.state.serverAddress, this.state.transport); }, handleLeaveUnsubRequest: function(topicName) {