]> git.wh0rd.org - tt-rss.git/blobdiff - js/functions.js
move inactiveFeeds and feedsWithErrors to pref-feeds; fix element id collisions
[tt-rss.git] / js / functions.js
index b2d79dc567a012eed2a01a4a6006936ab90d0f7e..97df318e530f8249305acfa06448585a4dbdfd8e 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,9 +938,168 @@ 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");
+
+                                       var cb = dojo.create("input", { type: "checkbox" }, li);
+
+                                       new dijit.form.CheckBox({
+                                               onChange: function() {
+                                                       toggleSelectListRow2(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) {
+                                       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");
+
+                                       var cb = dojo.create("input", { type: "checkbox" }, li);
+
+                                       new dijit.form.CheckBox({
+                                               onChange: function() {
+                                                       toggleSelectListRow2(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) {
+                                       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 = "backend.php?op=dlg&method=quickAddFilter";
+               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";
+               }
+
+               console.log(query);
 
                if (dijit.byId("feedEditDlg"))
                        dijit.byId("feedEditDlg").destroyRecursive();
@@ -980,95 +1112,100 @@ function quickAddFilter() {
                        title: __("Create Filter"),
                        style: "width: 600px",
                        test: function() {
-                               if (this.validate()) {
+                               var query = "backend.php?" + dojo.formToQuery("filter_new_form") + "&savemode=test";
 
-                                       var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
-                                               param_escape(dialog.attr('value').reg_exp);
+                               if (dijit.byId("filterTestDlg"))
+                                       dijit.byId("filterTestDlg").destroyRecursive();
 
-                                       notify_progress("Verifying regular expression...");
+                               var test_dlg = new dijit.Dialog({
+                                       id: "filterTestDlg",
+                                       title: "Test Filter",
+                                       style: "width: 600px",
+                                       href: query});
 
-                                       new Ajax.Request("backend.php", {
-                                               parameters: query,
-                                               onComplete: function(transport) {
-                                                       var reply = JSON.parse(transport.responseText);
+                               test_dlg.show();
+                       },
+                       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;
 
-                                                       if (reply) {
-                                                               notify('');
+                                       if (select)
+                                               e.parentNode.addClassName("Selected");
+                                       else
+                                               e.parentNode.removeClassName("Selected");
 
-                                                               if (!reply['status']) {
-                                                                       alert("Invalid regular expression.");
-                                                                       return;
-                                                               } else {
+                               });
+                       },
+                       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()) {
 
-                                                                       if (dijit.byId("filterTestDlg"))
-                                                                               dijit.byId("filterTestDlg").destroyRecursive();
+                                       var query = dojo.formToQuery("filter_new_form");
 
-                                                                       tdialog = new dijit.Dialog({
-                                                                               id: "filterTestDlg",
-                                                                               title: __("Filter Test Results"),
-                                                                               style: "width: 600px",
-                                                                               href: "backend.php?savemode=test&" +
-                                                                               dojo.objectToQuery(dialog.attr('value')),
-                                                                       });
+                                       console.log(query);
 
-                                                                       tdialog.show();
-                                                               }
+                                       new Ajax.Request("backend.php", {
+                                               parameters: query,
+                                               onComplete: function (transport) {
+                                                       if (inPreferences()) {
+                                                               updateFilterList();
                                                        }
-                                       }});
+
+                                                       dialog.hide();
+                                       } });
                                }
                        },
-                       execute: function() {
-                               if (this.validate()) {
+                       href: query});
 
-                                       var query = "?op=rpc&method=verifyRegexp&reg_exp=" +
-                                               param_escape(dialog.attr('value').reg_exp);
+               if (!inPreferences()) {
+                       var lh = dojo.connect(dialog, "onLoad", function(){
+                               dojo.disconnect(lh);
 
-                                       notify_progress("Verifying regular expression...");
+                               var title = $("PTITLE-FULL-" + active_post_id);
 
-                                       new Ajax.Request("backend.php", {
-                                               parameters: query,
-                                               onComplete: function(transport) {
-                                                       var reply = JSON.parse(transport.responseText);
+                               if (title || getActiveFeedId() || activeFeedIsCat()) {
+                                       if (title) title = title.innerHTML;
 
-                                                       if (reply) {
-                                                               notify('');
+                                       console.log(title + " " + getActiveFeedId());
 
-                                                               if (!reply['status']) {
-                                                                       alert("Invalid regular expression.");
-                                                                       return;
-                                                               } else {
-                                                                       notify_progress("Saving data...", true);
+                                       var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
+                                               getActiveFeedId();
 
-                                                                       console.log(dojo.objectToQuery(dialog.attr('value')));
+                                       var rule = { reg_exp: title, feed_id: feed_id, filter_type: 1 };
 
-                                                                       new Ajax.Request("backend.php", {
-                                                                               parameters: dojo.objectToQuery(dialog.attr('value')),
-                                                                               onComplete: function(transport) {
-                                                                                       dialog.hide();
-                                                                                       notify_info(transport.responseText);
-                                                                                       if (inPreferences()) {
-                                                                                               updateFilterList();
-                                                                                       }
-                                                                       }});
-                                                               }
-                                                       }
-                                       }});
+                                       addFilterRule(null, dojo.toJson(rule));
                                }
-                       },
-                       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);
        }
@@ -1614,7 +1751,7 @@ function feedBrowser() {
 
 function showFeedsWithErrors() {
        try {
-               var query = "backend.php?op=dlg&method=feedsWithErrors";
+               var query = "backend.php?op=pref-feeds&method=feedsWithErrors";
 
                if (dijit.byId("errorFeedsDlg"))
                        dijit.byId("errorFeedsDlg").destroyRecursive();
@@ -1718,3 +1855,8 @@ function get_radio_checked(radioObj) {
        }
        return("");
 }
+
+function get_timestamp() {
+       var date = new Date();
+       return Math.round(date.getTime() / 1000);
+}