summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-15 15:21:25 +0300
committerAndrew Dolgov <[email protected]>2021-02-15 15:21:41 +0300
commit6b006a18e7efef814fa7a59102c85299acb0a0a4 (patch)
tree4eab0bed23cf8dce8487e102c74682b1e71993d0
parentecb36b6354cf693f8120884fdb9ef4068cb1d03f (diff)
subscribe to feed: use client dialog
-rwxr-xr-xclasses/feeds.php95
-rwxr-xr-xclasses/pref/feeds.php2
-rwxr-xr-xclasses/rpc.php12
-rw-r--r--js/App.js6
-rw-r--r--js/CommonDialogs.js94
5 files changed, 106 insertions, 103 deletions
diff --git a/classes/feeds.php b/classes/feeds.php
index d49fe7698..4cc76bd62 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -581,85 +581,10 @@ class Feeds extends Handler_Protected {
return $reply;
}
- function quickAddFeed() {
- print "<form onsubmit='return false'>";
-
- print_hidden("op", "rpc");
- print_hidden("method", "addfeed");
-
- print "<div id='fadd_error_message' style='display : none' class='alert alert-danger'></div>";
-
- print "<div id='fadd_multiple_notify' style='display : none'>";
- print_notice("Provided URL is a HTML page referencing multiple feeds, please select required feed from the dropdown menu below.");
- print "<p></div>";
-
- print "<section>";
-
- print "<fieldset>";
- print "<div style='float : right'><img style='display : none' id='feed_add_spinner' src='images/indicator_white.gif'></div>";
- print "<input style='font-size : 16px; width : 500px;'
- placeHolder=\"".__("Feed or site URL")."\"
- dojoType='dijit.form.ValidationTextBox' required='1' name='feed' id='feedDlg_feedUrl'>";
-
- print "</fieldset>";
-
- print "<fieldset>";
-
- if (get_pref('ENABLE_FEED_CATS')) {
- print "<label class='inline'>" . __('Place in category:') . "</label> ";
- print_feed_cat_select("cat", false, 'dojoType="fox.form.Select"');
- }
-
- print "</fieldset>";
-
- print "</section>";
-
- print '<div id="feedDlg_feedsContainer" style="display : none">
- <header>' . __('Available feeds') . '</header>
- <section>
- <fieldset>
- <select id="feedDlg_feedContainerSelect"
- dojoType="fox.form.Select" size="3">
- <script type="dojo/method" event="onChange" args="value">
- dijit.byId("feedDlg_feedUrl").attr("value", value);
- </script>
- </select>
- </fieldset>
- </section>
- </div>';
-
- print "<div id='feedDlg_loginContainer' style='display : none'>
- <section>
- <fieldset>
- <input dojoType=\"dijit.form.TextBox\" name='login'\"
- placeHolder=\"".__("Login")."\"
- autocomplete=\"new-password\"
- style=\"width : 10em;\">
- <input
- placeHolder=\"".__("Password")."\"
- dojoType=\"dijit.form.TextBox\" type='password'
- autocomplete=\"new-password\"
- style=\"width : 10em;\" name='pass'\">
- </fieldset>
- </section>
- </div>";
-
- print "<section>";
- print "<label>
- <label class='checkbox'><input type='checkbox' name='need_auth' dojoType='dijit.form.CheckBox' id='feedDlg_loginCheck'
- onclick='App.displayIfChecked(this, \"feedDlg_loginContainer\")'>
- ".__('This feed requires authentication.')."</label>";
- print "</section>";
-
- print "<footer>";
- print "<button dojoType='dijit.form.Button' class='alt-primary' type='submit'
- onclick='App.dialogOf(this).execute()'>".__('Subscribe')."</button>";
-
- print "<button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>".
- __('Cancel')."</button>";
- print "</footer>";
-
- print "</form>";
+ function subscribeToFeed() {
+ print json_encode([
+ "cat_select" => format_feed_cat_select("cat", false, 'dojoType="fox.form.Select"')
+ ]);
}
function search() {
@@ -1077,6 +1002,18 @@ class Feeds extends Handler_Protected {
}
}
+ function add() {
+ $feed = clean($_REQUEST['feed']);
+ $cat = clean($_REQUEST['cat']);
+ $need_auth = isset($_REQUEST['need_auth']);
+ $login = $need_auth ? clean($_REQUEST['login']) : '';
+ $pass = $need_auth ? clean($_REQUEST['pass']) : '';
+
+ $rc = Feeds::subscribe_to_feed($feed, $cat, $login, $pass);
+
+ print json_encode(array("result" => $rc));
+ }
+
/**
* @return array (code => Status code, message => error message if available)
*
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index e225949f2..af3877159 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -1241,7 +1241,7 @@ class Pref_Feeds extends Handler_Protected {
<div dojoType="fox.form.DropDownButton">
<span><?= __('Feeds') ?></span>
<div dojoType="dijit.Menu" style="display: none">
- <div onclick="CommonDialogs.quickAddFeed()"
+ <div onclick="CommonDialogs.subscribeToFeed()"
dojoType="dijit.MenuItem"><?= __('Subscribe to feed') ?></div>
<div onclick="dijit.byId('feedTree').editSelectedFeed()"
dojoType="dijit.MenuItem"><?= __('Edit selected feeds') ?></div>
diff --git a/classes/rpc.php b/classes/rpc.php
index e0753a08e..2bbaf4135 100755
--- a/classes/rpc.php
+++ b/classes/rpc.php
@@ -80,18 +80,6 @@ class RPC extends Handler_Protected {
}
}
- function addfeed() {
- $feed = clean($_REQUEST['feed']);
- $cat = clean($_REQUEST['cat']);
- $need_auth = isset($_REQUEST['need_auth']);
- $login = $need_auth ? clean($_REQUEST['login']) : '';
- $pass = $need_auth ? clean($_REQUEST['pass']) : '';
-
- $rc = Feeds::subscribe_to_feed($feed, $cat, $login, $pass);
-
- print json_encode(array("result" => $rc));
- }
-
function togglepref() {
$key = clean($_REQUEST["key"]);
set_pref($key, !get_pref($key));
diff --git a/js/App.js b/js/App.js
index 3a31438c5..5c2d7726c 100644
--- a/js/App.js
+++ b/js/App.js
@@ -838,7 +838,7 @@ const App = {
if (this.is_prefs) {
this.hotkey_actions["feed_subscribe"] = () => {
- CommonDialogs.quickAddFeed();
+ CommonDialogs.subscribeToFeed();
};
this.hotkey_actions["create_label"] = () => {
@@ -994,7 +994,7 @@ const App = {
Feeds.toggleUnread();
};
this.hotkey_actions["feed_subscribe"] = () => {
- CommonDialogs.quickAddFeed();
+ CommonDialogs.subscribeToFeed();
};
this.hotkey_actions["feed_debug_update"] = () => {
if (!Feeds.activeIsCat() && parseInt(Feeds.getActive()) > 0) {
@@ -1139,7 +1139,7 @@ const App = {
Feeds.search();
break;
case "qmcAddFeed":
- CommonDialogs.quickAddFeed();
+ CommonDialogs.subscribeToFeed();
break;
case "qmcDigest":
window.location.href = "backend.php?op=digest";
diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js
index 60c3e2a84..492467b7f 100644
--- a/js/CommonDialogs.js
+++ b/js/CommonDialogs.js
@@ -77,15 +77,93 @@ const CommonDialogs = {
return false;
},
- quickAddFeed: function() {
- xhrPost("backend.php",
- {op: "feeds", method: "quickAddFeed"},
- (transport) => {
-
+ subscribeToFeed: function() {
+ xhrJson("backend.php",
+ {op: "feeds", method: "subscribeToFeed"},
+ (reply) => {
const dialog = new fox.SingleUseDialog({
- id: "feedAddDlg",
title: __("Subscribe to Feed"),
- content: transport.responseText,
+ content: `
+ <form onsubmit='return false'>
+
+ ${App.FormFields.hidden("op", "feeds")}
+ ${App.FormFields.hidden("method", "add")}
+
+ <div id='fadd_error_message' style='display : none' class='alert alert-danger'></div>
+
+ <div id='fadd_multiple_notify' style='display : none'>
+ <div class='alert alert-info'>
+ ${__("Provided URL is a HTML page referencing multiple feeds, please select required feed from the dropdown menu below.")}
+ </div>
+ </div>
+
+ <section>
+ <fieldset>
+ <div style='float : right'><img style='display : none' id='feed_add_spinner' src='images/indicator_white.gif'></div>
+ <input style='font-size : 16px; width : 500px;'
+ placeHolder="${__("Feed or site URL")}"
+ dojoType='dijit.form.ValidationTextBox'
+ required='1' name='feed' id='feedDlg_feedUrl'>
+ </fieldset>
+
+ ${App.getInitParam('enable_feed_cats') ?
+ `
+ <fieldset>
+ <label class='inline'>${__('Place in category:')}</label>
+ ${reply.cat_select}
+ </fieldset>
+ ` : ''}
+ </section>
+
+ <div id="feedDlg_feedsContainer" style="display : none">
+ <header>${__('Available feeds')}</header>
+ <section>
+ <fieldset>
+ <select id="feedDlg_feedContainerSelect"
+ dojoType="fox.form.Select" size="3">
+ <script type="dojo/method" event="onChange" args="value">
+ dijit.byId("feedDlg_feedUrl").attr("value", value);
+ </script>
+ </select>
+ </fieldset>
+ </section>
+ </div>
+
+ <div id='feedDlg_loginContainer' style='display : none'>
+ <section>
+ <fieldset>
+ <input dojoType="dijit.form.TextBox" name='login'"
+ placeHolder="${__("Login")}"
+ autocomplete="new-password"
+ style="width : 10em;">
+ <input
+ placeHolder="${__("Password")}"
+ dojoType="dijit.form.TextBox" type='password'
+ autocomplete="new-password"
+ style="width : 10em;" name='pass'">
+ </fieldset>
+ </section>
+ </div>
+
+ <section>
+ <label class='checkbox'>
+ <input type='checkbox' name='need_auth' dojoType='dijit.form.CheckBox' id='feedDlg_loginCheck'
+ onclick='App.displayIfChecked(this, "feedDlg_loginContainer")'>
+ ${__('This feed requires authentication.')}
+ </label>
+ </section>
+
+ <footer>
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit'
+ onclick='App.dialogOf(this).execute()'>
+ ${__('Subscribe')}
+ </button>
+ <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>
+ ${__('Cancel')}
+ </button>
+ </footer>
+ </form>
+ `,
show_error: function (msg) {
const elem = $("fadd_error_message");
@@ -114,7 +192,7 @@ const CommonDialogs = {
} catch (e) {
Element.hide("feed_add_spinner");
alert(__("Failed to parse output. This can indicate server timeout and/or network issues. Backend output was logged to browser console."));
- console.log('quickAddFeed, backend returned:' + transport.responseText);
+ console.log('subscribeToFeed, backend returned:' + transport.responseText);
return;
}