http://trac.tiddlywiki.org/changeset/9546

JeremyRuston
2009-04-21 11:17:04 +0000 (Tue, 21 Apr 2009)
106
[fileplugin] Substantial refactoring to structure each file system technology 
as a separate driver (#1036)

---------------

U   Trunk/core/jquery/plugins/jquery.file.js

---------------

Modified: Trunk/core/jquery/plugins/jquery.file.js
===================================================================
--- Trunk/core/jquery/plugins/jquery.file.js    2009-04-21 11:16:34 UTC (rev 
9545)
+++ Trunk/core/jquery/plugins/jquery.file.js    2009-04-21 11:17:04 UTC (rev 
9546)
@@ -11,199 +11,244 @@
 */
 
 (function($) {
-
-       $(function() {
-               if(!document.applets["TiddlySaver"] && !$.browser.mozilla && 
!$.browser.msie) {
-                       $(document.body).append("<applet 
style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' 
archive='TiddlySaver.jar' width='1'height='1'></applet>");
-               }
-       });
        if(!$.file) {
                $.file = {};
        }
 
        $.extend($.file,{
+               currentDriver: null,
+               driverList: ["activeX", "mozilla", "tiddlySaver", 
"javaLiveConnect"],
+               
+               getDriver: function() {
+                       if(this.currentDriver === null) {
+                               for(var t=0; t<this.driverList.length; t++) {
+                                       if(this.currentDriver === null && 
drivers[this.driverList[t]].isAvailable && 
drivers[this.driverList[t]].isAvailable())
+                                               this.currentDriver = 
drivers[this.driverList[t]];
+                               }
+                       }
+                       return this.currentDriver;
+               },
                load: function(filePath) {
-                       var r = mozillaLoadFile(filePath);
-                       if((r == null) || (r == false))
-                               r = ieLoadFile(filePath);
-                       if((r == null) || (r == false))
-                               r = appletLoadFile(filePath);
-                       if((r == null) || (r == false))
-                               r = javaLoadFile(filePath);
-                       return r;
+                       return this.getDriver().loadFile(filePath);
                },
                save: function(filePath,content) {
-                       var r = mozillaSaveFile(filePath,content);
-                       if(!r)
-                               r = ieSaveFile(filePath,content);
-                       if(!r)
-                               r = appletSaveFile(filePath,content);
-                       if(!r)
-                               r = javaSaveFile(filePath,content);
-                       return r;
+                       return this.getDriver().saveFile(filePath,content);
                },
                copy: function(dest,source) {
-                       return $.browser.msie ? ieCopyFile(dest,source) : false;
+                       if(this.getDriver().copyFile)
+                               return this.currentDriver.copyFile(dest,source);
+                       else
+                               return false;
                }
        });
 
-       // Private functions.
-       function ieLoadFile(filePath) {
-               // Returns null if it can't do it, false if there's an error, 
or a string of the content if successful
-               try {
-                       var fso = new 
ActiveXObject("Scripting.FileSystemObject");
-                       var file = fso.OpenTextFile(filePath,1);
-                       var content = file.ReadAll();
-                       file.Close();
-               } catch(ex) {
-                       //# alert("Exception while attempting to load\n\n" + 
ex.toString());
-                       return null;
-               }
-               return content;
-       }
-
-       function mozillaLoadFile(filePath) {
-               // Returns null if it can't do it, false if there's an error, 
or a string of the content if successful
-               if(window.Components) {
+       // Private implementations for each browser
+       
+       var drivers = {};
+       
+       drivers.activeX = {
+               name: "activeX",
+               isAvailable: function() {
                        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,4,null);
-                               var converter = 
Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);
-                               converter.init(inputStream, "UTF-8", 0, 0);
-                               var buffer = {};
-                               var result = [];
-                               while(converter.readString(-1,buffer) != 0) {
-                                       result.push(buffer.value);
+                               var fso = new 
ActiveXObject("Scripting.FileSystemObject");
+                       } catch(ex) {
+                               return false;
+                       }
+                       return true;
+               },
+               loadFile: function(filePath) {
+                       // Returns null if it can't do it, false if there's an 
error, or a string of the content if successful
+                       try {
+                               var fso = new 
ActiveXObject("Scripting.FileSystemObject");
+                               var file = fso.OpenTextFile(filePath,1);
+                               var content = file.ReadAll();
+                               file.Close();
+                       } catch(ex) {
+                               //# alert("Exception while attempting to 
load\n\n" + ex.toString());
+                               return null;
+                       }
+                       return content;
+               },
+               createPath: function(path) {
+                       //# Remove the filename, if present. Use trailing slash 
(i.e. "foo\bar\") if no filename.
+                       var pos = path.lastIndexOf("\\");
+                       if(pos!=-1)
+                               path = path.substring(0,pos+1);
+                       //# Walk up the path until we find a folder that exists
+                       var scan = [path];
+                       try {
+                               var fso = new 
ActiveXObject("Scripting.FileSystemObject");
+                               var parent = fso.GetParentFolderName(path);
+                               while(parent && !fso.FolderExists(parent)) {
+                                       scan.push(parent);
+                                       parent = 
fso.GetParentFolderName(parent);
                                }
-                               converter.close();
-                               inputStream.close();
-                               return result.join("");
+                               //# Walk back down the path, creating folders
+                               for(i=scan.length-1;i>=0;i--) {
+                                       if(!fso.FolderExists(scan[i])) {
+                                               fso.CreateFolder(scan[i]);
+                                       }
+                               }
+                               return true;
                        } catch(ex) {
-                               //# alert("Exception while attempting to 
load\n\n" + ex);
+                       }
+                       return false;
+               },
+               copyFile: function(dest,source) {
+                       drivers.activeX.createPath(dest);
+                       try {
+                               var fso = new 
ActiveXObject("Scripting.FileSystemObject");
+                               fso.GetFile(source).Copy(dest);
+                       } catch(ex) {
                                return false;
                        }
+                       return true;
+               },
+               saveFile: function(filePath,content) {
+alert("One");
+                       // Returns null if it can't do it, false if there's an 
error, true if it saved OK
+                       drivers.activeX.createPath(filePath);
+alert("2");
+                       try {
+                               var fso = new 
ActiveXObject("Scripting.FileSystemObject");
+alert("3");
+                               var file = fso.OpenTextFile(filePath,2,-1,0);
+alert("3.2");
+                               file.Write(content);
+alert("3.4");
+                               file.Close();
+alert("4");
+                       } catch (ex) {
+                               return null;
+                       }
+alert("5");
+                       return true;
                }
-               return null;
-       }
+       };
 
-       function javaUrlToFilename(url) {
-               var f = "//localhost";
-               if(url.indexOf(f) == 0)
-                       return url.substring(f.length);
-               var i = url.indexOf(":");
-               return i > 0 ? url.substring(i-1) : url;
-       }
-
-       function appletLoadFile(filePath) {
-               var r;
-               try {
-                       if(document.applets["TiddlySaver"]) {
-                               r = 
document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8");
-                               return (r === undefined || r === null) ? null : 
String(r);
+       drivers.mozilla = {
+               name: "mozilla",
+               isAvailable: function() {
+                       return !!window.Components;
+               },
+               loadFile: function(filePath) {
+                       // Returns null if it can't do it, false if there's an 
error, or a string of the content if successful
+                       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,4,null);
+                                       var converter = 
Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);
+                                       converter.init(inputStream, "UTF-8", 0, 
0);
+                                       var buffer = {};
+                                       var result = [];
+                                       while(converter.readString(-1,buffer) 
!= 0) {
+                                               result.push(buffer.value);
+                                       }
+                                       converter.close();
+                                       inputStream.close();
+                                       return result.join("");
+                               } catch(ex) {
+                                       //# alert("Exception while attempting 
to load\n\n" + ex);
+                                       return false;
+                               }
                        }
-               } catch(ex) {
-               }
-               return null;
-       }
-
-       function javaLoadFile(filePath) {
-               var r;
-               var content = [];
-               try {
-                       r = new java.io.BufferedReader(new 
java.io.FileReader(javaUrlToFilename(filePath)));
-                       var line;
-                       while((line = r.readLine()) != null)
-                               content.push(new String(line));
-                       r.close();
-               } catch(ex) {
                        return null;
-               }
-               return content.join("\n") + "\n";
-       }
-
-       function ieCreatePath(path) {
-               try {
-                       var fso = new 
ActiveXObject("Scripting.FileSystemObject");
-               } catch(ex) {
+               },
+               saveFile: function(filePath,content) {
+                       // Returns null if it can't do it, false if there's an 
error, true if it saved OK
+                       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,0x22,4,null);
+                                       var converter = 
Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
+                                       converter.init(out, "UTF-8", 0, 0);
+                                       converter.writeString(content);
+                                       converter.close();
+                                       out.close();
+                                       return true;
+                               } catch(ex) {
+                                       alert("Exception while attempting to 
save\n\n" + ex);
+                                       return false;
+                               }
+                       }
                        return null;
                }
+       };
+       
+       $(function() {
+               drivers.tiddlySaver.loadApplet();
+       });
 
-               //# Remove the filename, if present. Use trailing slash (i.e. 
"foo\bar\") if no filename.
-               var pos = path.lastIndexOf("\\");
-               if(pos!=-1)
-                       path = path.substring(0,pos+1);
-
-               //# Walk up the path until we find a folder that exists
-               var scan = [path];
-               var parent = fso.GetParentFolderName(path);
-               while(parent && !fso.FolderExists(parent)) {
-                       scan.push(parent);
-                       parent = fso.GetParentFolderName(parent);
-               }
-
-               //# Walk back down the path, creating folders
-               for(i=scan.length-1;i>=0;i--) {
-                       if(!fso.FolderExists(scan[i])) {
-                               fso.CreateFolder(scan[i]);
+       drivers.tiddlySaver = {
+               name: "tiddlySaver",
+               loadApplet: function() {
+                       if(!document.applets["TiddlySaver"] && 
!$.browser.mozilla && !$.browser.msie) {
+                               $(document.body).append("<applet 
style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' 
archive='TiddlySaver.jar' width='1'height='1'></applet>");
                        }
-               }
-               return true;
-       }
-
-       function ieCopyFile(dest,source) {
-               ieCreatePath(dest);
-               try {
-                       var fso = new 
ActiveXObject("Scripting.FileSystemObject");
-                       fso.GetFile(source).Copy(dest);
-               } catch(ex) {
-                       return false;
-               }
-               return true;
-       }
-
-       function ieSaveFile(filePath,content) {
-               // Returns null if it can't do it, false if there's an error, 
true if it saved OK
-               ieCreatePath(filePath);
-               try {
-                       var fso = new 
ActiveXObject("Scripting.FileSystemObject");
-               } catch(ex) {
-                       //# alert("Exception while attempting to save\n\n" + 
ex.toString());
+               },
+               isAvailable: function() {
+                       return !!document.applets["TiddlySaver"];
+               },
+               loadFile: function(filePath) {
+                       var r;
+                       try {
+                               if(document.applets["TiddlySaver"]) {
+                                       r = 
document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8");
+                                       return (r === undefined || r === null) 
? null : String(r);
+                               }
+                       } catch(ex) {
+                       }
                        return null;
+               },
+               saveFile: function(filePath,content) {
+                       try {
+                               if(document.applets["TiddlySaver"])
+                                       return 
document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content);
+                       } catch(ex) {
+                       }
+                       return null;
                }
-               var file = fso.OpenTextFile(filePath,2,-1,0);
-               file.Write(content);
-               file.Close();
-               return true;
        }
 
-       function mozillaSaveFile(filePath,content) {
-               // Returns null if it can't do it, false if there's an error, 
true if it saved OK
-               if(window.Components) {
+       drivers.javaLiveConnect = {
+               name: "javaLiveConnect",
+               isAvailable: function() {
+                       return !!window.java && !!window.java.io && 
!!window.java.io.FileReader;
+               },
+               loadFile: function(filePath) {
+                       var r;
+                       var content = [];
                        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,0x22,4,null);
-                               var converter = 
Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
-                               converter.init(out, "UTF-8", 0, 0);
-                               converter.writeString(content);
-                               converter.close();
-                               out.close();
-                               return true;
+                               r = new java.io.BufferedReader(new 
java.io.FileReader(javaUrlToFilename(filePath)));
+                               var line;
+                               while((line = r.readLine()) != null)
+                                       content.push(new String(line));
+                               r.close();
                        } catch(ex) {
-                               alert("Exception while attempting to save\n\n" 
+ ex);
-                               return false;
+                               return null;
                        }
+                       return content.join("\n") + "\n";
+               },
+               saveFile: function(filePath,content) {
+                       try {
+                               var s = new java.io.PrintStream(new 
java.io.FileOutputStream(javaUrlToFilename(filePath)));
+                               s.print(content);
+                               s.close();
+                       } catch(ex) {
+                               return null;
+                       }
+                       return true;
                }
-               return null;
        }
 
        function javaUrlToFilename(url) {
@@ -214,24 +259,4 @@
                return i > 0 ? url.substring(i-1) : url;
        }
 
-       function appletSaveFile(filePath,content) {
-               try {
-                       if(document.applets["TiddlySaver"])
-                               return 
document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content);
-               } catch(ex) {
-               }
-               return null;
-       }
-
-       function javaSaveFile(filePath,content) {
-               try {
-                       var s = new java.io.PrintStream(new 
java.io.FileOutputStream(javaUrlToFilename(filePath)));
-                       s.print(content);
-                       s.close();
-               } catch(ex) {
-                       return null;
-               }
-               return true;
-       }
-
 })(jQuery);

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TiddlyWikiDev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/TiddlyWikiDev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to