aboutsummaryrefslogtreecommitdiff
path: root/p/scripts
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-01-09 23:17:35 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-01-09 23:17:35 +0100
commit3d876091e1268e3ccd5036449a4deb5134936206 (patch)
treea439a0233f81f0a67ae0a5bbcd849cbb652d220c /p/scripts
parentbddbe5f79f42d526d7d56a7189ca0b65970abe89 (diff)
Nouveau rafraîchissement automatique du nombre d'articles non lus + session Persona
Devrait aussi résoudre https://github.com/marienfressinaud/FreshRSS/issues/358 À tester
Diffstat (limited to 'p/scripts')
-rw-r--r--p/scripts/main.js96
1 files changed, 56 insertions, 40 deletions
diff --git a/p/scripts/main.js b/p/scripts/main.js
index 8646d9b72..24fdfd3f3 100644
--- a/p/scripts/main.js
+++ b/p/scripts/main.js
@@ -25,6 +25,46 @@ function incLabel(p, inc) {
return i > 0 ? ' (' + i + ')' : '';
}
+function incUnreadsFeed(article, feed_id, nb) {
+ //Update unread: feed
+ var elem = $('#' + feed_id + '>.feed').get(0),
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0,
+ feed_priority = elem ? (parseInt(elem.getAttribute('data-priority'), 10) || 0) : 0;
+ if (elem) {
+ elem.setAttribute('data-unread', Math.max(0, feed_unreads + nb));
+ }
+
+ //Update unread: category
+ elem = $('#' + feed_id).parent().prevAll('.category').children(':first').get(0);
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
+ if (elem) {
+ elem.setAttribute('data-unread', Math.max(0, feed_unreads + nb));
+ }
+
+ //Update unread: all
+ if (feed_priority > 0) {
+ elem = $('#aside_flux .all').children(':first').get(0);
+ if (elem) {
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
+ elem.setAttribute('data-unread', Math.max(0, feed_unreads + nb));
+ }
+ }
+
+ //Update unread: favourites
+ if (article && article.closest('div').hasClass('favorite')) {
+ elem = $('#aside_flux .favorites').children(':first').get(0);
+ if (elem) {
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
+ elem.setAttribute('data-unread', Math.max(0, feed_unreads + nb));
+ }
+ }
+
+ //Update unread: title
+ document.title = document.title.replace(/((?: \(\d+\))?)( · .*?)((?: \(\d+\))?)$/, function (m, p1, p2, p3) {
+ return incLabel(p1, nb) + p2 + incLabel(p3, feed_priority > 0 ? nb : 0);
+ });
+}
+
function mark_read(active, only_not_read) {
if (active[0] === undefined || (only_not_read === true && !active.hasClass("not_read"))) {
return false;
@@ -51,45 +91,9 @@ function mark_read(active, only_not_read) {
}
$r.find('.icon').replaceWith(data.icon);
- //Update unread: feed
var feed_url = active.find(".website>a").attr("href"),
- feed_id = feed_url.substr(feed_url.lastIndexOf('f_')),
- elem = $('#' + feed_id + ' .feed').get(0),
- feed_unread = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0,
- feed_priority = elem ? (parseInt(elem.getAttribute('data-priority'), 10) || 0) : 0;
- if (elem) {
- elem.setAttribute('data-unread', Math.max(0, feed_unread + inc));
- }
-
- //Update unread: category
- elem = $('#' + feed_id).parent().prevAll('.category').children(':first').get(0);
- feed_unread = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
- if (elem) {
- elem.setAttribute('data-unread', Math.max(0, feed_unread + inc));
- }
-
- //Update unread: all
- if (feed_priority > 0) {
- elem = $('#aside_flux .all').children(':first').get(0);
- if (elem) {
- feed_unread = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
- elem.setAttribute('data-unread', Math.max(0, feed_unread + inc));
- }
- }
-
- //Update unread: favourites
- if (active.closest('div').hasClass('favorite')) {
- elem = $('#aside_flux .favorites').children(':first').get(0);
- if (elem) {
- feed_unread = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
- elem.setAttribute('data-unread', Math.max(0, feed_unread + inc));
- }
- }
-
- //Update unread: title
- document.title = document.title.replace(/((?: \(\d+\))?)( · .*?)((?: \(\d+\))?)$/, function (m, p1, p2, p3) {
- return incLabel(p1, inc) + p2 + incLabel(p3, feed_priority > 0 ? inc : 0);
- });
+ feed_id = feed_url.substr(feed_url.lastIndexOf('f_'));
+ incUnreadsFeed(active, feed_id, inc);
});
}
@@ -128,8 +132,8 @@ function mark_favorite(active) {
if (active.closest('div').hasClass('not_read')) {
var elem = $('#aside_flux .favorites').children(':first').get(0),
- feed_unread = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
- elem.setAttribute('data-unread', Math.max(0, feed_unread + inc));
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
+ elem.setAttribute('data-unread', Math.max(0, feed_unreads + inc));
}
});
}
@@ -514,6 +518,17 @@ function init_notifications() {
}
}
+function refreshUnreads() {
+ $.getJSON('./?c=javascript&a=nbUnreadsPerFeed').done(function (data) {
+ $.each(data, function(feed_id, nbUnreads) {
+ feed_id = 'f_' + feed_id;
+ var elem = $('#' + feed_id + '>.feed').get(0),
+ feed_unreads = elem ? (parseInt(elem.getAttribute('data-unread'), 10) || 0) : 0;
+ incUnreadsFeed(null, feed_id, nbUnreads - feed_unreads);
+ });
+ });
+}
+
//<endless_mode>
var url_load_more = "",
load_more = false,
@@ -685,6 +700,7 @@ function init_all() {
}
init_confirm_action();
init_print_action();
+ window.setInterval(refreshUnreads, 60000);
if (window.console) {
console.log('FreshRSS init done.');
}