X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ffunctions.js;h=98a531851683b241f26a88db56880cef2b45bf92;hb=0d41fd76d3be37903ee405e03cc7bd2e444c7e91;hp=c75fb95cb2ec200f37d5200391d22fdb37df5438;hpb=6e3224a26c46280a351fb0f28c6e9fc0b798ca53;p=tt-rss.git
diff --git a/js/functions.js b/js/functions.js
index c75fb95c..98a53185 100644
--- a/js/functions.js
+++ b/js/functions.js
@@ -44,11 +44,8 @@ function exception_error(location, e, ext_info) {
try {
- if (ext_info) {
- if (ext_info.responseText) {
- ext_info = ext_info.responseText;
- }
- }
+ if (ext_info)
+ ext_info = JSON.stringify(ext_info);
try {
new Ajax.Request("backend.php", {
@@ -104,13 +101,15 @@ function exception_error(location, e, ext_info) {
title: "Unhandled exception",
style: "width: 600px",
report: function() {
- if (confirm(__("Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database."))) {
+ if (confirm(__("Are you sure to report this exception to tt-rss.org? The report will include information about your web browser and tt-rss configuration. Your IP will be saved in the database."))) {
document.forms['exceptionForm'].params.value = $H({
browserName: navigator.appName,
browserVersion: navigator.appVersion,
browserPlatform: navigator.platform,
browserCookies: navigator.cookieEnabled,
+ ttrssVersion: __ttrss_version,
+ initParams: JSON.stringify(init_params),
}).toQueryString();
document.forms['exceptionForm'].submit();
@@ -183,11 +182,6 @@ function param_unescape(arg) {
return unescape(arg);
}
-
-function hide_notify() {
- Element.hide('notify');
-}
-
function notify_real(msg, no_hide, n_type) {
var n = $("notify");
@@ -199,12 +193,11 @@ function notify_real(msg, no_hide, n_type) {
}
if (msg == "") {
- if (Element.visible(n)) {
- notify_hide_timerid = window.setTimeout("hide_notify()", 0);
+ if (n.hasClassName("visible")) {
+ notify_hide_timerid = window.setTimeout(function() {
+ n.removeClassName("visible") }, 0);
}
return;
- } else {
- Element.show(n);
}
/* types:
@@ -218,30 +211,40 @@ function notify_real(msg, no_hide, n_type) {
msg = " " + __(msg) + "";
- if (n_type == 1) {
- n.className = "notify";
- } else if (n_type == 2) {
- n.className = "notify progress";
+ if (n_type == 2) {
msg = "" + msg;
no_hide = true;
} else if (n_type == 3) {
- n.className = "notify error";
msg = "" + msg;
} else if (n_type == 4) {
- n.className = "notify info";
msg = "" + msg;
}
msg += " ";
-// msg = " " + msg;
-
n.innerHTML = msg;
- if (!no_hide) {
- notify_hide_timerid = window.setTimeout("hide_notify()", 5*1000);
- }
+ window.setTimeout(function() {
+ // goddamnit firefox
+ if (n_type == 2) {
+ n.className = "notify notify_progress visible";
+ } else if (n_type == 3) {
+ n.className = "notify notify_error visible";
+ msg = "" + msg;
+ } else if (n_type == 4) {
+ n.className = "notify notify_info visible";
+ } else {
+ n.className = "notify visible";
+ }
+
+ if (!no_hide) {
+ notify_hide_timerid = window.setTimeout(function() {
+ n.removeClassName("visible") }, 5*1000);
+ }
+
+ }, 10);
+
}
function notify(msg, no_hide) {
@@ -829,7 +832,14 @@ function quickAddFeed() {
onComplete: function(transport) {
try {
- var reply = JSON.parse(transport.responseText);
+ try {
+ var reply = JSON.parse(transport.responseText);
+ } catch (e) {
+ Element.hide("feed_add_spinner");
+ alert(__("Failed to parse output. This can indicate server timeout and/or network issues. Backend output was logged to browser console."));
+ console.log('quickAddFeed, backend returned:' + transport.responseText);
+ return;
+ }
var rc = reply['result'];
@@ -854,6 +864,8 @@ function quickAddFeed() {
case 4:
feeds = rc['feeds'];
+ Element.show("fadd_multiple_notify");
+
var select = dijit.byId("feedDlg_feedContainerSelect");
while (select.getOptions().length > 0)
@@ -1148,33 +1160,48 @@ function quickAddFilter() {
href: query});
if (!inPreferences()) {
+ var selectedText = getSelectionText();
+
var lh = dojo.connect(dialog, "onLoad", function(){
dojo.disconnect(lh);
- var query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId();
+ if (selectedText != "") {
- new Ajax.Request("backend.php", {
- parameters: query,
- onComplete: function(transport) {
- var reply = JSON.parse(transport.responseText);
+ var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
+ getActiveFeedId();
+
+ var rule = { reg_exp: selectedText, feed_id: feed_id, filter_type: 1 };
+
+ addFilterRule(null, dojo.toJson(rule));
- var title = false;
+ } else {
- if (reply && reply) title = reply.title;
+ var query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId();
- if (title || getActiveFeedId() || activeFeedIsCat()) {
+ new Ajax.Request("backend.php", {
+ parameters: query,
+ onComplete: function(transport) {
+ var reply = JSON.parse(transport.responseText);
- console.log(title + " " + getActiveFeedId());
+ var title = false;
- var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
- getActiveFeedId();
+ if (reply && reply) title = reply.title;
- var rule = { reg_exp: title, feed_id: feed_id, filter_type: 1 };
+ if (title || getActiveFeedId() || activeFeedIsCat()) {
- addFilterRule(null, dojo.toJson(rule));
- }
+ 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));
+ }
+
+ } });
+
+ }
});
}
@@ -1270,10 +1297,8 @@ function backend_sanity_check_callback(transport) {
console.log('reading init-params...');
for (k in params) {
- var v = params[k];
- console.log("IP: " + k + " => " + v);
-
- if (k == "label_base_index") _label_base_index = parseInt(v);
+ console.log("IP: " + k + " => " + JSON.stringify(params[k]));
+ if (k == "label_base_index") _label_base_index = parseInt(params[k]);
}
init_params = params;
@@ -1934,3 +1959,25 @@ function feed_to_label_id(feed) {
return _label_base_index - 1 + Math.abs(feed);
}
+// http://stackoverflow.com/questions/6251937/how-to-get-selecteduser-highlighted-text-in-contenteditable-element-and-replac
+
+function getSelectionText() {
+ var text = "";
+
+ if (typeof window.getSelection != "undefined") {
+ var sel = window.getSelection();
+ if (sel.rangeCount) {
+ var container = document.createElement("div");
+ for (var i = 0, len = sel.rangeCount; i < len; ++i) {
+ container.appendChild(sel.getRangeAt(i).cloneContents());
+ }
+ text = container.innerHTML;
+ }
+ } else if (typeof document.selection != "undefined") {
+ if (document.selection.type == "Text") {
+ text = document.selection.createRange().textText;
+ }
+ }
+
+ return text.stripTags();
+}