From 63b21ebe140af72fe9145123904836b3f3891e79 Mon Sep 17 00:00:00 2001 From: Evan Hughes Date: Sat, 29 Nov 2014 16:49:15 -0500 Subject: [PATCH] Tell the user which messages arrived since they last saw the browser tab. When the user switches context away from our browser tab, draw a line under the last seen message, so when they return they know which messages are new. --- client/assets/themes/basic/style.css | 3 +++ client/assets/themes/cli/style.css | 5 +++++ client/assets/themes/mini/style.css | 5 +++++ client/assets/themes/relaxed/style.css | 3 +++ client/src/applets/startup.js | 2 +- client/src/views/application.js | 3 +++ client/src/views/channel.js | 19 +++++++++++++++++++ 7 files changed, 39 insertions(+), 1 deletion(-) diff --git a/client/assets/themes/basic/style.css b/client/assets/themes/basic/style.css index f59b6ee..566facc 100644 --- a/client/assets/themes/basic/style.css +++ b/client/assets/themes/basic/style.css @@ -175,6 +175,9 @@ #kiwi .messages .msg .media.reddit .thumbnail { float:left; margin-right: 0.5em; } +#kiwi .messages .last_seen { + border-bottom: #b0cf82 solid 1px; +} #kiwi .right_bar { background-color: #DADADA; diff --git a/client/assets/themes/cli/style.css b/client/assets/themes/cli/style.css index 48a6209..4f4f675 100644 --- a/client/assets/themes/cli/style.css +++ b/client/assets/themes/cli/style.css @@ -218,6 +218,11 @@ } #kiwi .messages .msg .media.reddit .thumbnail { float:left; margin-right: 0.5em; } +#kiwi .messages .last_seen { + border-bottom-color: #090; + border-bottom-style: dashed; +} + /* The server select dialog */ diff --git a/client/assets/themes/mini/style.css b/client/assets/themes/mini/style.css index be3fa1d..3ed48ed 100644 --- a/client/assets/themes/mini/style.css +++ b/client/assets/themes/mini/style.css @@ -130,6 +130,11 @@ #kiwi .messages .msg.highlight { background:#D9D9D9; } +#kiwi .messages .last_seen { + border-bottom-color: #B0CF82; +} + + #kiwi.chanlist_treeview .panels { left:160px; } #kiwi.chanlist_treeview .toolbar { position:static; } diff --git a/client/assets/themes/relaxed/style.css b/client/assets/themes/relaxed/style.css index ffefed5..44324c3 100644 --- a/client/assets/themes/relaxed/style.css +++ b/client/assets/themes/relaxed/style.css @@ -185,6 +185,9 @@ } #kiwi .messages .msg .media.reddit .thumbnail { float:left; margin-right: 0.5em; } +#kiwi .messages .last_seen { + border-bottom-color: #B0CF82; +} #kiwi .right_bar { background-color: #DADADA; diff --git a/client/src/applets/startup.js b/client/src/applets/startup.js index 839732c..23a72a5 100644 --- a/client/src/applets/startup.js +++ b/client/src/applets/startup.js @@ -54,4 +54,4 @@ _kiwi.model.Applet.register('kiwi_startup', applet); -})(); \ No newline at end of file +})(); diff --git a/client/src/views/application.js b/client/src/views/application.js index 3d01d34..bc3a738 100644 --- a/client/src/views/application.js +++ b/client/src/views/application.js @@ -48,6 +48,9 @@ _kiwi.view.Application = Backbone.View.extend({ that.has_focus = true; }); $(window).on('blur', function () { + if (_kiwi.global.connections.active && _kiwi.global.connections.active.view.updateLastSeenMarker) { + _kiwi.global.connections.active.view.updateLastSeenMarker(); + } that.has_focus = false; }); diff --git a/client/src/views/channel.js b/client/src/views/channel.js index b8b56c3..037b0b8 100644 --- a/client/src/views/channel.js +++ b/client/src/views/channel.js @@ -346,6 +346,8 @@ _kiwi.view.Channel = _kiwi.view.Panel.extend({ am_pm_locale_key = pm ? 'client_views_panel_timestamp_pm' : 'client_views_panel_timestamp_am'; + this.updateLastSeenMarker(); + msg.time_string = translateText(am_pm_locale_key, hour + ":" + msg.time.getMinutes().toString().lpad(2, "0") + ":" + msg.time.getSeconds().toString().lpad(2, "0")); } @@ -389,6 +391,23 @@ _kiwi.view.Channel = _kiwi.view.Panel.extend({ if (!nick) { nick = $target.parent('.msg').data('message').nick; } + }, + + + updateLastSeenMarker: function() { + if (_kiwi.app.connections.active.view === this && _kiwi.app.view.has_focus) { + // Remove the previous last seen classes + var candidate = this.$(".last_seen"); + if (candidate && candidate.length) { + candidate.removeClass("last_seen"); + } + + // Mark the last message the user saw + var last = this.$messages.children().last(); + if (last) { + last.addClass("last_seen"); + } + } // Make sure this nick is still in the channel member = members ? members.getByNick(nick) : null; -- 2.25.1