Merge commit '920df48d1da4f9bf33bf1a01c60a2131e589d29c' into 3.0
This commit is contained in:
commit
f6c3f58bc2
|
@ -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;
|
||||
|
||||
|
||||
/*function wpdGetTopBrowserWindow()
|
||||
|
@ -74,14 +71,14 @@ var WPD_MAXUIERRORCOUNT=8;
|
|||
/* [14:55:15] paolinho: var browserWin = windowMediator.getMostRecentWindow("navigator:browser");
|
||||
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,66 @@ 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);
|
||||
obj_Persist.saveURI(obj_URI, null, null, null, null, obj_TargetFile);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -819,6 +819,11 @@ function ChromeExtensionHandler() {
|
|||
var fileURI = ph.newFileURI(file);
|
||||
}
|
||||
var channel = ioService.newChannelFromURI(fileURI);
|
||||
//set originalURI so that it seems like we're serving from zotero:// protocol
|
||||
//this is necessary to allow url() links to work from within css files
|
||||
//otherwise they try to link to files on the file:// protocol, which is not allowed
|
||||
channel.originalURI = uri;
|
||||
|
||||
return channel;
|
||||
}
|
||||
catch (e) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user