From be91355c20140c797912247bfbfb45b7dbfd41c9 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 20 Feb 2021 18:15:08 +0300 Subject: first for filter frontend overhaul --- js/CommonFilters.js | 418 ++++++++++++++++++++++++++-------------------------- 1 file changed, 207 insertions(+), 211 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 0fc8f87ae..222bba4bd 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -5,245 +5,241 @@ /* global __, App, Article, Lists, fox */ /* global xhr, dojo, dijit, Notify, Feeds */ -const Filters = { - filterDlgCheckAction: function(sender) { - const action = sender.value; - - const action_param = App.byId("filterDlg_paramBox"); - - if (!action_param) { - console.log("filterDlgCheckAction: can't find action param box!"); - return; - } - - // if selected action supports parameters, enable params field - if (action == 4 || action == 6 || action == 7 || action == 9) { - Element.show(action_param); - - Element.hide(dijit.byId("filterDlg_actionParam").domNode); - Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); - Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - - if (action == 7) { - Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); - } else if (action == 9) { - Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); - } else { - Element.show(dijit.byId("filterDlg_actionParam").domNode); - } +const Filters = { + edit: function(id) { // if no id, new filter dialog + let query; + if (!App.isPrefs()) { + query = { + op: "pref-filters", method: "edit", + feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() + }; } else { - Element.hide(action_param); - } - }, - createNewRuleElement: function(parentNode, replaceNode) { - const rule = dojo.formToJson("filter_new_rule_form"); - - xhr.post("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (reply) => { - try { - const li = document.createElement('li'); - - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("rule[]", rule)}`; - - dojo.parser.parse(li); - - if (replaceNode) { - parentNode.replaceChild(li, replaceNode); - } else { - parentNode.appendChild(li); - } - } catch (e) { - App.Error.report(e); - } - }); - }, - createNewActionElement: function(parentNode, replaceNode) { - const form = document.forms["filter_new_action_form"]; - - if (form.action_id.value == 7) { - form.action_param.value = form.action_param_label.value; - } else if (form.action_id.value == 9) { - form.action_param.value = form.action_param_plugin.value; + query = {op: "pref-filters", method: "edit", id: id}; } - const action = dojo.formToJson(form); - - xhr.post("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (reply) => { + xhr.post("backend.php", query, function (reply) { try { - const li = document.createElement('li'); - - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("action[]", action)}`; - - dojo.parser.parse(li); - - if (replaceNode) { - parentNode.replaceChild(li, replaceNode); - } else { - parentNode.appendChild(li); - } - - } catch (e) { - App.Error.report(e); - } - }); - }, - addFilterRule: function(replaceNode, ruleStr) { - const dialog = new fox.SingleUseDialog({ - id: "filterNewRuleDlg", - title: ruleStr ? __("Edit rule") : __("Add rule"), - execute: function () { - if (this.validate()) { - Filters.createNewRuleElement(App.byId("filterDlg_Matches"), replaceNode); - this.hide(); - } - }, - content: __('Loading, please wait...'), - }); - - const tmph = dojo.connect(dialog, "onShow", null, function (/* e */) { - dojo.disconnect(tmph); + const dialog = new fox.SingleUseDialog({ + id: "filterEditDlg", + title: id ? __("Edit Filter") : __("Create Filter"), + test: function() { + const test_dialog = new fox.SingleUseDialog({ + title: "Test Filter", + results: 0, + limit: 100, + max_offset: 10000, + getTestResults: function (params, offset) { + params.method = 'testFilterDo'; + params.offset = offset; + params.limit = test_dialog.limit; + + console.log("getTestResults:" + offset); + + xhr.json("backend.php", params, (result) => { + try { + if (result && test_dialog && test_dialog.open) { + test_dialog.results += result.length; + + console.log("got results:" + result.length); + + App.byId("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") + .replace("%f", test_dialog.results) + .replace("%d", offset); + + console.log(offset + " " + test_dialog.max_offset); + + for (let i = 0; i < result.length; i++) { + const tmp = dojo.create("table", { innerHTML: result[i]}); + + App.byId("prefFilterTestResultList").innerHTML += tmp.innerHTML; + } + + if (test_dialog.results < 30 && offset < test_dialog.max_offset) { + + // get the next batch + window.setTimeout(function () { + test_dialog.getTestResults(params, offset + test_dialog.limit); + }, 0); + + } else { + // all done + + Element.hide("prefFilterLoadingIndicator"); + + if (test_dialog.results == 0) { + App.byId("prefFilterTestResultList").innerHTML = ` + ${__('No recent articles matching this filter have been found.')}`; + App.byId("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + } else { + App.byId("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") + .replace("%d", test_dialog.results); + } + + } + + } else if (!result) { + console.log("getTestResults: can't parse results object"); + Element.hide("prefFilterLoadingIndicator"); + Notify.error("Error while trying to get filter test results."); + } else { + console.log("getTestResults: dialog closed, bailing out."); + } + } catch (e) { + App.Error.report(e); + } + }); + }, + content: ` +
+   + Looking for articles... +
+ + + + + ` + }); - xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { - dialog.attr('content', reply); - }); - }); + const tmph = dojo.connect(test_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - dialog.show(); - }, - addFilterAction: function(replaceNode, actionStr) { - const dialog = new fox.SingleUseDialog({ - title: actionStr ? __("Edit action") : __("Add action"), - execute: function () { - if (this.validate()) { - Filters.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); - this.hide(); - } - } - }); + test_dialog.getTestResults(dialog.attr('value'), 0); + }); - const tmph = dojo.connect(dialog, "onShow", null, function (/* e */) { - dojo.disconnect(tmph); + test_dialog.show(); + }, + hideOrShowActionParam: function(sender) { + const action = sender.value; - xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { - dialog.attr('content', reply); - }); - }); + const action_param = App.byId("filterDlg_paramBox"); - dialog.show(); - }, - test: function(params) { + if (!action_param) { + console.log("hideOrShowActionParam: can't find action param box!"); + return; + } - const dialog = new fox.SingleUseDialog({ - title: "Test Filter", - results: 0, - limit: 100, - max_offset: 10000, - getTestResults: function (params, offset) { - params.method = 'testFilterDo'; - params.offset = offset; - params.limit = dialog.limit; + // if selected action supports parameters, enable params field + if (action == 4 || action == 6 || action == 7 || action == 9) { + Element.show(action_param); - console.log("getTestResults:" + offset); + Element.hide(dijit.byId("filterDlg_actionParam").domNode); + Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); + Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - xhr.json("backend.php", params, (result) => { - try { - if (result && dialog && dialog.open) { - dialog.results += result.length; + if (action == 7) { + Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); + } else if (action == 9) { + Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); + } else { + Element.show(dijit.byId("filterDlg_actionParam").domNode); + } - console.log("got results:" + result.length); + } else { + Element.hide(action_param); + } + }, + createNewRuleElement: function(parentNode, replaceNode) { + const rule = dojo.formToJson("filter_new_rule_form"); - App.byId("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") - .replace("%f", dialog.results) - .replace("%d", offset); + xhr.post("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (reply) => { + try { + const li = document.createElement('li'); - console.log(offset + " " + dialog.max_offset); + li.innerHTML = ` + ${reply} + ${App.FormFields.hidden_tag("rule[]", rule)}`; - for (let i = 0; i < result.length; i++) { - const tmp = dojo.create("table", { innerHTML: result[i]}); + dojo.parser.parse(li); - App.byId("prefFilterTestResultList").innerHTML += tmp.innerHTML; + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); + } else { + parentNode.appendChild(li); + } + } catch (e) { + App.Error.report(e); } + }); + }, + createNewActionElement: function(parentNode, replaceNode) { + const form = document.forms["filter_new_action_form"]; - if (dialog.results < 30 && offset < dialog.max_offset) { + if (form.action_id.value == 7) { + form.action_param.value = form.action_param_label.value; + } else if (form.action_id.value == 9) { + form.action_param.value = form.action_param_plugin.value; + } - // get the next batch - window.setTimeout(function () { - dialog.getTestResults(params, offset + dialog.limit); - }, 0); + const action = dojo.formToJson(form); - } else { - // all done + xhr.post("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (reply) => { + try { + const li = document.createElement('li'); - Element.hide("prefFilterLoadingIndicator"); + li.innerHTML = ` + ${reply} + ${App.FormFields.hidden_tag("action[]", action)}`; - if (dialog.results == 0) { - App.byId("prefFilterTestResultList").innerHTML = ` - ${__('No recent articles matching this filter have been found.')}`; - App.byId("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + dojo.parser.parse(li); + + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); } else { - App.byId("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") - .replace("%d", dialog.results); + parentNode.appendChild(li); } + } catch (e) { + App.Error.report(e); } + }); + }, + addFilterRule: function(replaceNode, ruleStr) { + const add_dialog = new fox.SingleUseDialog({ + id: "filterNewRuleDlg", + title: ruleStr ? __("Edit rule") : __("Add rule"), + execute: function () { + if (this.validate()) { + dialog.createNewRuleElement(App.byId("filterDlg_Matches"), replaceNode); + this.hide(); + } + }, + content: __('Loading, please wait...'), + }); - } else if (!result) { - console.log("getTestResults: can't parse results object"); - Element.hide("prefFilterLoadingIndicator"); - Notify.error("Error while trying to get filter test results."); - } else { - console.log("getTestResults: dialog closed, bailing out."); - } - } catch (e) { - App.Error.report(e); - } - }); - }, - content: ` -
-   - Looking for articles... -
- - - - - ` - }); + const tmph = dojo.connect(add_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - dojo.connect(dialog, "onShow", null, function (/* e */) { - dialog.getTestResults(params, 0); - }); + xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { + add_dialog.attr('content', reply); + }); + }); - dialog.show(); - }, - edit: function(id) { // if no id, new filter dialog - let query; + add_dialog.show(); + }, + addFilterAction: function(replaceNode, actionStr) { + const add_dialog = new fox.SingleUseDialog({ + title: actionStr ? __("Edit action") : __("Add action"), + execute: function () { + if (this.validate()) { + dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); + this.hide(); + } + } + }); - if (!App.isPrefs()) { - query = { - op: "pref-filters", method: "edit", - feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() - }; - } else { - query = {op: "pref-filters", method: "edit", id: id}; - } + const tmph = dojo.connect(add_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - console.log('Filters.edit', query); + xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { + add_dialog.attr('content', reply); + }); + }); - xhr.post("backend.php", query, function (reply) { - try { - const dialog = new fox.SingleUseDialog({ - id: "filterEditDlg", - title: id ? __("Edit Filter") : __("Create Filter"), - test: function () { - Filters.test(this.attr('value')); + add_dialog.show(); }, selectRules: function (select) { Lists.select("filterDlg_Matches", select); @@ -255,13 +251,13 @@ const Filters = { const li = e.closest('li'); const rule = li.querySelector('input[name="rule[]"]').value - Filters.addFilterRule(li, rule); + this.addFilterRule(li, rule); }, editAction: function (e) { const li = e.closest('li'); const action = li.querySelector('input[name="action[]"]').value - Filters.addFilterAction(li, action); + this.addFilterAction(li, action); }, removeFilter: function () { const msg = __("Remove filter?"); @@ -281,10 +277,10 @@ const Filters = { } }, addAction: function () { - Filters.addFilterAction(); + this.addFilterAction(); }, addRule: function () { - Filters.addFilterRule(); + this.addFilterRule(); }, deleteAction: function () { App.findAll("#filterDlg_Actions li[class*=Selected]").forEach(function (e) { @@ -326,7 +322,7 @@ const Filters = { const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; - Filters.addFilterRule(null, dojo.toJson(rule)); + dialog.addFilterRule(null, dojo.toJson(rule)); } else { @@ -346,7 +342,7 @@ const Filters = { const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; - Filters.addFilterRule(null, dojo.toJson(rule)); + dialog.addFilterRule(null, dojo.toJson(rule)); } }); } -- cgit v1.2.3 From 590b1fc39e104bd41a8ab213b98b38345dba4eac Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 20 Feb 2021 18:21:36 +0300 Subject: a few more methods shuffled around --- js/CommonFilters.js | 104 ++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 51 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 222bba4bd..210c63479 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -5,7 +5,8 @@ /* global __, App, Article, Lists, fox */ /* global xhr, dojo, dijit, Notify, Feeds */ -const Filters = { +/* exported Filters */ +const Filters = { edit: function(id) { // if no id, new filter dialog let query; @@ -112,36 +113,6 @@ const Filters = { test_dialog.show(); }, - hideOrShowActionParam: function(sender) { - const action = sender.value; - - const action_param = App.byId("filterDlg_paramBox"); - - if (!action_param) { - console.log("hideOrShowActionParam: can't find action param box!"); - return; - } - - // if selected action supports parameters, enable params field - if (action == 4 || action == 6 || action == 7 || action == 9) { - Element.show(action_param); - - Element.hide(dijit.byId("filterDlg_actionParam").domNode); - Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); - Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - - if (action == 7) { - Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); - } else if (action == 9) { - Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); - } else { - Element.show(dijit.byId("filterDlg_actionParam").domNode); - } - - } else { - Element.hide(action_param); - } - }, createNewRuleElement: function(parentNode, replaceNode) { const rule = dojo.formToJson("filter_new_rule_form"); @@ -150,7 +121,7 @@ const Filters = { const li = document.createElement('li'); li.innerHTML = ` - ${reply} + ${reply} ${App.FormFields.hidden_tag("rule[]", rule)}`; dojo.parser.parse(li); @@ -181,7 +152,7 @@ const Filters = { const li = document.createElement('li'); li.innerHTML = ` - ${reply} + ${reply} ${App.FormFields.hidden_tag("action[]", action)}`; dojo.parser.parse(li); @@ -197,8 +168,8 @@ const Filters = { } }); }, - addFilterRule: function(replaceNode, ruleStr) { - const add_dialog = new fox.SingleUseDialog({ + editRule: function(replaceNode, ruleStr) { + const edit_rule_dialog = new fox.SingleUseDialog({ id: "filterNewRuleDlg", title: ruleStr ? __("Edit rule") : __("Add rule"), execute: function () { @@ -210,19 +181,50 @@ const Filters = { content: __('Loading, please wait...'), }); - const tmph = dojo.connect(add_dialog, "onShow", null, function (/* e */) { + const tmph = dojo.connect(edit_rule_dialog, "onShow", null, function (/* e */) { dojo.disconnect(tmph); xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { - add_dialog.attr('content', reply); + edit_rule_dialog.attr('content', reply); }); }); - add_dialog.show(); + edit_rule_dialog.show(); }, - addFilterAction: function(replaceNode, actionStr) { - const add_dialog = new fox.SingleUseDialog({ + editAction: function(replaceNode, actionStr) { + const edit_action_dialog = new fox.SingleUseDialog({ title: actionStr ? __("Edit action") : __("Add action"), + hideOrShowActionParam: function(sender) { + const action = sender.value; + + const action_param = App.byId("filterDlg_paramBox"); + + if (!action_param) { + console.log("hideOrShowActionParam: can't find action param box!"); + return; + } + + // if selected action supports parameters, enable params field + if (action == 4 || action == 6 || action == 7 || action == 9) { + Element.show(action_param); + + Element.hide(dijit.byId("filterDlg_actionParam").domNode); + Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); + Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); + + if (action == 7) { + Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); + } else if (action == 9) { + Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); + } else { + Element.show(dijit.byId("filterDlg_actionParam").domNode); + } + + } else { + Element.hide(action_param); + } + }, + execute: function () { if (this.validate()) { dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); @@ -231,15 +233,15 @@ const Filters = { } }); - const tmph = dojo.connect(add_dialog, "onShow", null, function (/* e */) { + const tmph = dojo.connect(edit_action_dialog, "onShow", null, function (/* e */) { dojo.disconnect(tmph); xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { - add_dialog.attr('content', reply); + edit_action_dialog.attr('content', reply); }); }); - add_dialog.show(); + edit_action_dialog.show(); }, selectRules: function (select) { Lists.select("filterDlg_Matches", select); @@ -247,17 +249,17 @@ const Filters = { selectActions: function (select) { Lists.select("filterDlg_Actions", select); }, - editRule: function (e) { + onRuleClicked: function (e) { const li = e.closest('li'); const rule = li.querySelector('input[name="rule[]"]').value - this.addFilterRule(li, rule); + this.editRule(li, rule); }, - editAction: function (e) { + onActionClicked: function (e) { const li = e.closest('li'); const action = li.querySelector('input[name="action[]"]').value - this.addFilterAction(li, action); + this.editAction(li, action); }, removeFilter: function () { const msg = __("Remove filter?"); @@ -277,10 +279,10 @@ const Filters = { } }, addAction: function () { - this.addFilterAction(); + this.editAction(); }, addRule: function () { - this.addFilterRule(); + this.editRule(); }, deleteAction: function () { App.findAll("#filterDlg_Actions li[class*=Selected]").forEach(function (e) { @@ -322,7 +324,7 @@ const Filters = { const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; - dialog.addFilterRule(null, dojo.toJson(rule)); + dialog.editRule(null, dojo.toJson(rule)); } else { @@ -342,7 +344,7 @@ const Filters = { const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; - dialog.addFilterRule(null, dojo.toJson(rule)); + dialog.editRule(null, dojo.toJson(rule)); } }); } -- cgit v1.2.3 From da97b29dbe7ac923fae5a0cddee141716d1da3e5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 20 Feb 2021 21:07:28 +0300 Subject: prevent filter selected text dialog from opening in wrong order --- js/CommonFilters.js | 536 ++++++++++++++++++++++++++-------------------------- 1 file changed, 263 insertions(+), 273 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 210c63479..88f9c83f5 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -19,342 +19,332 @@ const Filters = { query = {op: "pref-filters", method: "edit", id: id}; } - xhr.post("backend.php", query, function (reply) { - try { - const dialog = new fox.SingleUseDialog({ - id: "filterEditDlg", - title: id ? __("Edit Filter") : __("Create Filter"), - test: function() { - const test_dialog = new fox.SingleUseDialog({ - title: "Test Filter", - results: 0, - limit: 100, - max_offset: 10000, - getTestResults: function (params, offset) { - params.method = 'testFilterDo'; - params.offset = offset; - params.limit = test_dialog.limit; - - console.log("getTestResults:" + offset); - - xhr.json("backend.php", params, (result) => { - try { - if (result && test_dialog && test_dialog.open) { - test_dialog.results += result.length; - - console.log("got results:" + result.length); - - App.byId("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") - .replace("%f", test_dialog.results) - .replace("%d", offset); - - console.log(offset + " " + test_dialog.max_offset); - - for (let i = 0; i < result.length; i++) { - const tmp = dojo.create("table", { innerHTML: result[i]}); - - App.byId("prefFilterTestResultList").innerHTML += tmp.innerHTML; - } - - if (test_dialog.results < 30 && offset < test_dialog.max_offset) { - - // get the next batch - window.setTimeout(function () { - test_dialog.getTestResults(params, offset + test_dialog.limit); - }, 0); - - } else { - // all done - - Element.hide("prefFilterLoadingIndicator"); - - if (test_dialog.results == 0) { - App.byId("prefFilterTestResultList").innerHTML = ` - ${__('No recent articles matching this filter have been found.')}`; - App.byId("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; - } else { - App.byId("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") - .replace("%d", test_dialog.results); - } - - } - - } else if (!result) { - console.log("getTestResults: can't parse results object"); - Element.hide("prefFilterLoadingIndicator"); - Notify.error("Error while trying to get filter test results."); - } else { - console.log("getTestResults: dialog closed, bailing out."); - } - } catch (e) { - App.Error.report(e); - } - }); - }, - content: ` -
-   - Looking for articles... -
- -
    - -
    - -
    - ` - }); + const dialog = new fox.SingleUseDialog({ + id: "filterEditDlg", + title: id ? __("Edit Filter") : __("Create Filter"), + test: function() { + const test_dialog = new fox.SingleUseDialog({ + title: "Test Filter", + results: 0, + limit: 100, + max_offset: 10000, + getTestResults: function (params, offset) { + params.method = 'testFilterDo'; + params.offset = offset; + params.limit = test_dialog.limit; + + console.log("getTestResults:" + offset); + + xhr.json("backend.php", params, (result) => { + try { + if (result && test_dialog && test_dialog.open) { + test_dialog.results += result.length; - const tmph = dojo.connect(test_dialog, "onShow", null, function (/* e */) { - dojo.disconnect(tmph); + console.log("got results:" + result.length); - test_dialog.getTestResults(dialog.attr('value'), 0); - }); + App.byId("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") + .replace("%f", test_dialog.results) + .replace("%d", offset); - test_dialog.show(); - }, - createNewRuleElement: function(parentNode, replaceNode) { - const rule = dojo.formToJson("filter_new_rule_form"); + console.log(offset + " " + test_dialog.max_offset); - xhr.post("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (reply) => { - try { - const li = document.createElement('li'); + for (let i = 0; i < result.length; i++) { + const tmp = dojo.create("table", { innerHTML: result[i]}); - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("rule[]", rule)}`; + App.byId("prefFilterTestResultList").innerHTML += tmp.innerHTML; + } - dojo.parser.parse(li); + if (test_dialog.results < 30 && offset < test_dialog.max_offset) { - if (replaceNode) { - parentNode.replaceChild(li, replaceNode); - } else { - parentNode.appendChild(li); - } - } catch (e) { - App.Error.report(e); - } - }); - }, - createNewActionElement: function(parentNode, replaceNode) { - const form = document.forms["filter_new_action_form"]; + // get the next batch + window.setTimeout(function () { + test_dialog.getTestResults(params, offset + test_dialog.limit); + }, 0); - if (form.action_id.value == 7) { - form.action_param.value = form.action_param_label.value; - } else if (form.action_id.value == 9) { - form.action_param.value = form.action_param_plugin.value; - } - - const action = dojo.formToJson(form); + } else { + // all done - xhr.post("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (reply) => { - try { - const li = document.createElement('li'); + Element.hide("prefFilterLoadingIndicator"); - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("action[]", action)}`; + if (test_dialog.results == 0) { + App.byId("prefFilterTestResultList").innerHTML = ` + ${__('No recent articles matching this filter have been found.')}`; + App.byId("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + } else { + App.byId("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") + .replace("%d", test_dialog.results); + } - dojo.parser.parse(li); + } - if (replaceNode) { - parentNode.replaceChild(li, replaceNode); + } else if (!result) { + console.log("getTestResults: can't parse results object"); + Element.hide("prefFilterLoadingIndicator"); + Notify.error("Error while trying to get filter test results."); } else { - parentNode.appendChild(li); + console.log("getTestResults: dialog closed, bailing out."); } - } catch (e) { App.Error.report(e); } }); }, - editRule: function(replaceNode, ruleStr) { - const edit_rule_dialog = new fox.SingleUseDialog({ - id: "filterNewRuleDlg", - title: ruleStr ? __("Edit rule") : __("Add rule"), - execute: function () { - if (this.validate()) { - dialog.createNewRuleElement(App.byId("filterDlg_Matches"), replaceNode); - this.hide(); - } - }, - content: __('Loading, please wait...'), - }); + content: ` +
    +   + Looking for articles... +
    + +
      + +
      + +
      + ` + }); - const tmph = dojo.connect(edit_rule_dialog, "onShow", null, function (/* e */) { - dojo.disconnect(tmph); + const tmph = dojo.connect(test_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { - edit_rule_dialog.attr('content', reply); - }); - }); + test_dialog.getTestResults(dialog.attr('value'), 0); + }); - edit_rule_dialog.show(); - }, - editAction: function(replaceNode, actionStr) { - const edit_action_dialog = new fox.SingleUseDialog({ - title: actionStr ? __("Edit action") : __("Add action"), - hideOrShowActionParam: function(sender) { - const action = sender.value; + test_dialog.show(); + }, + createNewRuleElement: function(parentNode, replaceNode) { + const rule = dojo.formToJson("filter_new_rule_form"); - const action_param = App.byId("filterDlg_paramBox"); + xhr.post("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (reply) => { + try { + const li = document.createElement('li'); - if (!action_param) { - console.log("hideOrShowActionParam: can't find action param box!"); - return; - } + li.innerHTML = ` + ${reply} + ${App.FormFields.hidden_tag("rule[]", rule)}`; - // if selected action supports parameters, enable params field - if (action == 4 || action == 6 || action == 7 || action == 9) { - Element.show(action_param); + dojo.parser.parse(li); - Element.hide(dijit.byId("filterDlg_actionParam").domNode); - Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); - Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); + } else { + parentNode.appendChild(li); + } + } catch (e) { + App.Error.report(e); + } + }); + }, + createNewActionElement: function(parentNode, replaceNode) { + const form = document.forms["filter_new_action_form"]; + + if (form.action_id.value == 7) { + form.action_param.value = form.action_param_label.value; + } else if (form.action_id.value == 9) { + form.action_param.value = form.action_param_plugin.value; + } - if (action == 7) { - Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); - } else if (action == 9) { - Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); - } else { - Element.show(dijit.byId("filterDlg_actionParam").domNode); - } + const action = dojo.formToJson(form); - } else { - Element.hide(action_param); - } - }, + xhr.post("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (reply) => { + try { + const li = document.createElement('li'); - execute: function () { - if (this.validate()) { - dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); - this.hide(); - } - } - }); + li.innerHTML = ` + ${reply} + ${App.FormFields.hidden_tag("action[]", action)}`; - const tmph = dojo.connect(edit_action_dialog, "onShow", null, function (/* e */) { - dojo.disconnect(tmph); + dojo.parser.parse(li); - xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { - edit_action_dialog.attr('content', reply); - }); - }); + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); + } else { + parentNode.appendChild(li); + } - edit_action_dialog.show(); - }, - selectRules: function (select) { - Lists.select("filterDlg_Matches", select); - }, - selectActions: function (select) { - Lists.select("filterDlg_Actions", select); + } catch (e) { + App.Error.report(e); + } + }); + }, + editRule: function(replaceNode, ruleStr) { + const edit_rule_dialog = new fox.SingleUseDialog({ + id: "filterNewRuleDlg", + title: ruleStr ? __("Edit rule") : __("Add rule"), + execute: function () { + if (this.validate()) { + dialog.createNewRuleElement(App.byId("filterDlg_Matches"), replaceNode); + this.hide(); + } }, - onRuleClicked: function (e) { - const li = e.closest('li'); - const rule = li.querySelector('input[name="rule[]"]').value + content: __('Loading, please wait...'), + }); - this.editRule(li, rule); - }, - onActionClicked: function (e) { - const li = e.closest('li'); - const action = li.querySelector('input[name="action[]"]').value + const tmph = dojo.connect(edit_rule_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - this.editAction(li, action); - }, - removeFilter: function () { - const msg = __("Remove filter?"); + xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { + edit_rule_dialog.attr('content', reply); + }); + }); - if (confirm(msg)) { - this.hide(); + edit_rule_dialog.show(); + }, + editAction: function(replaceNode, actionStr) { + const edit_action_dialog = new fox.SingleUseDialog({ + title: actionStr ? __("Edit action") : __("Add action"), + hideOrShowActionParam: function(sender) { + const action = sender.value; + + const action_param = App.byId("filterDlg_paramBox"); + + if (!action_param) { + console.log("hideOrShowActionParam: can't find action param box!"); + return; + } - Notify.progress("Removing filter..."); + // if selected action supports parameters, enable params field + if (action == 4 || action == 6 || action == 7 || action == 9) { + Element.show(action_param); - const query = {op: "pref-filters", method: "remove", ids: this.attr('value').id}; + Element.hide(dijit.byId("filterDlg_actionParam").domNode); + Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); + Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - xhr.post("backend.php", query, () => { - const tree = dijit.byId("filterTree"); + if (action == 7) { + Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); + } else if (action == 9) { + Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); + } else { + Element.show(dijit.byId("filterDlg_actionParam").domNode); + } - if (tree) tree.reload(); - }); + } else { + Element.hide(action_param); } }, - addAction: function () { - this.editAction(); - }, - addRule: function () { - this.editRule(); - }, - deleteAction: function () { - App.findAll("#filterDlg_Actions li[class*=Selected]").forEach(function (e) { - e.parentNode.removeChild(e) - }); - }, - deleteRule: function () { - App.findAll("#filterDlg_Matches li[class*=Selected]").forEach(function (e) { - e.parentNode.removeChild(e) - }); - }, + execute: function () { if (this.validate()) { + dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); + this.hide(); + } + } + }); - Notify.progress("Saving data...", true); - - xhr.post("backend.php", this.attr('value'), () => { - dialog.hide(); + const tmph = dojo.connect(edit_action_dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - const tree = dijit.byId("filterTree"); - if (tree) tree.reload(); - }); - } - }, - content: reply + xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { + edit_action_dialog.attr('content', reply); + }); }); - if (!App.isPrefs()) { - /* global getSelectionText */ - const selectedText = getSelectionText(); + edit_action_dialog.show(); + }, + selectRules: function (select) { + Lists.select("filterDlg_Matches", select); + }, + selectActions: function (select) { + Lists.select("filterDlg_Actions", select); + }, + onRuleClicked: function (e) { + const li = e.closest('li'); + const rule = li.querySelector('input[name="rule[]"]').value - const lh = dojo.connect(dialog, "onShow", function () { - dojo.disconnect(lh); + this.editRule(li, rule); + }, + onActionClicked: function (e) { + const li = e.closest('li'); + const action = li.querySelector('input[name="action[]"]').value - if (selectedText != "") { + this.editAction(li, action); + }, + removeFilter: function () { + const msg = __("Remove filter?"); - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + if (confirm(msg)) { + this.hide(); - const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; + Notify.progress("Removing filter..."); - dialog.editRule(null, dojo.toJson(rule)); + const query = {op: "pref-filters", method: "remove", ids: this.attr('value').id}; - } else { + xhr.post("backend.php", query, () => { + const tree = dijit.byId("filterTree"); + + if (tree) tree.reload(); + }); + } + }, + addAction: function () { + this.editAction(); + }, + addRule: function () { + this.editRule(); + }, + deleteAction: function () { + App.findAll("#filterDlg_Actions li[class*=Selected]").forEach(function (e) { + e.parentNode.removeChild(e) + }); + }, + deleteRule: function () { + App.findAll("#filterDlg_Matches li[class*=Selected]").forEach(function (e) { + e.parentNode.removeChild(e) + }); + }, + execute: function () { + if (this.validate()) { + + Notify.progress("Saving data...", true); + + xhr.post("backend.php", this.attr('value'), () => { + dialog.hide(); + + const tree = dijit.byId("filterTree"); + if (tree) tree.reload(); + }); + } + }, + content: __("Loading, please wait...") + }); - const query = {op: "article", method: "getmetadatabyid", id: Article.getActive()}; + const tmph = dojo.connect(dialog, 'onShow', function () { + dojo.disconnect(tmph); - xhr.json("backend.php", query, (reply) => { - let title = false; + xhr.post("backend.php", query, function (reply) { + dialog.attr('content', reply); - if (reply && reply.title) title = reply.title; + if (!App.isPrefs()) { + const selectedText = App.getSelectedText(); - if (title || Feeds.getActive() || Feeds.activeIsCat()) { + if (selectedText != "") { + const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : + Feeds.getActive(); + const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; - console.log(title + " " + Feeds.getActive()); + dialog.editRule(null, dojo.toJson(rule)); + } else { + const query = {op: "article", method: "getmetadatabyid", id: Article.getActive()}; - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + xhr.json("backend.php", query, (reply) => { + let title; - const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; + if (reply && reply.title) title = reply.title; - dialog.editRule(null, dojo.toJson(rule)); - } - }); - } - }); - } - dialog.show(); + if (title || Feeds.getActive() || Feeds.activeIsCat()) { + console.log(title + " " + 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}; - } catch (e) { - App.Error.report(e); - } + dialog.editRule(null, dojo.toJson(rule)); + } + }); + } + } + }); }); + dialog.show(); }, }; -- cgit v1.2.3 From b4e96374bcc14b3be353f87a80f83b34615dec73 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 20 Feb 2021 21:48:05 +0300 Subject: more filter stuff --- js/CommonFilters.js | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 88f9c83f5..bd6808f59 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -22,6 +22,11 @@ const Filters = { const dialog = new fox.SingleUseDialog({ id: "filterEditDlg", title: id ? __("Edit Filter") : __("Create Filter"), + ACTION_TAG: 4, + ACTION_SCORE: 6, + ACTION_LABEL: 7, + ACTION_PLUGIN: 9, + PARAM_ACTIONS: [4, 6, 7, 9], test: function() { const test_dialog = new fox.SingleUseDialog({ title: "Test Filter", @@ -193,36 +198,21 @@ const Filters = { const edit_action_dialog = new fox.SingleUseDialog({ title: actionStr ? __("Edit action") : __("Add action"), hideOrShowActionParam: function(sender) { - const action = sender.value; + const action = parseInt(sender.value); - const action_param = App.byId("filterDlg_paramBox"); - - if (!action_param) { - console.log("hideOrShowActionParam: can't find action param box!"); - return; - } + dijit.byId("filterDlg_actionParam").domNode.hide(); + dijit.byId("filterDlg_actionParamLabel").domNode.hide(); + dijit.byId("filterDlg_actionParamPlugin").domNode.hide(); // if selected action supports parameters, enable params field - if (action == 4 || action == 6 || action == 7 || action == 9) { - Element.show(action_param); - - Element.hide(dijit.byId("filterDlg_actionParam").domNode); - Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); - Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - - if (action == 7) { - Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); - } else if (action == 9) { - Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); - } else { - Element.show(dijit.byId("filterDlg_actionParam").domNode); - } - - } else { - Element.hide(action_param); + if (action == dialog.ACTION_LABEL) { + dijit.byId("filterDlg_actionParamLabel").domNode.show(); + } else if (action == dialog.ACTION_PLUGIN) { + dijit.byId("filterDlg_actionParamPlugin").domNode.show(); + } else if (dialog.PARAM_ACTIONS.indexOf(action) != -1) { + dijit.byId("filterDlg_actionParam").domNode.show(); } }, - execute: function () { if (this.validate()) { dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); @@ -236,6 +226,10 @@ const Filters = { xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { edit_action_dialog.attr('content', reply); + + setTimeout(() => { + edit_action_dialog.hideOrShowActionParam(dijit.byId("filterDlg_actionSelect").attr('value')); + }, 250); }); }); @@ -308,6 +302,8 @@ const Filters = { content: __("Loading, please wait...") }); + + const tmph = dojo.connect(dialog, 'onShow', function () { dojo.disconnect(tmph); @@ -345,6 +341,7 @@ const Filters = { } }); }); + dialog.show(); }, }; -- cgit v1.2.3 From 94560132ddf45a5a7c68ce520b40ecb10a6f89fe Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 21 Feb 2021 09:35:07 +0300 Subject: for the most part, deal with filter rules UI --- js/CommonFilters.js | 294 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 256 insertions(+), 38 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index bd6808f59..75e1fa8af 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -7,26 +7,17 @@ /* exported Filters */ const Filters = { - edit: function(id) { // if no id, new filter dialog - let query; - - if (!App.isPrefs()) { - query = { - op: "pref-filters", method: "edit", - feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() - }; - } else { - query = {op: "pref-filters", method: "edit", id: id}; - } + edit: function(filter_id = null) { // if no id, new filter dialog const dialog = new fox.SingleUseDialog({ id: "filterEditDlg", - title: id ? __("Edit Filter") : __("Create Filter"), + title: filter_id ? __("Edit Filter") : __("Create Filter"), ACTION_TAG: 4, ACTION_SCORE: 6, ACTION_LABEL: 7, ACTION_PLUGIN: 9, PARAM_ACTIONS: [4, 6, 7, 9], + filter_info: {}, test: function() { const test_dialog = new fox.SingleUseDialog({ title: "Test Filter", @@ -116,16 +107,17 @@ const Filters = { test_dialog.show(); }, - createNewRuleElement: function(parentNode, replaceNode) { + insertRule: function(parentNode, replaceNode) { const rule = dojo.formToJson("filter_new_rule_form"); xhr.post("backend.php", {op: "pref-filters", method: "printrulename", rule: rule}, (reply) => { try { const li = document.createElement('li'); + li.addClassName("rule"); - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("rule[]", rule)}`; + li.innerHTML = `${App.FormFields.checkbox_tag("", false, {onclick: 'Lists.onRowChecked(this)'})} + ${reply} + ${App.FormFields.hidden_tag("rule[]", rule)}`; dojo.parser.parse(li); @@ -139,7 +131,7 @@ const Filters = { } }); }, - createNewActionElement: function(parentNode, replaceNode) { + insertAction: function(parentNode, replaceNode) { const form = document.forms["filter_new_action_form"]; if (form.action_id.value == 7) { @@ -153,10 +145,11 @@ const Filters = { xhr.post("backend.php", { op: "pref-filters", method: "printactionname", action: action }, (reply) => { try { const li = document.createElement('li'); + li.addClassName("action"); - li.innerHTML = ` - ${reply} - ${App.FormFields.hidden_tag("action[]", action)}`; + li.innerHTML = `${App.FormFields.checkbox_tag("", false, {onclick: 'Lists.onRowChecked(this)'})} + ${reply} + ${App.FormFields.hidden_tag("action[]", action)}`; dojo.parser.parse(li); @@ -171,30 +164,84 @@ const Filters = { } }); }, - editRule: function(replaceNode, ruleStr) { + editRule: function(replaceNode, ruleStr = null) { const edit_rule_dialog = new fox.SingleUseDialog({ id: "filterNewRuleDlg", title: ruleStr ? __("Edit rule") : __("Add rule"), execute: function () { if (this.validate()) { - dialog.createNewRuleElement(App.byId("filterDlg_Matches"), replaceNode); + dialog.insertRule(App.byId("filterDlg_Matches"), replaceNode); this.hide(); } }, content: __('Loading, please wait...'), }); - const tmph = dojo.connect(edit_rule_dialog, "onShow", null, function (/* e */) { + const tmph = dojo.connect(edit_rule_dialog, "onShow", null, function () { dojo.disconnect(tmph); - xhr.post("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (reply) => { - edit_rule_dialog.attr('content', reply); + let rule; + + if (ruleStr) { + rule = JSON.parse(ruleStr); + } else { + rule = { + reg_exp: "", + filter_type: 1, + feed_id: ["0"], + inverse: false, + }; + } + + console.log(rule, dialog.filter_info); + + xhr.json("backend.php", {op: "pref-filters", method: "editrule", ids: rule.feed_id.join(",")}, function (editrule) { + edit_rule_dialog.attr('content', + ` +
      + +
      + + +
      + +
      + +
      +
      + + ${App.FormFields.select_hash("filter_type", rule.filter_type, dialog.filter_info.filter_types)} + +
      +
      + + ${editrule.multiselect} + +
      +
      + +
      + ${App.FormFields.button_tag(App.FormFields.icon("help") + " " + __("More info"), "", {class: 'pull-left alt-info', + onclick: "window.open('https://tt-rss.org/wiki/ContentFilters')"})} + ${App.FormFields.submit_tag(__("Save rule"), {onclick: "App.dialogOf(this).execute()"})} + ${App.FormFields.cancel_dialog_tag(__("Cancel"))} +
      + +
      + `); }); + }); edit_rule_dialog.show(); }, - editAction: function(replaceNode, actionStr) { + /*editAction: function(replaceNode, actionStr) { const edit_action_dialog = new fox.SingleUseDialog({ title: actionStr ? __("Edit action") : __("Add action"), hideOrShowActionParam: function(sender) { @@ -221,7 +268,7 @@ const Filters = { } }); - const tmph = dojo.connect(edit_action_dialog, "onShow", null, function (/* e */) { + const tmph = dojo.connect(edit_action_dialog, "onShow", null, function () { dojo.disconnect(tmph); xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { @@ -234,22 +281,65 @@ const Filters = { }); edit_action_dialog.show(); - }, + }, */ + /*editAction: function(replaceNode, actionStr) { + const edit_action_dialog = new fox.SingleUseDialog({ + title: actionStr ? __("Edit action") : __("Add action"), + hideOrShowActionParam: function(sender) { + const action = parseInt(sender.value); + + dijit.byId("filterDlg_actionParam").domNode.hide(); + dijit.byId("filterDlg_actionParamLabel").domNode.hide(); + dijit.byId("filterDlg_actionParamPlugin").domNode.hide(); + + // if selected action supports parameters, enable params field + if (action == dialog.ACTION_LABEL) { + dijit.byId("filterDlg_actionParamLabel").domNode.show(); + } else if (action == dialog.ACTION_PLUGIN) { + dijit.byId("filterDlg_actionParamPlugin").domNode.show(); + } else if (dialog.PARAM_ACTIONS.indexOf(action) != -1) { + dijit.byId("filterDlg_actionParam").domNode.show(); + } + }, + execute: function () { + if (this.validate()) { + dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); + this.hide(); + } + } + }); + + const tmph = dojo.connect(edit_action_dialog, "onShow", null, function () { + dojo.disconnect(tmph); + + xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { + edit_action_dialog.attr('content', reply); + + setTimeout(() => { + edit_action_dialog.hideOrShowActionParam(dijit.byId("filterDlg_actionSelect").attr('value')); + }, 250); + }); + }); + + edit_action_dialog.show(); + },*/ selectRules: function (select) { Lists.select("filterDlg_Matches", select); }, selectActions: function (select) { Lists.select("filterDlg_Actions", select); }, - onRuleClicked: function (e) { - const li = e.closest('li'); - const rule = li.querySelector('input[name="rule[]"]').value + onRuleClicked: function (elem) { + + const li = elem.closest('li'); + const rule = li.querySelector('input[name="rule[]"]').value; this.editRule(li, rule); }, - onActionClicked: function (e) { - const li = e.closest('li'); - const action = li.querySelector('input[name="action[]"]').value + onActionClicked: function (elem) { + + const li = elem.closest('li'); + const action = li.querySelector('input[name="action[]"]').value; this.editAction(li, action); }, @@ -302,13 +392,141 @@ const Filters = { content: __("Loading, please wait...") }); - - const tmph = dojo.connect(dialog, 'onShow', function () { dojo.disconnect(tmph); - xhr.post("backend.php", query, function (reply) { - dialog.attr('content', reply); + const query = {op: "pref-filters", method: "edit", id: filter_id}; + + /*if (!App.isPrefs()) { + query = { + op: "pref-filters", method: "edit", + feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() + }; + } else { + query = {op: "pref-filters", method: "edit", id: id}; + }*/ + + xhr.json("backend.php", query, function (filter) { + + dialog.filter_info = filter; + + const options = { + enabled: [ filter.enabled, __('Enabled') ], + match_any_rule: [ filter.match_any_rule, __('Match any rule') ], + inverse: [ filter.inverse, __('Inverse matching') ], + }; + + dialog.attr('content', + ` +
      + + ${App.FormFields.hidden_tag("op", "pref-filters")} + ${App.FormFields.hidden_tag("id", filter_id)} + ${App.FormFields.hidden_tag("method", filter_id ? "editSave" : "add")} + ${App.FormFields.hidden_tag("csrf_token", App.getInitParam('csrf_token'))} + +
      + +
      + +
      +
      +
      +
      +
      + ${__("Select")} +
      + +
      ${__("All")}
      +
      ${__("None")}
      +
      +
      + + +
      +
      +
        + ${filter.rules.map((rule) => ` +
      • + ${App.FormFields.checkbox_tag("", false, "", {onclick: 'Lists.onRowChecked(this)'})} + ${rule.name} + ${App.FormFields.hidden_tag("rule[]", JSON.stringify(rule))} +
      • + `).join("")} +
      +
      +
      +
      +
      +
      +
      +
      + ${__("Select")} +
      +
      ${__("All")}
      +
      ${__("None")}
      +
      +
      + + +
      +
      +
        + ${filter.actions.map((action) => ` +
      • + ${App.FormFields.checkbox_tag("", false, "", {onclick: 'Lists.onRowChecked(this)'})} + ${App.escapeHtml(action.name)} + ${App.FormFields.hidden_tag("action[]", JSON.stringify(action))} +
      • + `).join("")} +
      +
      +
      +
      +
      + +
      + +
      + ${Object.keys(options).map((name) => + ` +
      + +
      + `).join("")} +
      + +
      + ${filter_id ? + ` + ${App.FormFields.button_tag(__("Remove"), "", {class: "pull-left alt-danger", onclick: "App.dialogOf(this).removeFilter()"})} + ${App.FormFields.button_tag(__("Test"), "", {class: "alt-info", onclick: "App.dialogOf(this).test()"})} + ${App.FormFields.submit_tag(__("Save"), {onclick: "App.dialogOf(this).execute()"})} + ${App.FormFields.cancel_dialog_tag(__("Cancel"))} + ` : ` + ${App.FormFields.button_tag(__("Test"), "", {class: "alt-info", onclick: "App.dialogOf(this).test()"})} + ${App.FormFields.submit_tag(__("Create"), {onclick: "App.dialogOf(this).execute()"})} + ${App.FormFields.cancel_dialog_tag(__("Cancel"))} + `} +
      +
      + `); if (!App.isPrefs()) { const selectedText = App.getSelectedText(); -- cgit v1.2.3 From 3b8d69206ccc24b41b45acd55f0c63681e749fd1 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 21 Feb 2021 10:28:59 +0300 Subject: deal with filter actions UI --- js/CommonFilters.js | 118 ++++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 60 deletions(-) (limited to 'js/CommonFilters.js') diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 75e1fa8af..5874170b8 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -209,13 +209,13 @@ const Filters = {
      -
      - + ${App.FormFields.select_hash("filter_type", rule.filter_type, dialog.filter_info.filter_types)}
      @@ -241,10 +241,14 @@ const Filters = { edit_rule_dialog.show(); }, - /*editAction: function(replaceNode, actionStr) { + editAction: function(replaceNode, actionStr) { const edit_action_dialog = new fox.SingleUseDialog({ title: actionStr ? __("Edit action") : __("Add action"), - hideOrShowActionParam: function(sender) { + select_labels: function(name, value, labels, attributes = {}, id = "") { + const values = Object.values(labels).map((label) => label.caption); + return App.FormFields.select_tag(name, value, values, attributes, id); + }, + toggleParam: function(sender) { const action = parseInt(sender.value); dijit.byId("filterDlg_actionParam").domNode.hide(); @@ -262,67 +266,72 @@ const Filters = { }, execute: function () { if (this.validate()) { - dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); + dialog.insertAction(App.byId("filterDlg_Actions"), replaceNode); this.hide(); } - } + }, + content: __("Loading, please wait...") }); const tmph = dojo.connect(edit_action_dialog, "onShow", null, function () { dojo.disconnect(tmph); - xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { - edit_action_dialog.attr('content', reply); + let action; - setTimeout(() => { - edit_action_dialog.hideOrShowActionParam(dijit.byId("filterDlg_actionSelect").attr('value')); - }, 250); - }); - }); - - edit_action_dialog.show(); - }, */ - /*editAction: function(replaceNode, actionStr) { - const edit_action_dialog = new fox.SingleUseDialog({ - title: actionStr ? __("Edit action") : __("Add action"), - hideOrShowActionParam: function(sender) { - const action = parseInt(sender.value); + if (actionStr) { + action = JSON.parse(actionStr); + } else { + action = { + action_id: 2, + action_param: "" + }; + } - dijit.byId("filterDlg_actionParam").domNode.hide(); - dijit.byId("filterDlg_actionParamLabel").domNode.hide(); - dijit.byId("filterDlg_actionParamPlugin").domNode.hide(); + console.log(action); - // if selected action supports parameters, enable params field - if (action == dialog.ACTION_LABEL) { - dijit.byId("filterDlg_actionParamLabel").domNode.show(); - } else if (action == dialog.ACTION_PLUGIN) { - dijit.byId("filterDlg_actionParamPlugin").domNode.show(); - } else if (dialog.PARAM_ACTIONS.indexOf(action) != -1) { - dijit.byId("filterDlg_actionParam").domNode.show(); - } - }, - execute: function () { - if (this.validate()) { - dialog.createNewActionElement(App.byId("filterDlg_Actions"), replaceNode); - this.hide(); - } - } - }); + edit_action_dialog.attr('content', + ` +
      +
      + ${App.FormFields.select_hash("action_id", -1, + dialog.filter_info.action_types, + {onchange: "App.dialogOf(this).toggleParam(this)"}, + "filterDlg_actionSelect")} + + + + ${edit_action_dialog.select_labels("action_param_label", action.action_param, + dialog.filter_info.labels, + {}, + "filterDlg_actionParamLabel")} + + ${App.FormFields.select_hash("action_param_plugin", action.action_param, + dialog.filter_info.plugin_actions, + {}, + "filterDlg_actionParamPlugin")} +
      +
      + ${App.FormFields.submit_tag(__("Save action"), {onclick: "App.dialogOf(this).execute()"})} + ${App.FormFields.cancel_dialog_tag(__("Cancel"))} +
      +
      + `); - const tmph = dojo.connect(edit_action_dialog, "onShow", null, function () { - dojo.disconnect(tmph); + dijit.byId("filterDlg_actionSelect").attr('value', action.action_id); - xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { + /*xhr.post("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (reply) => { edit_action_dialog.attr('content', reply); setTimeout(() => { edit_action_dialog.hideOrShowActionParam(dijit.byId("filterDlg_actionSelect").attr('value')); }, 250); - }); + });*/ }); edit_action_dialog.show(); - },*/ + }, selectRules: function (select) { Lists.select("filterDlg_Matches", select); }, @@ -395,18 +404,7 @@ const Filters = { const tmph = dojo.connect(dialog, 'onShow', function () { dojo.disconnect(tmph); - const query = {op: "pref-filters", method: "edit", id: filter_id}; - - /*if (!App.isPrefs()) { - query = { - op: "pref-filters", method: "edit", - feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() - }; - } else { - query = {op: "pref-filters", method: "edit", id: id}; - }*/ - - xhr.json("backend.php", query, function (filter) { + xhr.json("backend.php", {op: "pref-filters", method: "edit", id: filter_id}, function (filter) { dialog.filter_info = filter; @@ -476,10 +474,10 @@ const Filters = { dojoType="dijit.MenuItem">${__("None")} - - @@ -488,7 +486,7 @@ const Filters = { ${filter.actions.map((action) => `
    • ${App.FormFields.checkbox_tag("", false, "", {onclick: 'Lists.onRowChecked(this)'})} - ${App.escapeHtml(action.name)} + ${App.escapeHtml(action.name)} ${App.FormFields.hidden_tag("action[]", JSON.stringify(action))}
    • `).join("")} -- cgit v1.2.3