diff --git a/backend.php b/backend.php
index b357cb18..9d22a3d0 100644
--- a/backend.php
+++ b/backend.php
@@ -55,6 +55,13 @@
$fetch = $_GET["fetch"];
+ function getAllCounters($link) {
+ getLabelCounters($link);
+ getFeedCounters($link);
+ getTagCounters($link);
+ getGlobalCounters($link);
+ }
+
/* FIXME this needs reworking */
function getGlobalCounters($link) {
@@ -408,10 +415,7 @@
if ($subop == "getAllCounters") {
print "";
- getLabelCounters($link);
- getFeedCounters($link);
- getTagCounters($link);
- getGlobalCounters($link);
+ getAllCounters($link);
print "";
}
@@ -465,19 +469,60 @@
getGlobalCounters($link);
print "";
}
-
+
+ /* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */
if ($subop == "catchupSelected") {
$ids = split(",", $_GET["ids"]);
+ $cmode = sprintf("%d", $_GET["cmode"]);
+
foreach ($ids as $id) {
- db_query($link, "UPDATE ttrss_user_entries SET unread=false,last_read = NOW()
- WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
-
+ if ($cmode == 0) {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ unread = false,last_read = NOW()
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ } else if ($cmode == 1) {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ unread = true
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ } else {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ unread = NOT unread,last_read = NOW()
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ }
}
+ print "";
+ getAllCounters($link);
+ print "";
+ }
- print "Marked active page as read.";
+ if ($subop == "markSelected") {
+
+ $ids = split(",", $_GET["ids"]);
+
+ $cmode = sprintf("%d", $_GET["cmode"]);
+
+ foreach ($ids as $id) {
+
+ if ($cmode == 0) {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ marked = false
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ } else if ($cmode == 1) {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ marked = true
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ } else {
+ db_query($link, "UPDATE ttrss_user_entries SET
+ marked = NOT marked
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+ }
+ }
+ print "";
+ getAllCounters($link);
+ print "";
}
if ($subop == "sanityCheck") {
@@ -753,8 +798,6 @@
}
- print "
";
-
$search = $_GET["search"];
$search_mode = $_GET["smode"];
@@ -834,13 +877,77 @@
$query_strategy_part = "id > 0"; // dumb
}
-
$order_by = "updated DESC";
// if ($feed < -10) {
// $order_by = "feed_id,updated DESC";
// }
+ $feed_title = "";
+
+ if ($search && $search_mode == "All feeds") {
+ $feed_title = "Search results";
+ } else if (sprintf("%d", $feed) == 0) {
+ $feed_title = $feed;
+ } else if ($feed > 0) {
+ $result = db_query($link, "SELECT title,site_url FROM ttrss_feeds
+ WHERE id = '$feed'");
+
+ $feed_title = db_fetch_result($result, 0, "title");
+ $feed_site_url = db_fetch_result($result, 0, "site_url");
+
+ } else if ($feed == -1) {
+ $feed_title = "Starred articles";
+ } else if ($feed < -10) {
+ $label_id = -$feed - 11;
+ $result = db_query($link, "SELECT description FROM ttrss_labels
+ WHERE id = '$label_id'");
+ $feed_title = db_fetch_result($result, 0, "description");
+ } else {
+ $feed_title = "?";
+ }
+
+ print "";
+
+ print "";
+
+
if ($feed < -10) error_reporting (0);
if (sprintf("%d", $feed) != 0) {
@@ -852,7 +959,9 @@
}
$result = db_query($link, "SELECT
- id,title,updated,unread,feed_id,marked,link,last_read,
+ id,title,
+ SUBSTRING(updated,1,16) as updated,
+ unread,feed_id,marked,link,last_read,
SUBSTRING(last_read,1,19) as last_read_noms,
$vfeed_query_part
SUBSTRING(updated,1,19) as updated_noms
@@ -872,7 +981,9 @@
$feed_kind = "Tags";
$result = db_query($link, "SELECT
- ttrss_entries.id as id,title,updated,unread,feed_id,
+ ttrss_entries.id as id,title,
+ SUBSTRING(updated,1,16) as updated,
+ unread,feed_id,
marked,link,last_read,
SUBSTRING(last_read,1,19) as last_read_noms,
$vfeed_query_part
@@ -956,17 +1067,23 @@
// onclick=\"javascript:view($id,$feed_id)\">
print "$update_pic | ";
+
+ print "
+
+ | ";
+
print "$marked_pic | ";
- print "
+ print " |
".$line["updated"]." | ";
if ($line["feed_title"]) {
- print "$content_link | ";
+ print "$content_link | ";
print "
".$line["feed_title"]." | ";
} else {
- print "$content_link | ";
+ print "$content_link | ";
}
print "";
diff --git a/functions.js b/functions.js
index 36aa8fd6..d3886437 100644
--- a/functions.js
+++ b/functions.js
@@ -32,6 +32,13 @@ function rpc_notify_callback() {
}
}
+function rpc_pnotify_callback() {
+ var container = parent.document.getElementById('notify');
+ if (xmlhttp_rpc.readyState == 4) {
+ container.innerHTML=xmlhttp_rpc.responseText;
+ }
+}
+
function param_escape(arg) {
if (typeof encodeURIComponent != 'undefined')
return encodeURIComponent(arg);
@@ -469,7 +476,8 @@ function selectTableRow(r, do_select) {
}
}
-function selectTableRowsByIdPrefix(content_id, prefix, check_prefix, do_select) {
+function selectTableRowsByIdPrefix(content_id, prefix, check_prefix, do_select,
+ classcheck) {
var content = document.getElementById(content_id);
@@ -479,15 +487,18 @@ function selectTableRowsByIdPrefix(content_id, prefix, check_prefix, do_select)
}
for (i = 0; i < content.rows.length; i++) {
- if (content.rows[i].id.match(prefix)) {
- selectTableRow(content.rows[i], do_select);
- }
+ if (!classcheck || content.rows[i].className.match(classcheck)) {
+
+ if (content.rows[i].id.match(prefix)) {
+ selectTableRow(content.rows[i], do_select);
+ }
- var row_id = content.rows[i].id.replace(prefix, "");
- var check = document.getElementById(check_prefix + row_id);
+ var row_id = content.rows[i].id.replace(prefix, "");
+ var check = document.getElementById(check_prefix + row_id);
- if (check) {
- check.checked = do_select;
+ if (check) {
+ check.checked = do_select;
+ }
}
}
}
@@ -504,7 +515,9 @@ function getSelectedTableRowIds(content_id, prefix) {
var sel_rows = new Array();
for (i = 0; i < content.rows.length; i++) {
- if (content.rows[i].className.match("Selected")) {
+ if (content.rows[i].id.match(prefix) &&
+ content.rows[i].className.match("Selected")) {
+
var row_id = content.rows[i].id.replace(prefix + "-", "");
sel_rows.push(row_id);
}
@@ -514,3 +527,18 @@ function getSelectedTableRowIds(content_id, prefix) {
}
+function toggleSelectRow(sender) {
+ var parent_row = sender.parentNode.parentNode;
+
+ if (sender.checked) {
+ if (!parent_row.className.match("Selected")) {
+ parent_row.className = parent_row.className + "Selected";
+ }
+ } else {
+ if (parent_row.className.match("Selected")) {
+ parent_row.className = parent_row.className.replace("Selected", "");
+ }
+ }
+}
+
+
diff --git a/prefs.js b/prefs.js
index 5c699f23..59af58fd 100644
--- a/prefs.js
+++ b/prefs.js
@@ -195,20 +195,6 @@ function updateUsersList() {
}
-function toggleSelectRow(sender) {
- var parent_row = sender.parentNode.parentNode;
-
- if (sender.checked) {
- if (!parent_row.className.match("Selected")) {
- parent_row.className = parent_row.className + "Selected";
- }
- } else {
- if (parent_row.className.match("Selected")) {
- parent_row.className = parent_row.className.replace("Selected", "");
- }
- }
-}
-
function addLabel() {
if (!xmlhttp_ready(xmlhttp)) {
diff --git a/tt-rss.css b/tt-rss.css
index d7c90573..9da226bc 100644
--- a/tt-rss.css
+++ b/tt-rss.css
@@ -686,3 +686,17 @@ td.selectPrompt {
font-size : x-small;
color : gray;
}
+
+table.headlinesSubToolbar td.headlineActions {
+ font-size : x-small;
+ color : gray;
+ padding : 5px 0px 5px 5px;
+}
+
+table.headlinesSubToolbar td.headlineTitle {
+ font-size : x-small;
+ color : gray;
+ padding : 5px 5px 5px 0px;
+ text-align : right;
+}
+
diff --git a/tt-rss.php b/tt-rss.php
index 48a491fa..cb2021fd 100644
--- a/tt-rss.php
+++ b/tt-rss.php
@@ -131,9 +131,7 @@
-
-
- View:
+ View:
+
+
Feed:
+ onclick="javascript:viewCurrentFeed(0, 'MarkAllRead')" value="Mark as read">
diff --git a/viewfeed.js b/viewfeed.js
index 9d42b910..7f338240 100644
--- a/viewfeed.js
+++ b/viewfeed.js
@@ -77,6 +77,11 @@ function view(id, feed_id) {
}
+function rowToggleMark(row) {
+
+
+
+}
function toggleMark(id, toggle) {
@@ -133,7 +138,7 @@ function toggleMark(id, toggle) {
}
xmlhttp_rpc.open("GET", query, true);
- xmlhttp_rpc.onreadystatechange=rpc_notify_callback;
+ xmlhttp_rpc.onreadystatechange=rpc_pnotify_callback;
xmlhttp_rpc.send(null);
}
@@ -208,6 +213,92 @@ function localHotkeyHandler(keycode) {
}
+function toggleUnread() {
+ try {
+ if (!xmlhttp_ready(xmlhttp_rpc)) {
+ printLockingError();
+ return;
+ }
+
+ var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+
+ for (i = 0; i < rows.length; i++) {
+ var row = document.getElementById("RROW-" + rows[i]);
+ if (row) {
+ var nc = row.className;
+ nc = nc.replace("Unread", "");
+ nc = nc.replace("Selected", "");
+
+ if (row.className.match("Unread")) {
+ row.className = nc + "Selected";
+ } else {
+ row.className = nc + "UnreadSelected";
+ }
+ }
+ }
+
+ if (rows.length > 0) {
+
+ var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
+ param_escape(rows.toString()) + "&cmode=2";
+
+ xmlhttp_rpc.open("GET", query, true);
+ xmlhttp_rpc.onreadystatechange=all_counters_callback;
+ xmlhttp_rpc.send(null);
+
+ }
+
+ } catch (e) {
+ exception_error(e);
+ }
+}
+
+function toggleStarred() {
+ try {
+ if (!xmlhttp_ready(xmlhttp_rpc)) {
+ printLockingError();
+ return;
+ }
+
+ var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+
+ for (i = 0; i < rows.length; i++) {
+ var row = document.getElementById("RROW-" + rows[i]);
+ var mark_img = document.getElementById("FMARKPIC-" + rows[i]);
+
+ if (row && mark_img) {
+
+ if (mark_img.alt == "Set mark") {
+ mark_img.src = "images/mark_set.png";
+ mark_img.alt = "Reset mark";
+ mark_img.setAttribute('onclick',
+ 'javascript:toggleMark('+rows[i]+', false)');
+
+ } else {
+ mark_img.src = "images/mark_unset.png";
+ mark_img.alt = "Set mark";
+ mark_img.setAttribute('onclick',
+ 'javascript:toggleMark('+rows[i]+', true)');
+ }
+ }
+ }
+
+ if (rows.length > 0) {
+
+ var query = "backend.php?op=rpc&subop=markSelected&ids=" +
+ param_escape(rows.toString()) + "&cmode=2";
+
+ xmlhttp_rpc.open("GET", query, true);
+ xmlhttp_rpc.onreadystatechange=all_counters_callback;
+ xmlhttp_rpc.send(null);
+
+ }
+
+ } catch (e) {
+ exception_error(e);
+ }
+}
+
function init() {
document.onkeydown = hotkey_handler;
}
|