diff options
Diffstat (limited to 'js/CommonFilters.js')
-rw-r--r-- | js/CommonFilters.js | 657 |
1 files changed, 321 insertions, 336 deletions
diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 1538a3fb3..9676abe9e 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -1,398 +1,383 @@ 'use strict' -/* global __, ngettext */ -define(["dojo/_base/declare"], function (declare) { - Filters = { - filterDlgCheckRegExp: function(sender) { - const tooltip = dijit.byId("filterDlg_regExp_tip").domNode; - try { - sender.domNode.removeClassName("invalid"); - sender.domNode.removeClassName("valid"); +/* global __, App, Article, Lists, Effect */ +/* global xhrPost, dojo, dijit, Notify, $$, Feeds */ - new RegExp("/" + sender.value + "/"); +const Filters = { + filterDlgCheckAction: function(sender) { + const action = sender.value; - sender.domNode.addClassName("valid"); - tooltip.innerText = __("Regular expression, without outer delimiters (i.e. slashes)"); + const action_param = $("filterDlg_paramBox"); - } catch (e) { - sender.domNode.addClassName("invalid"); + if (!action_param) { + console.log("filterDlgCheckAction: can't find action param box!"); + return; + } - tooltip.innerText = e.message; - } - }, - filterDlgCheckAction: function(sender) { - const action = sender.value; + // if selected action supports parameters, enable params field + if (action == 4 || action == 6 || action == 7 || action == 9) { + new Effect.Appear(action_param, {duration: 0.5}); - const action_param = $("filterDlg_paramBox"); + Element.hide(dijit.byId("filterDlg_actionParam").domNode); + Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); + Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); - if (!action_param) { - console.log("filterDlgCheckAction: can't find action param box!"); - return; + 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 selected action supports parameters, enable params field - if (action == 4 || action == 6 || action == 7 || action == 9) { - new Effect.Appear(action_param, {duration: 0.5}); - - Element.hide(dijit.byId("filterDlg_actionParam").domNode); - Element.hide(dijit.byId("filterDlg_actionParamLabel").domNode); - Element.hide(dijit.byId("filterDlg_actionParamPlugin").domNode); + } else { + Element.hide(action_param); + } + }, + createNewRuleElement: function(parentNode, replaceNode) { + const form = document.forms["filter_new_rule_form"]; + const query = {op: "pref-filters", method: "printrulename", rule: dojo.formToJson(form)}; - if (action == 7) { - Element.show(dijit.byId("filterDlg_actionParamLabel").domNode); - } else if (action == 9) { - Element.show(dijit.byId("filterDlg_actionParamPlugin").domNode); + xhrPost("backend.php", query, (transport) => { + try { + const li = dojo.create("li"); + + const cb = dojo.create("input", {type: "checkbox"}, li); + + 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); + + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); } else { - Element.show(dijit.byId("filterDlg_actionParam").domNode); + parentNode.appendChild(li); } - - } else { - Element.hide(action_param); + } catch (e) { + App.Error.report(e); } - }, - createNewRuleElement: function(parentNode, replaceNode) { - const form = document.forms["filter_new_rule_form"]; - const query = {op: "pref-filters", method: "printrulename", rule: dojo.formToJson(form)}; - - xhrPost("backend.php", query, (transport) => { - try { - const li = dojo.create("li"); - - const cb = dojo.create("input", {type: "checkbox"}, li); - - 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); - - 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; + } + + const query = { + op: "pref-filters", method: "printactionname", + action: dojo.formToJson(form) + }; + + xhrPost("backend.php", query, (transport) => { + try { + const li = dojo.create("li"); + + const cb = dojo.create("input", {type: "checkbox"}, li); + + new dijit.form.CheckBox({ + onChange: function () { + Lists.onRowChecked(this); + }, + }, cb); + + 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); + + if (replaceNode) { + parentNode.replaceChild(li, replaceNode); + } else { + parentNode.appendChild(li); } - }); - }, - 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; - } - - const query = { - op: "pref-filters", method: "printactionname", - action: dojo.formToJson(form) - }; - - xhrPost("backend.php", query, (transport) => { - try { - const li = dojo.create("li"); - - const cb = dojo.create("input", {type: "checkbox"}, li); - - new dijit.form.CheckBox({ - onChange: function () { - Lists.onRowChecked(this); - }, - }, cb); - - 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); - - if (replaceNode) { - parentNode.replaceChild(li, replaceNode); - } else { - parentNode.appendChild(li); - } - } catch (e) { - App.Error.report(e); + } catch (e) { + App.Error.report(e); + } + }); + }, + addFilterRule: function(replaceNode, ruleStr) { + if (dijit.byId("filterNewRuleDlg")) + dijit.byId("filterNewRuleDlg").destroyRecursive(); + + const rule_dlg = new dijit.Dialog({ + id: "filterNewRuleDlg", + title: ruleStr ? __("Edit rule") : __("Add rule"), + style: "width: 600px", + execute: function () { + if (this.validate()) { + Filters.createNewRuleElement($("filterDlg_Matches"), replaceNode); + this.hide(); } - }); - }, - addFilterRule: function(replaceNode, ruleStr) { - if (dijit.byId("filterNewRuleDlg")) - dijit.byId("filterNewRuleDlg").destroyRecursive(); - - const query = "backend.php?op=pref-filters&method=newrule&rule=" + - encodeURIComponent(ruleStr); - - const rule_dlg = new dijit.Dialog({ - id: "filterNewRuleDlg", - title: ruleStr ? __("Edit rule") : __("Add rule"), - style: "width: 600px", - execute: function () { - if (this.validate()) { - Filters.createNewRuleElement($("filterDlg_Matches"), replaceNode); - this.hide(); - } - }, - href: query - }); - - rule_dlg.show(); - }, - addFilterAction: function(replaceNode, actionStr) { - if (dijit.byId("filterNewActionDlg")) - dijit.byId("filterNewActionDlg").destroyRecursive(); - - const query = "backend.php?op=pref-filters&method=newaction&action=" + - encodeURIComponent(actionStr); - - const rule_dlg = new dijit.Dialog({ - id: "filterNewActionDlg", - title: actionStr ? __("Edit action") : __("Add action"), - style: "width: 600px", - execute: function () { - if (this.validate()) { - Filters.createNewActionElement($("filterDlg_Actions"), replaceNode); - this.hide(); - } - }, - href: query - }); + }, + content: __('Loading, please wait...'), + }); - rule_dlg.show(); - }, - editFilterTest: function(query) { + const tmph = dojo.connect(rule_dlg, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); - if (dijit.byId("filterTestDlg")) - dijit.byId("filterTestDlg").destroyRecursive(); - - const test_dlg = new dijit.Dialog({ - id: "filterTestDlg", - title: "Test Filter", - style: "width: 600px", - results: 0, - limit: 100, - max_offset: 10000, - getTestResults: function (query, offset) { - const updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit; - - console.log("getTestResults:" + offset); + xhrPost("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (transport) => { + rule_dlg.attr('content', transport.responseText); + }); + }); + + rule_dlg.show(); + }, + addFilterAction: function(replaceNode, actionStr) { + if (dijit.byId("filterNewActionDlg")) + dijit.byId("filterNewActionDlg").destroyRecursive(); + + const query = "backend.php?op=pref-filters&method=newaction&action=" + + encodeURIComponent(actionStr); + + const rule_dlg = new dijit.Dialog({ + id: "filterNewActionDlg", + title: actionStr ? __("Edit action") : __("Add action"), + style: "width: 600px", + execute: function () { + if (this.validate()) { + Filters.createNewActionElement($("filterDlg_Actions"), replaceNode); + this.hide(); + } + }, + href: query + }); - xhrPost("backend.php", updquery, (transport) => { - try { - const result = JSON.parse(transport.responseText); + rule_dlg.show(); + }, + editFilterTest: function(params) { - if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { - test_dlg.results += result.length; + if (dijit.byId("filterTestDlg")) + dijit.byId("filterTestDlg").destroyRecursive(); - console.log("got results:" + result.length); + const test_dlg = new dijit.Dialog({ + id: "filterTestDlg", + title: "Test Filter", + style: "width: 600px", + results: 0, + limit: 100, + max_offset: 10000, + getTestResults: function (params, offset) { + params.method = 'testFilterDo'; + params.offset = offset; + params.limit = test_dlg.limit; - $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") - .replace("%f", test_dlg.results) - .replace("%d", offset); + console.log("getTestResults:" + offset); - console.log(offset + " " + test_dlg.max_offset); + xhrPost("backend.php", params, (transport) => { + try { + const result = JSON.parse(transport.responseText); - for (let i = 0; i < result.length; i++) { - const tmp = new Element("table"); - tmp.innerHTML = result[i]; - dojo.parser.parse(tmp); + if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { + test_dlg.results += result.length; - $("prefFilterTestResultList").innerHTML += tmp.innerHTML; - } + console.log("got results:" + result.length); - if (test_dlg.results < 30 && offset < test_dlg.max_offset) { + $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") + .replace("%f", test_dlg.results) + .replace("%d", offset); - // get the next batch - window.setTimeout(function () { - test_dlg.getTestResults(query, offset + test_dlg.limit); - }, 0); + console.log(offset + " " + test_dlg.max_offset); - } else { - // all done + for (let i = 0; i < result.length; i++) { + const tmp = dojo.create("table", { innerHTML: result[i]}); - Element.hide("prefFilterLoadingIndicator"); + $("prefFilterTestResultList").innerHTML += tmp.innerHTML; + } - if (test_dlg.results == 0) { - $("prefFilterTestResultList").innerHTML = `<tr><td align='center'> - ${__('No recent articles matching this filter have been found.')}</td></tr>`; - $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; - } else { - $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") - .replace("%d", test_dlg.results); - } + if (test_dlg.results < 30 && offset < test_dlg.max_offset) { - } + // get the next batch + window.setTimeout(function () { + test_dlg.getTestResults(params, offset + test_dlg.limit); + }, 0); - } else if (!result) { - console.log("getTestResults: can't parse results object"); + } else { + // all done Element.hide("prefFilterLoadingIndicator"); - Notify.error("Error while trying to get filter test results."); + if (test_dlg.results == 0) { + $("prefFilterTestResultList").innerHTML = `<tr><td align='center'> + ${__('No recent articles matching this filter have been found.')}</td></tr>`; + $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; + } else { + $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") + .replace("%d", test_dlg.results); + } - } else { - console.log("getTestResults: dialog closed, bailing out."); } - } catch (e) { - App.Error.report(e); - } - }); - }, - href: query - }); + } else if (!result) { + console.log("getTestResults: can't parse results object"); - dojo.connect(test_dlg, "onLoad", null, function (e) { - test_dlg.getTestResults(query, 0); - }); + Element.hide("prefFilterLoadingIndicator"); - test_dlg.show(); - }, - quickAddFilter: function() { - let query; + Notify.error("Error while trying to get filter test results."); - if (!App.isPrefs()) { - query = { - op: "pref-filters", method: "newfilter", - feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() - }; - } else { - query = {op: "pref-filters", method: "newfilter"}; - } - - 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"), - style: "width: 600px", - test: function () { - const query = "backend.php?" + dojo.formToQuery("filter_new_form") + "&savemode=test"; - - Filters.editFilterTest(query); - }, - 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()) { + } else { + console.log("getTestResults: dialog closed, bailing out."); + } + } catch (e) { + App.Error.report(e); + } - const query = dojo.formToQuery("filter_new_form"); + }); + }, + href: "backend.php?op=pref-filters&method=testFilterDlg" + }); + + dojo.connect(test_dlg, "onLoad", null, function (/* e */) { + test_dlg.getTestResults(params, 0); + }); + + test_dlg.show(); + }, + quickAddFilter: function() { + let query; + + if (!App.isPrefs()) { + query = { + op: "pref-filters", method: "newfilter", + feed: Feeds.getActive(), is_cat: Feeds.activeIsCat() + }; + } else { + query = {op: "pref-filters", method: "newfilter"}; + } + + 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"), + style: "width: 600px", + 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()) { - xhrPost("backend.php", query, () => { - if (App.isPrefs()) { - dijit.byId("filterTree").reload(); - } + const query = dojo.formToQuery("filter_new_form"); - dialog.hide(); - }); - } - }, - href: "backend.php?" + dojo.objectToQuery(query) - }); + xhrPost("backend.php", query, () => { + if (App.isPrefs()) { + dijit.byId("filterTree").reload(); + } - if (!App.isPrefs()) { - const selectedText = getSelectionText(); + dialog.hide(); + }); + } + }, + href: "backend.php?" + dojo.objectToQuery(query) + }); - const lh = dojo.connect(dialog, "onLoad", function () { - dojo.disconnect(lh); + if (!App.isPrefs()) { + /* global getSelectionText */ + const selectedText = getSelectionText(); - if (selectedText != "") { + const lh = dojo.connect(dialog, "onLoad", function () { + dojo.disconnect(lh); - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + if (selectedText != "") { - const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; + const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : + Feeds.getActive(); - Filters.addFilterRule(null, dojo.toJson(rule)); + const rule = {reg_exp: selectedText, feed_id: [feed_id], filter_type: 1}; - } else { + Filters.addFilterRule(null, dojo.toJson(rule)); - const query = {op: "rpc", method: "getlinktitlebyid", id: Article.getActive()}; + } else { - xhrPost("backend.php", query, (transport) => { - const reply = JSON.parse(transport.responseText); + const query = {op: "rpc", method: "getlinktitlebyid", id: Article.getActive()}; - let title = false; + xhrPost("backend.php", query, (transport) => { + const reply = JSON.parse(transport.responseText); - if (reply && reply.title) title = reply.title; + let title = false; - if (title || Feeds.getActive() || Feeds.activeIsCat()) { + if (reply && reply.title) title = reply.title; - console.log(title + " " + Feeds.getActive()); + if (title || Feeds.getActive() || Feeds.activeIsCat()) { - const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : - Feeds.getActive(); + console.log(title + " " + Feeds.getActive()); - const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; + const feed_id = Feeds.activeIsCat() ? 'CAT:' + parseInt(Feeds.getActive()) : + Feeds.getActive(); - Filters.addFilterRule(null, dojo.toJson(rule)); - } - }); - } - }); - } - dialog.show(); - }, - }; + const rule = {reg_exp: title, feed_id: [feed_id], filter_type: 1}; - return Filters; -}); + Filters.addFilterRule(null, dojo.toJson(rule)); + } + }); + } + }); + } + dialog.show(); + }, +}; |