// utility functions borrowed from tiddly wiki: http://www.tiddlywiki.com/ | |
// Tiddly Wiki License: | |
/* | |
TiddlyWiki 2.1.3 by Jeremy Ruston, (jeremy [at] osmosoft [dot] com) | |
Copyright (c) Osmosoft Limited 2004-2006 | |
Redistribution and use in source and binary forms, with or without modification, | |
are permitted provided that the following conditions are met: | |
Redistributions of source code must retain the above copyright notice, this | |
list of conditions and the following disclaimer. | |
Redistributions in binary form must reproduce the above copyright notice, this | |
list of conditions and the following disclaimer in the documentation and/or other | |
materials provided with the distribution. | |
Neither the name of the Osmosoft Limited nor the names of its contributors may be | |
used to endorse or promote products derived from this software without specific | |
prior written permission. | |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY | |
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT | |
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | |
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | |
DAMAGE. | |
*/ | |
if (typeof xooki.io == "undefined") { | |
xooki.io = {}; | |
} | |
xooki.io.saveFile = function (fileUrl, content) { | |
var r = null; | |
if((r == null) || (r == false)) | |
r = mozillaSaveFile(fileUrl, content); | |
if((r == null) || (r == false)) | |
r = ieSaveFile(fileUrl, content); | |
return(r); | |
} | |
xooki.io.loadFile = function (fileUrl) { | |
var r = null; | |
if((r == null) || (r == false)) | |
r = mozillaLoadFile(fileUrl); | |
if((r == null) || (r == false)) | |
r = ieLoadFile(fileUrl); | |
return(r); | |
} | |
xooki.io.getLocalPath = function (originalPath) { | |
// Remove any location or query part of the URL | |
var argPos = originalPath.indexOf("?"); | |
if(argPos != -1) | |
originalPath = originalPath.substr(0,argPos); | |
var hashPos = originalPath.indexOf("#"); | |
if(hashPos != -1) | |
originalPath = originalPath.substr(0,hashPos); | |
// Convert file://localhost/ to file:/// | |
if(originalPath.indexOf("file://localhost/") == 0) | |
originalPath = "file://" + originalPath.substr(16); | |
// Convert to a native file format assuming | |
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..." | |
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..." | |
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..." | |
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..." | |
var localPath; | |
if(originalPath.charAt(9) == ":") // pc local file | |
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\"); | |
else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file | |
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\"); | |
else if(originalPath.indexOf("file:///") == 0) // mac/unix local file | |
localPath = unescape(originalPath.substr(7)); | |
else if(originalPath.indexOf("file:/") == 0) // mac/unix local file | |
localPath = unescape(originalPath.substr(5)); | |
else // pc network file | |
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\"); | |
return localPath; | |
} | |
// Returns null if it can't do it, false if there's an error, true if it saved OK | |
function ieSaveFile(filePath, content) | |
{ | |
try | |
{ | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
} | |
catch(e) | |
{ | |
//alert("Exception while attempting to save\n\n" + e.toString()); | |
return(null); | |
} | |
var file = fso.OpenTextFile(filePath,2,-1,0); | |
file.Write(content); | |
file.Close(); | |
return(true); | |
} | |
// Returns null if it can't do it, false if there's an error, or a string of the content if successful | |
function ieLoadFile(filePath) | |
{ | |
try | |
{ | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
var file = fso.OpenTextFile(filePath,1); | |
var content = file.ReadAll(); | |
file.Close(); | |
} | |
catch(e) | |
{ | |
//alert("Exception while attempting to load\n\n" + e.toString()); | |
return(null); | |
} | |
return(content); | |
} | |
// Returns null if it can't do it, false if there's an error, true if it saved OK | |
function mozillaSaveFile(filePath, content) | |
{ | |
if(window.Components) | |
try | |
{ | |
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); | |
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); | |
file.initWithPath(filePath); | |
if (!file.exists()) | |
file.create(0, 0664); | |
var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); | |
out.init(file, 0x20 | 0x02, 00004,null); | |
out.write(content, content.length); | |
out.flush(); | |
out.close(); | |
return(true); | |
} | |
catch(e) | |
{ | |
//alert("Exception while attempting to save\n\n" + e); | |
return(false); | |
} | |
return(null); | |
} | |
// Returns null if it can't do it, false if there's an error, or a string of the content if successful | |
function mozillaLoadFile(filePath) | |
{ | |
if(window.Components) | |
try | |
{ | |
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); | |
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); | |
file.initWithPath(filePath); | |
if (!file.exists()) | |
return(null); | |
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); | |
inputStream.init(file, 0x01, 00004, null); | |
var sInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); | |
sInputStream.init(inputStream); | |
return(sInputStream.read(sInputStream.available())); | |
} | |
catch(e) | |
{ | |
//alert("Exception while attempting to load\n\n" + e); | |
return(false); | |
} | |
return(null); | |
} | |
// end tiddly wiki borrowed code |