diff options
author | Andrew Dolgov <[email protected]> | 2021-02-13 21:41:38 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2021-02-13 21:41:38 +0300 |
commit | 8464c619e413b4aabacb802e1afe49a7c960506a (patch) | |
tree | de14161b0a81fffefd25f57f9c239fb779362e79 | |
parent | 17413078a72e1298c6dc8953c40e8d83ce38c49c (diff) |
inactive feeds: use client dialog
-rwxr-xr-x | classes/pref/feeds.php | 52 | ||||
-rw-r--r-- | js/PrefFeedTree.js | 109 |
2 files changed, 78 insertions, 83 deletions
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index d8495a59c..03e8b1b81 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -1485,56 +1485,14 @@ class Pref_Feeds extends Handler_Protected { ORDER BY last_article"); $sth->execute([$_SESSION['uid']]); - print "<div dojoType='fox.Toolbar'>"; - print "<div dojoType='fox.form.DropDownButton'>". - "<span>" . __('Select')."</span>"; - print "<div dojoType='dijit.Menu' style='display: none'>"; - print "<div onclick=\"Tables.select('inactive-feeds-list', true)\" - dojoType='dijit.MenuItem'>".__('All')."</div>"; - print "<div onclick=\"Tables.select('inactive-feeds-list', false)\" - dojoType='dijit.MenuItem'>".__('None')."</div>"; - print "</div></div>"; - print "</div>"; #toolbar - - print "<div class='panel panel-scrollable'>"; - print "<table width='100%' id='inactive-feeds-list'>"; - - $lnum = 1; - - while ($line = $sth->fetch()) { - - $feed_id = $line["id"]; - - print "<tr data-row-id='$feed_id'>"; - - print "<td width='5%' align='center'><input - onclick='Tables.onRowChecked(this);' dojoType='dijit.form.CheckBox' - type='checkbox'></td>"; - print "<td>"; - - print "<a href='#' ". - "title=\"".__("Click to edit feed")."\" ". - "onclick=\"CommonDialogs.editFeed(".$line["id"].")\">". - htmlspecialchars($line["title"])."</a>"; - - print "</td><td class='text-muted' align='right'>"; - print TimeHelper::make_local_datetime($line['last_article'], false); - print "</td>"; - print "</tr>"; + $rv = []; - ++$lnum; + while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { + $row['last_article'] = TimeHelper::make_local_datetime($row['last_article'], false); + array_push($rv, $row); } - print "</table>"; - print "</div>"; - - print "<footer> - <button style='float : left' class='alt-danger' dojoType='dijit.form.Button' onclick='App.dialogOf(this).removeSelected()'>" - .__('Unsubscribe from selected feeds')."</button> - <button dojoType='dijit.form.Button' class='alt-primary' type='submit'>" - .__('Close this window')."</button> - </footer>"; - + print json_encode($rv); } function feedsWithErrors() { diff --git a/js/PrefFeedTree.js b/js/PrefFeedTree.js index 7684c7f9d..3e3584a9a 100644 --- a/js/PrefFeedTree.js +++ b/js/PrefFeedTree.js @@ -1,5 +1,5 @@ /* eslint-disable prefer-rest-params */ -/* global __, lib, dijit, define, dojo, CommonDialogs, Notify, Tables, xhrPost, fox, App */ +/* global __, lib, dijit, define, dojo, CommonDialogs, Notify, Tables, xhrPost, xhrJson, fox, App */ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dojo/_base/array", "dojo/cookie"], function (declare, domConstruct, checkBoxTree, array, cookie) { @@ -409,50 +409,87 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dojo/_b dialog.show(); }, showInactiveFeeds: function() { - const dialog = new fox.SingleUseDialog({ - id: "inactiveFeedsDlg", - title: __("Feeds without recent updates"), - getSelectedFeeds: function () { - return Tables.getSelected("inactive-feeds-list"); - }, - removeSelected: function () { - const sel_rows = this.getSelectedFeeds(); - - if (sel_rows.length > 0) { - if (confirm(__("Remove selected feeds?"))) { - Notify.progress("Removing selected feeds...", true); + xhrJson("backend.php", {op: 'pref-feeds', method: 'inactivefeeds'}, function (reply) { + + const dialog = new fox.SingleUseDialog({ + id: "inactiveFeedsDlg", + title: __("Feeds without recent updates"), + getSelectedFeeds: function () { + return Tables.getSelected("inactive-feeds-list"); + }, + removeSelected: function () { + const sel_rows = this.getSelectedFeeds(); + + if (sel_rows.length > 0) { + if (confirm(__("Remove selected feeds?"))) { + Notify.progress("Removing selected feeds...", true); + + const query = { + op: "pref-feeds", method: "remove", + ids: sel_rows.toString() + }; - const query = { - op: "pref-feeds", method: "remove", - ids: sel_rows.toString() - }; + xhrPost("backend.php", query, () => { + Notify.close(); - xhrPost("backend.php", query, () => { - Notify.close(); + const tree = dijit.byId("feedTree"); + if (tree) tree.reload(); - const tree = dijit.byId("feedTree"); - if (tree) tree.reload(); + dialog.hide(); + }); + } - dialog.hide(); - }); + } else { + alert(__("No feeds selected.")); } + }, + content: ` + <div dojoType='fox.Toolbar'> + <div dojoType='fox.form.DropDownButton'> + <span>${__('Select')}</span> + <div dojoType='dijit.Menu' style='display: none'> + <div onclick="Tables.select('inactive-feeds-list', true)" + dojoType='dijit.MenuItem'>${__('All')}</div> + <div onclick="Tables.select('inactive-feeds-list', false)" + dojoType='dijit.MenuItem'>${__('None')}</div> + </div> + </div> + </div> + + <div class='panel panel-scrollable'> + <table width='100%' id='inactive-feeds-list'> + ${reply.map((row) => `<tr data-row-id='${row.id}'> + <td width='5%' align='center'> + <input onclick='Tables.onRowChecked(this)' dojoType='dijit.form.CheckBox' type='checkbox'> + </td> + <td> + <a href='#' "title="${__("Click to edit feed")}" onclick="CommonDialogs.editFeed(${row.id})"> + ${App.escapeHtml(row.title)} + </a> + </td> + <td class='text-muted' align='right'> + ${row.last_article} + </td> + </tr> + `).join("")} + </table> + </div> + + <footer> + <button style='float : left' class='alt-danger' dojoType='dijit.form.Button' onclick='App.dialogOf(this).removeSelected()'> + ${__('Unsubscribe from selected feeds')} + </button> + <button dojoType='dijit.form.Button' class='alt-primary' type='submit'> + ${__('Close this window')} + </button> + </footer> + ` + }); - } else { - alert(__("No feeds selected.")); - } - }, - content: __("Loading, please wait...") - }); - - const tmph = dojo.connect(dialog, 'onShow', function () { - dojo.disconnect(tmph); + dialog.show(); - xhrPost("backend.php", {op: "pref-feeds", method: "inactivefeeds"}, (transport) => { - dialog.attr('content', transport.responseText); - }) }); - dialog.show(); } }); }); |