| // 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 |