]> git.wh0rd.org - tt-rss.git/blobdiff - js/functions.js
css cleanup; remove auxDlg; add separate prefs.css
[tt-rss.git] / js / functions.js
index 97df318e530f8249305acfa06448585a4dbdfd8e..7da9abfbd636589861593ccca843ad4f625197d6 100644 (file)
@@ -2,6 +2,7 @@ var notify_silent = false;
 var loading_progress = 0;
 var sanity_check_done = false;
 var init_params = {};
+var _label_base_index = -1024;
 
 Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap(
        function (callOriginal, options) {
@@ -193,23 +194,27 @@ function notify_real(msg, no_hide, n_type) {
 
        */
 
-       if (typeof __ != 'undefined') {
-               msg = __(msg);
-       }
+       msg = __(msg);
 
        if (n_type == 1) {
                n.className = "notify";
        } else if (n_type == 2) {
-               n.className = "notifyProgress";
-               msg = "<img src='"+getInitParam("sign_progress")+"'> " + msg;
+               n.className = "notify progress";
+               msg = "<img src='images/indicator_white.gif'> " + msg;
        } else if (n_type == 3) {
-               n.className = "notifyError";
-               msg = "<img src='"+getInitParam("sign_excl")+"'> " + msg;
+               n.className = "notify error";
+               msg = "<img src='images/sign_excl.svg'> " + msg;
        } else if (n_type == 4) {
-               n.className = "notifyInfo";
-               msg = "<img src='"+getInitParam("sign_info")+"'> " + msg;
+               n.className = "notify info";
+               msg = "<img src='images/sign_info.svg'> " + msg;
+       }
+
+       if (no_hide) {
+               msg += " <span>(<a href='#' onclick=\"notify('')\">" +
+                       __("close") + "</a>)</span>";
        }
 
+
 //     msg = "<img src='images/live_com_loading.gif'> " + msg;
 
        nb.innerHTML = msg;
@@ -292,6 +297,10 @@ function gotoPreferences() {
        document.location.href = "prefs.php";
 }
 
+function gotoLogout() {
+       document.location.href = "backend.php?op=logout";
+}
+
 function gotoMain() {
        document.location.href = "index.php";
 }
@@ -346,14 +355,14 @@ function toggleSelectListRow2(sender) {
        return toggleSelectRow(sender, row);
 }
 
-function tSR(sender, row) {
-       return toggleSelectRow(sender, row);
-}
-
 /* this is for dijit Checkbox */
-function toggleSelectRow2(sender, row) {
+function toggleSelectRow2(sender, row, is_cdm) {
 
-       if (!row) row = sender.domNode.parentNode.parentNode;
+       if (!row)
+               if (!is_cdm)
+                       row = sender.domNode.parentNode.parentNode;
+               else
+                       row = sender.domNode.parentNode.parentNode.parentNode; // oh ffs
 
        if (sender.checked && !row.hasClassName('Selected'))
                row.addClassName('Selected');
@@ -708,15 +717,6 @@ function hotkey_prefix_timeout() {
        }
 }
 
-function hideAuxDlg() {
-       try {
-               Element.hide('auxDlg');
-       } catch (e) {
-               exception_error("hideAuxDlg", e);
-       }
-}
-
-
 function uploadIconHandler(rc) {
        try {
                switch (rc) {
@@ -838,8 +838,9 @@ function quickAddFeed() {
        try {
                var query = "backend.php?op=dlg&method=quickAddFeed";
 
-               if (dijit.byId("feedAddDlg"))
-                       dijit.byId("feedAddDlg").destroyRecursive();
+               // overlapping widgets
+               if (dijit.byId("batchSubDlg")) dijit.byId("batchSubDlg").destroyRecursive();
+               if (dijit.byId("feedAddDlg"))   dijit.byId("feedAddDlg").destroyRecursive();
 
                var dialog = new dijit.Dialog({
                        id: "feedAddDlg",
@@ -881,7 +882,7 @@ function quickAddFeed() {
                                                                        alert(__("Specified URL doesn't seem to contain any feeds."));
                                                                        break;
                                                                case 4:
-                                                                       notify_progress("Searching for feed urls...", true);
+                                                                       /* notify_progress("Searching for feed urls...", true);
 
                                                                        new Ajax.Request("backend.php", {
                                                                                parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url),
@@ -912,6 +913,23 @@ function quickAddFeed() {
                                                                                        Effect.Appear('feedDlg_feedsContainer', {duration : 0.5});
                                                                                }
                                                                        });
+                                                                       break; */
+
+                                                                       feeds = rc['feeds'];
+
+                                                                       var select = dijit.byId("feedDlg_feedContainerSelect");
+
+                                                                       while (select.getOptions().length > 0)
+                                                                               select.removeOption(0);
+
+                                                                       var count = 0;
+                                                                       for (var feedUrl in feeds) {
+                                                                               select.addOption({value: feedUrl, label: feeds[feedUrl]});
+                                                                               count++;
+                                                                       }
+
+                                                                       Effect.Appear('feedDlg_feedsContainer', {duration : 0.5});
+
                                                                        break;
                                                                case 5:
                                                                        alert(__("Couldn't download the specified URL: %s").
@@ -942,6 +960,8 @@ function createNewRuleElement(parentNode, replaceNode) {
        try {
                var form = document.forms["filter_new_rule_form"];
 
+               form.reg_exp.value = form.reg_exp.value.replace(/(<([^>]+)>)/ig,"");
+
                var query = "backend.php?op=pref-filters&method=printrulename&rule="+
                        param_escape(dojo.formToJson(form));
 
@@ -1187,20 +1207,31 @@ function quickAddFilter() {
                        var lh = dojo.connect(dialog, "onLoad", function(){
                                dojo.disconnect(lh);
 
-                               var title = $("PTITLE-FULL-" + active_post_id);
+                               var query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId();
+
+                               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;
+                                       var title = false;
 
-                                       console.log(title + " " + getActiveFeedId());
+                                       if (reply && reply) title = reply.title;
 
-                                       var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
-                                               getActiveFeedId();
+                                       if (title || getActiveFeedId() || activeFeedIsCat()) {
 
-                                       var rule = { reg_exp: title, feed_id: feed_id, filter_type: 1 };
+                                               console.log(title + " " + getActiveFeedId());
+
+                                               var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
+                                                       getActiveFeedId();
+
+                                               var rule = { reg_exp: title, feed_id: feed_id, filter_type: 1 };
+
+                                               addFilterRule(null, dojo.toJson(rule));
+                                       }
+
+                               } });
 
-                                       addFilterRule(null, dojo.toJson(rule));
-                               }
                        });
                }
 
@@ -1252,6 +1283,8 @@ function unsubscribeFeed(feed_id, title) {
                                        } else {
                                                if (feed_id == getActiveFeedId())
                                                        setTimeout("viewfeed(-5)", 100);
+
+                                               if (feed_id < 0) updateFeedList();
                                        }
 
                                } });
@@ -1296,6 +1329,8 @@ function backend_sanity_check_callback(transport) {
                                for (k in params) {
                                        var v = params[k];
                                        console.log("IP: " + k + " => " + v);
+
+                                       if (k == "label_base_index") _label_base_index = parseInt(v);
                                }
                        }
 
@@ -1715,7 +1750,7 @@ function feedBrowser() {
                                        } });
                        },
                        removeFromArchive: function() {
-                               var selected = this.getSelectedFeeds();
+                               var selected = this.getSelectedFeedIds();
 
                                if (selected.length > 0) {
 
@@ -1724,7 +1759,7 @@ function feedBrowser() {
                                        if (confirm(pr)) {
                                                Element.show('feed_browser_spinner');
 
-                                               var query = "?op=rpc&method=remarchived&ids=" +
+                                               var query = "?op=rpc&method=remarchive&ids=" +
                                                        param_escape(selected.toString());;
 
                                                new Ajax.Request("backend.php", {
@@ -1860,3 +1895,97 @@ function get_timestamp() {
        var date = new Date();
        return Math.round(date.getTime() / 1000);
 }
+
+function helpDialog(topic) {
+       try {
+               var query = "backend.php?op=backend&method=help&topic=" + param_escape(topic);
+
+               if (dijit.byId("helpDlg"))
+                       dijit.byId("helpDlg").destroyRecursive();
+
+               dialog = new dijit.Dialog({
+                       id: "helpDlg",
+                       title: __("Help"),
+                       style: "width: 600px",
+                       href: query,
+               });
+
+               dialog.show();
+
+       } catch (e) {
+               exception_error("helpDialog", e);
+       }
+}
+
+function htmlspecialchars_decode (string, quote_style) {
+  // http://kevin.vanzonneveld.net
+  // +   original by: Mirek Slugen
+  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+  // +   bugfixed by: Mateusz "loonquawl" Zalega
+  // +      input by: ReverseSyntax
+  // +      input by: Slawomir Kaniecki
+  // +      input by: Scott Cariss
+  // +      input by: Francois
+  // +   bugfixed by: Onno Marsman
+  // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+  // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
+  // +      input by: Ratheous
+  // +      input by: Mailfaker (http://www.weedem.fr/)
+  // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
+  // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
+  // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
+  // *     returns 1: '<p>this -> &quot;</p>'
+  // *     example 2: htmlspecialchars_decode("&amp;quot;");
+  // *     returns 2: '&quot;'
+  var optTemp = 0,
+    i = 0,
+    noquotes = false;
+  if (typeof quote_style === 'undefined') {
+    quote_style = 2;
+  }
+  string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
+  var OPTS = {
+    'ENT_NOQUOTES': 0,
+    'ENT_HTML_QUOTE_SINGLE': 1,
+    'ENT_HTML_QUOTE_DOUBLE': 2,
+    'ENT_COMPAT': 2,
+    'ENT_QUOTES': 3,
+    'ENT_IGNORE': 4
+  };
+  if (quote_style === 0) {
+    noquotes = true;
+  }
+  if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
+    quote_style = [].concat(quote_style);
+    for (i = 0; i < quote_style.length; i++) {
+      // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
+      if (OPTS[quote_style[i]] === 0) {
+        noquotes = true;
+      } else if (OPTS[quote_style[i]]) {
+        optTemp = optTemp | OPTS[quote_style[i]];
+      }
+    }
+    quote_style = optTemp;
+  }
+  if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
+    string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
+    // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
+  }
+  if (!noquotes) {
+    string = string.replace(/&quot;/g, '"');
+  }
+  // Put this in last place to avoid escape being double-decoded
+  string = string.replace(/&amp;/g, '&');
+
+  return string;
+}
+
+
+function label_to_feed_id(label) {
+       return _label_base_index - 1 - Math.abs(label);
+}
+
+function feed_to_label_id(feed) {
+       return _label_base_index - 1 + Math.abs(feed);
+}
+