From 791877c39de3924aec2b3fe8e37596f062ef5a44 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 3 Sep 2015 16:41:04 +0300 Subject: fix catching up for grouped feeds --- js/feedlist.js | 3 +++ js/tt-rss.js | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'js') diff --git a/js/feedlist.js b/js/feedlist.js index 7a5996a87..d6eaf17c8 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -59,6 +59,7 @@ function viewfeed(params) { var infscroll_req = params.infscroll_req; var can_wait = params.can_wait; var viewfeed_debug = params.viewfeed_debug; + var method = params.method; if (is_cat == undefined) is_cat = false; @@ -102,6 +103,8 @@ function viewfeed(params) { var query = "?op=feeds&method=view&feed=" + param_escape(feed) + "&" + toolbar_query; + if (method) query += "&m=" + param_escape(method); + if (offset > 0) { if (current_first_id) { query = query + "&fid=" + param_escape(current_first_id); diff --git a/js/tt-rss.js b/js/tt-rss.js index 2dbf8a3b5..5261485ae 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -146,11 +146,11 @@ function catchupAllFeeds() { } } -function viewCurrentFeed() { - console.log("viewCurrentFeed"); +function viewCurrentFeed(method) { + console.log("viewCurrentFeed: " + method); if (getActiveFeedId() != undefined) { - viewfeed({feed: getActiveFeedId(), is_cat: activeFeedIsCat()}); + viewfeed({feed: getActiveFeedId(), is_cat: activeFeedIsCat(), method: method}); } return false; // block unneeded form submits } -- cgit v1.2.3-54-g00ecf From b717c65e4e1b636370cf1a9df613a46e272d6f6d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 3 Sep 2015 16:54:09 +0300 Subject: update previous --- js/feedlist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'js') diff --git a/js/feedlist.js b/js/feedlist.js index d6eaf17c8..617863ef8 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -126,7 +126,7 @@ function viewfeed(params) { query = query + "&vgrlf=" + param_escape(vgroup_last_feed); } } else { - if (!is_cat && feed == getActiveFeedId()) { + if (!is_cat && feed == getActiveFeedId() && !params.method) { query = query + "&m=ForceUpdate"; } } -- cgit v1.2.3-54-g00ecf From a0dbc45acd96c82b55927ce6b0dd8253811c9e17 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 7 Sep 2015 12:49:49 +0300 Subject: add edit feed to feed header context menu in grouped mode --- js/viewfeed.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'js') diff --git a/js/viewfeed.js b/js/viewfeed.js index c079586a2..79f4e9966 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -2185,6 +2185,12 @@ function initHeadlinesMenu() { catchupFeedInGroup(menu.callerRowId); }})); + menu.addChild(new dijit.MenuItem({ + label: __("Edit feed"), + onClick: function(event) { + editFeed(menu.callerRowId); + }})); + menu.startup(); } -- cgit v1.2.3-54-g00ecf From a007c18dffddbe2fcfafe3dca9acf48487085b6c Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 9 Sep 2015 16:56:04 +0300 Subject: wip: filter async testing --- classes/pref/filters.php | 64 +++++++++++++++++++++++++----------------------- js/prefs.js | 54 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 31 deletions(-) (limited to 'js') diff --git a/classes/pref/filters.php b/classes/pref/filters.php index a371fcff4..ec0c3862a 100644 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -43,8 +43,11 @@ class Pref_Filters extends Handler_Protected { return; } + function testFilterDo() { + require_once "include/rssfuncs.php"; + + $offset = (int) db_escape_string($_REQUEST["offset"]); - function testFilter() { $filter = array(); $filter["enabled"] = true; @@ -94,24 +97,14 @@ class Pref_Filters extends Handler_Protected { } } - $found = 0; - $offset = 0; - $limit = 30; - $started = time(); - - print __("Articles matching this filter:"); - - require_once "include/rssfuncs.php"; - - print "
"; - print ""; - $glue = $filter['match_any_rule'] ? " OR " : " AND "; $scope_qpart = join($glue, $scope_qparts); if (!$scope_qpart) $scope_qpart = "true"; - while ($found < $limit && $offset < $limit * 10 && time() - $started < ini_get("max_execution_time") * 0.7) { + $rv = array(); + + //while ($found < $limit && $offset < $limit * 1000 && time() - $started < ini_get("max_execution_time") * 0.7) { $result = db_query("SELECT ttrss_entries.id, ttrss_entries.title, @@ -130,7 +123,7 @@ class Pref_Filters extends Handler_Protected { ref_id = ttrss_entries.id AND ($scope_qpart) AND ttrss_user_entries.owner_uid = " . $_SESSION["uid"] . " - ORDER BY date_entered DESC LIMIT $limit OFFSET $offset"); + ORDER BY date_entered DESC LIMIT 30 OFFSET $offset"); while ($line = db_fetch_assoc($result)) { @@ -149,14 +142,10 @@ class Pref_Filters extends Handler_Protected { if ($line["feed_title"]) $feed_title = "(" . $line["feed_title"] . ")"; - print ""; - - print ""; - print ""; + $line .= ""; - $found++; + array_push($rv, $line); } } - $offset += $limit; - } + //$offset += $limit; + //} - if ($found == 0) { + /*if ($found == 0) { print ""; - $line .= $line["title"]; - $line .= "
" . $feed_title . "
"; - $line .= "
" . $content_preview . "
"; - $line .= " " . mb_substr($line["date_entered"], 0, 16); + array_push($rv, $tmp); - $line .= ""; + /*array_push($rv, array("title" => $line["title"], + "content" => $content_preview, + "date" => $line["date_entered"], + "feed" => $line["feed_title"])); */ - array_push($rv, $line); } } @@ -183,7 +190,7 @@ class Pref_Filters extends Handler_Protected { //print __("Articles matching this filter:"); - print "
 Looking for articles...
"; + print "
 Looking for articles...
"; print "
"; print "
"; + $line = ""; /*foreach ($filter['rules'] as $rule) { - $reg_exp = $rule['reg_exp']; $reg_exp = str_replace('/', '\/', $rule["reg_exp"]); $line["title"] = preg_replace("/($reg_exp)/i", @@ -166,25 +155,38 @@ class Pref_Filters extends Handler_Protected { "$1", $content_preview); }*/ - print $line["title"]; - print "
" . $feed_title . "
"; - print "
" . $content_preview . "
"; - print " " . mb_substr($line["date_entered"], 0, 16); + $line .= $line["title"]; + $line .= "
" . $feed_title . "
"; + $line .= "
" . $content_preview . "
"; + $line .= " " . mb_substr($line["date_entered"], 0, 16); - print "
" . __("No recent articles matching this filter have been found."); - } + }*/ + + print json_encode($rv); + } + + function testFilter() { + + if (isset($_REQUEST["offset"])) return $this->testFilterDo(); + + //print __("Articles matching this filter:"); + + print "
 Looking for articles...
"; + print "
"; + print ""; print "
"; print "
"; diff --git a/js/prefs.js b/js/prefs.js index 66288764a..797e0e071 100644 --- a/js/prefs.js +++ b/js/prefs.js @@ -146,6 +146,7 @@ function editFilter(id) { id: "filterEditDlg", title: __("Edit Filter"), style: "width: 600px", + test: function() { var query = "backend.php?" + dojo.formToQuery("filter_edit_form") + "&savemode=test"; @@ -156,8 +157,61 @@ function editFilter(id) { id: "filterTestDlg", title: "Test Filter", style: "width: 600px", + results: 0, + max_offset: 10000, + getTestResults: function(query, offset) { + var updquery = query + "&offset=" + offset; + + console.log("getTestResults:" + offset); + //console.log(updquery); + + new Ajax.Request("backend.php", { + parameters: updquery, + onComplete: function (transport) { + + console.log(transport.responseText); + + var result = JSON.parse(transport.responseText); + + console.log("R:" + result); + + //console.log("<<< " + transport.responseText); + + if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { + test_dlg.results += result.size(); + + $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d)...".replace("%d", offset)); + + console.log(offset + " " + test_dlg.max_offset); + + for (var i = 0; i < result.size(); i++) { + $("prefFilterTestResultList").innerHTML += result[i]; + } + + if (test_dlg.results < 30 && offset < test_dlg.max_offset) { + window.setTimeout(function() { + //console.log("blaargh"); + + test_dlg.getTestResults(query, offset + 30); + }, 0); + } else { + + // all done + + } + + } else { + console.log("can't parse results object / dialog closed"); + } + + } }); + }, href: query}); + dojo.connect(test_dlg, "onShow", null, function(e) { + test_dlg.getTestResults(query, 0); + }); + test_dlg.show(); }, selectRules: function(select) { -- cgit v1.2.3-54-g00ecf From 261226a3a50c598fcf385c336246e8a97934329c Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 9 Sep 2015 22:09:03 +0300 Subject: mostly implement async filter test dialog --- classes/pref/filters.php | 29 ++++++---- js/prefs.js | 144 +++++++++++++++++++++++++++++------------------ 2 files changed, 106 insertions(+), 67 deletions(-) mode change 100644 => 100755 classes/pref/filters.php mode change 100644 => 100755 js/prefs.js (limited to 'js') diff --git a/classes/pref/filters.php b/classes/pref/filters.php old mode 100644 new mode 100755 index ec0c3862a..6170f7a08 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -47,6 +47,7 @@ class Pref_Filters extends Handler_Protected { require_once "include/rssfuncs.php"; $offset = (int) db_escape_string($_REQUEST["offset"]); + $limit = (int) db_escape_string($_REQUEST["limit"]); $filter = array(); @@ -112,6 +113,7 @@ class Pref_Filters extends Handler_Protected { ttrss_feeds.title AS feed_title, ttrss_feed_categories.id AS cat_id, content, + date_entered, link, author, tag_cache @@ -123,7 +125,7 @@ class Pref_Filters extends Handler_Protected { ref_id = ttrss_entries.id AND ($scope_qpart) AND ttrss_user_entries.owner_uid = " . $_SESSION["uid"] . " - ORDER BY date_entered DESC LIMIT 30 OFFSET $offset"); + ORDER BY date_entered DESC LIMIT $limit OFFSET $offset"); while ($line = db_fetch_assoc($result)) { @@ -142,10 +144,10 @@ class Pref_Filters extends Handler_Protected { if ($line["feed_title"]) $feed_title = "(" . $line["feed_title"] . ")"; - $line = "
"; - /*foreach ($filter['rules'] as $rule) { + foreach ($filter['rules'] as $rule) { $reg_exp = str_replace('/', '\/', $rule["reg_exp"]); $line["title"] = preg_replace("/($reg_exp)/i", @@ -153,16 +155,21 @@ class Pref_Filters extends Handler_Protected { $content_preview = preg_replace("/($reg_exp)/i", "$1", $content_preview); - }*/ + } + + $tmp .= "" . $line["title"] . ""; + $tmp .= "
" . $feed_title . "
"; + $tmp .= "
" . $content_preview . "
"; + $tmp .= " " . mb_substr($line["date_entered"], 0, 16); + $tmp .= "
"; diff --git a/js/prefs.js b/js/prefs.js old mode 100644 new mode 100755 index 797e0e071..ac6ac2066 --- a/js/prefs.js +++ b/js/prefs.js @@ -131,88 +131,120 @@ function editUser(id, event) { } -function editFilter(id) { +function editFilterTest(query) { try { - var query = "backend.php?op=pref-filters&method=edit&id=" + param_escape(id); - - if (dijit.byId("feedEditDlg")) - dijit.byId("feedEditDlg").destroyRecursive(); - - if (dijit.byId("filterEditDlg")) - dijit.byId("filterEditDlg").destroyRecursive(); + if (dijit.byId("filterTestDlg")) + dijit.byId("filterTestDlg").destroyRecursive(); - dialog = new dijit.Dialog({ - id: "filterEditDlg", - title: __("Edit Filter"), + var test_dlg = new dijit.Dialog({ + id: "filterTestDlg", + title: "Test Filter", style: "width: 600px", + results: 0, + limit: 100, + max_offset: 10000, + getTestResults: function(query, offset) { + var updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit; - test: function() { - var query = "backend.php?" + dojo.formToQuery("filter_edit_form") + "&savemode=test"; + console.log("getTestResults:" + offset); - if (dijit.byId("filterTestDlg")) - dijit.byId("filterTestDlg").destroyRecursive(); + new Ajax.Request("backend.php", { + parameters: updquery, + onComplete: function (transport) { + try { + var result = JSON.parse(transport.responseText); - var test_dlg = new dijit.Dialog({ - id: "filterTestDlg", - title: "Test Filter", - style: "width: 600px", - results: 0, - max_offset: 10000, - getTestResults: function(query, offset) { - var updquery = query + "&offset=" + offset; + if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { + test_dlg.results += result.size(); - console.log("getTestResults:" + offset); - //console.log(updquery); + console.log("got results:" + result.size()); - new Ajax.Request("backend.php", { - parameters: updquery, - onComplete: function (transport) { + $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") + .replace("%f", test_dlg.results) + .replace("%d", offset); - console.log(transport.responseText); + console.log(offset + " " + test_dlg.max_offset); - var result = JSON.parse(transport.responseText); + for (var i = 0; i < result.size(); i++) { + var tmp = new Element("table"); + tmp.innerHTML = result[i]; + dojo.parser.parse(tmp); - console.log("R:" + result); + $("prefFilterTestResultList").innerHTML += tmp.innerHTML; + } - //console.log("<<< " + transport.responseText); + if (test_dlg.results < 30 && offset < test_dlg.max_offset) { - if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { - test_dlg.results += result.size(); + // get the next batch + window.setTimeout(function () { + test_dlg.getTestResults(query, offset + test_dlg.limit); + }, 0); - $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d)...".replace("%d", offset)); + } else { + // all done - console.log(offset + " " + test_dlg.max_offset); + Element.hide("prefFilterLoadingIndicator"); - for (var i = 0; i < result.size(); i++) { - $("prefFilterTestResultList").innerHTML += result[i]; + if (test_dlg.results == 0) { + $("prefFilterTestResultList").innerHTML = ""; + $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + } else { + $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") + .replace("%d", test_dlg.results); } - if (test_dlg.results < 30 && offset < test_dlg.max_offset) { - window.setTimeout(function() { - //console.log("blaargh"); + } - test_dlg.getTestResults(query, offset + 30); - }, 0); - } else { + } else if (!result) { + console.log("getTestResults: can't parse results object"); - // all done + Element.hide("prefFilterLoadingIndicator"); - } + notify_error("Error while trying to get filter test results."); - } else { - console.log("can't parse results object / dialog closed"); - } + } else { + console.log("getTestResults: dialog closed, bailing out."); + } + } catch (e) { + exception_error("editFilterTest/inner", e); + } - } }); - }, - href: query}); + } }); + }, + href: query}); - dojo.connect(test_dlg, "onShow", null, function(e) { - test_dlg.getTestResults(query, 0); - }); + dojo.connect(test_dlg, "onLoad", null, function(e) { + test_dlg.getTestResults(query, 0); + }); + + test_dlg.show(); + + } catch (e) { + exception_error("editFilterTest", e); + } +} + +function editFilter(id) { + try { + + var query = "backend.php?op=pref-filters&method=edit&id=" + param_escape(id); + + if (dijit.byId("feedEditDlg")) + dijit.byId("feedEditDlg").destroyRecursive(); + + if (dijit.byId("filterEditDlg")) + dijit.byId("filterEditDlg").destroyRecursive(); + + dialog = new dijit.Dialog({ + id: "filterEditDlg", + title: __("Edit Filter"), + style: "width: 600px", + + test: function() { + var query = "backend.php?" + dojo.formToQuery("filter_edit_form") + "&savemode=test"; - test_dlg.show(); + editFilterTest(query); }, selectRules: function(select) { $$("#filterDlg_Matches input[type=checkbox]").each(function(e) { -- cgit v1.2.3-54-g00ecf From 3857536f70057370810c70145cf8e54af5fdcd78 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 9 Sep 2015 22:13:43 +0300 Subject: fix testing in create filter dialog, woops --- js/functions.js | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++------ js/prefs.js | 94 -------------------------------------------------- 2 files changed, 95 insertions(+), 104 deletions(-) mode change 100644 => 100755 js/functions.js (limited to 'js') diff --git a/js/functions.js b/js/functions.js old mode 100644 new mode 100755 index 8e5694960..2e9e544a9 --- a/js/functions.js +++ b/js/functions.js @@ -1051,6 +1051,100 @@ function addFilterAction(replaceNode, actionStr) { } } +function editFilterTest(query) { + try { + + if (dijit.byId("filterTestDlg")) + dijit.byId("filterTestDlg").destroyRecursive(); + + var test_dlg = new dijit.Dialog({ + id: "filterTestDlg", + title: "Test Filter", + style: "width: 600px", + results: 0, + limit: 100, + max_offset: 10000, + getTestResults: function(query, offset) { + var updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit; + + console.log("getTestResults:" + offset); + + new Ajax.Request("backend.php", { + parameters: updquery, + onComplete: function (transport) { + try { + var result = JSON.parse(transport.responseText); + + if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { + test_dlg.results += result.size(); + + console.log("got results:" + result.size()); + + $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") + .replace("%f", test_dlg.results) + .replace("%d", offset); + + console.log(offset + " " + test_dlg.max_offset); + + for (var i = 0; i < result.size(); i++) { + var tmp = new Element("table"); + tmp.innerHTML = result[i]; + dojo.parser.parse(tmp); + + $("prefFilterTestResultList").innerHTML += tmp.innerHTML; + } + + if (test_dlg.results < 30 && offset < test_dlg.max_offset) { + + // get the next batch + window.setTimeout(function () { + test_dlg.getTestResults(query, offset + test_dlg.limit); + }, 0); + + } else { + // all done + + Element.hide("prefFilterLoadingIndicator"); + + if (test_dlg.results == 0) { + $("prefFilterTestResultList").innerHTML = ""; + $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + } else { + $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") + .replace("%d", test_dlg.results); + } + + } + + } else if (!result) { + console.log("getTestResults: can't parse results object"); + + Element.hide("prefFilterLoadingIndicator"); + + notify_error("Error while trying to get filter test results."); + + } else { + console.log("getTestResults: dialog closed, bailing out."); + } + } catch (e) { + exception_error("editFilterTest/inner", e); + } + + } }); + }, + href: query}); + + dojo.connect(test_dlg, "onLoad", null, function(e) { + test_dlg.getTestResults(query, 0); + }); + + test_dlg.show(); + + } catch (e) { + exception_error("editFilterTest", e); + } +} + function quickAddFilter() { try { var query = ""; @@ -1077,16 +1171,7 @@ function quickAddFilter() { test: function() { var query = "backend.php?" + dojo.formToQuery("filter_new_form") + "&savemode=test"; - if (dijit.byId("filterTestDlg")) - dijit.byId("filterTestDlg").destroyRecursive(); - - var test_dlg = new dijit.Dialog({ - id: "filterTestDlg", - title: "Test Filter", - style: "width: 600px", - href: query}); - - test_dlg.show(); + editFilterTest(query); }, selectRules: function(select) { $$("#filterDlg_Matches input[type=checkbox]").each(function(e) { diff --git a/js/prefs.js b/js/prefs.js index ac6ac2066..ddcdbe351 100755 --- a/js/prefs.js +++ b/js/prefs.js @@ -131,100 +131,6 @@ function editUser(id, event) { } -function editFilterTest(query) { - try { - - if (dijit.byId("filterTestDlg")) - dijit.byId("filterTestDlg").destroyRecursive(); - - var test_dlg = new dijit.Dialog({ - id: "filterTestDlg", - title: "Test Filter", - style: "width: 600px", - results: 0, - limit: 100, - max_offset: 10000, - getTestResults: function(query, offset) { - var updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit; - - console.log("getTestResults:" + offset); - - new Ajax.Request("backend.php", { - parameters: updquery, - onComplete: function (transport) { - try { - var result = JSON.parse(transport.responseText); - - if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { - test_dlg.results += result.size(); - - console.log("got results:" + result.size()); - - $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") - .replace("%f", test_dlg.results) - .replace("%d", offset); - - console.log(offset + " " + test_dlg.max_offset); - - for (var i = 0; i < result.size(); i++) { - var tmp = new Element("table"); - tmp.innerHTML = result[i]; - dojo.parser.parse(tmp); - - $("prefFilterTestResultList").innerHTML += tmp.innerHTML; - } - - if (test_dlg.results < 30 && offset < test_dlg.max_offset) { - - // get the next batch - window.setTimeout(function () { - test_dlg.getTestResults(query, offset + test_dlg.limit); - }, 0); - - } else { - // all done - - Element.hide("prefFilterLoadingIndicator"); - - if (test_dlg.results == 0) { - $("prefFilterTestResultList").innerHTML = ""; - $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; - } else { - $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") - .replace("%d", test_dlg.results); - } - - } - - } else if (!result) { - console.log("getTestResults: can't parse results object"); - - Element.hide("prefFilterLoadingIndicator"); - - notify_error("Error while trying to get filter test results."); - - } else { - console.log("getTestResults: dialog closed, bailing out."); - } - } catch (e) { - exception_error("editFilterTest/inner", e); - } - - } }); - }, - href: query}); - - dojo.connect(test_dlg, "onLoad", null, function(e) { - test_dlg.getTestResults(query, 0); - }); - - test_dlg.show(); - - } catch (e) { - exception_error("editFilterTest", e); - } -} - function editFilter(id) { try { -- cgit v1.2.3-54-g00ecf From f48f292d2b9c3274aeb742c343df1d2f536a6a65 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 11 Sep 2015 13:05:08 +0300 Subject: tweak filter preview layout a bit; allow previewing matched articles in a popup --- classes/article.php | 4 ++-- classes/pref/filters.php | 17 +++++++++-------- js/functions.js | 7 +++++++ 3 files changed, 18 insertions(+), 10 deletions(-) (limited to 'js') diff --git a/classes/article.php b/classes/article.php index bcd249873..01f6b5126 100644 --- a/classes/article.php +++ b/classes/article.php @@ -41,12 +41,12 @@ class Article extends Handler_Protected { } else if ($mode == "zoom") { array_push($articles, format_article($id, true, true)); } else if ($mode == "raw") { - if ($_REQUEST['html']) { + if (isset($_REQUEST['html'])) { header("Content-Type: text/html"); print ''; } - $article = format_article($id, false); + $article = format_article($id, false, isset($_REQUEST["zoom"])); print $article['content']; return; } diff --git a/classes/pref/filters.php b/classes/pref/filters.php index 6170f7a08..427ce79a1 100755 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -134,7 +134,7 @@ class Pref_Filters extends Handler_Protected { if (count($rc) > 0) { - $line["content_preview"] = truncate_string(strip_tags($line["content"]), 100, '...'); + $line["content_preview"] = truncate_string(strip_tags($line["content"]), 200, '…'); foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) { $line = $p->hook_query_headlines($line, 100); @@ -142,10 +142,12 @@ class Pref_Filters extends Handler_Protected { $content_preview = $line["content_preview"]; - if ($line["feed_title"]) $feed_title = "(" . $line["feed_title"] . ")"; + $tmp = ""; - $tmp = ""; array_push($rv, $tmp); diff --git a/js/functions.js b/js/functions.js index 2e9e544a9..24e585847 100755 --- a/js/functions.js +++ b/js/functions.js @@ -2053,3 +2053,10 @@ function getSelectionText() { return text.stripTags(); } + +function openArticlePopup(id) { + window.open("backend.php?op=article&method=view&mode=raw&html=1&zoom=1&id=" + id + + "&csrf_token=" + getInitParam("csrf_token"), + "ttrss_article_popup", + "height=900,width=900,resizable=yes,status=no,location=no,menubar=no,directories=no,scrollbars=yes,toolbar=no"); +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf From a71e571b976d768a12a8ba2ed2e943def9afd58d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 7 Oct 2015 18:14:21 +0300 Subject: headlines_callback2: force prevent duplicate row ids --- js/viewfeed.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) mode change 100644 => 100755 js/viewfeed.js (limited to 'js') diff --git a/js/viewfeed.js b/js/viewfeed.js old mode 100644 new mode 100755 index 79f4e9966..3b647e080 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -92,13 +92,29 @@ function headlines_callback2(transport, offset, background, infscroll_req) { reply['headlines']['toolbar'], {parseContent: true}); - dojo.html.set($("headlines-frame"), + /*dojo.html.set($("headlines-frame"), reply['headlines']['content'], {parseContent: true}); $$("#headlines-frame div[id*='RROW']").each(function(row) { loaded_article_ids.push(row.id); - }); + });*/ + + $("headlines-frame").innerHTML = ''; + + var tmp = new Element("div"); + tmp.innerHTML = reply['headlines']['content']; + dojo.parser.parse(tmp); + + while (tmp.hasChildNodes()) { + var row = tmp.removeChild(tmp.firstChild); + + if (loaded_article_ids.indexOf(row.id) == -1 || row.hasClassName("cdmFeedTitle")) { + dijit.byId("headlines-frame").domNode.appendChild(row); + + loaded_article_ids.push(row.id); + } + } var hsp = $("headlines-spacer"); if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"}); @@ -138,8 +154,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { if (loaded_article_ids.indexOf(row.id) == -1 || row.hasClassName("cdmFeedTitle")) { dijit.byId("headlines-frame").domNode.appendChild(row); - //Element.hide(row); - //new Effect.Appear(row, {duration:0.5}); + loaded_article_ids.push(row.id); } } -- cgit v1.2.3-54-g00ecf From d38cd41253aa2281c0f912e53c468bd51d167651 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 27 Oct 2015 15:36:51 +0300 Subject: loadMoreHeadlines: use correct offsets for starred vfeed in adaptive mode --- js/feedlist.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'js') diff --git a/js/feedlist.js b/js/feedlist.js index 617863ef8..d14d3e5ca 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -35,7 +35,8 @@ function loadMoreHeadlines() { offset = unread_in_buffer; } else if (_search_query) { offset = num_all; - } else if (view_mode == "adaptive") { + } else if (view_mode == "adaptive" && !(getActiveFeedId() == -1 && !activeFeedIsCat())) { + // ^ starred feed shows both unread & read articles in adaptive mode offset = num_unread > 0 ? unread_in_buffer : num_all; } else { offset = num_all; -- cgit v1.2.3-54-g00ecf
No recent articles matching this filter have been found.
No recent articles matching this filter have been found.
No recent articles matching this filter have been found.
"; + $id = $line['id']; + $tmp .= ""; foreach ($filter['rules'] as $rule) { $reg_exp = str_replace('/', '\/', $rule["reg_exp"]); @@ -157,10 +159,9 @@ class Pref_Filters extends Handler_Protected { "$1", $content_preview); } - $tmp .= "" . $line["title"] . ""; - $tmp .= "
" . $feed_title . "
"; - $tmp .= "
" . $content_preview . "
"; - $tmp .= " " . mb_substr($line["date_entered"], 0, 16); + $tmp .= "" . $line["title"] . "
"; + $tmp .= $line['feed_title'] . ", " . mb_substr($line["date_entered"], 0, 16); + $tmp .= "
" . $content_preview . "
"; $tmp .= "