@ -33,7 +33,6 @@
* the terms of any one of the MPL , the GPL or the LGPL .
*
* * * * * * END LICENSE BLOCK * * * * * * /
// --------------------------------------------------------------------------------
// "WebPageDump" Firefox Extension
// --------------------------------------------------------------------------------
@ -42,8 +41,6 @@
// provides common functions (file, preferences, windows, error,...)
//
// --------------------------------------------------------------------------------
var gBrowserWindow = null ;
var gExceptLocation = "about:blank" ;
var gCallback = "" ;
@ -52,10 +49,10 @@ var gTimedOut = false;
var gWaitForPaint = false ;
var MODE _SIMULATE = false ;
var WPD _DEFAULTWIDTH = 1024 ;
var WPD _DEFAULTHEIGHT = 768 ;
var WPD _DEFAULTWIDTH = 1024 ;
var WPD _DEFAULTHEIGHT = 768 ;
var WPD _MAXUIERRORCOUNT = 8 ;
var WPD _MAXUIERRORCOUNT = 8 ;
/ * f u n c t i o n w p d G e t T o p B r o w s e r W i n d o w ( )
@ -74,14 +71,14 @@ var WPD_MAXUIERRORCOUNT=8;
/ * [ 1 4 : 5 5 : 1 5 ] p a o l i n h o : v a r b r o w s e r W i n = w i n d o w M e d i a t o r . g e t M o s t R e c e n t W i n d o w ( " n a v i g a t o r : b r o w s e r " ) ;
const mainTabBox = browserWin . getBrowser ( ) . mTabBox ;
const topWindow = browserWin . getBrowser ( ) . browsers [ mainTabBox . selectedIndex ] . contentWindow ;
[ 14 : 55 : 50 ] … var windowMediator = Components . classes [ "@mozilla.org/appshell/window-mediator;1" ] . getService ( Components . interfaces . nsIWindowMediator ) ;
[ 14 : 55 : 50 ]
var windowMediator = Components . classes [ "@mozilla.org/appshell/window-mediator;1" ] . getService ( Components . interfaces . nsIWindowMediator ) ;
* /
function wpdGetTopBrowserWindow ( )
{
function wpdGetTopBrowserWindow ( ) {
var windowManager = Components . classes [ '@mozilla.org/appshell/window-mediator;1' ] . getService ( ) ;
var windowManagerInterface = windowManager . QueryInterface ( Components . interfaces . nsIWindowMediator ) ;
var topWindowOfType = windowManagerInterface . getMostRecentWindow ( "navigator:browser" ) ;
var windowManagerInterface = windowManager . QueryInterface ( Components . interfaces . nsIWindowMediator ) ;
var topWindowOfType = windowManagerInterface . getMostRecentWindow ( "navigator:browser" ) ;
if ( topWindowOfType ) {
return topWindowOfType ;
@ -90,8 +87,7 @@ function wpdGetTopBrowserWindow()
}
function wpdWindowLoaded ( )
{
function wpdWindowLoaded ( ) {
try {
// this will be called multiple times if the page contains more than one document (frames, flash,...)
//var browser=this.document.getElementById("content");
@ -101,91 +97,88 @@ function wpdWindowLoaded()
if ( ! ( browser . webProgress . isLoadingDocument || browser . contentDocument . location == gExceptLocation ) ) {
Zotero . debug ( "[wpdWindowLoaded] window finally loaded" ) ;
gBrowserWindow . clearTimeout ( gTimeOutID ) ;
gBrowserWindow . removeEventListener ( "load" , wpdWindowLoaded , true ) ;
gBrowserWindow . removeEventListener ( "load" , wpdWindowLoaded , true ) ;
//dump("[wpdWindowLoaded] calling "+gCallback+"\n");
if ( gWaitForPaint ) {
wpdCommon . sizeWindow ( WPD _DEFAULTWIDTH - 1 , WPD _DEFAULTHEIGHT ) ; // this is for the strange empty lines bug
wpdCommon . sizeWindow ( WPD _DEFAULTWIDTH , WPD _DEFAULTHEIGHT ) ;
wpdCommon . sizeWindow ( WPD _DEFAULTWIDTH - 1 , WPD _DEFAULTHEIGHT ) ; // this is for the strange empty lines bug
wpdCommon . sizeWindow ( WPD _DEFAULTWIDTH , WPD _DEFAULTHEIGHT ) ;
}
var w = 0 ;
if ( gWaitForPaint ) w = 5000 ; // wait for painting
var w = 0 ;
if ( gWaitForPaint ) w = 5000 ; // wait for painting
gBrowserWindow . setTimeout ( gCallback , w ) ;
}
} catch ( ex ) {
Zotero . debug ( "[wpdWindowLoaded] EXCEPTION: " + ex ) ;
Zotero . debug ( "[wpdWindowLoaded] EXCEPTION: " + ex ) ;
}
}
function wpdTimeOut ( )
{
function wpdTimeOut ( ) {
Zotero . debug ( "[wpdTimeOut] timeout triggered!" ) ;
gTimedOut = true ;
gTimedOut = true ;
gBrowserWindow . clearTimeout ( gTimeOutID ) ;
gBrowserWindow . removeEventListener ( "load" , wpdWindowLoaded , true ) ;
gBrowserWindow . removeEventListener ( "load" , wpdWindowLoaded , true ) ;
gBrowserWindow . setTimeout ( gCallback , 0 ) ;
}
function wpdIsTimedOut ( )
{
function wpdIsTimedOut ( ) {
return gTimedOut ;
}
function wpdLoadURL ( aURI , aCallback )
{
function wpdLoadURL ( aURI , aCallback ) {
try {
gTimedOut = false ;
Zotero . debug ( "[wpdLoadURL] aURI: " + aURI ) ;
if ( aURI == "" ) return ;
gTimedOut = false ;
Zotero . debug ( "[wpdLoadURL] aURI: " + aURI ) ;
if ( aURI == "" ) return ;
gBrowserWindow = wpdGetTopBrowserWindow ( ) ;
gBrowserWindow . loadURI ( aURI ) ;
gCallback = aCallback ;
// 30 seconds maximum for loading the page
gTimeOutID = gBrowserWindow . setTimeout ( wpdTimeOut , 60000 ) ;
gBrowserWindow . addEventListener ( "load" , wpdWindowLoaded , true ) ;
gTimeOutID = gBrowserWindow . setTimeout ( wpdTimeOut , 60000 ) ;
gBrowserWindow . addEventListener ( "load" , wpdWindowLoaded , true ) ;
} catch ( ex ) {
Zotero . debug ( "[wpdLoadURL] EXCEPTION: " + ex ) ;
Zotero . debug ( "[wpdLoadURL] EXCEPTION: " + ex ) ;
}
}
var wpdCommon = {
errList : "" ,
errCount : 0 ,
downloading : false ,
downloaded : false ,
errList : "" ,
errCount : 0 ,
downloading : false ,
downloaded : false ,
allowed _entities :
""&'<> ¡¢£¤¥¦" +
"§¨©ª«¬­®¯°±" +
"²³´µ¶·¸¹º»" +
"¼½¾¿ÀÁÂÃÄ" +
"ÅÆÇÈÉÊËÌÍ" +
"ÎÏÐÑÒÓÔÕÖ" +
"×ØÙÚÛÜÝÞß" +
"àáâãäåæçè" +
"éêëìíîïðñò" +
"óôõö÷øùúûü" +
"ýþÿŒœŠšŸƒˆ" +
"˜ΑΒΓΔΕΖΗΘΙΚ" +
"ΛΜΝΞΟΠΡΣΤΥΦΧΨ" +
"Ωαβγδεζηθικ" +
"λμνξοπρςστυφ" +
"χψωϑϒφϖ   ‌" +
"‍‎‏–—‘’‚“”„" +
"†‡•…‰′″‹›" +
"‾⁄€ℑ℘ℜ™ℵ←↑" +
"→↓↔↵⇐⇑⇒⇓⇔∀" +
"∂∃∅∇∈∉∋∏∑−∗√" +
"∝∞∠∨∩∪∫∴∼≅≈≠≡" +
"≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈" +
""&'<> ¡¢£¤¥¦" +
"§¨©ª«¬­®¯°±" +
"²³´µ¶·¸¹º»" +
"¼½¾¿ÀÁÂÃÄ" +
"ÅÆÇÈÉÊËÌÍ" +
"ÎÏÐÑÒÓÔÕÖ" +
"×ØÙÚÛÜÝÞß" +
"àáâãäåæçè" +
"éêëìíîïðñò" +
"óôõö÷øùúûü" +
"ýþÿŒœŠšŸƒˆ" +
"˜ΑΒΓΔΕΖΗΘΙΚ" +
"ΛΜΝΞΟΠΡΣΤΥΦΧΨ" +
"Ωαβγδεζηθικ" +
"λμνξοπρςστυφ" +
"χψωϑϒφϖ   ‌" +
"‍‎‏–—‘’‚“”„" +
"†‡•…‰′″‹›" +
"‾⁄€ℑ℘ℜ™ℵ←↑" +
"→↓↔↵⇐⇑⇒⇓⇔∀" +
"∂∃∅∇∈∉∋∏∑−∗√" +
"∝∞∠∨∩∪∫∴∼≅≈≠≡" +
"≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈" +
"⌉⌊⌋⟨⟩◊♠♣♥♦" ,
trim : function ( aString ) {
trim : function ( aString ) {
try {
return ( aString . replace ( /\s+$/ , "" ) . replace ( /^\s+/ , "" ) ) ;
} catch ( ex ) {
return ( aString . replace ( /\s+$/ , "" ) . replace ( /^\s+/ , "" ) ) ;
} catch ( ex ) {
return aString ;
}
} ,
@ -193,27 +186,26 @@ var wpdCommon = {
// checks the CRLFs at the beginning - if there are CRLFs present
// one additional CRLF will be added at the beginning
checkCRLF : function ( aNode )
{
checkCRLF : function ( aNode ) {
try {
var before = false ;
var after = false ;
if ( aNode . parentNode . firstChild == aNode ) before = true ;
var before = false ;
var after = false ;
if ( aNode . parentNode . firstChild == aNode ) before = true ;
if ( ! before && ! after ) {
throw new Error ( "return" ) ;
}
// why <BR>? Because the <BR> Tag ist not present in text DOM nodes...
var aString = aNode . nodeValue ;
if ( aString . search ( /\n/ ) == - 1 ) throw new Error ( "return" ) ;
aString = ( aString . replace ( /\r\n/g , "<br>" ) . replace ( /\n/g , "<br>" ) ) ;
var a = aString . split ( "<br>" ) ;
var s = 0 ;
var e = 0 ;
var aString = aNode . nodeValue ;
if ( aString . search ( /\n/ ) == - 1 ) throw new Error ( "return" ) ;
aString = ( aString . replace ( /\r\n/g , "<br>" ) . replace ( /\n/g , "<br>" ) ) ;
var a = aString . split ( "<br>" ) ;
var s = 0 ;
var e = 0 ;
if ( before ) {
for ( var i = 0 ; i < a . length ; i ++ ) {
if ( this . trim ( a [ i ] ) != "" ) {
for ( var i = 0 ; i < a . length ; i ++ ) {
if ( this . trim ( a [ i ] ) != "" ) {
break ;
} else {
s ++ ;
@ -222,8 +214,8 @@ var wpdCommon = {
}
}
aString = a . join ( "\r\n" ) ;
if ( s > 0 ) aString = "\r\n" + aString ;
aString = a . join ( "\r\n" ) ;
if ( s > 0 ) aString = "\r\n" + aString ;
return aString ;
} catch ( ex ) {
@ -231,29 +223,26 @@ var wpdCommon = {
}
} ,
unicodeToEntity : function ( text , charset )
{
unicodeToEntity : function ( text , charset ) {
function convertEntity ( letter ) {
try {
var l = gEntityConverter . ConvertToEntity ( letter , entityVersion ) ;
var l = gEntityConverter . ConvertToEntity ( letter , entityVersion ) ;
// is the entity allowed?
if ( entities . indexOf ( l ) >= 0 ) {
if ( entities . indexOf ( l ) >= 0 ) {
return l ;
} else if ( ( l != letter ) ) {
return "&#" + letter . charCodeAt ( 0 ) + ";" ;
}
} catch ( ex ) {
} else if ( ( l != letter ) ) {
return "&#" + letter . charCodeAt ( 0 ) + ";" ;
}
} catch ( ex ) { }
// now we check if the letter is valid inside the destination charset
// (if the result is a ? it is not valid - except letter=?)
try {
var s = gUnicodeConverter . ConvertFromUnicode ( letter ) ;
if ( ( charset != "UTF-8" ) && ( s == "?" ) ) {
return "&#" + letter . charCodeAt ( 0 ) + ";" ;
}
} catch ( ex ) {
var s = gUnicodeConverter . ConvertFromUnicode ( letter ) ;
if ( ( charset != "UTF-8" ) && ( s == "?" ) ) {
return "&#" + letter . charCodeAt ( 0 ) + ";" ;
}
} catch ( ex ) { }
return letter ;
}
@ -261,16 +250,16 @@ var wpdCommon = {
try {
var gUnicodeConverter = Components . classes [ '@mozilla.org/intl/scriptableunicodeconverter' ] . getService ( Components . interfaces . nsIScriptableUnicodeConverter ) ;
gUnicodeConverter . charset = charset ;
} catch ( ex ) {
Zotero . debug ( "gUnicodeConverter EXCEPTION:" + ex ) ;
} catch ( ex ) {
Zotero . debug ( "gUnicodeConverter EXCEPTION:" + ex ) ;
}
}
if ( ! gEntityConverter ) {
try {
var gEntityConverter = Components . classes [ "@mozilla.org/intl/entityconverter;1" ] . createInstance ( Components . interfaces . nsIEntityConverter ) ;
} catch ( e ) {
Zotero . debug ( "gEntityConverter EXCEPTION:" + ex ) ;
} catch ( e ) {
Zotero . debug ( "gEntityConverter EXCEPTION:" + ex ) ;
}
}
@ -293,51 +282,45 @@ var wpdCommon = {
} ,
playSound : function ( )
{
playSound : function ( ) {
try {
var sound = Components . classes [ "@mozilla.org/sound;1" ] . createInstance ( Components . interfaces . nsISound ) ;
sound . playSystemSound ( "ringin.wav" ) ;
} catch ( ex ) {
}
} catch ( ex ) { }
} ,
// return the current focused window
getFocusedWindow : function ( )
{
getFocusedWindow : function ( ) {
var win = document . commandDispatcher . focusedWindow ;
if ( ! win || win == window || win instanceof Components . interfaces . nsIDOMChromeWindow ) win = window . _content ;
if ( ! win || win == window || win instanceof Components . interfaces . nsIDOMChromeWindow ) win = window . _content ;
return win ;
} ,
sizeWindow : function ( w , h )
{
sizeWindow : function ( w , h ) {
try {
var window = this . getFocusedWindow ( ) ;
window . moveTo ( 0 , 0 ) ;
if ( ( w == 0 ) || ( w > screen . availWidth ) ) w = screen . availWidth ;
if ( ( h == 0 ) || ( w > screen . availHeight ) ) h = screen . availHeight ;
window . resizeTo ( w , h ) ;
var window = this . getFocusedWindow ( ) ;
window . moveTo ( 0 , 0 ) ;
if ( ( w == 0 ) || ( w > screen . availWidth ) ) w = screen . availWidth ;
if ( ( h == 0 ) || ( w > screen . availHeight ) ) h = screen . availHeight ;
window . resizeTo ( w , h ) ;
window . focus ( ) ;
} catch ( ex ) {
}
} catch ( ex ) { }
} ,
// add a line to the error list (displays a maximum of 15 errors)
addError : function ( aError )
{
Zotero . debug ( 'ERROR: ' + aError ) ;
if ( this . errCount < WPD _MAXUIERRORCOUNT ) {
if ( this . errList . indexOf ( aError ) > - 1 ) return ; // is the same
this . errList = this . errList + aError + "\n" ;
} else if ( this . errCount == WPD _MAXUIERRORCOUNT ) {
this . errList = this . errList + '...' ;
addError : function ( aError ) {
Zotero . debug ( 'ERROR: ' + aError ) ;
if ( this . errCount < WPD _MAXUIERRORCOUNT ) {
if ( this . errList . indexOf ( aError ) > - 1 ) return ; // is the same
this . errList = this . errList + aError + "\n" ;
} else if ( this . errCount == WPD _MAXUIERRORCOUNT ) {
this . errList = this . errList + '...' ;
}
this . errCount ++ ;
} ,
saveWebPage : function ( aDestFile ) {
Zotero . debug ( "[saveWebPage] " + aDestFile ) ;
saveWebPage : function ( aDestFile ) {
Zotero . debug ( "[saveWebPage] " + aDestFile ) ;
var nsIWBP = Components . classes [ "@mozilla.org/embedding/browser/nsWebBrowserPersist;1" ] . createInstance ( Components . interfaces . nsIWebBrowserPersist ) ;
var doc = window . content . document ;
var file = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
@ -348,20 +331,18 @@ var wpdCommon = {
} ,
// returns num as string of length i filled up with 0s
addLeftZeros : function ( num , i )
{
var s = "" + num ;
var r = "" ;
for ( var f = 0 ; f < i - s . length ; f ++ ) r = r + "0" ;
return r + s ;
addLeftZeros : function ( num , i ) {
var s = "" + num ;
var r = "" ;
for ( var f = 0 ; f < i - s . length ; f ++ ) r = r + "0" ;
return r + s ;
} ,
// split the filename in filename and extension
splitFileName : function ( aFileName )
{
splitFileName : function ( aFileName ) {
var pos = aFileName . lastIndexOf ( "." ) ;
var ret = [ ] ;
if ( pos != - 1 ) {
if ( pos != - 1 ) {
ret [ 0 ] = aFileName . substring ( 0 , pos ) ;
ret [ 1 ] = aFileName . substring ( pos + 1 , aFileName . length ) ;
} else {
@ -372,8 +353,7 @@ var wpdCommon = {
} ,
// replace illegal characters
getValidFileName : function ( aFileName )
{
getValidFileName : function ( aFileName ) {
aFileName = aFileName . replace ( /[\"\?!~`]+/g , "" ) ;
aFileName = aFileName . replace ( /[\*\&]+/g , "+" ) ;
aFileName = aFileName . replace ( /[\\\/\|\:;]+/g , "-" ) ;
@ -384,141 +364,127 @@ var wpdCommon = {
return aFileName ;
} ,
getURL : function ( )
{
getURL : function ( ) {
return top . window . _content . document . location . href ;
} ,
// remove get variables from an URL
removeGETFromURL : function ( aURL )
{
removeGETFromURL : function ( aURL ) {
var pos ;
aURL = ( ( pos = aURL . indexOf ( "?" ) ) != - 1 ) ? aURL . substring ( 0 , pos ) : aURL ;
aURL = ( ( pos = aURL . indexOf ( "#" ) ) != - 1 ) ? aURL . substring ( 0 , pos ) : aURL ;
aURL = ( ( pos = aURL . indexOf ( "?" ) ) != - 1 ) ? aURL . substring ( 0 , pos ) : aURL ;
aURL = ( ( pos = aURL . indexOf ( "#" ) ) != - 1 ) ? aURL . substring ( 0 , pos ) : aURL ;
return aURL ;
} ,
// extract filename from URL
getFileName : function ( aURL )
{
getFileName : function ( aURL ) {
var pos ;
aURL = this . removeGETFromURL ( aURL ) ;
aURL = ( ( pos = aURL . lastIndexOf ( "/" ) ) != - 1 ) ? aURL . substring ( ++ pos ) : aURL ;
aURL = ( ( pos = aURL . lastIndexOf ( "/" ) ) != - 1 ) ? aURL . substring ( ++ pos ) : aURL ;
return aURL ;
} ,
filePathToURI : function ( filePath )
{
filePathToURI : function ( filePath ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . getService ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( filePath ) ;
var obj _FPH = Components . classes [ "@mozilla.org/network/protocol;1?name=file" ] . getService ( Components . interfaces . nsIFileProtocolHandler ) ;
return obj _FPH . getURLSpecFromFile ( obj _File ) ;
} ,
URLToFilePath : function ( aURL )
{
URLToFilePath : function ( aURL ) {
var obj _FPH = Components . classes [ "@mozilla.org/network/protocol;1?name=file" ] . getService ( Components . interfaces . nsIFileProtocolHandler ) ;
try {
return obj _FPH . getFileFromURLSpec ( aURL ) . path ;
} catch ( ex ) {
} catch ( ex ) {
return aURL ;
}
} ,
// right part of filepath/filename
getFileLeafName : function ( filePath )
{
getFileLeafName : function ( filePath ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . getService ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( filePath ) ;
return obj _File . leafName ;
} ,
getFilePath : function ( filePath )
{
getFilePath : function ( filePath ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . getService ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( filePath ) ;
var pos ; // Added by Dan S. for Zotero
return ( ( pos = filePath . lastIndexOf ( obj _File . leafName ) ) != - 1 ) ? filePath . substring ( 0 , pos ) : filePath ;
return ( ( pos = filePath . lastIndexOf ( obj _File . leafName ) ) != - 1 ) ? filePath . substring ( 0 , pos ) : filePath ;
} ,
appendFilePath : function ( filePath , appendPath )
{
appendFilePath : function ( filePath , appendPath ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . getService ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( filePath ) ;
obj _File . appendRelativePath ( appendPath ) ;
return obj _File . path ;
} ,
pathExists : function ( filePath )
{
pathExists : function ( filePath ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . getService ( Components . interfaces . nsILocalFile ) ;
try {
obj _File . initWithPath ( filePath ) ;
return obj _File . exists ( ) ;
} catch ( ex ) {
} catch ( ex ) {
return false ;
}
} ,
// add the HTML Tag Stuff to aNode and embedd the aNode.innerHTML between the tags
nodeToHTMLString : function ( aNode )
{
if ( aNode == null ) return "" ;
nodeToHTMLString : function ( aNode ) {
if ( aNode == null ) return "" ;
var tag = "<" + aNode . nodeName . toLowerCase ( ) ;
for ( var i = 0 ; i < aNode . attributes . length ; i ++ )
for ( var i = 0 ; i < aNode . attributes . length ; i ++ ) {
tag += ' ' + aNode . attributes [ i ] . name + '="' + aNode . attributes [ i ] . value + '"' ;
}
tag += ">\n" ;
return tag + aNode . innerHTML + "</" + aNode . nodeName . toLowerCase ( ) + ">\n" ;
} ,
ConvertFromUnicode16 : function ( aString , charset )
{
if ( ! aString ) return "" ;
ConvertFromUnicode16 : function ( aString , charset ) {
if ( ! aString ) return "" ;
try {
var UNICODE = Components . classes [ '@mozilla.org/intl/scriptableunicodeconverter' ] . getService ( Components . interfaces . nsIScriptableUnicodeConverter ) ;
UNICODE . charset = charset ;
aString = UNICODE . ConvertFromUnicode ( aString ) ;
aString = aString + UNICODE . Finish ( ) ;
} catch ( ex ) {
} catch ( ex ) {
//this.addError("[wpdCommon.convertStringToCharset]:\n -> charset: "+charset+"\n -> "+ex);
}
return aString ;
} ,
ConvertToUnicode16 : function ( aString , charset )
{
if ( ! aString ) return "" ;
ConvertToUnicode16 : function ( aString , charset ) {
if ( ! aString ) return "" ;
try {
var UNICODE = Components . classes [ '@mozilla.org/intl/scriptableunicodeconverter' ] . getService ( Components . interfaces . nsIScriptableUnicodeConverter ) ;
UNICODE . charset = charset ;
aString = UNICODE . ConvertToUnicode ( aString ) ;
} catch ( ex ) {
} catch ( ex ) {
//this.addError("[wpdCommon.convertStringToCharset]:\n -> charset: "+charset+"\n -> "+ex);
}
return aString ;
} ,
// convert the doctype to an HTML doctype String
doctypeToHTMLString : function ( aDoctype )
{
if ( ! aDoctype ) return "" ;
doctypeToHTMLString : function ( aDoctype ) {
if ( ! aDoctype ) return "" ;
var ret = "<!DOCTYPE " + aDoctype . name ;
if ( aDoctype . publicId ) ret += ' PUBLIC "' + aDoctype . publicId + '"' ;
if ( aDoctype . systemId ) ret += ' "' + aDoctype . systemId + '"' ;
if ( aDoctype . publicId ) ret += ' PUBLIC "' + aDoctype . publicId + '"' ;
if ( aDoctype . systemId ) ret += ' "' + aDoctype . systemId + '"' ;
ret += ">\n" ;
return ret ;
} ,
addCommentTag : function ( targetNode , aComment )
{
addCommentTag : function ( targetNode , aComment ) {
targetNode . appendChild ( document . createTextNode ( "\n" ) ) ;
targetNode . appendChild ( document . createComment ( aComment ) ) ;
targetNode . appendChild ( document . createTextNode ( "\n" ) ) ;
} ,
removeNodeFromParent : function ( aNode )
{
removeNodeFromParent : function ( aNode ) {
// Added by Dan S. for Zotero
var document = aNode . ownerDocument ;
@ -530,113 +496,102 @@ var wpdCommon = {
// convert URL String to Object
// for easier URL handling
convertURLToObject : function ( aURLString )
{
convertURLToObject : function ( aURLString ) {
var aURL = Components . classes [ '@mozilla.org/network/standard-url;1' ] . createInstance ( Components . interfaces . nsIURL ) ;
aURL . spec = aURLString ;
return aURL ;
} ,
// resolves the relative URL (aRelURL) with the base URL (aBaseURL)
resolveURL : function ( aBaseURL , aRelURL )
{
resolveURL : function ( aBaseURL , aRelURL ) {
try {
var aBaseURLObj = this . convertURLToObject ( aBaseURL ) ;
return aBaseURLObj . resolve ( aRelURL ) ;
} catch ( ex ) {
this . addError ( "[wpdCommon.resolveURL]:\n -> aBaseURL: " + aBaseURL + "\n -> aRelURL: " + aRelURL + "\n -> " + ex ) ;
} catch ( ex ) {
this . addError ( "[wpdCommon.resolveURL]:\n -> aBaseURL: " + aBaseURL + "\n -> aRelURL: " + aRelURL + "\n -> " + ex ) ;
}
return "" ;
} ,
getHostName : function ( aURL )
{
getHostName : function ( aURL ) {
try {
var aURLObj = Components . classes [ '@mozilla.org/network/standard-url;1' ] . createInstance ( Components . interfaces . nsIURI ) ;
aURLObj . spec = aURL
return aURLObj . asciiHost ;
} catch ( ex ) {
this . addError ( "[wpdCommon.getHostName]:\n -> aURL: " + aURL + "\n -> " + ex ) ;
} catch ( ex ) {
this . addError ( "[wpdCommon.getHostName]:\n -> aURL: " + aURL + "\n -> " + ex ) ;
}
return "" ;
} ,
convertUrlToASCII : function ( aURL )
{
convertUrlToASCII : function ( aURL ) {
try {
var aURLObj = Components . classes [ '@mozilla.org/network/standard-url;1' ] . createInstance ( Components . interfaces . nsIURI ) ;
aURLObj . spec = aURL
return aURLObj . asciiSpec ;
} catch ( ex ) {
this . addError ( "[wpdCommon.getHostName]:\n -> aURL: " + aURL + "\n -> " + ex ) ;
} catch ( ex ) {
this . addError ( "[wpdCommon.getHostName]:\n -> aURL: " + aURL + "\n -> " + ex ) ;
}
return "" ;
} ,
createDir : function ( str _Dir )
{
createDir : function ( str _Dir ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( str _Dir ) ;
if ( ! obj _File . exists ( ) )
obj _File . create ( obj _File . DIRECTORY _TYPE , 0700 ) ;
if ( ! obj _File . exists ( ) ) obj _File . create ( obj _File . DIRECTORY _TYPE , 0700 ) ;
} ,
readDir : function ( str _Dir )
{
readDir : function ( str _Dir ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( str _Dir ) ;
if ( obj _File . exists ( ) ) return obj _File . directoryEntries ;
return [ ] ;
} ,
fileSize : function ( str _Filename )
{
fileSize : function ( str _Filename ) {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( str _Filename ) ;
return obj _File . fileSize ;
} ,
// read the file (str_Filename) to a String Buffer (str_Buffer)
readFile : function ( str _Filename , removeComments , text )
{
try {
readFile : function ( str _Filename , removeComments , text ) {
try {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( str _Filename ) ;
if ( ! obj _File . exists ( ) ) {
this . addError ( "[wpdCommon.readFile]:\n -> str_Filename: " + str _Filename + "\n -> file not found!" ) ;
this . addError ( "[wpdCommon.readFile]:\n -> str_Filename: " + str _Filename + "\n -> file not found!" ) ;
return "" ;
}
var obj _Transport = Components . classes [ "@mozilla.org/network/file-input-stream;1" ] . createInstance ( Components . interfaces . nsIFileInputStream ) ;
obj _Transport . init ( obj _File , 0x01 , 004 , 0 ) ;
obj _Transport . init ( obj _File , 0x01 , 004 , 0 ) ;
var sis = Components . classes [ "@mozilla.org/scriptableinputstream;1" ] . createInstance ( Components . interfaces . nsIScriptableInputStream ) ;
sis . init ( obj _Transport ) ;
var output = sis . read ( sis . available ( ) ) ;
if ( text ) output = output . replace ( /\r/g , "" ) ;
var sis = Components . classes [ "@mozilla.org/scriptableinputstream;1" ] . createInstance ( Components . interfaces . nsIScriptableInputStream ) ;
sis . init ( obj _Transport ) ;
var output = sis . read ( sis . available ( ) ) ;
if ( text ) output = output . replace ( /\r/g , "" ) ;
if ( text && removeComments ) {
output = output . replace ( /^\/\/.*/g , "" ) ;
output = output . replace ( /\n\/\/.*/g , "" ) ;
output = output . replace ( /\n\n+/g , "\n" ) ;
output = output . replace ( /^\/\/.*/g , "" ) ;
output = output . replace ( /\n\/\/.*/g , "" ) ;
output = output . replace ( /\n\n+/g , "\n" ) ;
}
if ( text ) output = output . split ( /\n/g ) ;
return output ;
} catch ( ex ) {
this . addError ( "[wpdCommon.readFile]:\n -> str_Filename: " + str _Filename + "\n -> " + ex ) ;
this . addError ( "[wpdCommon.readFile]:\n -> str_Filename: " + str _Filename + "\n -> " + ex ) ;
}
return "" ;
} ,
// write the String Buffer (str_Buffer) to a file (str_Filename)
writeFile : function ( str _Buffer , str _Filename )
{
writeFile : function ( str _Buffer , str _Filename ) {
if ( MODE _SIMULATE ) return true ;
try {
try {
var obj _File = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
obj _File . initWithPath ( str _Filename ) ;
if ( ! obj _File . exists ( ) )
obj _File . create ( Components . interfaces . nsIFile . NORMAL _FILE _TYPE , 0666 ) ;
if ( ! obj _File . exists ( ) ) obj _File . create ( Components . interfaces . nsIFile . NORMAL _FILE _TYPE , 0666 ) ;
var obj _Transport = Components . classes [ "@mozilla.org/network/file-output-stream;1" ] . createInstance ( Components . interfaces . nsIFileOutputStream ) ;
@ -663,43 +618,39 @@ var wpdCommon = {
00002 Write by others
00001 Execute by others .
* /
obj _Transport . init ( obj _File , 0x20 | 0x04 | 0x08 , 064 , 0 ) ;
obj _Transport . write ( str _Buffer , str _Buffer . length ) ;
obj _Transport . init ( obj _File , 0x20 | 0x04 | 0x08 , 064 , 0 ) ;
obj _Transport . write ( str _Buffer , str _Buffer . length ) ;
obj _Transport . flush ( ) ;
obj _Transport . close ( ) ;
return true ;
} catch ( ex ) {
this . addError ( "[wpdCommon.writeFile]:\n -> str_Filename: " + str _Filename + "\n -> " + ex ) ;
this . addError ( "[wpdCommon.writeFile]:\n -> str_Filename: " + str _Filename + "\n -> " + ex ) ;
}
return false ;
} ,
copyFile : function ( sourcefile , destfile )
{
copyFile : function ( sourcefile , destfile ) {
var destdir = this . getFilePath ( destfile ) ;
destfile = this . getFileLeafName ( destfile ) ;
var aFile = Components . classes [ "@mozilla.org/file/local;1" ]
. createInstance ( Components . interfaces . nsILocalFile ) ;
var destdir = this . getFilePath ( destfile ) ;
destfile = this . getFileLeafName ( destfile ) ;
var aFile = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
if ( ! aFile ) return false ;
var aDir = Components . classes [ "@mozilla.org/file/local;1" ]
. createInstance ( Components . interfaces . nsILocalFile ) ;
var aDir = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
if ( ! aDir ) return false ;
aFile . initWithPath ( sourcefile ) ;
aDir . initWithPath ( destdir ) ;
aFile . copyTo ( aDir , destfile ) ;
aFile . copyTo ( aDir , destfile ) ;
return true ; // Added by Dan S. for Zotero
} ,
// download aSourceURL to aTargetFilename
// (works also on local files...)
downloadFile : function ( aSourceURL , aTargetFilename )
{
downloadFile : function ( aSourceURL , aTargetFilename ) {
if ( MODE _SIMULATE ) return true ;
try {
//new obj_URI object
@ -718,76 +669,72 @@ var wpdCommon = {
// set flags
const nsIWBP = Components . interfaces . nsIWebBrowserPersist ;
var flags = nsIWBP . PERSIST _FLAGS _REPLACE _EXISTING _FILES |
nsIWBP . PERSIST _FLAGS _FROM _CACHE ;
var flags = nsIWBP . PERSIST _FLAGS _REPLACE _EXISTING _FILES | nsIWBP . PERSIST _FLAGS _FROM _CACHE ;
//nsIWBP.PERSIST_FLAGS_BYPASS_CACHE;
obj _Persist . persistFlags = flags ;
// has the url the same filetype like the file extension?
//save file to target
obj _Persist . saveURI ( obj _URI , null , null , null , null , obj _TargetFile ) ;
try {
obj _Persist . saveURI ( obj _URI , null , null , null , null , obj _TargetFile ) ;
} catch ( e if e . name === "NS_ERROR_XPC_NOT_ENOUGH_ARGS" ) {
// https://bugzilla.mozilla.org/show_bug.cgi?id=794602
// XXX Always use when we no longer support Firefox < 18
obj _Persist . saveURI ( obj _URI , null , null , null , null , obj _TargetFile , null ) ;
}
return true ;
} catch ( ex ) {
aSourceURL = this . removeGETFromURL ( aSourceURL ) ;
this . addError ( "[wpdCommon.downloadFile]:\n -> aSourceURL: " + aSourceURL . substring ( aSourceURL . length - 60 ) + "\n -> aTargetFilename: " + aTargetFilename + "\n -> " + ex ) ;
aSourceURL = this . removeGETFromURL ( aSourceURL ) ;
this . addError ( "[wpdCommon.downloadFile]:\n -> aSourceURL: " + aSourceURL . substring ( aSourceURL . length - 60 ) + "\n -> aTargetFilename: " + aTargetFilename + "\n -> " + ex ) ;
}
return false ;
} ,
// get the integer preferences
getIntPrefs : function ( branch )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
getIntPrefs : function ( branch ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . getIntPref ( branch ) ;
} ,
// set the integer preferences
setIntPrefs : function ( branch , value )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setIntPref ( branch , value ) ;
setIntPrefs : function ( branch , value ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setIntPref ( branch , value ) ;
} ,
// get the integer preferences
getStrPrefs : function ( branch )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
getStrPrefs : function ( branch ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . getCharPref ( branch ) ;
} ,
// set the string preferences
setStrPrefs : function ( branch , value )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setCharPref ( branch , value ) ;
setStrPrefs : function ( branch , value ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setCharPref ( branch , value ) ;
} ,
// get the string preferences
getStrPrefsEx : function ( branch )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefBranch ) ;
return mPrefSvc . getComplexValue ( branch , Components . interfaces . nsISupportsString ) . data ;
getStrPrefsEx : function ( branch ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefBranch ) ;
return mPrefSvc . getComplexValue ( branch , Components . interfaces . nsISupportsString ) . data ;
} ,
// set the string preferences
setStrPrefsEx : function ( branch , value )
{
setStrPrefsEx : function ( branch , value ) {
var str = Components . classes [ "@mozilla.org/supports-string;1" ] . createInstance ( Components . interfaces . nsISupportsString ) ;
str . data = value ;
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefBranch ) ;
return mPrefSvc . setComplexValue ( branch , Components . interfaces . nsISupportsString , str ) ;
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefBranch ) ;
return mPrefSvc . setComplexValue ( branch , Components . interfaces . nsISupportsString , str ) ;
} ,
// Get the preferences branch ("browser.download." for normal 'save' mode)...
setBoolPrefs : function ( branch , value )
{
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setBoolPref ( branch , value ) ;
setBoolPrefs : function ( branch , value ) {
var mPrefSvc = Components . classes [ "@mozilla.org/preferences-service;1" ] . getService ( Components . interfaces . nsIPrefService ) ;
return mPrefSvc . setBoolPref ( branch , value ) ;
}
} ;