diff options
-rwxr-xr-x | classes/feeds.php | 95 | ||||
-rwxr-xr-x | classes/pref/feeds.php | 2 | ||||
-rwxr-xr-x | classes/rpc.php | 12 | ||||
-rw-r--r-- | js/App.js | 6 | ||||
-rw-r--r-- | js/CommonDialogs.js | 94 |
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)); @@ -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; } |