diff --git a/plugins/share/init.php b/plugins/share/init.php index 846e1f39c..a569393fe 100644 --- a/plugins/share/init.php +++ b/plugins/share/init.php @@ -17,18 +17,17 @@ class Share extends Plugin { } function get_js() { - return file_get_contents(dirname(__FILE__) . "/share.js"); + return file_get_contents(__DIR__ . "/share.js"); } function get_css() { - return file_get_contents(dirname(__FILE__) . "/share.css"); + return file_get_contents(__DIR__ . "/share.css"); } function get_prefs_js() { - return file_get_contents(dirname(__FILE__) . "/share_prefs.js"); + return file_get_contents(__DIR__ . "/share_prefs.js"); } - function unshare() { $id = $_REQUEST['id']; @@ -36,7 +35,7 @@ class Share extends Plugin { AND owner_uid = ?"); $sth->execute([$id, $_SESSION['uid']]); - print "OK"; + print __("Article unshared"); } function hook_prefs_tab_section($id) { @@ -52,16 +51,14 @@ class Share extends Plugin { } } - // Silent function clearArticleKeys() { $sth = $this->pdo->prepare("UPDATE ttrss_user_entries SET uuid = '' WHERE owner_uid = ?"); $sth->execute([$_SESSION['uid']]); - return; + print __("Shared URLs cleared."); } - function newkey() { $id = $_REQUEST['id']; $uuid = uniqid_short(); @@ -70,26 +67,25 @@ class Share extends Plugin { AND owner_uid = ?"); $sth->execute([$uuid, $id, $_SESSION['uid']]); - print json_encode(array("link" => $uuid)); + print json_encode(["link" => $uuid]); } function hook_article_button($line) { - $img_class = $line['uuid'] ? "shared" : ""; + $icon_class = !empty($line['uuid']) ? "is-shared" : ""; - return "link"; } - function shareArticle() { - $param = $_REQUEST['param']; + function shareDialog() { + $id = (int)clean($_REQUEST['id'] ?? 0); $sth = $this->pdo->prepare("SELECT uuid FROM ttrss_user_entries WHERE int_id = ? AND owner_uid = ?"); - $sth->execute([$param, $_SESSION['uid']]); + $sth->execute([$id, $_SESSION['uid']]); if ($row = $sth->fetch()) { - $uuid = $row['uuid']; if (!$uuid) { @@ -97,27 +93,26 @@ class Share extends Plugin { $sth = $this->pdo->prepare("UPDATE ttrss_user_entries SET uuid = ? WHERE int_id = ? AND owner_uid = ?"); - $sth->execute([$uuid, $param, $_SESSION['uid']]); + $sth->execute([$uuid, $id, $_SESSION['uid']]); } - $url_path = htmlspecialchars(get_self_url_prefix() . "/public.php?op=share&key=$uuid"); + $url_path = get_self_url_prefix() . "/public.php?op=share&key=$uuid"; ?>
-
- +
diff --git a/plugins/share/share.css b/plugins/share/share.css index 00bad68dd..ac9247a54 100644 --- a/plugins/share/share.css +++ b/plugins/share/share.css @@ -1,3 +1,3 @@ -i.icon-share.shared { +i.material-icons.icon-share.is-shared { color : #0a0; } \ No newline at end of file diff --git a/plugins/share/share.js b/plugins/share/share.js index 3fc42d654..09fb145c9 100644 --- a/plugins/share/share.js +++ b/plugins/share/share.js @@ -1,9 +1,7 @@ -/* global Plugins, xhrJson, Notify, fox, xhrPost, __ */ +/* global dojo, Effect, Plugins, xhrJson, Notify, fox, xhrPost, __ */ Plugins.Share = { shareArticle: function(id) { - const query = "backend.php?op=pluginhandler&plugin=share&method=shareArticle¶m=" + encodeURIComponent(id); - const dialog = new fox.SingleUseDialog({ id: "shareArticleDlg", title: __("Share article by URL"), @@ -17,20 +15,23 @@ Plugins.Share = { xhrJson("backend.php", query, (reply) => { if (reply) { const new_link = reply.link; - const e = $('gen_article_url'); + const target = dialog.domNode.querySelector(".target-url"); - if (new_link) { + if (new_link && target) { - e.innerHTML = e.innerHTML.replace(/\&key=.*$/, + target.innerHTML = target.innerHTML.replace(/&key=.*$/, "&key=" + new_link); - e.href = e.href.replace(/\&key=.*$/, + target.href = target.href.replace(/&key=.*$/, "&key=" + new_link); - new Effect.Highlight(e); + // eslint-disable-next-line no-new + new Effect.Highlight(target); - const img = $("SHARE-IMG-" + id); - img.addClassName("shared"); + const icon = document.querySelector(".share-icon-" + id); + + if (icon) + icon.addClassName("is-shared"); Notify.close(); @@ -44,32 +45,35 @@ Plugins.Share = { }, unshare: function () { if (confirm(__("Remove sharing for this article?"))) { + xhrPost("backend.php", {op: "pluginhandler", plugin: "share", method: "unshare", id: id}, (transport) => { + Notify.info(transport.responseText); - const query = {op: "pluginhandler", plugin: "share", method: "unshare", id: id}; + const icon = document.querySelector(".share-icon-" + id); - xhrPost("backend.php", query, () => { - try { - const img = $("SHARE-IMG-" + id); + if (icon) + icon.removeClassName("is-shared"); - if (img) { - img.removeClassName("shared"); - img.up("div[id*=RROW]").removeClassName("shared"); - } - - dialog.hide(); - } catch (e) { - console.error(e); - } + dialog.hide(); }); } }, - href: query + content: __("Loading, please wait...") + }); + + const tmph = dojo.connect(dialog, 'onShow', function () { + dojo.disconnect(tmph); + + xhrPost("backend.php", {op: "pluginhandler", plugin: "share", method: "shareDialog", id: id}, (transport) => { + dialog.attr('content', transport.responseText) + + const icon = document.querySelector(".share-icon-" + id); + + if (icon) + icon.addClassName("is-shared"); + }); }); dialog.show(); - - const img = $("SHARE-IMG-" + id); - img.addClassName("shared"); } } diff --git a/plugins/share/share_prefs.js b/plugins/share/share_prefs.js index 071a6667c..29c9aeaf8 100644 --- a/plugins/share/share_prefs.js +++ b/plugins/share/share_prefs.js @@ -1,12 +1,12 @@ +/* global Plugins, Notify, xhrPost */ + Plugins.Share = { clearKeys: function() { if (confirm(__("This will invalidate all previously shared article URLs. Continue?"))) { Notify.progress("Clearing URLs..."); - const query = {op: "pluginhandler", plugin: "share", method: "clearArticleKeys"}; - - xhrPost("backend.php", query, () => { - Notify.info("Shared URLs cleared."); + xhrPost("backend.php", {op: "pluginhandler", plugin: "share", method: "clearArticleKeys"}, (transport) => { + Notify.info(transport.responseText); }); }