af_readability: add article button to embed content of a specific article

This commit is contained in:
Andrew Dolgov 2020-02-27 07:57:22 +03:00
parent 671a2a0275
commit 71ff485fbf
3 changed files with 39 additions and 37 deletions

View File

@ -194,7 +194,7 @@ define(["dojo/_base/declare"], function (declare) {
const comments = this.formatComments(hl); const comments = this.formatComments(hl);
const originally_from = this.formatOriginallyFrom(hl); const originally_from = this.formatOriginallyFrom(hl);
const article = `<div class="post post-${hl.id}"> const article = `<div class="post post-${hl.id}" data-article-id="${hl.id}">
<div class="header"> <div class="header">
<div class="row"> <div class="row">
<div class="title"><a target="_blank" rel="noopener noreferrer" <div class="title"><a target="_blank" rel="noopener noreferrer"

View File

@ -38,6 +38,7 @@ class Af_Readability extends Plugin {
$host->add_hook($host::HOOK_PREFS_TAB, $this); $host->add_hook($host::HOOK_PREFS_TAB, $this);
$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this); $host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this); $host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
$host->add_hook($host::HOOK_ARTICLE_BUTTON, $this);
// Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded // Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded
// so we can't check for our storage-set options here // so we can't check for our storage-set options here
@ -46,6 +47,15 @@ class Af_Readability extends Plugin {
$host->add_filter_action($this, "action_inline", __("Inline content")); $host->add_filter_action($this, "action_inline", __("Inline content"));
} }
function get_js() {
return file_get_contents(__DIR__ . "/init.js");
}
function hook_article_button($line) {
return "<i class='material-icons' onclick=\"Plugins.Af_Readability.embed(".$line["id"].")\"
style='cursor : pointer' title='".__('Get full article text')."'>description</i>";
}
function hook_prefs_tab($args) { function hook_prefs_tab($args) {
if ($args != "prefFeeds") return; if ($args != "prefFeeds") return;
@ -284,4 +294,19 @@ class Af_Readability extends Plugin {
return $tmp; return $tmp;
} }
function embed() {
$article_id = (int) $_REQUEST["param"];
$sth = $this->pdo->prepare("SELECT link FROM ttrss_entries WHERE id = ?");
$sth->execute([$article_id]);
$ret = [];
if ($row = $sth->fetch()) {
$ret["content"] = $this->extract_content($row["link"]);
}
print json_encode($ret);
}
} }

View File

@ -1,40 +1,17 @@
Plugins.Note = { Plugins.Af_Readability = {
edit: function(id) { embed: function(id) {
const query = "backend.php?op=pluginhandler&plugin=note&method=edit&param=" + encodeURIComponent(id); Notify.progress("Loading, please wait...");
if (dijit.byId("editNoteDlg")) xhrJson("backend.php",{ op: "pluginhandler", plugin: "af_readability", method: "embed", param: id }, (reply) => {
dijit.byId("editNoteDlg").destroyRecursive(); const content = $$(App.isCombinedMode() ? ".cdm[data-article-id=" + id + "] .content-inner" :
".post[data-article-id=" + id + "] .content")[0];
const dialog = new dijit.Dialog({ if (content && reply.content) {
id: "editNoteDlg", content.innerHTML = reply.content;
title: __("Edit article note"),
style: "width: 600px",
execute: function () {
if (this.validate()) {
Notify.progress("Saving article note...", true);
xhrJson("backend.php", this.attr('value'), (reply) => {
Notify.close(); Notify.close();
dialog.hide(); } else {
Notify.error("Unable to fetch content for this article");
if (reply) {
const elem = $("POSTNOTE-" + id);
if (elem) {
elem.innerHTML = reply.note;
if (reply.raw_length != 0)
Element.show(elem);
else
Element.hide(elem);
}
} }
}); });
} }
},
href: query,
});
dialog.show();
}
}; };