@ -33,13 +33,21 @@ function exception_error(location, e, ext_info) {
var content = "<div class=\"fatalError\">" +
"<pre>" + msg + "</pre>" ;
content += "<form name=\"exceptionForm\" id=\"exceptionForm\" target=\"_blank\" " +
"action=\"http://tt-rss.org/report.php\" method=\"POST\">" ;
content += "<textarea style=\"display : none\" name=\"message\">" + msg + "</textarea>" ;
content += "<textarea style=\"display : none\" name=\"params\">N/A</textarea>" ;
if ( ext _info ) {
content += "<div><b>Additional information:</b></div>" +
"<textarea readonly=\"1\">" + ext _info + "</textarea>" ;
"<textarea name=\"xinfo\" readonly=\"1\">" + ext _info + "</textarea>" ;
}
content += "<div><b>Stack trace:</b></div>" +
"<textarea readonly=\"1\">" + e . stack + "</textarea>" ;
"<textarea name=\"stack\" readonly=\"1\">" + e . stack + "</textarea>" ;
content += "</form>" ;
content += "</div>" ;
@ -49,7 +57,7 @@ function exception_error(location, e, ext_info) {
"onclick=\"dijit.byId('exceptionDlg').report()\">" +
_ _ ( 'Report to tt-rss.org' ) + "</button> " ;
content += "<button dojoType=\"dijit.form.Button\" " +
"onclick=\"dijit.byId('exceptionDlg').hide()\">" +
"onclick=\"dijit.byId('exceptionDlg').hide()\">" +
_ _ ( 'Close' ) + "</button>" ;
content += "</div>" ;
@ -61,19 +69,14 @@ function exception_error(location, e, ext_info) {
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." ) ) ) {
var params = $H ( {
message : msg ,
xinfo : ext _info ,
stack : e . stack ,
document . forms [ 'exceptionForm' ] . params . value = $H ( {
browserName : navigator . appName ,
browserVersion : navigator . appVersion ,
browserPlatform : navigator . platform ,
browserCookies : navigator . cookieEnabled ,
} ) ;
} ) .toQueryString ( ) ;
var url = "http://tt-rss.org/report.php?" + params . toQueryString ( ) ;
window . open ( url ) ;
document . forms [ 'exceptionForm' ] . submit ( ) ;
}
} ,
@ -92,8 +95,8 @@ function format_exception_error(location, e) {
if ( e . fileName ) {
var base _fname = e . fileName . substring ( e . fileName . lastIndexOf ( "/" ) + 1 ) ;
msg = "Exception: " + e . name + ", " + e . message +
msg = "Exception: " + e . name + ", " + e . message +
"\nFunction: " + location + "()" +
"\nLocation: " + base _fname + ":" + e . lineNumber ;
@ -110,14 +113,14 @@ function format_exception_error(location, e) {
function param _escape ( arg ) {
if ( typeof encodeURIComponent != 'undefined' )
return encodeURIComponent ( arg ) ;
return encodeURIComponent ( arg ) ;
else
return escape ( arg ) ;
}
function param _unescape ( arg ) {
if ( typeof decodeURIComponent != 'undefined' )
return decodeURIComponent ( arg ) ;
return decodeURIComponent ( arg ) ;
else
return unescape ( arg ) ;
}
@ -129,7 +132,7 @@ function hide_notify() {
if ( n ) {
n . style . display = "none" ;
}
}
}
function notify _silent _next ( ) {
notify _silent = true ;
@ -213,16 +216,16 @@ function notify_info(msg, no_hide) {
}
function setCookie ( name , value , lifetime , path , domain , secure ) {
var d = false ;
if ( lifetime ) {
d = new Date ( ) ;
d . setTime ( d . getTime ( ) + ( lifetime * 1000 ) ) ;
}
console . log ( "setCookie: " + name + " => " + value + ": " + d ) ;
int _setCookie ( name , value , d , path , domain , secure ) ;
}
@ -243,7 +246,7 @@ function delCookie(name, path, domain) {
";expires=Thu, 01-Jan-1970 00:00:01 GMT" ;
}
}
function getCookie ( name ) {
@ -281,10 +284,10 @@ function gotoExportOpml() {
* * @ author Sundar Dorai - Raj
* * Email : sdoraira @ vt . edu
* * This program is free software ; you can redistribute it and / or
* * modify it under the terms of the GNU General Public License
* * as published by the Free Software Foundation ; either version 2
* * of the License , or ( at your option ) any later version ,
* * provided that any use properly credits the author .
* * modify it under the terms of the GNU General Public License
* * as published by the Free Software Foundation ; either version 2
* * of the License , or ( at your option ) any later version ,
* * provided that any use properly credits the author .
* * This program is distributed in the hope that it will be useful ,
* * but WITHOUT ANY WARRANTY ; without even the implied warranty of
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
@ -372,7 +375,7 @@ function dropboxSelect(e, v) {
function getURLParam ( param ) {
return String ( window . location . href ) . parseQuery ( ) [ param ] ;
}
}
function leading _zero ( p ) {
var s = String ( p ) ;
@ -449,7 +452,7 @@ function infobox_callback2(transport) {
title = title . firstChild . nodeValue ;
var content = transport . responseXML . getElementsByTagName ( "content" ) [ 0 ] ;
content = content . firstChild . nodeValue ;
if ( ! dialog ) {
@ -510,14 +513,14 @@ function setInitParam(key, value) {
}
function fatalError ( code , msg , ext _info ) {
try {
try {
if ( code == 6 ) {
window . location . href = "tt-rss.php" ;
window . location . href = "tt-rss.php" ;
} else if ( code == 5 ) {
window . location . href = "db-updater.php" ;
} else {
if ( msg == "" ) msg = "Unknown error" ;
if ( ext _info ) {
@ -529,13 +532,13 @@ function fatalError(code, msg, ext_info) {
if ( ERRORS && ERRORS [ code ] && ! msg ) {
msg = ERRORS [ code ] ;
}
var content = "<div><b>Error code:</b> " + code + "</div>" +
"<p>" + msg + "</p>" ;
if ( ext _info ) {
content = content + "<div><b>Additional information:</b></div>" +
"<textarea style='width: 100%' readonly=\"1\">" +
"<textarea style='width: 100%' readonly=\"1\">" +
ext _info + "</textarea>" ;
}
@ -620,7 +623,7 @@ function filterDlgCheckDate() {
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
var reply = JSON . parse ( transport . responseText ) ;
@ -647,7 +650,7 @@ function displayHelpInfobox(topic_id) {
var url = "backend.php?op=help&tid=" + param _escape ( topic _id ) ;
var w = window . open ( url , "ttrss_help" ,
var w = window . open ( url , "ttrss_help" ,
"status=0,toolbar=0,location=0,width=450,height=500,scrollbars=1,menubar=0" ) ;
}
@ -773,14 +776,14 @@ function removeFeedIcon(id) {
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
notify _info ( "Feed icon removed." ) ;
if ( inPreferences ( ) ) {
updateFeedList ( ) ;
} else {
setTimeout ( 'updateFeedList(false, false)' , 50 ) ;
}
} } ) ;
} } ) ;
}
return false ;
@ -818,13 +821,13 @@ function addLabel(select, callback) {
var caption = prompt ( _ _ ( "Please enter label caption:" ) , "" ) ;
if ( caption != undefined ) {
if ( caption == "" ) {
alert ( _ _ ( "Can't create label: missing caption." ) ) ;
return false ;
}
var query = "?op=pref-labels&subop=add&caption=" +
var query = "?op=pref-labels&subop=add&caption=" +
param _escape ( caption ) ;
if ( select )
@ -836,7 +839,7 @@ function addLabel(select, callback) {
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
if ( callback ) {
callback ( transport ) ;
} else if ( inPreferences ( ) ) {
@ -874,22 +877,22 @@ function quickAddFeed() {
new Ajax . Request ( "backend.php" , {
parameters : dojo . objectToQuery ( this . attr ( 'value' ) ) ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
try {
var reply = JSON . parse ( transport . responseText ) ;
var rc = parseInt ( reply [ 'result' ] ) ;
notify ( '' ) ;
console . log ( "GOT RC: " + rc ) ;
switch ( rc ) {
case 1 :
dialog . hide ( ) ;
notify _info ( _ _ ( "Subscribed to %s" ) . replace ( "%s" , feed _url ) ) ;
updateFeedList ( ) ;
break ;
case 2 :
@ -925,9 +928,9 @@ function quickAddFeed() {
}
// if (count > 5) count = 5;
// select.size = count;
Effect . Appear ( 'feedDlg_feedsContainer' , { duration : 0.5 } ) ;
// select.size = count;
Effect . Appear ( 'feedDlg_feedsContainer' , { duration : 0.5 } ) ;
}
} ) ;
break ;
@ -938,11 +941,11 @@ function quickAddFeed() {
alert ( _ _ ( "You are already subscribed to this feed." ) ) ;
break ;
}
} catch ( e ) {
exception _error ( "subscribeToFeed" , e ) ;
}
} } ) ;
}
@ -969,7 +972,7 @@ function quickAddFilter() {
execute : function ( ) {
if ( this . validate ( ) ) {
var query = "?op=rpc&subop=verifyRegexp®_exp=" +
var query = "?op=rpc&subop=verifyRegexp®_exp=" +
param _escape ( dialog . attr ( 'value' ) . reg _exp ) ;
notify _progress ( "Verifying regular expression..." ) ;
@ -977,7 +980,7 @@ function quickAddFilter() {
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
var reply = JSON . parse ( transport . responseText ) ;
var reply = JSON . parse ( transport . responseText ) ;
if ( reply ) {
notify ( '' ) ;
@ -996,10 +999,10 @@ function quickAddFilter() {
dialog . hide ( ) ;
notify _info ( transport . responseText ) ;
if ( inPreferences ( ) ) {
updateFilterList ( ) ;
updateFilterList ( ) ;
}
} } )
}
}
}
} } ) ;
}
@ -1026,9 +1029,9 @@ function unsubscribeFeed(feed_id, title) {
onComplete : function ( transport ) {
if ( dijit . byId ( "feedEditDlg" ) ) dijit . byId ( "feedEditDlg" ) . hide ( ) ;
if ( inPreferences ( ) ) {
updateFeedList ( ) ;
updateFeedList ( ) ;
} else {
if ( feed _id == getActiveFeedId ( ) )
setTimeout ( "viewfeed(-5)" , 100 ) ;
@ -1054,7 +1057,7 @@ function backend_sanity_check_callback(transport) {
if ( ! transport . responseXML ) {
if ( ! store ) {
fatalError ( 3 , "Sanity check: Received reply is not XML" ,
fatalError ( 3 , "Sanity check: Received reply is not XML" ,
transport . responseText ) ;
return ;
}
@ -1068,7 +1071,7 @@ function backend_sanity_check_callback(transport) {
}
var error _code = reply . getAttribute ( "error-code" ) ;
if ( error _code && error _code != 0 ) {
return fatalError ( error _code , reply . getAttribute ( "error-msg" ) ) ;
}
@ -1097,8 +1100,8 @@ function backend_sanity_check_callback(transport) {
init _second _stage ( ) ;
} catch ( e ) {
exception _error ( "backend_sanity_check_callback" , e , transport ) ;
}
exception _error ( "backend_sanity_check_callback" , e , transport ) ;
}
}
function has _local _storage ( ) {
@ -1106,7 +1109,7 @@ function has_local_storage() {
return 'sessionStorage' in window && window [ 'sessionStorage' ] != null ;
} catch ( e ) {
return false ;
}
}
}
function catSelectOnChange ( elem ) {
@ -1163,12 +1166,12 @@ function genUrlChangeKey(feed, is_cat) {
try {
var ok = confirm ( _ _ ( "Generate new syndication address for this feed?" ) ) ;
if ( ok ) {
notify _progress ( "Trying to change address..." , true ) ;
var query = "?op=rpc&subop=regenFeedKey&id=" + param _escape ( feed ) +
var query = "?op=rpc&subop=regenFeedKey&id=" + param _escape ( feed ) +
"&is_cat=" + param _escape ( is _cat ) ;
new Ajax . Request ( "backend.php" , {
@ -1176,12 +1179,12 @@ function genUrlChangeKey(feed, is_cat) {
onComplete : function ( transport ) {
var reply = JSON . parse ( transport . responseText ) ;
var new _link = reply . link ;
var e = $ ( 'gen_feed_url' ) ;
if ( new _link ) {
e . innerHTML = e . innerHTML . replace ( /\&key=.*$/ ,
e . innerHTML = e . innerHTML . replace ( /\&key=.*$/ ,
"&key=" + new _link ) ;
e . href = e . href . replace ( /\&key=.*$/ ,
@ -1190,7 +1193,7 @@ function genUrlChangeKey(feed, is_cat) {
new Effect . Highlight ( e ) ;
notify ( '' ) ;
} else {
notify _error ( "Could not change feed URL." ) ;
}
@ -1286,7 +1289,7 @@ function selectTableRows(id, mode) {
for ( var j = 0 ; j < inputs . length ; j ++ ) {
var input = inputs [ j ] ;
if ( input . getAttribute ( "type" ) == "checkbox" &&
if ( input . getAttribute ( "type" ) == "checkbox" &&
input . id . match ( bare _id ) ) {
cb = input ;
@ -1401,95 +1404,95 @@ function feedBrowser() {
getSelectedFeeds : function ( ) {
var list = $$ ( "#browseFeedList li[id*=FBROW]" ) ;
var selected = new Array ( ) ;
list . each ( function ( child ) {
list . each ( function ( child ) {
var id = child . id . replace ( "FBROW-" , "" ) ;
if ( child . hasClassName ( 'Selected' ) ) {
selected . push ( id ) ;
}
}
} ) ;
return selected ;
} ,
subscribe : function ( ) {
var selected = this . getSelectedFeeds ( ) ;
var mode = this . attr ( 'value' ) . mode ;
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 ) ;
console . log ( query ) ;
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
if ( inPreferences ( ) ) {
updateFeedList ( ) ;
}
} } ) ;
} else {
alert ( _ _ ( "No feeds are selected." ) ) ;
}
} ,
update : function ( ) {
var query = dojo . objectToQuery ( dialog . attr ( 'value' ) ) ;
Element . show ( 'feed_browser_spinner' ) ;
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
notify ( '' ) ;
Element . hide ( 'feed_browser_spinner' ) ;
var c = $ ( "browseFeedList" ) ;
var reply = JSON . parse ( transport . responseText ) ;
var r = reply [ 'content' ] ;
var mode = reply [ 'mode' ] ;
if ( c && r ) {
c . innerHTML = r ;
}
dojo . parser . parse ( "browseFeedList" ) ;
if ( mode == 2 ) {
Element . show ( dijit . byId ( 'feed_archive_remove' ) . domNode ) ;
} else {
Element . hide ( dijit . byId ( 'feed_archive_remove' ) . domNode ) ;
}
} } ) ;
} ,
removeFromArchive : function ( ) {
var selected = this . getSelectedFeeds ( ) ;
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=" +
var query = "?op=rpc&subop=remarchived&ids=" +
param _escape ( selected . toString ( ) ) ; ;
new Ajax . Request ( "backend.php" , {
parameters : query ,
onComplete : function ( transport ) {
onComplete : function ( transport ) {
dialog . update ( ) ;
} } ) ;
} } ) ;
}
}
} ,