combined article display mode (option COMBINED_DISPLAY_MODE), remove xml feed output

This commit is contained in:
Andrew Dolgov 2005-12-13 06:52:32 +01:00
parent 6a1ad08406
commit 386cbf27aa
9 changed files with 245 additions and 81 deletions

View file

@ -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>
&nbsp;&nbsp;
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>
&nbsp;&nbsp;
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>
&nbsp;&nbsp;
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 "&nbsp;(<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>";
}
}

View file

@ -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;

View file

@ -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),

View file

@ -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,

View file

@ -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;

View file

@ -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;

View file

@ -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 {
}

View file

@ -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">

View file

@ -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;
}