]> git.wh0rd.org - tt-rss.git/blobdiff - js/functions.js
implement select all/none in filterEditDlg
[tt-rss.git] / js / functions.js
index b2d79dc567a012eed2a01a4a6006936ab90d0f7e..284b2cc563cd733e593348b3299b07873b74327d 100644 (file)
@@ -393,20 +393,6 @@ function getURLParam(param){
        return String(window.location.href).parseQuery()[param];
 }
 
-function leading_zero(p) {
-       var s = String(p);
-       if (s.length == 1) s = "0" + s;
-       return s;
-}
-
-function make_timestamp() {
-       var d = new Date();
-
-       return leading_zero(d.getHours()) + ":" + leading_zero(d.getMinutes()) +
-                       ":" + leading_zero(d.getSeconds());
-}
-
-
 function closeInfoBox(cleanup) {
        try {
                dialog = dijit.byId("infoBox");
@@ -559,22 +545,7 @@ function fatalError(code, msg, ext_info) {
        }
 }
 
-function filterDlgCheckCat(sender) {
-       try {
-               if (sender.checked) {
-                       Element.show('filterDlg_cats');
-                       Element.hide('filterDlg_feeds');
-               } else {
-                       Element.show('filterDlg_feeds');
-                       Element.hide('filterDlg_cats');
-               }
-
-       } catch (e) {
-               exception_error("filterDlgCheckCat", e);
-       }
-}
-
-function filterDlgCheckType(sender) {
+/* function filterDlgCheckType(sender) {
 
        try {
 
@@ -594,7 +565,7 @@ function filterDlgCheckType(sender) {
                exception_error("filterDlgCheckType", e);
        }
 
-}
+} */
 
 function filterDlgCheckAction(sender) {
 
@@ -880,7 +851,7 @@ function quickAddFeed() {
 
                                        var feed_url = this.attr('value').feed;
 
-                                       notify_progress(__("Subscribing to feed..."), true);
+                                       Element.show("feed_add_spinner");
 
                                        new Ajax.Request("backend.php", {
                                                parameters: dojo.objectToQuery(this.attr('value')),
@@ -889,13 +860,14 @@ function quickAddFeed() {
 
                                                                var reply = JSON.parse(transport.responseText);
 
-                                                               var rc = parseInt(reply['result']);
+                                                               var rc = reply['result'];
 
                                                                notify('');
+                                                               Element.hide("feed_add_spinner");
 
                                                                console.log("GOT RC: " + rc);
 
-                                                               switch (rc) {
+                                                               switch (parseInt(rc['code'])) {
                                                                case 1:
                                                                        dialog.hide();
                                                                        notify_info(__("Subscribed to %s").replace("%s", feed_url));
@@ -942,7 +914,8 @@ function quickAddFeed() {
                                                                        });
                                                                        break;
                                                                case 5:
-                                                                       alert(__("Couldn't download the specified URL."));
+                                                                       alert(__("Couldn't download the specified URL: %s").
+                                                                                       replace("%s", rc['message']));
                                                                        break;
                                                                case 0:
                                                                        alert(__("You are already subscribed to this feed."));
@@ -965,110 +938,233 @@ function quickAddFeed() {
        }
 }
 
-function quickAddFilter() {
+function createNewRuleElement(parentNode, replaceNode) {
        try {
-               var query = "backend.php?op=dlg&method=quickAddFilter";
+               var form = document.forms["filter_new_rule_form"];
 
-               if (dijit.byId("feedEditDlg"))
-                       dijit.byId("feedEditDlg").destroyRecursive();
+               var query = "backend.php?op=pref-filters&method=printrulename&rule="+
+                       param_escape(dojo.formToJson(form));
 
-               if (dijit.byId("filterEditDlg"))
-                       dijit.byId("filterEditDlg").destroyRecursive();
+               console.log(query);
 
-               dialog = new dijit.Dialog({
-                       id: "filterEditDlg",
-                       title: __("Create Filter"),
-                       style: "width: 600px",
-                       test: function() {
-                               if (this.validate()) {
+               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);
+       }
+}
 
-                                       var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
-                                               param_escape(dialog.attr('value').reg_exp);
+function createNewActionElement(parentNode, replaceNode) {
+       try {
+               var form = document.forms["filter_new_action_form"];
 
-                                       notify_progress("Verifying regular expression...");
+               if (form.action_id.value == 7) {
+                       form.action_param.value = form.action_param_label.value;
+               }
 
-                                       new Ajax.Request("backend.php", {
-                                               parameters: query,
-                                               onComplete: function(transport) {
-                                                       var reply = JSON.parse(transport.responseText);
+               var query = "backend.php?op=pref-filters&method=printactionname&action="+
+                       param_escape(dojo.formToJson(form));
 
-                                                       if (reply) {
-                                                               notify('');
+               console.log(query);
 
-                                                               if (!reply['status']) {
-                                                                       alert("Invalid regular expression.");
-                                                                       return;
-                                                               } else {
+               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);
+                                       }
 
-                                                                       if (dijit.byId("filterTestDlg"))
-                                                                               dijit.byId("filterTestDlg").destroyRecursive();
+                               } catch (e) {
+                                       exception_error("createNewActionElement", e);
+                               }
+                       } });
+       } catch (e) {
+               exception_error("createNewActionElement", e);
+       }
+}
 
-                                                                       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();
-                                                               }
-                                                       }
-                                       }});
+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});
 
-                                       var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
-                                               param_escape(dialog.attr('value').reg_exp);
+               rule_dlg.show();
+       } catch (e) {
+               exception_error("addFilterAction", e);
+       }
+}
 
-                                       notify_progress("Verifying regular expression...");
+function quickAddFilter() {
+       try {
+               var query = "";
+               if (!inPreferences()) {
+                       query = "backend.php?op=pref-filters&method=newfilter&feed=" +
+                               param_escape(getActiveFeedId()) + "&is_cat=" +
+                               param_escape(activeFeedIsCat());
+               } else {
+                       query = "backend.php?op=pref-filters&method=newfilter";
+               }
 
-                                       new Ajax.Request("backend.php", {
-                                               parameters: query,
-                                               onComplete: function(transport) {
-                                                       var reply = JSON.parse(transport.responseText);
+               console.log(query);
 
-                                                       if (reply) {
-                                                               notify('');
+               if (dijit.byId("feedEditDlg"))
+                       dijit.byId("feedEditDlg").destroyRecursive();
 
-                                                               if (!reply['status']) {
-                                                                       alert("Invalid regular expression.");
-                                                                       return;
-                                                               } else {
-                                                                       notify_progress("Saving data...", true);
+               if (dijit.byId("filterEditDlg"))
+                       dijit.byId("filterEditDlg").destroyRecursive();
 
-                                                                       console.log(dojo.objectToQuery(dialog.attr('value')));
+               dialog = new dijit.Dialog({
+                       id: "filterEditDlg",
+                       title: __("Create Filter"),
+                       style: "width: 600px",
+                       selectRules: function(select) {
+                               $$("#filterDlg_Matches input[type=checkbox]").each(function(e) {
+                                       e.checked = select;
+                                       if (select)
+                                               e.parentNode.addClassName("Selected");
+                                       else
+                                               e.parentNode.removeClassName("Selected");
+                               });
+                       },
+                       selectActions: function(select) {
+                               $$("#filterDlg_Actions input[type=checkbox]").each(function(e) {
+                                       e.checked = select;
 
-                                                                       new Ajax.Request("backend.php", {
-                                                                               parameters: dojo.objectToQuery(dialog.attr('value')),
-                                                                               onComplete: function(transport) {
-                                                                                       dialog.hide();
-                                                                                       notify_info(transport.responseText);
-                                                                                       if (inPreferences()) {
-                                                                                               updateFilterList();
-                                                                                       }
-                                                                       }});
-                                                               }
+                                       if (select)
+                                               e.parentNode.addClassName("Selected");
+                                       else
+                                               e.parentNode.removeClassName("Selected");
+
+                               });
+                       },
+                       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 = dojo.formToQuery("filter_new_form");
+
+                                       console.log(query);
+
+                                       new Ajax.Request("backend.php", {
+                                               parameters: query,
+                                               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);
        }
@@ -1718,3 +1814,8 @@ function get_radio_checked(radioObj) {
        }
        return("");
 }
+
+function get_timestamp() {
+       var date = new Date();
+       return Math.round(date.getTime() / 1000);
+}