diff options
-rwxr-xr-x | classes/pref/filters.php | 291 | ||||
-rwxr-xr-x | include/controls.php | 14 | ||||
-rw-r--r-- | js/App.js | 6 | ||||
-rw-r--r-- | js/CommonFilters.js | 264 | ||||
-rw-r--r-- | js/PrefFeedTree.js | 15 | ||||
-rw-r--r-- | js/PrefFilterTree.js | 79 | ||||
-rw-r--r-- | js/PrefLabelTree.js | 6 |
7 files changed, 245 insertions, 430 deletions
diff --git a/classes/pref/filters.php b/classes/pref/filters.php index eb7c87746..62f6fc1a0 100755 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -2,7 +2,7 @@ class Pref_Filters extends Handler_Protected { function csrf_ignore($method) { - $csrf_ignored = array("index", "getfiltertree", "edit", "newfilter", "newrule", + $csrf_ignored = array("index", "getfiltertree", "newrule", "newaction", "savefilterorder"); return array_search($method, $csrf_ignored) !== false; @@ -313,24 +313,30 @@ class Pref_Filters extends Handler_Protected { function edit() { - $filter_id = clean($_REQUEST["id"]); + $filter_id = (int) clean($_REQUEST["id"] ?? 0); $sth = $this->pdo->prepare("SELECT * FROM ttrss_filters2 WHERE id = ? AND owner_uid = ?"); $sth->execute([$filter_id, $_SESSION['uid']]); - if ($row = $sth->fetch()) { + if (empty($filter_id) || $row = $sth->fetch()) { - $enabled = $row["enabled"]; - $match_any_rule = $row["match_any_rule"]; - $inverse = $row["inverse"]; - $title = htmlspecialchars($row["title"]); + $enabled = $row["enabled"] ?? true; + $match_any_rule = $row["match_any_rule"] ?? false; + $inverse = $row["inverse"] ?? false; + $title = htmlspecialchars($row["title"] ?? ""); - print "<form id='filter_edit_form' onsubmit='return false'>"; + print "<form onsubmit='return false'>"; print_hidden("op", "pref-filters"); - print_hidden("id", "$filter_id"); - print_hidden("method", "editSave"); + + if ($filter_id) { + print_hidden("id", "$filter_id"); + print_hidden("method", "editSave"); + } else { + print_hidden("method", "add"); + } + print_hidden("csrf_token", $_SESSION['csrf_token']); print "<header>".__("Caption")."</header> @@ -358,35 +364,37 @@ class Pref_Filters extends Handler_Protected { print "<ul id='filterDlg_Matches'>"; - $rules_sth = $this->pdo->prepare("SELECT * FROM ttrss_filters2_rules - WHERE filter_id = ? ORDER BY reg_exp, id"); - $rules_sth->execute([$filter_id]); + if ($filter_id) { + $rules_sth = $this->pdo->prepare("SELECT * FROM ttrss_filters2_rules + WHERE filter_id = ? ORDER BY reg_exp, id"); + $rules_sth->execute([$filter_id]); - while ($line = $rules_sth->fetch()) { - if ($line["match_on"]) { - $line["feed_id"] = json_decode($line["match_on"], true); - } else { - if ($line["cat_filter"]) { - $feed_id = "CAT:" . (int)$line["cat_id"]; + while ($line = $rules_sth->fetch()) { + if ($line["match_on"]) { + $line["feed_id"] = json_decode($line["match_on"], true); } else { - $feed_id = (int)$line["feed_id"]; - } + if ($line["cat_filter"]) { + $feed_id = "CAT:" . (int)$line["cat_id"]; + } else { + $feed_id = (int)$line["feed_id"]; + } - $line["feed_id"] = ["" . $feed_id]; // set item type to string for in_array() - } + $line["feed_id"] = ["" . $feed_id]; // set item type to string for in_array() + } - unset($line["cat_filter"]); - unset($line["cat_id"]); - unset($line["filter_id"]); - unset($line["id"]); - if (!$line["inverse"]) unset($line["inverse"]); - unset($line["match_on"]); + unset($line["cat_filter"]); + unset($line["cat_id"]); + unset($line["filter_id"]); + unset($line["id"]); + if (!$line["inverse"]) unset($line["inverse"]); + unset($line["match_on"]); - $data = htmlspecialchars((string)json_encode($line)); + $data = htmlspecialchars((string)json_encode($line)); - print "<li><input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'>". - "<span onclick='console.log(this);App.dialogOf(this).editRule(this)'>".$this->getRuleName($line)."</span>". - "<input type='hidden' name='rule[]' value=\"$data\"/></li>"; + print "<li><input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'> + <span onclick='App.dialogOf(this).editRule(this)'>".$this->getRuleName($line)."</span>". + format_hidden("rule[]", $data)."</li>"; + } } print "</ul> @@ -412,79 +420,66 @@ class Pref_Filters extends Handler_Protected { print "<ul id='filterDlg_Actions'>"; - $actions_sth = $this->pdo->prepare("SELECT * FROM ttrss_filters2_actions - WHERE filter_id = ? ORDER BY id"); - $actions_sth->execute([$filter_id]); + if ($filter_id) { + $actions_sth = $this->pdo->prepare("SELECT * FROM ttrss_filters2_actions + WHERE filter_id = ? ORDER BY id"); + $actions_sth->execute([$filter_id]); - while ($line = $actions_sth->fetch()) { - $line["action_param_label"] = $line["action_param"]; + while ($line = $actions_sth->fetch()) { + $line["action_param_label"] = $line["action_param"]; - unset($line["filter_id"]); - unset($line["id"]); + unset($line["filter_id"]); + unset($line["id"]); - $data = htmlspecialchars((string)json_encode($line)); + $data = htmlspecialchars((string)json_encode($line)); - print "<li><input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'>". - "<span onclick='App.dialogOf(this).editAction(this)'>".$this->getActionName($line)."</span>". - "<input type='hidden' name='action[]' value=\"$data\"/></li>"; + print "<li><input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'> + <span onclick='App.dialogOf(this).editAction(this)'>".$this->getActionName($line)."</span>". + format_hidden("action[]", $data)."</li>"; + } } print "</ul>"; print "</section>"; - print "<header>".__("Options")."</header>"; - print "<section>"; - - if ($enabled) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - print "<fieldset class='narrow'>"; - print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"enabled\" id=\"enabled\" $checked> - ".__('Enabled')."</label>"; - - if ($match_any_rule) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - print "</fieldset><fieldset class='narrow'>"; - - print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"match_any_rule\" id=\"match_any_rule\" $checked> - ".__('Match any rule')."</label>"; - - print "</fieldset><fieldset class='narrow'>"; - - if ($inverse) { - $checked = "checked=\"1\""; + print "<header>".__("Options")."</header> + <section>"; + + print "<fieldset class='narrow'> + <label class='checkbox'>".format_checkbox('enabled', $enabled)." ".__('Enabled')."</label></fieldset>"; + + print "<fieldset class='narrow'> + <label class='checkbox'>".format_checkbox('match_any_rule', $match_any_rule)." ".__('Match any rule')."</label> + </fieldset>"; + + print "<fieldset class='narrow'><label class='checkbox'>".format_checkbox('inverse', $inverse)." ".__('Inverse matching')."</label> + </fieldset>"; + + print "</section> + <footer>"; + + if ($filter_id) { + print "<div style='float : left'> + <button dojoType='dijit.form.Button' class='alt-danger' onclick='App.dialogOf(this).removeFilter()'>". + __('Remove')."</button> + </div> + <button dojoType='dijit.form.Button' class='alt-info' onclick='App.dialogOf(this).test()'>". + __('Test')."</button> + <button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick='App.dialogOf(this).execute()'>". + __('Save')."</button> + <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>". + __('Cancel')."</button>"; } else { - $checked = ""; + print "<button dojoType='dijit.form.Button' class='alt-info' onclick='App.dialogOf(this).test()'>". + __('Test')."</button> + <button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick='App.dialogOf(this).execute()'>". + __('Create')."</button> + <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>". + __('Cancel')."</button>"; } - print "<label class='checkbox'><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"inverse\" id=\"inverse\" $checked> - ".__('Inverse matching')."</label>"; - - print "</fieldset>"; - - print "</section>"; - - print "<footer> - <div style='float : left'> - <button dojoType='dijit.form.Button' class='alt-danger' onclick='App.dialogOf(this).removeFilter()'>". - __('Remove')."</button> - </div> - <button dojoType='dijit.form.Button' class='alt-info' onclick='App.dialogOf(this).test()'>". - __('Test')."</button> - <button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick='App.dialogOf(this).execute()'>". - __('Save')."</button> - <button dojoType='dijit.form.Button' onclick='App.dialogOf(this).hide()'>". - __('Cancel')."</button> - </footer> - </form>"; + print "</footer></form>"; } } @@ -736,7 +731,7 @@ class Pref_Filters extends Handler_Protected { dojoType=\"dijit.MenuItem\">".__('None')."</div>"; print "</div></div>"; - print "<button dojoType=\"dijit.form.Button\" onclick=\"return Filters.quickAddFilter()\">". + print "<button dojoType=\"dijit.form.Button\" onclick=\"return Filters.edit()\">". __('Create filter')."</button> "; print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('filterTree').joinSelectedFilters()\">". @@ -779,7 +774,7 @@ class Pref_Filters extends Handler_Protected { var bare_id = id.substr(id.indexOf(':')+1); if (id.match('FILTER:')) { - dijit.byId('filterTree').editFilter(bare_id); + Filters.edit(bare_id); } </script> @@ -793,112 +788,6 @@ class Pref_Filters extends Handler_Protected { } - function newfilter() { - - print "<form name='filter_new_form' id='filter_new_form' onsubmit='return false'>"; - - print_hidden("op", "pref-filters"); - print_hidden("method", "add"); - print_hidden("csrf_token", $_SESSION['csrf_token']); - - print "<header>".__("Caption")."</header>"; - - print "<section>"; - print "<input required='true' dojoType='dijit.form.ValidationTextBox' style='width : 20em;' name='title' value=''>"; - print "</section>"; - - print "<header class='horizontal'>".__("Match")."</header >"; - print "<section>"; - - 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=\"dijit.byId('filterEditDlg').selectRules(true)\" - dojoType='dijit.MenuItem'>".__('All')."</div>"; - print "<div onclick=\"dijit.byId('filterEditDlg').selectRules(false)\" - dojoType='dijit.MenuItem'>".__('None')."</div>"; - print "</div></div>"; - - print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addRule()\">". - __('Add')."</button> "; - - print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteRule()\">". - __('Delete')."</button> "; - - print "</div>"; - - print "<ul id='filterDlg_Matches'>"; -# print "<li>No rules</li>"; - print "</ul>"; - - print "</section>"; - - print "<header class='horizontal'>".__("Apply actions")."</header>"; - - print "<section>"; - - 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=\"dijit.byId('filterEditDlg').selectActions(true)\" - dojoType='dijit.MenuItem'>".__('All')."</div>"; - print "<div onclick=\"dijit.byId('filterEditDlg').selectActions(false)\" - dojoType='dijit.MenuItem'>".__('None')."</div>"; - print "</div></div>"; - - print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').addAction()\">". - __('Add')."</button> "; - - print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').deleteAction()\">". - __('Delete')."</button> "; - - print "</div>"; - - print "<ul id='filterDlg_Actions'>"; -# print "<li>No actions</li>"; - print "</ul>"; - - print "</section>"; - - print "<header>".__("Options")."</header>"; - - print "<section>"; - print "<fieldset class='narrow'>"; - - print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='enabled' id='enabled' checked='1'> - ".__('Enabled')."</label>"; - - print "</fieldset><fieldset class='narrow'>"; - - print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='match_any_rule' id='match_any_rule'> - ".__('Match any rule')."</label>"; - - print "</fieldset><fieldset class='narrow'>"; - - print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' name='inverse' id='inverse'> - ".__('Inverse matching')."</label>"; - - print "</fieldset>"; - - print "</section>"; - - print "<footer>"; - - print "<button dojoType='dijit.form.Button' class='alt-info' onclick=\"return dijit.byId('filterEditDlg').test()\">". - __('Test')."</button> "; - print "<button dojoType='dijit.form.Button' type='submit' class='alt-primary' onclick=\"return dijit.byId('filterEditDlg').execute()\">". - __('Create')."</button> "; - print "<button dojoType='dijit.form.Button' onclick=\"return dijit.byId('filterEditDlg').hide()\">". - __('Cancel')."</button>"; - - print "</footer>"; - - } - function newrule() { $rule = json_decode(clean($_REQUEST["rule"]), true); diff --git a/include/controls.php b/include/controls.php index 78a5feb77..8f49e99c5 100755 --- a/include/controls.php +++ b/include/controls.php @@ -35,15 +35,23 @@ function print_select_hash($id, $default, $values, $attributes = "", $name = "") print "</select>"; } +function format_hidden($name, $value) { + return "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"$name\" value=\"$value\">"; +} + function print_hidden($name, $value) { - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"$name\" value=\"$value\">"; + print format_hidden($name, $value); } -function print_checkbox($id, $checked, $value = "", $attributes = "") { +function format_checkbox($id, $checked, $value = "", $attributes = "") { $checked_str = $checked ? "checked" : ""; $value_str = $value ? "value=\"$value\"" : ""; - print "<input dojoType=\"dijit.form.CheckBox\" id=\"$id\" $value_str $checked_str $attributes name=\"$id\">"; + return "<input dojoType=\"dijit.form.CheckBox\" id=\"$id\" $value_str $checked_str $attributes name=\"$id\">"; +} + +function print_checkbox($id, $checked, $value = "", $attributes = "") { + print format_checkbox($id, $checked, $value, $attributes); } function print_button($type, $value, $attributes = "") { @@ -18,7 +18,7 @@ const App = { LABEL_BASE_INDEX: -1024, FormFields: { hidden: function(name, value) { - return `<input dojoType="dijit.form.TextBox" style="display : none" name="${name}" value="${value}"></input>` + return `<input dojoType="dijit.form.TextBox" style="display : none" name="${name}" value="${App.escapeHtml(value)}"></input>` } }, Scrollable: { @@ -884,7 +884,7 @@ const App = { }; this.hotkey_actions["create_filter"] = () => { - Filters.quickAddFilter(); + Filters.edit(); }; this.hotkey_actions["help_dialog"] = () => { @@ -1115,7 +1115,7 @@ const App = { CommonDialogs.addLabel(); }; this.hotkey_actions["create_filter"] = () => { - Filters.quickAddFilter(); + Filters.edit(); }; this.hotkey_actions["collapse_sidebar"] = () => { Feeds.toggle(); diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 356ab8bd3..a28aa2d24 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -35,33 +35,17 @@ const Filters = { } }, createNewRuleElement: function(parentNode, replaceNode) { - const form = document.forms["filter_new_rule_form"]; - const query = {op: "pref-filters", method: "printrulename", rule: dojo.formToJson(form)}; + const rule = dojo.formToJson("filter_new_rule_form"); - xhrPost("backend.php", query, (transport) => { + xhrPost("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (transport) => { try { - const li = dojo.create("li"); + const li = document.createElement('li'); - const cb = dojo.create("input", {type: "checkbox"}, li); + li.innerHTML = `<input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'> + <span onclick='App.dialogOf(this).editRule(this)'>${transport.responseText}</span> + ${App.FormFields.hidden("rule[]", rule)}`; - new dijit.form.CheckBox({ - onChange: function () { - Lists.onRowChecked(this); - }, - }, cb); - - dojo.create("input", { - type: "hidden", - name: "rule[]", - value: dojo.formToJson(form) - }, li); - - dojo.create("span", { - onclick: function () { - dijit.byId('filterEditDlg').editRule(this); - }, - innerHTML: transport.responseText - }, li); + dojo.parser.parse(li); if (replaceNode) { parentNode.replaceChild(li, replaceNode); @@ -82,35 +66,17 @@ const Filters = { form.action_param.value = form.action_param_plugin.value; } - const query = { - op: "pref-filters", method: "printactionname", - action: dojo.formToJson(form) - }; + const action = dojo.formToJson(form); - xhrPost("backend.php", query, (transport) => { + xhrPost("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (transport) => { try { - const li = dojo.create("li"); - - const cb = dojo.create("input", {type: "checkbox"}, li); + const li = document.createElement('li'); - new dijit.form.CheckBox({ - onChange: function () { - Lists.onRowChecked(this); - }, - }, cb); + li.innerHTML = `<input dojoType='dijit.form.CheckBox' type='checkbox' onclick='Lists.onRowChecked(this)'> + <span onclick='App.dialogOf(this).editAction(this)'>${transport.responseText}</span> + ${App.FormFields.hidden("action[]", action)}`; - dojo.create("input", { - type: "hidden", - name: "action[]", - value: dojo.formToJson(form) - }, li); - - dojo.create("span", { - onclick: function () { - dijit.byId('filterEditDlg').editAction(this); - }, - innerHTML: transport.responseText - }, li); + dojo.parser.parse(li); if (replaceNode) { parentNode.replaceChild(li, replaceNode); @@ -170,7 +136,7 @@ const Filters = { rule_dlg.show(); }, - editFilterTest: function(params) { + test: function(params) { if (dijit.byId("filterTestDlg")) dijit.byId("filterTestDlg").destroyRecursive(); @@ -268,123 +234,143 @@ const Filters = { test_dlg.show(); }, - quickAddFilter: function() { + edit: function(id) { // if no id, new filter dialog let query; if (!App.isPrefs()) { query = { - op: "pref-filters", method: "newfilter", + op: "pref-filters", method: "edit", feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() }; } else { - query = {op: "pref-filters", method: "newfilter"}; + query = {op: "pref-filters", method: "edit", id: id}; } - console.log('quickAddFilter', query); - - if (dijit.byId("feedEditDlg")) - dijit.byId("feedEditDlg").destroyRecursive(); - - if (dijit.byId("filterEditDlg")) - dijit.byId("filterEditDlg").destroyRecursive(); - - const dialog = new dijit.Dialog({ - id: "filterEditDlg", - title: __("Create Filter"), - test: function () { - Filters.editFilterTest(dojo.formToObject("filter_new_form")); - }, - selectRules: function (select) { - Lists.select("filterDlg_Matches", select); - }, - selectActions: function (select) { - Lists.select("filterDlg_Actions", select); - }, - editRule: function (e) { - const li = e.parentNode; - const rule = li.getElementsByTagName("INPUT")[1].value; - Filters.addFilterRule(li, rule); - }, - editAction: function (e) { - const li = e.parentNode; - const action = li.getElementsByTagName("INPUT")[1].value; - Filters.addFilterAction(li, action); - }, - addAction: function () { - Filters.addFilterAction(); - }, - addRule: function () { - Filters.addFilterRule(); - }, - deleteAction: function () { - $$("#filterDlg_Actions li[class*=Selected]").each(function (e) { - e.parentNode.removeChild(e) - }); - }, - deleteRule: function () { - $$("#filterDlg_Matches li[class*=Selected]").each(function (e) { - e.parentNode.removeChild(e) - }); - }, - execute: function () { - if (this.validate()) { + console.log('Filters.edit', query); + + xhrPost("backend.php", query, function (transport) { + if (dijit.byId("feedEditDlg")) + dijit.byId("feedEditDlg").destroyRecursive(); + + if (dijit.byId("filterEditDlg")) + dijit.byId("filterEditDlg").destroyRecursive(); + + const dialog = new dijit.Dialog({ + id: "filterEditDlg", + title: __("Create Filter"), + test: function () { + Filters.test(this.attr('value')); + }, + selectRules: function (select) { + Lists.select("filterDlg_Matches", select); + }, + selectActions: function (select) { + Lists.select("filterDlg_Actions", select); + }, + editRule: function (e) { + const li = e.closest('li'); + const rule = li.querySelector('input[name="rule[]"]').value + + Filters.addFilterRule(li, rule); + }, + editAction: function (e) { + const li = e.closest('li'); + const action = li.querySelector('input[name="action[]"]').value + + Filters.addFilterAction(li, action); + }, + removeFilter: function () { + const msg = __("Remove filter?"); + + if (confirm(msg)) { + this.hide(); + + Notify.progress("Removing filter..."); + + const query = {op: "pref-filters", method: "remove", ids: this.attr('value').id}; + + xhrPost("backend.php", query, () => { + const tree = dijit.byId("filterTree"); + + if (tree) tree.reload(); + }); + } + }, + addAction: function () { + Filters.addFilterAction(); + }, + addRule: function () { + Filters.addFilterRule(); + }, + deleteAction: function () { + $$("#filterDlg_Actions li[class*=Selected]").each(function (e) { + e.parentNode.removeChild(e) + }); + }, + deleteRule: function () { + $$("#filterDlg_Matches li[class*=Selected]").each(function (e) { + e.parentNode.removeChild(e) + }); + }, + execute: function () { + if (this.validate()) { - const query = dojo.formToQuery("filter_new_form"); + Notify.progress("Saving data...", true); - xhrPost("backend.php", query, () => { - if (App.isPrefs()) { - dijit.byId("filterTree").reload(); - } + xhrPost("backend.php", this.attr('value'), () => { + dialog.hide(); - dialog.hide(); - }); - } - }, - href: "backend.php?" + dojo.objectToQuery(query) - }); + const tree = dijit.byId("filterTree"); + if (tree) tree.reload(); + }); + } + }, + content: transport.responseText + }); - if (!App.isPrefs()) { - /* global getSelectionText */ - const selectedText = getSelectionText(); + if (!App.isPrefs()) { + /* global getSelectionText */ + const selectedText = getSelectionText(); - const lh = dojo.connect(dialog, "onLoad", function () { - dojo.disconnect(lh); + const lh = dojo.connect(dialog, "onLoad", function () { + dojo.disconnect(lh); - if (selectedText != "") { + if (selectedText != "") { - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : + Feeds.getActive(); - const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; + const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; - Filters.addFilterRule(null, dojo.toJson(rule)); + Filters.addFilterRule(null, dojo.toJson(rule)); - } else { + } else { - const query = {op: "rpc", method: "getlinktitlebyid", id: Article.getActive()}; + const query = {op: "rpc", method: "getlinktitlebyid", id: Article.getActive()}; - xhrPost("backend.php", query, (transport) => { - const reply = JSON.parse(transport.responseText); + xhrPost("backend.php", query, (transport) => { + const reply = JSON.parse(transport.responseText); - let title = false; + let title = false; - if (reply && reply.title) title = reply.title; + if (reply && reply.title) title = reply.title; - if (title || Feeds.getActive() || Feeds.activeIsCat()) { + if (title || Feeds.getActive() || Feeds.activeIsCat()) { - console.log(title + " " + Feeds.getActive()); + console.log(title + " " + Feeds.getActive()); - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : + Feeds.getActive(); - const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; + const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; - Filters.addFilterRule(null, dojo.toJson(rule)); - } - }); - } - }); - } - dialog.show(); + Filters.addFilterRule(null, dojo.toJson(rule)); + } + }); + } + }); + } + dialog.show(); + }); }, }; diff --git a/js/PrefFeedTree.js b/js/PrefFeedTree.js index 4c8c25d0e..21b8ee272 100644 --- a/js/PrefFeedTree.js +++ b/js/PrefFeedTree.js @@ -297,7 +297,10 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree"], functio xhrPost("backend.php", query, () => { dialog.hide(); - dijit.byId("feedTree").reload(); + + const tree = dijit.byId("feedTree"); + + if (tree) tree.reload(); }); } }, @@ -351,7 +354,10 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree"], functio xhrPost("backend.php", this.attr('value'), () => { Notify.close(); - dijit.byId("feedTree").reload(); + + const tree = dijit.byId("feedTree"); + if (tree) tree.reload(); + dialog.hide(); }); } @@ -387,7 +393,10 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree"], functio xhrPost("backend.php", query, () => { Notify.close(); - dijit.byId("feedTree").reload(); + + const tree = dijit.byId("feedTree"); + if (tree) tree.reload(); + dialog.hide(); }); } diff --git a/js/PrefFilterTree.js b/js/PrefFilterTree.js index a2e625bc1..b16fcb4c9 100644 --- a/js/PrefFilterTree.js +++ b/js/PrefFilterTree.js @@ -134,85 +134,6 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree"], functio this.editFilter(rows[0]); }, - editFilter: function(id) { - - const query = "backend.php?op=pref-filters&method=edit&id=" + encodeURIComponent(id); - - if (dijit.byId("feedEditDlg")) - dijit.byId("feedEditDlg").destroyRecursive(); - - if (dijit.byId("filterEditDlg")) - dijit.byId("filterEditDlg").destroyRecursive(); - - const dialog = new dijit.Dialog({ - id: "filterEditDlg", - title: __("Edit Filter"), - test: function () { - Filters.editFilterTest(dojo.formToObject("filter_edit_form")); - }, - selectRules: function (select) { - Lists.select("filterDlg_Matches", select); - }, - selectActions: function (select) { - Lists.select("filterDlg_Actions", select); - }, - editRule: function (e) { - const li = e.parentNode; - const rule = li.getElementsByTagName("INPUT")[1].value; - Filters.addFilterRule(li, rule); - }, - editAction: function (e) { - const li = e.parentNode; - const action = li.getElementsByTagName("INPUT")[1].value; - Filters.addFilterAction(li, action); - }, - removeFilter: function () { - const msg = __("Remove filter?"); - - if (confirm(msg)) { - this.hide(); - - Notify.progress("Removing filter..."); - - const query = {op: "pref-filters", method: "remove", ids: this.attr('value').id}; - - xhrPost("backend.php", query, () => { - dijit.byId("filterTree").reload(); - }); - } - }, - addAction: function () { - Filters.addFilterAction(); - }, - addRule: function () { - Filters.addFilterRule(); - }, - deleteAction: function () { - $$("#filterDlg_Actions li[class*=Selected]").each(function (e) { - e.parentNode.removeChild(e) - }); - }, - deleteRule: function () { - $$("#filterDlg_Matches li[class*=Selected]").each(function (e) { - e.parentNode.removeChild(e) - }); - }, - execute: function () { - if (this.validate()) { - - Notify.progress("Saving data...", true); - - xhrPost("backend.php", dojo.formToObject("filter_edit_form"), () => { - dialog.hide(); - dijit.byId("filterTree").reload(); - }); - } - }, - href: query - }); - - dialog.show(); - }, removeSelectedFilters: function() { const sel_rows = this.getSelectedFilters(); diff --git a/js/PrefLabelTree.js b/js/PrefLabelTree.js index 624b197b4..857adfb24 100644 --- a/js/PrefLabelTree.js +++ b/js/PrefLabelTree.js @@ -96,7 +96,8 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dijit/f }; xhrPost("backend.php", query, () => { - dijit.byId("filterTree").reload(); // maybe there's labels in there + const tree = dijit.byId("filterTree"); + if (tree) tree.reload(); // maybe there's labels in there }); }, @@ -111,7 +112,8 @@ define(["dojo/_base/declare", "dojo/dom-construct", "lib/CheckBoxTree", "dijit/f this.hide(); xhrPost("backend.php", this.attr('value'), () => { - dijit.byId("filterTree").reload(); // maybe there's labels in there + const tree = dijit.byId("filterTree"); + if (tree) tree.reload(); // maybe there's labels in there }); } }, |