summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-08-30 18:50:56 +0400
committerAndrew Dolgov <[email protected]>2012-08-31 12:13:47 +0400
commit6aff7845751e1671f436da6686209b414fdcfcc4 (patch)
tree412bfad8bdb8d23eebb84ff96ba6077e901f6d8b /js
parentf9ebb32ca0a84ec5553d0494cdfc628753fcb36a (diff)
implement multiple rule/action filters
Diffstat (limited to 'js')
-rw-r--r--js/functions.js256
-rw-r--r--js/prefs.js96
2 files changed, 227 insertions, 125 deletions
diff --git a/js/functions.js b/js/functions.js
index 3aa730359..f2c5e3bf5 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -545,7 +545,7 @@ function fatalError(code, msg, ext_info) {
}
}
-function filterDlgCheckType(sender) {
+/* function filterDlgCheckType(sender) {
try {
@@ -565,7 +565,7 @@ function filterDlgCheckType(sender) {
exception_error("filterDlgCheckType", e);
}
-}
+} */
function filterDlgCheckAction(sender) {
@@ -938,17 +938,163 @@ function quickAddFeed() {
}
}
+function createNewRuleElement(parentNode, replaceNode) {
+ try {
+ var form = document.forms["filter_new_rule_form"];
+
+ var query = "backend.php?op=pref-filters&method=printrulename&rule="+
+ param_escape(dojo.formToJson(form));
+
+ console.log(query);
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function (transport) {
+ try {
+ var li = dojo.create("li");
+
+ dojo.create("input", { type: "checkbox",
+ onclick: function() { toggleSelectListRow(this) },
+ }, li);
+
+ 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) {
+ exception_error("createNewRuleElement", e);
+ }
+ } });
+ } catch (e) {
+ exception_error("createNewRuleElement", e);
+ }
+}
+
+function createNewActionElement(parentNode, replaceNode) {
+ try {
+ var form = document.forms["filter_new_action_form"];
+
+ if (form.action_id.value == 7) {
+ form.action_param.value = form.action_param_label.value;
+ }
+
+ var query = "backend.php?op=pref-filters&method=printactionname&action="+
+ param_escape(dojo.formToJson(form));
+
+ console.log(query);
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function (transport) {
+ try {
+ var li = dojo.create("li");
+
+ dojo.create("input", { type: "checkbox",
+ onclick: function() { toggleSelectListRow(this) },
+ }, li);
+
+ 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) {
+ exception_error("createNewActionElement", e);
+ }
+ } });
+ } catch (e) {
+ exception_error("createNewActionElement", e);
+ }
+}
+
+
+function addFilterRule(replaceNode, ruleStr) {
+ try {
+ if (dijit.byId("filterNewRuleDlg"))
+ dijit.byId("filterNewRuleDlg").destroyRecursive();
+
+ var query = "backend.php?op=pref-filters&method=newrule&rule=" +
+ param_escape(ruleStr);
+
+ var rule_dlg = new dijit.Dialog({
+ id: "filterNewRuleDlg",
+ title: ruleStr ? __("Edit rule") : __("Add rule"),
+ style: "width: 600px",
+ execute: function() {
+ if (this.validate()) {
+ createNewRuleElement($("filterDlg_Matches"), replaceNode);
+ this.hide();
+ }
+ },
+ href: query});
+
+ rule_dlg.show();
+ } catch (e) {
+ exception_error("addFilterRule", e);
+ }
+}
+
+function addFilterAction(replaceNode, actionStr) {
+ try {
+ if (dijit.byId("filterNewActionDlg"))
+ dijit.byId("filterNewActionDlg").destroyRecursive();
+
+ var query = "backend.php?op=pref-filters&method=newaction&action=" +
+ param_escape(actionStr);
+
+ var rule_dlg = new dijit.Dialog({
+ id: "filterNewActionDlg",
+ title: actionStr ? __("Edit action") : __("Add action"),
+ style: "width: 600px",
+ execute: function() {
+ if (this.validate()) {
+ createNewActionElement($("filterDlg_Actions"), replaceNode);
+ this.hide();
+ }
+ },
+ href: query});
+
+ rule_dlg.show();
+ } catch (e) {
+ exception_error("addFilterAction", e);
+ }
+}
+
function quickAddFilter() {
try {
var query = "";
if (!inPreferences()) {
- query = "backend.php?op=dlg&method=quickAddFilter&feed=" +
+ query = "backend.php?op=pref-filters&method=newfilter&feed=" +
param_escape(getActiveFeedId()) + "&is_cat=" +
param_escape(activeFeedIsCat());
} else {
- query = "backend.php?op=dlg&method=quickAddFilter";
+ query = "backend.php?op=pref-filters&method=newfilter";
}
+ console.log(query);
+
if (dijit.byId("feedEditDlg"))
dijit.byId("feedEditDlg").destroyRecursive();
@@ -959,96 +1105,46 @@ function quickAddFilter() {
id: "filterEditDlg",
title: __("Create Filter"),
style: "width: 600px",
- test: function() {
- if (this.validate()) {
-
- var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
- param_escape(dialog.attr('value').reg_exp);
-
- notify_progress("Verifying regular expression...");
-
- new Ajax.Request("backend.php", {
- parameters: query,
- onComplete: function(transport) {
- var reply = JSON.parse(transport.responseText);
-
- if (reply) {
- notify('');
-
- if (!reply['status']) {
- alert("Invalid regular expression.");
- return;
- } else {
-
- if (dijit.byId("filterTestDlg"))
- dijit.byId("filterTestDlg").destroyRecursive();
-
- tdialog = new dijit.Dialog({
- id: "filterTestDlg",
- title: __("Filter Test Results"),
- style: "width: 600px",
- href: "backend.php?savemode=test&" +
- dojo.objectToQuery(dialog.attr('value')),
- });
-
- tdialog.show();
- }
- }
- }});
- }
+ editRule: function(e) {
+ var li = e.parentNode;
+ var rule = li.getElementsByTagName("INPUT")[1].value;
+ addFilterRule(li, rule);
+ },
+ editAction: function(e) {
+ var li = e.parentNode;
+ var action = li.getElementsByTagName("INPUT")[1].value;
+ addFilterAction(li, action);
+ },
+ addAction: function() { addFilterAction(); },
+ addRule: function() { 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()) {
- var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
- param_escape(dialog.attr('value').reg_exp);
+ var query = dojo.formToQuery("filter_new_form");
- notify_progress("Verifying regular expression...");
+ console.log(query);
- new Ajax.Request("backend.php", {
+ new Ajax.Request("backend.php", {
parameters: query,
- onComplete: function(transport) {
- var reply = JSON.parse(transport.responseText);
-
- if (reply) {
- notify('');
-
- if (!reply['status']) {
- alert("Invalid regular expression.");
- return;
- } else {
- notify_progress("Saving data...", true);
-
- console.log(dojo.objectToQuery(dialog.attr('value')));
-
- new Ajax.Request("backend.php", {
- parameters: dojo.objectToQuery(dialog.attr('value')),
- onComplete: function(transport) {
- dialog.hide();
- notify_info(transport.responseText);
- if (inPreferences()) {
- updateFilterList();
- }
- }});
- }
+ onComplete: function (transport) {
+ if (inPreferences()) {
+ updateFilterList();
}
- }});
+
+ dialog.hide();
+ } });
}
},
href: query});
dialog.show();
- var lh = dojo.connect(dialog, "onLoad",
- function() {
- dojo.disconnect(lh);
- var title = $("PTITLE-FULL-" + active_post_id);
-
- if (title) {
- $("filterDlg_regExp").value = title.innerHTML;
- }
- });
-
} catch (e) {
exception_error("quickAddFilter", e);
}
diff --git a/js/prefs.js b/js/prefs.js
index b308d011d..1fbbc55a5 100644
--- a/js/prefs.js
+++ b/js/prefs.js
@@ -136,9 +136,18 @@ function editFilter(id) {
id: "filterEditDlg",
title: __("Edit Filter"),
style: "width: 600px",
+ editRule: function(e) {
+ var li = e.parentNode;
+ var rule = li.getElementsByTagName("INPUT")[1].value;
+ addFilterRule(li, rule);
+ },
+ editAction: function(e) {
+ var li = e.parentNode;
+ var action = li.getElementsByTagName("INPUT")[1].value;
+ addFilterAction(li, action);
+ },
removeFilter: function() {
- var title = this.attr('value').reg_exp;
- var msg = __("Remove filter %s?").replace("%s", title);
+ var msg = __("Remove filter?");
if (confirm(msg)) {
this.hide();
@@ -157,57 +166,29 @@ function editFilter(id) {
} });
}
},
- test: function() {
- if (this.validate()) {
-
- if (dijit.byId("filterTestDlg"))
- dijit.byId("filterTestDlg").destroyRecursive();
-
- tdialog = new dijit.Dialog({
- id: "filterTestDlg",
- title: __("Filter Test Results"),
- style: "width: 600px",
- href: "backend.php?savemode=test&" +
- dojo.objectToQuery(dialog.attr('value')),
- });
-
- tdialog.show();
-
- }
+ addAction: function() { addFilterAction(); },
+ addRule: function() { 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()) {
- var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
- param_escape(dialog.attr('value').reg_exp);
+ notify_progress("Saving data...", true);
- notify_progress("Verifying regular expression...");
+ var query = dojo.formToQuery("filter_edit_form");
- new Ajax.Request("backend.php", {
+ console.log(query);
+
+ new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
- var reply = JSON.parse(transport.responseText);
-
- if (reply) {
- notify('');
-
- if (!reply['status']) {
- alert("Match regular expression seems to be invalid.");
- return;
- } else {
- notify_progress("Saving data...", true);
-
- console.log(dojo.objectToQuery(dialog.attr('value')));
-
- new Ajax.Request("backend.php", {
- parameters: dojo.objectToQuery(dialog.attr('value')),
- onComplete: function(transport) {
- dialog.hide();
- updateFilterList();
- }});
- }
- }
- }});
+ dialog.hide();
+ updateFilterList();
+ }});
}
},
href: query});
@@ -605,6 +586,31 @@ function editSelectedFilter() {
}
+function joinSelectedFilters() {
+ var rows = getSelectedFilters();
+
+ if (rows.length == 0) {
+ alert(__("No filters are selected."));
+ return;
+ }
+
+ var ok = confirm(__("Combine selected filters?"));
+
+ if (ok) {
+ notify_progress("Joining filters...");
+
+ var query = "?op=pref-filters&method=join&ids="+
+ param_escape(rows.toString());
+
+ console.log(query);
+
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ updateFilterList();
+ } });
+ }
+}
function editSelectedFeed() {
var rows = getSelectedFeeds();