]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
neon updates; make more icons themeable; misc fixes
[tt-rss.git] / functions.js
index a5d803c9fd1c2affd59eb5a69825dfa3dcc7b034..7a43212dce3c76dad0fe1765b723453fd913ff40 100644 (file)
@@ -84,44 +84,6 @@ function enableHotkeys() {
        hotkeys_enabled = true;
 }
 
-function open_article_callback(transport) {
-       try {
-
-               if (transport.responseXML) {
-                       
-                       var link = transport.responseXML.getElementsByTagName("link")[0];
-                       var id = transport.responseXML.getElementsByTagName("id")[0];
-
-                       debug("open_article_callback, received link: " + link);
-
-                       if (link && id) {
-
-                               var wname = "ttrss_article_" + id.firstChild.nodeValue;
-
-                               debug("link url: " + link.firstChild.nodeValue + ", wname " + wname);
-
-                               var w = window.open(link.firstChild.nodeValue, wname);
-
-                               if (!w) { notify_error("Failed to load article in new window"); }
-
-                               if (id) {
-                                       id = id.firstChild.nodeValue;
-                                       if (!$("headlinesList")) {
-                                               window.setTimeout("toggleUnread(" + id + ", 0)", 100);
-                                       }
-                               }
-                       } else {
-                               notify_error("Can't open article: received invalid article link");
-                       }
-               } else {
-                       notify_error("Can't open article: received invalid XML");
-               }
-
-       } catch (e) {
-               exception_error("open_article_callback", e);
-       }
-}
-
 function param_escape(arg) {
        if (typeof encodeURIComponent != 'undefined')
                return encodeURIComponent(arg); 
@@ -200,13 +162,13 @@ function notify_real(msg, no_hide, n_type) {
                n.className = "notify";
        } else if (n_type == 2) {
                n.className = "notifyProgress";
-               msg = "<img src='images/indicator_white.gif'> " + msg;
+               msg = "<img src='"+getInitParam("sign_progress")+"'> " + msg;
        } else if (n_type == 3) {
                n.className = "notifyError";
-               msg = "<img src='images/sign_excl.gif'> " + msg;
+               msg = "<img src='"+getInitParam("sign_excl")+"'> " + msg;
        } else if (n_type == 4) {
                n.className = "notifyInfo";
-               msg = "<img src='images/sign_info.gif'> " + msg;
+               msg = "<img src='"+getInitParam("sign_info")+"'> " + msg;
        }
 
 //     msg = "<img src='images/live_com_loading.gif'> " + msg;
@@ -564,7 +526,8 @@ function parse_counters(reply, scheduled_call) {
                                                
                                        }
 
-                                       if (row_needs_hl) { 
+                                       if (row_needs_hl && getInitParam("theme") != 'neon' &&
+                                                       getInitParam("theme") != 'lejla') { 
                                                new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5",
                                                        queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } );
 
@@ -1406,20 +1369,14 @@ function createFilter() {
        }
 }
 
-function toggleSubmitNotEmpty(e, submit_id) {
-       try {
-               $(submit_id).disabled = (e.value == "")
-       } catch (e) {
-               exception_error("toggleSubmitNotEmpty", e);
-       }
-}
-
 function isValidURL(s) {
        return s.match("http://") != null || s.match("https://") != null || s.match("feed://") != null;
 }
 
 function subscribeToFeed() {
 
+       try {
+
        var form = document.forms['feed_add_form'];
        var feed_url = form.feed_url.value;
 
@@ -1430,22 +1387,49 @@ function subscribeToFeed() {
 
        notify_progress(__("Subscribing to feed..."), true);
 
-       closeInfoBox();
-
-       var feeds_doc = document;
-
-//     feeds_doc.location.href = "backend.php?op=error&msg=Loading,%20please wait...";
-       
        var query = Form.serialize("feed_add_form");
        
        debug("subscribe q: " + query);
 
+       Form.disable("feed_add_form");
+
        new Ajax.Request("backend.php", {
                parameters: query,
                onComplete: function(transport) { 
-                       dlg_frefresh_callback(transport); 
+                       //dlg_frefresh_callback(transport); 
+
+                       notify('');
+
+                       var result = transport.responseXML.getElementsByTagName('result')[0];
+                       var rc = parseInt(result.getAttribute('code'));
+
+                       Form.enable("feed_add_form");
+
+                       switch (rc) {
+                       case 1:
+                               closeInfoBox();
+                               notify_info(__("Subscribed to %s").replace("%s", feed_url));
+
+                               if (inPreferences()) {
+                                       updateFeedList();
+                               } else {
+                                       setTimeout('updateFeedList(false, false)', 50);
+                               }
+                               break;
+                       case 2:
+                               alert(__("Can't subscribe to the specified URL."));
+                               break;
+                       case 0:
+                               alert(__("You are already subscribed to this feed."));
+                               break;
+                       }
+
                } });
 
+       } catch (e) {
+               exception_error("subscribeToFeed", e);
+       }
+
        return false;
 }
 
@@ -1739,9 +1723,32 @@ function openArticleInNewWindow(id) {
                new Ajax.Request("backend.php", {
                        parameters: query,
                        onComplete: function(transport) { 
-                               open_article_callback(transport); 
-                       } });
 
+                                       var link = transport.responseXML.getElementsByTagName("link")[0];
+                                       var id = transport.responseXML.getElementsByTagName("id")[0];
+               
+                                       debug("open_article received link: " + link);
+               
+                                       if (link && id) {
+               
+                                               var wname = "ttrss_article_" + id.firstChild.nodeValue;
+               
+                                               debug("link url: " + link.firstChild.nodeValue + ", wname " + wname);
+               
+                                               var w = window.open(link.firstChild.nodeValue, wname);
+               
+                                               if (!w) { notify_error("Failed to load article in new window"); }
+               
+                                               if (id) {
+                                                       id = id.firstChild.nodeValue;
+                                                       if (!$("headlinesList")) {
+                                                               window.setTimeout("toggleUnread(" + id + ", 0)", 100);
+                                                       }
+                                               }
+                                       } else {
+                                               notify_error("Can't open article: received invalid article link");
+                                       }
+                               } });
 
        } catch (e) {
                exception_error("openArticleInNewWindow", e);
@@ -1778,49 +1785,6 @@ Position.Center = function(element, parent) {
 }
 
 
-function labeltest_callback(transport) {
-       try {
-               var container = $('label_test_result');
-       
-               container.innerHTML = transport.responseText;
-               if (!Element.visible(container)) {
-                       Effect.SlideDown(container, { duration : 0.5 });
-               }
-
-               notify("");
-       } catch (e) {
-               exception_error("labeltest_callback", e);
-       }
-}
-
-function labelTest() {
-
-       try {
-               var container = $('label_test_result');
-       
-               var form = document.forms['label_edit_form'];
-       
-               var sql_exp = form.sql_exp.value;
-               var description = form.description.value;
-       
-               notify_progress("Loading, please wait...");
-       
-               var query = "?op=pref-labels&subop=test&expr=" +
-                       param_escape(sql_exp) + "&descr=" + param_escape(description);
-       
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function (transport) {
-                               labeltest_callback(transport);
-                       } });
-       
-               return false;
-
-       } catch (e) {
-               exception_error("labelTest", e);
-       }
-}
-
 function isCdmMode() {
        return !$("headlinesList");
 }
@@ -2043,11 +2007,7 @@ function getSelectedFeedsFromBrowser() {
 function updateFeedBrowser() {
        try {
 
-               var options = Form.serialize("feed_browser");
-
-               var query = "?op=rpc&subop=feedBrowser&" + options;
-
-               //notify_progress("Loading, please wait...", true);
+               var query = Form.serialize("feed_browser");
 
                Element.show('feed_browser_spinner');
 
@@ -2061,10 +2021,17 @@ function updateFeedBrowser() {
                                var c = $("browseFeedList");
                                var r = transport.responseXML.getElementsByTagName("content")[0];
                                var nr = transport.responseXML.getElementsByTagName("num-results")[0];
+                               var mode = transport.responseXML.getElementsByTagName("mode")[0];
 
                                if (c && r) {
                                        c.innerHTML = r.firstChild.nodeValue;
                                }
+
+                               if (parseInt(mode.getAttribute("value")) == 2) {
+                                       Element.show('feed_archive_remove');
+                               } else {
+                                       Element.hide('feed_archive_remove');
+                               }
        
                        } });
 
@@ -2078,7 +2045,7 @@ function browseFeeds(limit) {
 
        try {
 
-               var query = "?op=pref-feeds&subop=browse";
+/*             var query = "?op=ialog&subop=browse";
 
                notify_progress("Loading, please wait...", true);
 
@@ -2086,7 +2053,9 @@ function browseFeeds(limit) {
                        parameters: query,
                        onComplete: function(transport) { 
                                infobox_callback2(transport);
-                       } });
+                       } }); */
+
+               displayDlg('feedBrowser');
 
                return false;
        } catch (e) {
@@ -2194,7 +2163,7 @@ function displayNewContentPrompt(id) {
        try {
 
                var msg = "<a href='#' onclick='viewfeed("+id+")'>" +
-                       __("New articles available (Click to show)") + "</a>";
+                       __("New articles available in this feed (click to show)") + "</a>";
 
                msg = msg.replace("%s", getFeedName(id));
 
@@ -2206,3 +2175,152 @@ function displayNewContentPrompt(id) {
                exception_error("displayNewContentPrompt", e);
        }
 }
+
+function feedBrowserSubscribe() {
+       try {
+
+               var selected = getSelectedFeedsFromBrowser();
+
+               var mode = document.forms['feed_browser'].mode;
+
+               mode = mode[mode.selectedIndex].value;
+
+               if (selected.length > 0) {
+                       closeInfoBox();
+
+                       notify_progress("Loading, please wait...", true);
+
+                       var query = "?op=rpc&subop=massSubscribe&ids="+
+                               param_escape(selected.toString()) + "&mode=" + param_escape(mode);
+
+                       new Ajax.Request("backend.php", {
+                               parameters: query,
+                               onComplete: function(transport) { 
+
+                                       var nf = transport.responseXML.getElementsByTagName('num-feeds')[0];
+                                       var nf_value = nf.getAttribute("value");
+
+                                       notify_info(__("Subscribed to %d feed(s).").replace("%d", nf_value));
+
+                                       if (inPreferences()) {
+                                               updateFeedList();
+                                       } else {
+                                               setTimeout('updateFeedList(false, false)', 50);
+                                       }
+                               } });
+
+               } else {
+                       alert(__("No feeds are selected."));
+               }
+
+       } catch (e) {
+               exception_error("feedBrowserSubscribe", e);
+       }
+}
+
+function feedArchiveRemove() {
+       try {
+
+               var selected = getSelectedFeedsFromBrowser();
+
+               if (selected.length > 0) {
+
+                       var pr = __("Remove selected feeds from the archive? Feeds with stored articles will not be removed.");
+
+                       if (confirm(pr)) {
+                               Element.show('feed_browser_spinner');
+
+                               var query = "?op=rpc&subop=remarchived&ids=" + 
+                                       param_escape(selected.toString());;
+
+                               new Ajax.Request("backend.php", {
+                                       parameters: query,
+                                       onComplete: function(transport) { 
+                                               updateFeedBrowser();
+                                       } }); 
+                       }
+
+               } else {
+                       alert(__("No feeds are selected."));
+               }
+
+       } catch (e) {
+               exception_error("feedArchiveRemove", e);
+       }
+}
+
+function uploadIconHandler(rc) {
+       try {
+               switch (rc) {
+                       case 0:
+                               notify_info("Upload complete.");
+                               if (inPreferences()) {
+                                       updateFeedList();
+                               } else {
+                                       setTimeout('updateFeedList(false, false)', 50);
+                               }
+                               break;
+                       case 1:
+                               notify_error("Upload failed: icon is too big.");
+                               break;
+                       case 2:
+                               notify_error("Upload failed.");
+                               break;
+               }
+
+       } catch (e) {
+               exception_error("uploadIconHandler", e);
+       }
+}
+
+function removeFeedIcon(id) {
+
+       try {
+
+               if (confirm(__("Remove stored feed icon?"))) {
+                       var query = "backend.php?op=pref-feeds&subop=removeicon&feed_id=" + param_escape(id);
+
+                       debug(query);
+
+                       notify_progress("Removing feed icon...", true);
+
+                       new Ajax.Request("backend.php", {
+                               parameters: query,
+                               onComplete: function(transport) { 
+                                       notify_info("Feed icon removed.");
+                                       if (inPreferences()) {
+                                               updateFeedList();
+                                       } else {
+                                               setTimeout('updateFeedList(false, false)', 50);
+                                       }
+                               } }); 
+               }
+
+               return false;
+       } catch (e) {
+               exception_error("uploadFeedIcon", e);
+       }
+}
+
+function uploadFeedIcon() {
+
+       try {
+
+               var file = $("icon_file");
+
+               if (file.value.length == 0) {
+                       alert(__("Please select an image file to upload."));
+               } else {
+                       if (confirm(__("Upload new icon for this feed?"))) {
+                               notify_progress("Uploading, please wait...", true);
+                               return true;
+                       }
+               }
+
+               return false;
+
+       } catch (e) {
+               exception_error("uploadFeedIcon", e);
+       }
+}
+