|
|
@ -412,6 +412,8 @@ function viewfeed_offline(feed_id, subop, is_cat, subop_param, skip_history, off
|
|
|
|
|
|
|
|
|
|
|
|
function render_offline_feedlist() {
|
|
|
|
function render_offline_feedlist() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
var cats_enabled = 1;
|
|
|
|
|
|
|
|
|
|
|
|
var tmp = "<ul class=\"feedList\" id=\"feedList\">";
|
|
|
|
var tmp = "<ul class=\"feedList\" id=\"feedList\">";
|
|
|
|
|
|
|
|
|
|
|
|
var unread = get_local_feed_unread(-4);
|
|
|
|
var unread = get_local_feed_unread(-4);
|
|
|
@ -419,6 +421,10 @@ function render_offline_feedlist() {
|
|
|
|
global_unread = unread;
|
|
|
|
global_unread = unread;
|
|
|
|
updateTitle();
|
|
|
|
updateTitle();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (cats_enabled) {
|
|
|
|
|
|
|
|
tmp += printCategoryHeader(-1, getCookie("ttrss_vf_vclps"), false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
tmp += printFeedEntry(-4, __("All articles"), "feed", unread,
|
|
|
|
tmp += printFeedEntry(-4, __("All articles"), "feed", unread,
|
|
|
|
"images/tag.png");
|
|
|
|
"images/tag.png");
|
|
|
|
|
|
|
|
|
|
|
@ -427,15 +433,27 @@ function render_offline_feedlist() {
|
|
|
|
tmp += printFeedEntry(-1, __("Starred articles"), "feed", unread,
|
|
|
|
tmp += printFeedEntry(-1, __("Starred articles"), "feed", unread,
|
|
|
|
"images/mark_set.png");
|
|
|
|
"images/mark_set.png");
|
|
|
|
|
|
|
|
|
|
|
|
tmp += "<li><hr/></li>";
|
|
|
|
if (cats_enabled) {
|
|
|
|
|
|
|
|
tmp += "</ul></li>";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
tmp += "<li><hr/></li>";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* var rs = db.execute("SELECT feeds.id,feeds.title,has_icon,COUNT(articles.id) "+
|
|
|
|
/* var rs = db.execute("SELECT feeds.id,feeds.title,has_icon,COUNT(articles.id) "+
|
|
|
|
"FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+
|
|
|
|
"FROM feeds LEFT JOIN articles ON (feed_id = feeds.id) "+
|
|
|
|
"WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+
|
|
|
|
"WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+
|
|
|
|
"ORDER BY feeds.title"); */
|
|
|
|
"ORDER BY feeds.title"); */
|
|
|
|
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT id,title,has_icon FROM feeds "+
|
|
|
|
var order_by = "feeds.title";
|
|
|
|
"ORDER BY title");
|
|
|
|
|
|
|
|
|
|
|
|
if (cats_enabled) order_by = "categories.title," + order_by;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT "+
|
|
|
|
|
|
|
|
"feeds.id,feeds.title,has_icon,cat_id,collapsed "+
|
|
|
|
|
|
|
|
"FROM feeds,categories WHERE cat_id = categories.id "+
|
|
|
|
|
|
|
|
"ORDER BY "+order_by);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var tmp_cat_id = -1;
|
|
|
|
|
|
|
|
|
|
|
|
while (rs.isValidRow()) {
|
|
|
|
while (rs.isValidRow()) {
|
|
|
|
|
|
|
|
|
|
|
@ -443,6 +461,16 @@ function render_offline_feedlist() {
|
|
|
|
var title = rs.field(1);
|
|
|
|
var title = rs.field(1);
|
|
|
|
var has_icon = rs.field(2);
|
|
|
|
var has_icon = rs.field(2);
|
|
|
|
var unread = get_local_feed_unread(id);
|
|
|
|
var unread = get_local_feed_unread(id);
|
|
|
|
|
|
|
|
var cat_id = rs.field(3);
|
|
|
|
|
|
|
|
var cat_hidden = rs.field(4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (cat_id != tmp_cat_id && cats_enabled) {
|
|
|
|
|
|
|
|
if (tmp_cat_id != -1) {
|
|
|
|
|
|
|
|
tmp += "</ul></li>";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
tmp += printCategoryHeader(cat_id, cat_hidden, false);
|
|
|
|
|
|
|
|
tmp_cat_id = cat_id;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var icon = "";
|
|
|
|
var icon = "";
|
|
|
|
|
|
|
|
|
|
|
@ -450,7 +478,6 @@ function render_offline_feedlist() {
|
|
|
|
icon = "icons/" + id + ".ico";
|
|
|
|
icon = "icons/" + id + ".ico";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var feed_icon = "";
|
|
|
|
var feed_icon = "";
|
|
|
|
|
|
|
|
|
|
|
|
var row_class = "feed";
|
|
|
|
var row_class = "feed";
|
|
|
@ -660,14 +687,24 @@ function update_offline_data(stage) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function set_feedlist_counter(id, ctr) {
|
|
|
|
function set_feedlist_counter(id, ctr, is_cat) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
var feedctr = document.getElementById("FEEDCTR-" + id);
|
|
|
|
var feedctr = document.getElementById("FEEDCTR-" + id);
|
|
|
|
var feedu = document.getElementById("FEEDU-" + id);
|
|
|
|
var feedu = document.getElementById("FEEDU-" + id);
|
|
|
|
var feedr = document.getElementById("FEEDR-" + id);
|
|
|
|
var feedr = document.getElementById("FEEDR-" + id);
|
|
|
|
|
|
|
|
|
|
|
|
if (feedctr && feedu && feedr) {
|
|
|
|
if (is_cat) {
|
|
|
|
|
|
|
|
var catctr = document.getElementById("FCATCTR-" + id);
|
|
|
|
|
|
|
|
if (catctr) {
|
|
|
|
|
|
|
|
catctr.innerHTML = "(" + ctr + ")";
|
|
|
|
|
|
|
|
if (ctr > 0) {
|
|
|
|
|
|
|
|
catctr.className = "catCtrHasUnread";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
catctr.className = "catCtrNoUnread";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (feedctr && feedu && feedr) {
|
|
|
|
|
|
|
|
|
|
|
|
var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML));
|
|
|
|
var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML));
|
|
|
|
|
|
|
|
|
|
|
@ -713,15 +750,25 @@ function update_local_feedlist_counters() {
|
|
|
|
"WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+
|
|
|
|
"WHERE unread = 1 OR unread IS NULL GROUP BY feeds.id "+
|
|
|
|
"ORDER BY feeds.title"); */
|
|
|
|
"ORDER BY feeds.title"); */
|
|
|
|
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT id,title,has_icon FROM feeds "+
|
|
|
|
var rs = db.execute("SELECT id FROM feeds "+
|
|
|
|
"ORDER BY title");
|
|
|
|
"ORDER BY title");
|
|
|
|
|
|
|
|
|
|
|
|
while (rs.isValidRow()) {
|
|
|
|
while (rs.isValidRow()) {
|
|
|
|
var id = rs.field(0);
|
|
|
|
var id = rs.field(0);
|
|
|
|
var ctr = get_local_feed_unread(id);
|
|
|
|
var ctr = get_local_feed_unread(id);
|
|
|
|
|
|
|
|
set_feedlist_counter(id, ctr, false);
|
|
|
|
|
|
|
|
rs.next();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
set_feedlist_counter(id, ctr);
|
|
|
|
rs.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT cat_id,SUM(unread) "+
|
|
|
|
|
|
|
|
"FROM articles, feeds WHERE feeds.id = feed_id GROUP BY cat_id");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (rs.isValidRow()) {
|
|
|
|
|
|
|
|
var id = rs.field(0);
|
|
|
|
|
|
|
|
var ctr = rs.field(1);
|
|
|
|
|
|
|
|
set_feedlist_counter(id, ctr, true);
|
|
|
|
rs.next();
|
|
|
|
rs.next();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -840,3 +887,96 @@ function local_collapse_cat(id) {
|
|
|
|
exception_error("local_collapse_cat", e);
|
|
|
|
exception_error("local_collapse_cat", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function get_local_category_title(id) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT title FROM categories WHERE id = ?", [id]);
|
|
|
|
|
|
|
|
var tmp = "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rs.isValidRow()) {
|
|
|
|
|
|
|
|
tmp = rs.field(0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rs.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return tmp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
exception_error("get_local_category_title", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function get_local_category_unread(id) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
var rs = db.execute("SELECT SUM(unread) FROM articles, feeds "+
|
|
|
|
|
|
|
|
"WHERE feeds.id = feed_id AND cat_id = ?",
|
|
|
|
|
|
|
|
[id]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var tmp = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rs.isValidRow()) {
|
|
|
|
|
|
|
|
tmp = rs.field(0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rs.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return tmp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
exception_error("get_local_category_unread", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function printCategoryHeader(cat_id, hidden, can_browse) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
if (hidden == undefined) hidden = false;
|
|
|
|
|
|
|
|
if (can_browse == undefined) can_browse = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var tmp_category = get_local_category_title(cat_id);
|
|
|
|
|
|
|
|
var tmp = "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var cat_unread = get_local_category_unread(cat_id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var holder_style = "";
|
|
|
|
|
|
|
|
var ellipsis = "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (hidden) {
|
|
|
|
|
|
|
|
holder_style = "display:none;";
|
|
|
|
|
|
|
|
ellipsis = "…";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var catctr_class = (cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var browse_cat_link = "";
|
|
|
|
|
|
|
|
var inner_title_class = "catTitleNL";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (can_browse) {
|
|
|
|
|
|
|
|
browse_cat_link = "onclick=\"javascript:viewCategory($cat_id)\"";
|
|
|
|
|
|
|
|
inner_title_class = "catTitle";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var cat_class = "feedCat";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tmp += "<li class=\""+cat_class+"\" id=\"FCAT-"+cat_id+"\">"+
|
|
|
|
|
|
|
|
"<img onclick=\"toggleCollapseCat("+cat_id+")\" class=\"catCollapse\""+
|
|
|
|
|
|
|
|
" title=\""+__('Click to collapse category')+"\""+
|
|
|
|
|
|
|
|
" src=\"images/cat-collapse.png\"><span class=\""+inner_title_class+"\" "+
|
|
|
|
|
|
|
|
" id=\"FCATN-"+cat_id+"\" "+browse_cat_link+
|
|
|
|
|
|
|
|
"\">"+tmp_category+"</span>";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tmp += "<span id=\"FCAP-"+cat_id+"\">";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tmp += " <span id=\"FCATCTR-"+cat_id+"\" "+
|
|
|
|
|
|
|
|
"class=\""+catctr_class+"\">("+cat_unread+")</span> "+ellipsis;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tmp += "</span>";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tmp += "<ul class=\"feedCatList\" id=\"FCATLIST-"+cat_id+"\" "+
|
|
|
|
|
|
|
|
"style='"+holder_style+"'>";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return tmp;
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
exception_error("printCategoryHeader", e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|