summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-13 22:16:17 +0300
committerAndrew Dolgov <[email protected]>2021-02-13 22:16:17 +0300
commit103d30ad3f92ed03156fee400801d9a38f946b34 (patch)
treeef9fa7330f7509a60f0edf67314310b6f0b04e93
parentc36b2adf8488cdf88b0ef05d211c16815f8c5407 (diff)
batch subscribe: use client dialog
-rwxr-xr-xclasses/pref/feeds.php50
-rwxr-xr-xinclude/controls.php26
-rw-r--r--js/PrefFeedTree.js94
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) {