From 1572afe508162a4e475669e3bb651ee659568c20 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 27 Nov 2005 15:56:10 +0100 Subject: [PATCH] headlines subtoolbar, misc api changes --- backend.php | 151 +++++++++++++++++++++++++++++++++++++++++++++------ functions.js | 46 +++++++++++++--- prefs.js | 14 ----- tt-rss.css | 14 +++++ tt-rss.php | 14 +++-- viewfeed.js | 93 ++++++++++++++++++++++++++++++- 6 files changed, 287 insertions(+), 45 deletions(-) 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 ""; + + print ""; + print "
+ Select: + All, + Unread, + None +    + Toggle: Unread, + Starred"; + +/* print "   + View: + All, + Unread, + Starred +    + Feed: + Update, + Mark as read"; */ + + print ""; + + if ($feed_site_url) { + print "$feed_title"; + } else { + print $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 ""; + + print ""; + print ""; - print ""; if ($line["feed_title"]) { - print ""; + print ""; print ""; } else { - print ""; + print ""; } 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">
$update_pic + + $marked_pic + print " ".$line["updated"]."$content_link$content_link ".$line["feed_title"]."$content_link$content_link
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; }