combined article display mode (option COMBINED_DISPLAY_MODE), remove xml feed output
This commit is contained in:
parent
6a1ad08406
commit
386cbf27aa
9 changed files with 245 additions and 81 deletions
167
backend.php
167
backend.php
|
@ -803,11 +803,6 @@
|
|||
$view_mode = $_GET["view"];
|
||||
$addheader = $_GET["addheader"];
|
||||
$limit = $_GET["limit"];
|
||||
$omode = $_GET["omode"];
|
||||
|
||||
if ($omode == "xml") {
|
||||
header("Content-Type: application/xml");
|
||||
}
|
||||
|
||||
if (!$feed) {
|
||||
return;
|
||||
|
@ -1050,6 +1045,8 @@
|
|||
|
||||
if ($feed < -10) error_reporting (0);
|
||||
|
||||
print "<div id=\"headlinesContainer\">";
|
||||
|
||||
if (sprintf("%d", $feed) != 0) {
|
||||
|
||||
if ($feed > 0) {
|
||||
|
@ -1058,11 +1055,11 @@
|
|||
$feed_kind = "Labels";
|
||||
}
|
||||
|
||||
if (!$vfeed_query_part) {
|
||||
$content_query_part = "SUBSTRING(content,1,300) as content_preview,";
|
||||
} else {
|
||||
$content_query_part = "";
|
||||
}
|
||||
// if (!$vfeed_query_part) {
|
||||
$content_query_part = "content as content_preview,";
|
||||
// } else {
|
||||
// $content_query_part = "";
|
||||
// }
|
||||
|
||||
$result = db_query($link, "SELECT
|
||||
id,title,
|
||||
|
@ -1109,55 +1106,64 @@
|
|||
}
|
||||
|
||||
if (!$result) {
|
||||
if ($omode != "xml") {
|
||||
print "<div align='center'>
|
||||
Could not display feed (query failed). Please check label match syntax or local configuration.</div>";
|
||||
return;
|
||||
} else {
|
||||
print "<error error-code=\"8\"/>";
|
||||
|
||||
}
|
||||
print "<div align='center'>
|
||||
Could not display feed (query failed). Please check label match syntax or local configuration.</div>";
|
||||
return;
|
||||
}
|
||||
|
||||
if (db_num_rows($result) > 0) {
|
||||
|
||||
if ($omode != "xml") {
|
||||
print "<table class=\"headlinesSubToolbar\"
|
||||
width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
|
||||
|
||||
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
||||
|
||||
print "<table class=\"headlinesSubToolbar\"
|
||||
width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
|
||||
|
||||
print "<td class=\"headlineActions\">
|
||||
Select:
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', true)\">All</a>,
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', true, 'Unread')\">Unread</a>,
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', false)\">None</a>
|
||||
|
||||
Toggle: <a href=\"javascript:selectionToggleUnread()\">Unread</a>,
|
||||
<a href=\"javascript:selectionToggleMarked()\">Starred</a>";
|
||||
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', true)\">All</a>,
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', true, 'Unread')\">Unread</a>,
|
||||
<a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
|
||||
'RROW-', 'RCHK-', false)\">None</a>
|
||||
|
||||
Toggle: <a href=\"javascript:selectionToggleUnread()\">Unread</a>,
|
||||
<a href=\"javascript:selectionToggleMarked()\">Starred</a>";
|
||||
|
||||
print "</td>";
|
||||
|
||||
print "<td class=\"headlineTitle\">";
|
||||
|
||||
if ($feed_site_url) {
|
||||
print "<a target=\"_blank\" href=\"$feed_site_url\">$feed_title</a>";
|
||||
} else {
|
||||
print $feed_title;
|
||||
}
|
||||
|
||||
print "</td>";
|
||||
print "</tr></table>";
|
||||
|
||||
print "<table class=\"headlinesList\" id=\"headlinesList\"
|
||||
cellspacing=\"0\" width=\"100%\">";
|
||||
|
||||
} else {
|
||||
print "<headlines feed=\"$feed\" title=\"$feed_title\" site_url=\"$feed_site_url\">";
|
||||
|
||||
print "<td class=\"headlineActions\">
|
||||
Select:
|
||||
<a href=\"javascript:cdmSelectArticles('all')\">All</a>,
|
||||
<a href=\"javascript:cdmSelectArticles('unread')\">Unread</a>,
|
||||
<a href=\"javascript:cdmSelectArticles('none')\">None</a>
|
||||
|
||||
Toggle: <a href=\"javascript:selectionToggleUnread(true)\">Unread</a>,
|
||||
<a href=\"javascript:selectionToggleMarked(true)\">Starred</a>";
|
||||
|
||||
print "</td>";
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
print "<td class=\"headlineTitle\">";
|
||||
|
||||
if ($feed_site_url) {
|
||||
print "<a target=\"_blank\" href=\"$feed_site_url\">$feed_title</a>";
|
||||
} else {
|
||||
print $feed_title;
|
||||
}
|
||||
|
||||
print "</td>";
|
||||
print "</tr></table>";
|
||||
|
||||
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
||||
print "<table class=\"headlinesList\" id=\"headlinesList\"
|
||||
cellspacing=\"0\" width=\"100%\">";
|
||||
}
|
||||
|
||||
$lnum = 0;
|
||||
|
||||
error_reporting (DEFAULT_ERROR_LEVEL);
|
||||
|
@ -1184,9 +1190,9 @@
|
|||
if ($line["unread"] == "t" || $line["unread"] == "1") {
|
||||
$class .= "Unread";
|
||||
++$num_unread;
|
||||
$is_unread = 'true';
|
||||
$is_unread = true;
|
||||
} else {
|
||||
$is_unread = 'false';
|
||||
$is_unread = false;
|
||||
}
|
||||
|
||||
if ($line["marked"] == "t" || $line["marked"] == "1") {
|
||||
|
@ -1212,10 +1218,9 @@
|
|||
200);
|
||||
}
|
||||
|
||||
if ($omode != "xml") {
|
||||
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
||||
|
||||
print "<tr class='$class' id='RROW-$id'>";
|
||||
// onclick=\"javascript:view($id,$feed_id)\">
|
||||
|
||||
print "<td class='hlUpdatePic'>$update_pic</td>";
|
||||
|
||||
|
@ -1252,46 +1257,58 @@
|
|||
print "</tr>";
|
||||
|
||||
} else {
|
||||
|
||||
if ($is_unread) {
|
||||
$add_class = "Unread";
|
||||
} else {
|
||||
$add_class = "";
|
||||
}
|
||||
|
||||
print "<div class=\"cdmArticle$add_class\" id=\"RROW-$id\">";
|
||||
|
||||
print "<entry unread='$is_unread' id='$id'>";
|
||||
print "<title><![CDATA[" . $line["title"] . "]]></title>";
|
||||
print "<link>" . $line["link"] . "</link>";
|
||||
print "<updated>$updated_fmt</updated>";
|
||||
if ($content_preview) {
|
||||
print "<preview><![CDATA[ $content_preview ]]></preview>";
|
||||
}
|
||||
print "<div class=\"cdmHeader\">";
|
||||
|
||||
if ($line["feed_title"]) {
|
||||
print "<feed id='$feed_id'><![CDATA[" . $line["feed_title"] . "]]></feed>";
|
||||
print "<div style=\"float : right\">$updated_fmt</div>";
|
||||
|
||||
print "<a href=\"".$line["link"]."\">".$line["title"]."</a>";
|
||||
|
||||
if ($line["feed_title"]) {
|
||||
print " (<a href='javascript:viewfeed($feed_id)'>".$line["feed_title"]."</a>)";
|
||||
}
|
||||
print "</entry>";
|
||||
|
||||
}
|
||||
|
||||
print "</div>";
|
||||
|
||||
print "<div class=\"cdmContent\">" . $line["content_preview"] . "</div>";
|
||||
|
||||
print "<div style=\"float : right\">$marked_pic</div>
|
||||
<div class=\"cdmFooter\">
|
||||
<input type=\"checkbox\" onclick=\"toggleSelectRowById(this,
|
||||
'RROW-$id')\" class=\"feedCheckBox\" id=\"RCHK-$id\"></div>";
|
||||
|
||||
print "</div>";
|
||||
|
||||
}
|
||||
|
||||
++$lnum;
|
||||
}
|
||||
|
||||
if ($omode != "xml") {
|
||||
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
||||
print "</table>";
|
||||
} else {
|
||||
print "</headlines>";
|
||||
}
|
||||
|
||||
} else {
|
||||
print "<div width='100%' align='center'>No articles found.</div>";
|
||||
}
|
||||
|
||||
if ($omode != "xml") {
|
||||
print "</div>";
|
||||
|
||||
print "<script type=\"text/javascript\">
|
||||
document.onkeydown = hotkey_handler;
|
||||
update_all_counters('$feed');
|
||||
</script>";
|
||||
print "<script type=\"text/javascript\">
|
||||
document.onkeydown = hotkey_handler;
|
||||
update_all_counters('$feed');
|
||||
</script>";
|
||||
|
||||
if ($addheader) {
|
||||
print "</body></html>";
|
||||
}
|
||||
if ($addheader) {
|
||||
print "</body></html>";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
15
functions.js
15
functions.js
|
@ -537,6 +537,21 @@ function getSelectedTableRowIds(content_id, prefix) {
|
|||
|
||||
}
|
||||
|
||||
function toggleSelectRowById(sender, id) {
|
||||
var row = document.getElementById(id);
|
||||
|
||||
if (sender.checked) {
|
||||
if (!row.className.match("Selected")) {
|
||||
row.className = row.className + "Selected";
|
||||
}
|
||||
} else {
|
||||
if (row.className.match("Selected")) {
|
||||
row.className = row.className.replace("Selected", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function toggleSelectRow(sender) {
|
||||
var parent_row = sender.parentNode.parentNode;
|
||||
|
||||
|
|
|
@ -220,6 +220,8 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
|
|||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('HEADLINES_SMART_DATE', 1, 'true', 'Use more accessible date/time format for headlines',3);
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('COMBINED_DISPLAY_MODE', 1, 'false', 'Combined feed display, no headline/article separation',2);
|
||||
|
||||
create table ttrss_user_prefs (
|
||||
owner_uid integer not null,
|
||||
pref_name varchar(250),
|
||||
|
|
|
@ -200,6 +200,8 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
|
|||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('HEADLINES_SMART_DATE', 1, 'true', 'Use more accessible date/time format for headlines',3);
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('COMBINED_DISPLAY_MODE', 1, 'false', 'Combined feed display, no headline/article separation',2);
|
||||
|
||||
create table ttrss_user_prefs (
|
||||
owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE,
|
||||
pref_name varchar(250) not null references ttrss_prefs(pref_name) ON DELETE CASCADE,
|
||||
|
|
|
@ -7,4 +7,6 @@ update ttrss_entries set num_comments = 0;
|
|||
alter table ttrss_entries change num_comments num_comments integer not null;
|
||||
alter table ttrss_entries alter column num_comments set default 0;
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('COMBINED_DISPLAY_MODE', 1, 'false', 'Combined feed display, no headline/article separation',2);
|
||||
|
||||
commit;
|
||||
|
|
|
@ -7,4 +7,6 @@ update ttrss_entries set num_comments = 0;
|
|||
alter table ttrss_entries alter column num_comments set not null;
|
||||
alter table ttrss_entries alter column num_comments set default 0;
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('COMBINED_DISPLAY_MODE', 1, 'false', 'Combined feed display, no headline/article separation',2);
|
||||
|
||||
commit;
|
||||
|
|
61
tt-rss.css
61
tt-rss.css
|
@ -77,6 +77,13 @@ table.main td.headlines {
|
|||
border-color : #c0c0c0;
|
||||
}
|
||||
|
||||
table.main td.headlines2 {
|
||||
height : 100%;
|
||||
border-width : 0px 0px 1px 1px;
|
||||
border-style : solid;
|
||||
border-color : #c0c0c0;
|
||||
}
|
||||
|
||||
table.main td.content {
|
||||
height : 100%;
|
||||
background-image : url("images/vgrad_light_rev.png");
|
||||
|
@ -825,3 +832,57 @@ td.hlContent {
|
|||
td.hlMarkedPic, td.hlSelectRow, td.hlUpdated, td.hlFeed {
|
||||
height : 1em;
|
||||
}
|
||||
|
||||
div.cdmArticle {
|
||||
border : 1px solid #f0f0f0;
|
||||
background-color : #fafafa;
|
||||
-moz-border-radius : 5px;
|
||||
margin : 10px 10px 0px 10px;
|
||||
padding : 10px;
|
||||
}
|
||||
|
||||
div.cdmArticleUnread {
|
||||
border : 1px solid #d5f1f4;
|
||||
background-color : #fafeff;
|
||||
-moz-border-radius : 5px;
|
||||
margin : 10px 10px 0px 10px;
|
||||
padding : 10px;
|
||||
}
|
||||
|
||||
div.cdmArticleSelected, div.cdmArticleUnreadSelected {
|
||||
border : 1px solid #d0d0f6;
|
||||
background-color : #eaeaff;
|
||||
-moz-border-radius : 5px;
|
||||
margin : 10px 10px 0px 10px;
|
||||
padding : 10px;
|
||||
}
|
||||
|
||||
div.cdmArticleUnread div.cdmHeader a, div.cdmArticleUnreadSelected div.cdmHeader a {
|
||||
font-weight : bold;
|
||||
}
|
||||
|
||||
div.cdmHeader {
|
||||
padding-bottom : 5px;
|
||||
}
|
||||
|
||||
div.cdmFooter {
|
||||
font-size : x-small;
|
||||
color : gray;
|
||||
padding-top : 5px;
|
||||
}
|
||||
|
||||
div.cdmFooter input, div.cdmHeader input, div.cdmFooter img {
|
||||
margin : 0px;
|
||||
}
|
||||
|
||||
div.cdmHeader, div.cdmHeader a {
|
||||
color : gray;
|
||||
font-size : x-small;
|
||||
}
|
||||
|
||||
div.cdmHeader a:hover {
|
||||
color : #5050aa;
|
||||
}
|
||||
|
||||
div.cdmContent {
|
||||
}
|
||||
|
|
15
tt-rss.php
15
tt-rss.php
|
@ -209,8 +209,18 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr><tr>
|
||||
</td>
|
||||
</tr>
|
||||
<? if (get_pref($link, 'COMBINED_DISPLAY_MODE')) { ?>
|
||||
<tr>
|
||||
<td id="headlines" class="headlines2" valign="top">
|
||||
<iframe frameborder="0" name="headlines-frame"
|
||||
id="headlines-frame" class="headlinesFrame"
|
||||
src="backend.php?op=error&msg=No%20feed%20selected."></iframe>
|
||||
</td>
|
||||
</tr>
|
||||
<? } else { ?>
|
||||
<tr>
|
||||
<td id="headlines" class="headlines" valign="top">
|
||||
<iframe frameborder="0" name="headlines-frame"
|
||||
id="headlines-frame" class="headlinesFrame"
|
||||
|
@ -222,6 +232,7 @@
|
|||
id="content-frame" class="contentFrame"> </iframe>
|
||||
</td>
|
||||
</tr>
|
||||
<? } ?>
|
||||
<? if (get_pref($link, 'DISPLAY_FOOTER')) { ?>
|
||||
<tr>
|
||||
<td colspan="2" class="footer">
|
||||
|
|
60
viewfeed.js
60
viewfeed.js
|
@ -226,14 +226,20 @@ function localHotkeyHandler(keycode) {
|
|||
|
||||
}
|
||||
|
||||
function selectionToggleUnread() {
|
||||
function selectionToggleUnread(cdm_mode) {
|
||||
try {
|
||||
if (!xmlhttp_ready(xmlhttp_rpc)) {
|
||||
printLockingError();
|
||||
return;
|
||||
}
|
||||
|
||||
var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
|
||||
var rows;
|
||||
|
||||
if (cdm_mode) {
|
||||
rows = cdmGetSelectedArticles();
|
||||
} else {
|
||||
rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
|
||||
}
|
||||
|
||||
for (i = 0; i < rows.length; i++) {
|
||||
var row = document.getElementById("RROW-" + rows[i]);
|
||||
|
@ -266,14 +272,20 @@ function selectionToggleUnread() {
|
|||
}
|
||||
}
|
||||
|
||||
function selectionToggleMarked() {
|
||||
function selectionToggleMarked(cdm_mode) {
|
||||
try {
|
||||
if (!xmlhttp_ready(xmlhttp_rpc)) {
|
||||
printLockingError();
|
||||
return;
|
||||
}
|
||||
|
||||
var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
|
||||
var rows;
|
||||
|
||||
if (cdm_mode) {
|
||||
rows = cdmGetSelectedArticles();
|
||||
} else {
|
||||
rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
|
||||
}
|
||||
|
||||
for (i = 0; i < rows.length; i++) {
|
||||
var row = document.getElementById("RROW-" + rows[i]);
|
||||
|
@ -312,6 +324,46 @@ function selectionToggleMarked() {
|
|||
}
|
||||
}
|
||||
|
||||
function cdmGetSelectedArticles() {
|
||||
var sel_articles = new Array();
|
||||
var container = document.getElementById("headlinesContainer");
|
||||
|
||||
for (i = 0; i < container.childNodes.length; i++) {
|
||||
var child = container.childNodes[i];
|
||||
|
||||
if (child.id.match("RROW-") && child.className.match("Selected")) {
|
||||
var c_id = child.id.replace("RROW-", "");
|
||||
sel_articles.push(c_id);
|
||||
}
|
||||
}
|
||||
|
||||
return sel_articles;
|
||||
}
|
||||
|
||||
// mode = all,none,unread
|
||||
function cdmSelectArticles(mode) {
|
||||
var container = document.getElementById("headlinesContainer");
|
||||
|
||||
for (i = 0; i < container.childNodes.length; i++) {
|
||||
var child = container.childNodes[i];
|
||||
|
||||
if (child.id.match("RROW-")) {
|
||||
// var aid = child.id.replace("RROW-", "");
|
||||
if (mode == "all") {
|
||||
if (!child.className.match("Selected")) {
|
||||
child.className = child.className + "Selected";
|
||||
}
|
||||
} else if (mode == "unread") {
|
||||
if (child.className.match("Unread") && !child.className.match("Selected")) {
|
||||
child.className = child.className + "Selected";
|
||||
}
|
||||
} else {
|
||||
child.className = child.className.replace("Selected", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function init() {
|
||||
document.onkeydown = hotkey_handler;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue