]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
misc typo fixes
[tt-rss.git] / functions.js
index 411c82494d6d08958e269a273ebce893880a82be..926e155cc31325e398d1a3f806c2f22404991705 100644 (file)
@@ -8,7 +8,7 @@ Array.prototype.remove = function(s) {
        for (var i=0; i < this.length; i++) {
                if (s == this[i]) this.splice(i, 1);
        }
-}
+};
 
 /* create console.log if it doesn't exist */
 
@@ -61,6 +61,8 @@ function exception_error(location, e, ext_info) {
                                __('Close') + "</button>";
                content += "</div>";
 
+               if (dijit.byId("exceptionDlg"))
+                       dijit.byId("exceptionDlg").destroyRecursive();
 
                var dialog = new dijit.Dialog({
                        id: "exceptionDlg",
@@ -275,8 +277,9 @@ function gotoMain() {
        document.location.href = "tt-rss.php";
 }
 
-function gotoExportOpml() {
-       document.location.href = "opml.php?op=Export";
+function gotoExportOpml(filename, settings) {
+    tmp = settings ? 1 : 0;
+       document.location.href = "opml.php?op=Export&filename=" + filename + "&settings=" + tmp;
 }
 
 
@@ -299,7 +302,7 @@ function gotoExportOpml() {
     if(x.length>1) {
       // remove negative sign
       x=Math.abs(x)+"";
-      for(j=0;j<x.length;j++) {
+      for(var j=0;j<x.length;j++) {
         // call isNumeric recursively for each character
         number=isNumeric(x.substring(j,j+1));
         if(!number) return number;
@@ -365,7 +368,7 @@ function checkboxToggleElement(elem, id) {
 }
 
 function dropboxSelect(e, v) {
-       for (i = 0; i < e.length; i++) {
+       for (var i = 0; i < e.length; i++) {
                if (e[i].value == v) {
                        e.selectedIndex = i;
                        break;
@@ -391,16 +394,6 @@ function make_timestamp() {
 }
 
 
-function closeErrorBox() {
-
-       if (Element.visible("errorBoxShadow")) {
-               Element.hide("dialog_overlay");
-               Element.hide("errorBoxShadow");
-       }
-
-       return false;
-}
-
 function closeInfoBox(cleanup) {
        try {
                dialog = dijit.byId("infoBox");
@@ -442,11 +435,6 @@ function infobox_callback2(transport) {
                //console.log("infobox_callback2");
                notify('');
 
-               var content;
-               var dtitle = "Dialog";
-
-               var dlg = transport.responseXML.getElementsByTagName("dlg")[0];
-
                var title = transport.responseXML.getElementsByTagName("title")[0];
                if (title)
                        title = title.firstChild.nodeValue;
@@ -628,7 +616,7 @@ function filterDlgCheckDate() {
                                var reply = JSON.parse(transport.responseText);
 
                                if (reply['result'] == true) {
-                                       alert(__("Date syntax appears to be correct."));
+                                       alert(__("Date syntax appears to be correct:") + " " + reply['date']);
                                        return;
                                } else {
                                        alert(__("Date syntax is incorrect."));
@@ -943,7 +931,7 @@ function quickAddFeed() {
                                                                }
 
                                                        } catch (e) {
-                                                               exception_error("subscribeToFeed", e);
+                                                               exception_error("subscribeToFeed", e, transport);
                                                        }
 
                                                } });
@@ -969,6 +957,24 @@ function quickAddFilter() {
                        id: "filterEditDlg",
                        title: __("Create Filter"),
                        style: "width: 600px",
+                       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();
+
+                               }
+                       },
                        execute: function() {
                                if (this.validate()) {
 
@@ -1001,7 +1007,7 @@ function quickAddFilter() {
                                                                                        if (inPreferences()) {
                                                                                                updateFilterList();
                                                                                        }
-                                                                       }})
+                                                                       }});
                                                                }
                                                        }
                                        }});
@@ -1015,6 +1021,27 @@ function quickAddFilter() {
        }
 }
 
+function resetPubSub(feed_id, title) {
+
+       var msg = __("Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update.").replace("%s", title);
+
+       if (title == undefined || confirm(msg)) {
+               notify_progress("Loading, please wait...");
+
+               var query = "?op=pref-feeds&quiet=1&subop=resetPubSub&ids=" + feed_id;
+
+               new Ajax.Request("backend.php", {
+                       parameters: query,
+                       onComplete: function(transport) {
+                               dijit.byId("pubsubReset_Btn").attr('disabled', true);
+                               notify_info("Subscription reset.");
+                       } });
+       }
+
+       return false;
+}
+
+
 function unsubscribeFeed(feed_id, title) {
 
        var msg = __("Unsubscribe from %s?").replace("%s", title);
@@ -1055,36 +1082,26 @@ function backend_sanity_check_callback(transport) {
                        return;
                }
 
-               if (!transport.responseXML) {
-                       if (!store) {
-                               fatalError(3, "Sanity check: Received reply is not XML",
-                                       transport.responseText);
-                               return;
-                       }
-               }
-
-               var reply = transport.responseXML.getElementsByTagName("error")[0];
+               var reply = JSON.parse(transport.responseText);
 
                if (!reply) {
                        fatalError(3, "Sanity check: invalid RPC reply", transport.responseText);
                        return;
                }
 
-               var error_code = reply.getAttribute("error-code");
+               var error_code = reply['error']['code'];
 
                if (error_code && error_code != 0) {
-                       return fatalError(error_code, reply.getAttribute("error-msg"));
+                       return fatalError(error_code, reply['error']['message']);
                }
 
                console.log("sanity check ok");
 
-               var params = transport.responseXML.getElementsByTagName("init-params")[0];
+               var params = reply['init-params'];
 
                if (params) {
                        console.log('reading init-params...');
 
-                       params = JSON.parse(params.firstChild.nodeValue);
-
                        if (params) {
                                for (k in params) {
                                        var v = params[k];
@@ -1104,13 +1121,13 @@ function backend_sanity_check_callback(transport) {
        }
 }
 
-function has_local_storage() {
+/*function has_local_storage() {
        try {
                return 'sessionStorage' in window && window['sessionStorage'] != null;
        } catch (e) {
                return false;
        }
-}
+} */
 
 function catSelectOnChange(elem) {
        try {
@@ -1187,8 +1204,8 @@ function genUrlChangeKey(feed, is_cat) {
                                                        e.innerHTML = e.innerHTML.replace(/\&amp;key=.*$/,
                                                                "&amp;key=" + new_link);
 
-                                                       e.href = e.href.replace(/\&amp;key=.*$/,
-                                                               "&amp;key=" + new_link);
+                                                       e.href = e.href.replace(/\&key=.*$/,
+                                                               "&key=" + new_link);
 
                                                        new Effect.Highlight(e);
 
@@ -1332,7 +1349,7 @@ function getSelectedTableRowIds(id) {
        try {
                var elem_rows = $(id).rows;
 
-               for (i = 0; i < elem_rows.length; i++) {
+               for (var i = 0; i < elem_rows.length; i++) {
                        if (elem_rows[i].hasClassName("Selected")) {
                                var bare_id = elem_rows[i].id.replace(/^[A-Z]*?-/, "");
                                rows.push(bare_id);
@@ -1375,7 +1392,7 @@ function editFeed(feed, event) {
                                                        dialog.hide();
                                                        notify('');
                                                        updateFeedList();
-                                       }})
+                                       }});
                                }
                        },
                        href: query});
@@ -1401,7 +1418,7 @@ function feedBrowser() {
                        id: "feedBrowserDlg",
                        title: __("More Feeds"),
                        style: "width: 600px",
-                       getSelectedFeeds: function() {
+                       getSelectedFeedIds: function() {
                                var list = $$("#browseFeedList li[id*=FBROW]");
                                var selected = new Array();
 
@@ -1415,26 +1432,48 @@ function feedBrowser() {
 
                                return selected;
                        },
+                       getSelectedFeeds: function() {
+                               var list = $$("#browseFeedList li.Selected");
+                               var selected = new Array();
+
+                               list.each(function(child) {
+                                       var title = child.getElementsBySelector("span.fb_feedTitle")[0].innerHTML;
+                                       var url = child.getElementsBySelector("a.fb_feedUrl")[0].href;
+
+                                       selected.push([title,url]);
+
+                               });
+
+                               return selected;
+                       },
+
                        subscribe: function() {
-                               var selected = this.getSelectedFeeds();
                                var mode = this.attr('value').mode;
+                               var selected = [];
+
+                               if (mode == "1")
+                                       selected = this.getSelectedFeeds();
+                               else
+                                       selected = this.getSelectedFeedIds();
 
                                if (selected.length > 0) {
                                        dijit.byId("feedBrowserDlg").hide();
 
                                        notify_progress("Loading, please wait...", true);
 
-                                       var query = "?op=rpc&subop=massSubscribe&ids="+
-                                               param_escape(selected.toString()) + "&mode=" + param_escape(mode);
+                                       // we use dojo.toJson instead of JSON.stringify because
+                                       // it somehow escapes everything TWICE, at least in Chrome 9
+
+                                       var query = "?op=rpc&subop=massSubscribe&payload="+
+                                               param_escape(dojo.toJson(selected)) + "&mode=" + param_escape(mode);
 
                                        console.log(query);
 
                                        new Ajax.Request("backend.php", {
                                                parameters: query,
                                                onComplete: function(transport) {
-                                                       if (inPreferences()) {
-                                                               updateFeedList();
-                                                       }
+                                                       notify('');
+                                                       updateFeedList();
                                                } });
 
                                } else {
@@ -1510,4 +1549,109 @@ function feedBrowser() {
        }
 }
 
+function showFeedsWithErrors() {
+       try {
+               var query = "backend.php?op=dlg&id=feedsWithErrors";
+
+               if (dijit.byId("errorFeedsDlg"))
+                       dijit.byId("errorFeedsDlg").destroyRecursive();
 
+               dialog = new dijit.Dialog({
+                       id: "errorFeedsDlg",
+                       title: __("Feeds with update errors"),
+                       style: "width: 600px",
+                       getSelectedFeeds: function() {
+                               return getSelectedTableRowIds("prefErrorFeedList");
+                       },
+                       removeSelected: function() {
+                               var sel_rows = this.getSelectedFeeds();
+
+                               console.log(sel_rows);
+
+                               if (sel_rows.length > 0) {
+                                       var ok = confirm(__("Remove selected feeds?"));
+
+                                       if (ok) {
+                                               notify_progress("Removing selected feeds...", true);
+
+                                               var query = "?op=pref-feeds&subop=remove&ids="+
+                                                       param_escape(sel_rows.toString());
+
+                                               new Ajax.Request("backend.php", {
+                                                       parameters: query,
+                                                       onComplete: function(transport) {
+                                                               notify('');
+                                                               dialog.hide();
+                                                               updateFeedList();
+                                                       } });
+                                       }
+
+                               } else {
+                                       alert(__("No feeds are selected."));
+                               }
+                       },
+                       execute: function() {
+                               if (this.validate()) {
+                               }
+                       },
+                       href: query});
+
+               dialog.show();
+
+       } catch (e) {
+               exception_error("showFeedsWithErrors", e);
+       }
+
+}
+
+/* new support functions for SelectByTag */
+
+function get_all_tags(selObj){
+       try {
+               if( !selObj ) return "";
+
+               var result = "";
+               var len = selObj.options.length;
+
+               for (var i=0; i < len; i++){
+                       if (selObj.options[i].selected) {
+                               result += selObj[i].value + "%2C";   // is really a comma
+                       }
+               }
+
+               if (result.length > 0){
+                       result = result.substr(0, result.length-3);  // remove trailing %2C
+               }
+
+               return(result);
+
+       } catch (e) {
+               exception_error("get_all_tags", e);
+       }
+}
+
+function get_radio_checked(radioObj) {
+       try {
+               if (!radioObj) return "";
+
+               var len = radioObj.length;
+
+               if (len == undefined){
+                       if(radioObj.checked){
+                               return(radioObj.value);
+                       } else {
+                               return("");
+                       }
+               }
+
+               for( var i=0; i < len; i++ ){
+                       if( radioObj[i].checked ){
+                               return( radioObj[i].value);
+                       }
+               }
+
+       } catch (e) {
+               exception_error("get_radio_checked", e);
+       }
+       return("");
+}