diff --git a/index.template.html b/index.template.html index 0c2c8ea52..916a9ccc8 100644 --- a/index.template.html +++ b/index.template.html @@ -91,9 +91,9 @@ ga('send', 'pageview');
-

Latest News

+

News

-
+
diff --git a/js/client-mainmenu.js b/js/client-mainmenu.js index 3278fc604..8c764189c 100644 --- a/js/client-mainmenu.js +++ b/js/client-mainmenu.js @@ -67,6 +67,25 @@ this.updateFormats(); app.user.on('saveteams', this.updateTeams, this); + + // news + // (created during page load) + + var self = this; + Storage.whenPrefsLoaded(function () { + var newsid = Number(Storage.prefs('newsid')); + if (!newsid) return; + var $news = this.$('.news-embed'); + var $newsEntries = $news.find('.newsentry'); + var hasUnread = false; + for (var i = 0; i < $newsEntries.length; i++) { + if (Number($newsEntries.eq(i).data('newsid')) > newsid) { + hasUnread = true; + $newsEntries.eq(i).addClass('unread'); + } + } + if (!hasUnread) self.minimizePM($news); + }); }, addPseudoPM: function (options) { @@ -234,6 +253,8 @@ e.preventDefault(); e.stopPropagation(); $pmWindow = $(e.currentTarget).closest('.pm-window'); + } else { + $pmWindow = e; } if (!$pmWindow) { return; @@ -376,6 +397,7 @@ } app.dismissPopups(); var $target = $(e.currentTarget); + var newsid = $target.data('newsid'); if ($target.data('minimized')) { this.minimizePM(e); } else if ($(e.target).closest('h3').length) { @@ -385,6 +407,11 @@ e.stopPropagation(); this.minimizePM(e); return; + } else if (newsid) { + if (Storage.prefs('newsid', newsid)) { + $target.find('.unread').removeClass('unread'); + } + return; } $target.find('textarea[name=message]').focus(); } diff --git a/js/storage.js b/js/storage.js index 67e63d12e..36839b5a0 100644 --- a/js/storage.js +++ b/js/storage.js @@ -45,10 +45,13 @@ Storage.prefs = function (prop, value, save) { // set preference if (value === null) { delete this.prefs.data[prop]; + } else if (this.prefs.data[prop] === value) { + return false; // no need to save } else { this.prefs.data[prop] = value; } if (save !== false) this.prefs.save(); + return true; }; Storage.prefs.data = {}; diff --git a/style/client.css b/style/client.css index 096ed945e..1b24fbef3 100644 --- a/style/client.css +++ b/style/client.css @@ -769,6 +769,14 @@ p.or:after { .challenge p { margin: 4px 0; } +.newsentry { + font-size: 9pt; + padding: 1px 10px; + border-bottom: 1px solid #AAAAAA; +} +.unread { + background: rgba(255,240,130,0.33); +} .tiny-layout .leftmenu, .tiny-layout .rightmenu,