mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-01-30 08:01:07 -05:00
Ne marque plus que lorsqu'on s'est déplacé de plus de 50px (évite de checker à chaque fois) De plus, lorsque les articles sont repliés, le marquage ne marche plus (évite donc de marquer des articles non lus)
334 lines
7.5 KiB
PHTML
334 lines
7.5 KiB
PHTML
<?php if ($this->conf->displayPosts () == 'no') { ?>
|
|
var hide_posts = true;
|
|
<?php } else { ?>
|
|
var hide_posts = false;
|
|
<?php } ?>
|
|
|
|
<?php
|
|
$s = $this->conf->shortcuts ();
|
|
$mark = $this->conf->markWhen ();
|
|
?>
|
|
|
|
function is_reader_mode() {
|
|
var stream = $("#stream.reader");
|
|
return stream.html() != null;
|
|
}
|
|
|
|
function is_normal_mode() {
|
|
var stream = $("#stream.normal");
|
|
return stream.html() != null;
|
|
}
|
|
|
|
function redirect (url, new_tab) {
|
|
if (url) {
|
|
if (new_tab) {
|
|
window.open (url);
|
|
} else {
|
|
location.href = url;
|
|
}
|
|
}
|
|
}
|
|
|
|
function toggleContent (new_active, old_active) {
|
|
old_active.removeClass ("active");
|
|
if (old_active[0] != new_active[0]) {
|
|
new_active.addClass ("active");
|
|
}
|
|
|
|
if (hide_posts) {
|
|
old_active.children (".flux_content").toggle (0);
|
|
|
|
if (old_active[0] != new_active[0]) {
|
|
new_active.children (".flux_content").toggle (0, function () {
|
|
$("html,body").scrollTop (new_active.position ().top);
|
|
});
|
|
}
|
|
} else {
|
|
$("html,body").scrollTop (new_active.position ().top);
|
|
}
|
|
|
|
<?php if ($mark['article'] == 'yes') { ?>
|
|
mark_read(new_active, true);
|
|
<?php } ?>
|
|
}
|
|
|
|
function mark_read (active, only_not_read) {
|
|
if (active[0] === undefined || (
|
|
only_not_read === true && !active.hasClass("not_read"))) {
|
|
return false;
|
|
}
|
|
|
|
if (active.hasClass ("not_read")) {
|
|
active.removeClass ("not_read");
|
|
} else {
|
|
active.addClass ("not_read");
|
|
}
|
|
|
|
url = active.find ("a.read").attr ("href");
|
|
if (url === undefined) {
|
|
return false;
|
|
}
|
|
|
|
$.ajax ({
|
|
type: 'POST',
|
|
url: url,
|
|
data : { ajax: true }
|
|
}).done (function (data) {
|
|
res = jQuery.parseJSON(data);
|
|
|
|
active.find ("a.read").attr ("href", res.url);
|
|
});
|
|
}
|
|
|
|
function mark_favorite (active) {
|
|
if (active[0] === undefined) {
|
|
return false;
|
|
}
|
|
|
|
url = active.find ("a.bookmark").attr ("href");
|
|
if (url === undefined) {
|
|
return false;
|
|
}
|
|
|
|
$.ajax ({
|
|
type: 'POST',
|
|
url: url,
|
|
data : { ajax: true }
|
|
}).done (function (data) {
|
|
res = jQuery.parseJSON(data);
|
|
|
|
active.find ("a.bookmark").attr ("href", res.url);
|
|
if (active.hasClass ("favorite")) {
|
|
active.removeClass ("favorite");
|
|
} else {
|
|
active.addClass ("favorite");
|
|
}
|
|
});
|
|
}
|
|
|
|
function prev_entry() {
|
|
old_active = $(".flux.active");
|
|
last_active = $(".flux:last");
|
|
new_active = old_active.prevAll (".flux:first");
|
|
|
|
if (new_active.hasClass("flux")) {
|
|
toggleContent (new_active, old_active);
|
|
} else if (old_active[0] === undefined &&
|
|
new_active[0] === undefined) {
|
|
toggleContent (last_active, old_active);
|
|
}
|
|
}
|
|
|
|
function next_entry() {
|
|
old_active = $(".flux.active");
|
|
first_active = $(".flux:first");
|
|
new_active = old_active.nextAll (".flux:first");
|
|
|
|
if (new_active.hasClass("flux")) {
|
|
toggleContent (new_active, old_active);
|
|
} else if (old_active[0] === undefined &&
|
|
new_active[0] === undefined) {
|
|
toggleContent (first_active, old_active);
|
|
}
|
|
}
|
|
|
|
function init_img () {
|
|
$(".flux_content .content img").each (function () {
|
|
if ($(this).width () > ($(".flux_content .content").width()) / 2) {
|
|
$(this).addClass("big");
|
|
}
|
|
});
|
|
}
|
|
|
|
function inMarkViewport(flux) {
|
|
var top = flux.position().top;
|
|
var height = flux.height();
|
|
var begin = top + 3 * height / 4;
|
|
var bot = top + height;
|
|
|
|
var windowTop = $(window).scrollTop();
|
|
var windowBot = windowTop + $(window).height();
|
|
|
|
return (windowBot >= begin && windowBot <= bot);
|
|
}
|
|
|
|
var lastScroll = 0;
|
|
function init_posts () {
|
|
init_img ();
|
|
<?php if($this->conf->lazyload() == 'yes') { ?>
|
|
$(".flux .content img").lazyload();
|
|
<?php } ?>
|
|
|
|
if (hide_posts) {
|
|
$(".flux:not(.active) .flux_content").hide ();
|
|
}
|
|
|
|
$(".flux_header .item.title, .flux_header .item.date").click (function () {
|
|
old_active = $(".flux.active");
|
|
new_active = $(this).parent ().parent ();
|
|
|
|
toggleContent (new_active, old_active);
|
|
});
|
|
|
|
$(".flux a.read").click (function () {
|
|
active = $(this).parents (".flux");
|
|
mark_read (active, false);
|
|
|
|
return false;
|
|
});
|
|
|
|
$(".flux a.bookmark").click (function () {
|
|
active = $(this).parents (".flux");
|
|
mark_favorite (active);
|
|
|
|
return false;
|
|
});
|
|
|
|
$(".flux .content a").click (function () {
|
|
$(this).attr ('target', '_blank');
|
|
});
|
|
|
|
<?php if ($mark['site'] == 'yes') { ?>
|
|
$(".flux .link a").click (function () {
|
|
mark_read($(this).parent().parent().parent(), true);
|
|
});
|
|
<?php } ?>
|
|
|
|
<?php if ($mark['scroll'] == 'yes') { ?>
|
|
var flux = $('.flux');
|
|
$(window).scroll(function() {
|
|
var windowTop = $(this).scrollTop();
|
|
if(Math.abs(windowTop - lastScroll) <= 50) {
|
|
return;
|
|
}
|
|
lastScroll = windowTop;
|
|
|
|
flux.each(function() {
|
|
if($(this).hasClass('not_read') &&
|
|
$(this).children(".flux_content").is(':visible') &&
|
|
inMarkViewport($(this))) {
|
|
mark_read($(this), true);
|
|
}
|
|
});
|
|
});
|
|
<?php } ?>
|
|
}
|
|
|
|
function init_column_categories () {
|
|
if(!is_normal_mode()) {
|
|
return;
|
|
}
|
|
|
|
$(".category").addClass ("stick");
|
|
$(".categories .category .btn:first-child").width ("160px");
|
|
$(".category").append ("<a class=\"btn dropdown-toggle\" href=\"#\"><i class=\"icon i_down\"></i></a>");
|
|
|
|
$(".category + .feeds").not(".active").hide();
|
|
$(".category.active a.dropdown-toggle i").toggleClass ("i_up");
|
|
|
|
$(".category a.dropdown-toggle").click (function () {
|
|
$(this).children ().toggleClass ("i_up");
|
|
$(this).parent ().next (".feeds").slideToggle();
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function init_shortcuts () {
|
|
// Touches de manipulation
|
|
shortcut.add("<?php echo $s['mark_read']; ?>", function () {
|
|
// on marque comme lu ou non lu
|
|
active = $(".flux.active");
|
|
mark_read (active, false);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("shift+<?php echo $s['mark_read']; ?>", function () {
|
|
// on marque tout comme lu
|
|
url = $(".nav_menu a.read_all").attr ("href");
|
|
redirect (url, false);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("<?php echo $s['mark_favorite']; ?>", function () {
|
|
// on marque comme favori ou non favori
|
|
active = $(".flux.active");
|
|
mark_favorite (active);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
|
|
// Touches de navigation
|
|
shortcut.add("<?php echo $s['prev_entry']; ?>", prev_entry, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("shift+<?php echo $s['prev_entry']; ?>", function () {
|
|
old_active = $(".flux.active");
|
|
first = $(".flux:first");
|
|
|
|
if (first.hasClass("flux")) {
|
|
toggleContent (first, old_active);
|
|
}
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("<?php echo $s['next_entry']; ?>", next_entry, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("shift+<?php echo $s['next_entry']; ?>", function () {
|
|
old_active = $(".flux.active");
|
|
last = $(".flux:last");
|
|
|
|
if (last.hasClass("flux")) {
|
|
toggleContent (last, old_active);
|
|
}
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("<?php echo $s['next_page']; ?>", function () {
|
|
url = $(".pager-next a").attr ("href");
|
|
redirect (url, false);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("<?php echo $s['prev_page']; ?>", function () {
|
|
url = $(".pager-previous a").attr ("href");
|
|
redirect (url, false);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
shortcut.add("<?php echo $s['go_website']; ?>", function () {
|
|
url = $(".flux.active .link a").attr ("href");
|
|
|
|
<?php if ($mark['site'] == 'yes') { ?>
|
|
$(".flux.active").each (function () {
|
|
mark_read($(this), true);
|
|
});
|
|
<?php } ?>
|
|
|
|
redirect (url, true);
|
|
}, {
|
|
'disable_in_input':true
|
|
});
|
|
}
|
|
|
|
function init_nav_entries() {
|
|
$('.nav_entries a.previous_entry').click(function() {
|
|
prev_entry();
|
|
return false;
|
|
});
|
|
$('.nav_entries a.next_entry').click(function() {
|
|
next_entry();
|
|
return false;
|
|
});
|
|
}
|
|
|
|
$(document).ready (function () {
|
|
if(is_reader_mode()) {
|
|
hide_posts = false;
|
|
}
|
|
init_posts ();
|
|
init_column_categories ();
|
|
init_shortcuts ();
|
|
init_nav_entries();
|
|
});
|