diff options
author | Andrew Dolgov <[email protected]> | 2021-02-13 22:16:17 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2021-02-13 22:16:17 +0300 |
commit | 103d30ad3f92ed03156fee400801d9a38f946b34 (patch) | |
tree | ef9fa7330f7509a60f0edf67314310b6f0b04e93 | |
parent | c36b2adf8488cdf88b0ef05d211c16815f8c5407 (diff) |
batch subscribe: use client dialog
-rwxr-xr-x | classes/pref/feeds.php | 50 | ||||
-rwxr-xr-x | include/controls.php | 26 | ||||
-rw-r--r-- | js/PrefFeedTree.js | 94 |
3 files changed, 90 insertions, 80 deletions
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index f337d7f4e..2649d58a1 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -1557,52 +1557,10 @@ class Pref_Feeds extends Handler_Protected { } function batchSubscribe() { - print "<form onsubmit='return false'>"; - - print_hidden("op", "pref-feeds"); - print_hidden("method", "batchaddfeeds"); - - print "<header class='horizontal'>".__("One valid feed per line (no detection is done)")."</header>"; - print "<section>"; - - print "<textarea - style='font-size : 12px; width : 98%; height: 200px;' - dojoType='fox.form.ValidationTextArea' required='1' name='feeds'></textarea>"; - - if (get_pref('ENABLE_FEED_CATS')) { - print "<fieldset>"; - print "<label>" . __('Place in category:') . "</label> "; - print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"'); - print "</fieldset>"; - } - - print "</section>"; - - print "<div id='feedDlg_loginContainer' style='display : none'>"; - - print "<header>" . __("Authentication") . "</header>"; - print "<section>"; - - print "<input dojoType='dijit.form.TextBox' name='login' placeHolder=\"".__("Login")."\"> - <input placeHolder=\"".__("Password")."\" dojoType=\"dijit.form.TextBox\" type='password' - autocomplete='new-password' name='pass''></div>"; - - print "</section>"; - print "</div>"; - - print "<fieldset class='narrow'> - <label class='checkbox'><input type='checkbox' name='need_auth' dojoType='dijit.form.CheckBox' - onclick='App.displayIfChecked(this, \"feedDlg_loginContainer\")'> ". - __('Feeds require authentication.')."</label></div>"; - print "</fieldset>"; - - print "<footer> - <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).execute()' type='submit' class='alt-primary'>". - __('Subscribe')."</button> - <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>".__('Cancel')."</button> - </footer>"; - - print "</form>"; + print json_encode([ + "enable_cats" => (int)get_pref('ENABLE_FEED_CATS'), + "cat_select" => format_feed_cat_select("cat", false, 'dojoType="fox.form.Select"') + ]); } function batchAddFeeds() { diff --git a/include/controls.php b/include/controls.php index 8f49e99c5..e6678db9a 100755 --- a/include/controls.php +++ b/include/controls.php @@ -181,11 +181,19 @@ function print_feed_multi_select($id, $default_ids = [], } } -function print_feed_cat_select($id, $default_id, - $attributes, $include_all_cats = true, $root_id = null, $nest_level = 0) { +function print_feed_cat_select($id, $default_id, $attributes, $include_all_cats = true, + $root_id = null, $nest_level = 0) { + + print format_feed_cat_select($id, $default_id, $attributes, $include_all_cats, $root_id, $nest_level); +} + +function format_feed_cat_select($id, $default_id, $attributes, $include_all_cats = true, + $root_id = null, $nest_level = 0) { + + $ret = ""; if (!$root_id) { - print "<select id=\"$id\" name=\"$id\" default=\"$default_id\" $attributes>"; + $ret .= "<select id=\"$id\" name=\"$id\" default=\"$default_id\" $attributes>"; } $pdo = Db::pdo(); @@ -215,18 +223,18 @@ function print_feed_cat_select($id, $default_id, $line["title"] = " " . $line["title"]; if ($line["title"]) - printf("<option $is_selected value='%d'>%s</option>", + $ret .= sprintf("<option $is_selected value='%d'>%s</option>", $line["id"], htmlspecialchars($line["title"])); if ($line["num_children"] > 0) - print_feed_cat_select($id, $default_id, $attributes, + $ret .= format_feed_cat_select($id, $default_id, $attributes, $include_all_cats, $line["id"], $nest_level+1); } if (!$root_id) { if ($include_all_cats) { if ($found > 0) { - print "<option disabled=\"1\">―――――――――――――――</option>"; + $ret .= "<option disabled=\"1\">―――――――――――――――</option>"; } if ($default_id == 0) { @@ -235,10 +243,12 @@ function print_feed_cat_select($id, $default_id, $is_selected = ""; } - print "<option $is_selected value=\"0\">".__('Uncategorized')."</option>"; + $ret .= "<option $is_selected value=\"0\">".__('Uncategorized')."</option>"; } - print "</select>"; + $ret .= "</select>"; } + + return $ret; } function stylesheet_tag($filename, $id = false) { diff --git a/js/PrefFeedTree.js b/js/PrefFeedTree.js index 3e3584a9a..c3dda4187 100644 --- a/js/PrefFeedTree.js +++ b/js/PrefFeedTree.js @@ -378,35 +378,77 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dojo/_b } }, batchSubscribe: function() { - const dialog = new fox.SingleUseDialog({ - id: "batchSubDlg", - title: __("Batch subscribe"), - execute: function () { - if (this.validate()) { - Notify.progress(__("Subscribing to feeds..."), true); - - xhrPost("backend.php", this.attr('value'), () => { - Notify.close(); - - const tree = dijit.byId("feedTree"); - if (tree) tree.reload(); - - dialog.hide(); - }); - } - }, - content: __("Loading, please wait...") - }); + xhrJson("backend.php", {op: 'pref-feeds', method: 'batchSubscribe'}, (reply) => { + const dialog = new fox.SingleUseDialog({ + id: "batchSubDlg", + title: __("Batch subscribe"), + execute: function () { + if (this.validate()) { + Notify.progress(__("Subscribing to feeds..."), true); - const tmph = dojo.connect(dialog, 'onShow', function () { - dojo.disconnect(tmph); + xhrPost("backend.php", this.attr('value'), () => { + Notify.close(); - xhrPost("backend.php", {op: 'pref-feeds', method: 'batchSubscribe'}, (transport) => { - dialog.attr('content', transport.responseText); - }) - }); + const tree = dijit.byId("feedTree"); + if (tree) tree.reload(); + + dialog.hide(); + }); + } + }, + content: ` + <form onsubmit='return false'> + ${App.FormFields.hidden("op", "pref-feeds")} + ${App.FormFields.hidden("method", "batchaddfeeds")} + + <header class='horizontal'> + ${__("One valid feed per line (no detection is done)")} + </header> + + <section> + <textarea style='font-size : 12px; width : 98%; height: 200px;' + dojoType='fox.form.ValidationTextArea' required='1' name='feeds'></textarea> + + ${reply.enable_cats ? + `<fieldset> + <label>${__('Place in category:')}</label> + ${reply.cat_select} + </fieldset> + ` : '' + } + </section> + + <div id='feedDlg_loginContainer' style='display : none'> + <header>${__("Authentication")}</header> + <section> + <input dojoType='dijit.form.TextBox' name='login' placeHolder="${__("Login")}"> + <input placeHolder="${__("Password")}" dojoType="dijit.form.TextBox" type='password' + autocomplete='new-password' name='pass'></div> + </section> + </div> + + <fieldset class='narrow'> + <label class='checkbox'><input type='checkbox' name='need_auth' dojoType='dijit.form.CheckBox' + onclick='App.displayIfChecked(this, "feedDlg_loginContainer")'> + ${__('Feeds require authentication.')} + </label> + </fieldset> + + <footer> + <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).execute()' type='submit' class='alt-primary'> + ${__('Subscribe')} + </button> + <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'> + ${__('Cancel')} + </button> + </footer> + </form> + ` + }); - dialog.show(); + dialog.show(); + + }); }, showInactiveFeeds: function() { xhrJson("backend.php", {op: 'pref-feeds', method: 'inactivefeeds'}, function (reply) { |