X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ffunctions.js;h=98a531851683b241f26a88db56880cef2b45bf92;hb=0d41fd76d3be37903ee405e03cc7bd2e444c7e91;hp=07eed2ad9aee08139446aa751a757d4d080c3d9c;hpb=e8f9069c5c44fb4512247dbc9d280152e760331a;p=tt-rss.git diff --git a/js/functions.js b/js/functions.js index 07eed2ad..98a53185 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,8 +1,8 @@ -var notify_silent = false; var loading_progress = 0; var sanity_check_done = false; var init_params = {}; var _label_base_index = -1024; +var notify_hide_timerid = false; Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( function (callOriginal, options) { @@ -44,12 +44,24 @@ 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", { + parameters: {op: "rpc", method: "log", logmsg: msg}, + onComplete: function (transport) { + console.log(transport.responseText); + } }); + + } catch (eii) { + console.log("Exception while trying to log the error."); + console.log(eii); } + msg += "

"+ __("The error will be reported to the configured log destination.") + + "

"; + var content = "
" + "
" + msg + "
"; @@ -89,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(); @@ -106,7 +120,28 @@ function exception_error(location, e, ext_info) { dialog.show(); - } catch (e) { + } catch (ei) { + console.log("Exception while trying to report an exception. Oh boy."); + console.log(ei); + console.log("Original exception:"); + console.log(e); + + msg += "\n\nAdditional exception caught while trying to show the error dialog.\n\n" + format_exception_error('exception_error', ei); + + try { + new Ajax.Request("backend.php", { + parameters: {op: "rpc", method: "log", logmsg: msg}, + onComplete: function (transport) { + console.log(transport.responseText); + } }); + + } catch (eii) { + console.log("Third exception while trying to log the error! Seriously?"); + console.log(eii); + } + + msg += "\n\nThe error will be reported to the configured log destination."; + alert(msg); } @@ -147,42 +182,22 @@ function param_unescape(arg) { return unescape(arg); } -var notify_hide_timerid = false; - -function hide_notify() { - var n = $("notify"); - if (n) { - n.style.display = "none"; - } -} - -function notify_silent_next() { - notify_silent = true; -} - function notify_real(msg, no_hide, n_type) { - if (notify_silent) { - notify_silent = false; - return; - } - var n = $("notify"); - var nb = $("notify_body"); - if (!n || !nb) return; + if (!n) return; if (notify_hide_timerid) { window.clearTimeout(notify_hide_timerid); } if (msg == "") { - if (n.style.display == "block") { - notify_hide_timerid = window.setTimeout("hide_notify()", 0); + if (n.hasClassName("visible")) { + notify_hide_timerid = window.setTimeout(function() { + n.removeClassName("visible") }, 0); } return; - } else { - n.style.display = "block"; } /* types: @@ -194,34 +209,42 @@ function notify_real(msg, no_hide, n_type) { */ - msg = __(msg); + msg = " " + __(msg) + ""; - if (n_type == 1) { - n.className = "notify"; - } else if (n_type == 2) { - n.className = "notify progress"; - msg = " " + msg; + if (n_type == 2) { + msg = "" + msg; + no_hide = true; } else if (n_type == 3) { - n.className = "notify error"; - msg = " " + msg; + msg = "" + msg; } else if (n_type == 4) { - n.className = "notify info"; - msg = " " + msg; + msg = "" + msg; } - if (no_hide) { - msg += " (" + - __("close") + ")"; - } + msg += " "; + n.innerHTML = msg; -// msg = " " + msg; + 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"; + } - nb.innerHTML = msg; + if (!no_hide) { + notify_hide_timerid = window.setTimeout(function() { + n.removeClassName("visible") }, 5*1000); + } + + }, 10); - if (!no_hide) { - notify_hide_timerid = window.setTimeout("hide_notify()", 3000); - } } function notify(msg, no_hide) { @@ -368,6 +391,9 @@ function toggleSelectRow2(sender, row, is_cdm) { row.addClassName('Selected'); else row.removeClassName('Selected'); + + if (typeof updateSelectedPrompt != undefined) + updateSelectedPrompt(); } @@ -379,6 +405,9 @@ function toggleSelectRow(sender, row) { row.addClassName('Selected'); else row.removeClassName('Selected'); + + if (typeof updateSelectedPrompt != undefined) + updateSelectedPrompt(); } function checkboxToggleElement(elem, id) { @@ -803,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']; @@ -826,41 +862,10 @@ function quickAddFeed() { alert(__("Specified URL doesn't seem to contain any feeds.")); break; case 4: - /* notify_progress("Searching for feed urls...", true); - - new Ajax.Request("backend.php", { - parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url), - onComplete: function(transport, dialog, feed_url) { - - notify(''); - - var reply = JSON.parse(transport.responseText); - - var feeds = reply['urls']; - - console.log(transport.responseText); - - 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++; - } - -// if (count > 5) count = 5; -// select.size = count; - - Effect.Appear('feedDlg_feedsContainer', {duration : 0.5}); - } - }); - break; */ - feeds = rc['feeds']; + Element.show("fadd_multiple_notify"); + var select = dijit.byId("feedDlg_feedContainerSelect"); while (select.getOptions().length > 0) @@ -881,6 +886,11 @@ function quickAddFeed() { alert(__("Couldn't download the specified URL: %s"). replace("%s", rc['message'])); break; + case 6: + alert(__("XML validation failed: %s"). + replace("%s", rc['message'])); + break; + break; case 0: alert(__("You are already subscribed to this feed.")); break; @@ -1150,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 title = false; + var rule = { reg_exp: selectedText, feed_id: feed_id, filter_type: 1 }; - if (reply && reply) title = reply.title; + addFilterRule(null, dojo.toJson(rule)); - if (title || getActiveFeedId() || activeFeedIsCat()) { + } else { - console.log(title + " " + getActiveFeedId()); + var query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId(); - var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) : - getActiveFeedId(); + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + var reply = JSON.parse(transport.responseText); - var rule = { reg_exp: title, feed_id: feed_id, filter_type: 1 }; + var title = false; - addFilterRule(null, dojo.toJson(rule)); - } + if (reply && reply) title = reply.title; - } }); + if (title || getActiveFeedId() || activeFeedIsCat()) { + + 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)); + } + + } }); + + } }); } @@ -1271,16 +1296,15 @@ function backend_sanity_check_callback(transport) { if (params) { console.log('reading init-params...'); - if (params) { - for (k in params) { - var v = params[k]; - console.log("IP: " + k + " => " + v); - - if (k == "label_base_index") _label_base_index = parseInt(v); - } + for (k in params) { + console.log("IP: " + k + " => " + JSON.stringify(params[k])); + if (k == "label_base_index") _label_base_index = parseInt(params[k]); } init_params = params; + + // PluginHost might not be available on non-index pages + window.PluginHost && PluginHost.run(PluginHost.HOOK_PARAMS_LOADED, init_params); } sanity_check_done = true; @@ -1935,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(); +}