You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
548 lines
14 KiB
548 lines
14 KiB
/* |
|
Copyright (c) 2004-2006, The Dojo Foundation |
|
All Rights Reserved. |
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the |
|
modified BSD license. For more information on Dojo licensing, see: |
|
|
|
http://dojotoolkit.org/community/licensing.shtml |
|
*/ |
|
|
|
|
|
dojo.provide("dojo.storage.browser"); |
|
dojo.require("dojo.storage"); |
|
dojo.require("dojo.flash"); |
|
dojo.require("dojo.json"); |
|
dojo.require("dojo.uri.*"); |
|
dojo.storage.browser.FileStorageProvider=function(){ |
|
}; |
|
dojo.inherits(dojo.storage.browser.FileStorageProvider,dojo.storage); |
|
dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME="__dojoAllKeys"; |
|
dojo.storage.browser.FileStorageProvider._APPLET_ID="__dojoFileJavaObj"; |
|
dojo.lang.extend(dojo.storage.browser.FileStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,_keyIndex:new Array(),initialize:function(){ |
|
if(djConfig["disableFileStorage"]==true){ |
|
return; |
|
} |
|
this._loadKeyIndex(); |
|
this.initialized=true; |
|
dojo.storage.manager.loaded(); |
|
},isAvailable:function(){ |
|
this._available=false; |
|
var _1=window.location.protocol; |
|
if(_1.indexOf("file")!=-1||_1.indexOf("chrome")!=-1){ |
|
this._available=this._isAvailableXPCOM(); |
|
if(this._available==false){ |
|
this._available=this._isAvailableActiveX(); |
|
} |
|
} |
|
return this._available; |
|
},put:function(_2,_3,_4){ |
|
if(this.isValidKey(_2)==false){ |
|
dojo.raise("Invalid key given: "+_2); |
|
} |
|
this._statusHandler=_4; |
|
try{ |
|
this._save(_2,_3); |
|
_4.call(null,dojo.storage.SUCCESS,_2); |
|
} |
|
catch(e){ |
|
this._statusHandler.call(null,dojo.storage.FAILED,_2,e.toString()); |
|
} |
|
},get:function(_5){ |
|
if(this.isValidKey(_5)==false){ |
|
dojo.raise("Invalid key given: "+_5); |
|
} |
|
var _6=this._load(_5); |
|
return _6; |
|
},getKeys:function(){ |
|
return this._keyIndex; |
|
},hasKey:function(_7){ |
|
if(this.isValidKey(_7)==false){ |
|
dojo.raise("Invalid key given: "+_7); |
|
} |
|
this._loadKeyIndex(); |
|
var _8=false; |
|
for(var i=0;i<this._keyIndex.length;i++){ |
|
if(this._keyIndex[i]==_7){ |
|
_8=true; |
|
} |
|
} |
|
return _8; |
|
},clear:function(){ |
|
this._loadKeyIndex(); |
|
var _a=new Array(); |
|
for(var i=0;i<this._keyIndex.length;i++){ |
|
_a[_a.length]=new String(this._keyIndex[i]); |
|
} |
|
for(var i=0;i<_a.length;i++){ |
|
this.remove(_a[i]); |
|
} |
|
},remove:function(_c){ |
|
if(this.isValidKey(_c)==false){ |
|
dojo.raise("Invalid key given: "+_c); |
|
} |
|
this._loadKeyIndex(); |
|
for(var i=0;i<this._keyIndex.length;i++){ |
|
if(this._keyIndex[i]==_c){ |
|
this._keyIndex.splice(i,1); |
|
break; |
|
} |
|
} |
|
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false); |
|
var _e=this._getPagePath()+_c+".txt"; |
|
if(this._isAvailableXPCOM()){ |
|
this._removeXPCOM(_e); |
|
}else{ |
|
if(this._isAvailableActiveX()){ |
|
this._removeActiveX(_e); |
|
} |
|
} |
|
},isPermanent:function(){ |
|
return true; |
|
},getMaximumSize:function(){ |
|
return dojo.storage.SIZE_NO_LIMIT; |
|
},hasSettingsUI:function(){ |
|
return false; |
|
},showSettingsUI:function(){ |
|
dojo.raise(this.getType()+" does not support a storage settings user-interface"); |
|
},hideSettingsUI:function(){ |
|
dojo.raise(this.getType()+" does not support a storage settings user-interface"); |
|
},getType:function(){ |
|
return "dojo.storage.browser.FileStorageProvider"; |
|
},_save:function(_f,_10,_11){ |
|
if(typeof _11=="undefined"){ |
|
_11=true; |
|
} |
|
if(dojo.lang.isString(_10)==false){ |
|
_10=dojo.json.serialize(_10); |
|
_10="/* JavaScript */\n"+_10+"\n\n"; |
|
} |
|
var _12=this._getPagePath()+_f+".txt"; |
|
if(this._isAvailableXPCOM()){ |
|
this._saveFileXPCOM(_12,_10); |
|
}else{ |
|
if(this._isAvailableActiveX()){ |
|
this._saveFileActiveX(_12,_10); |
|
} |
|
} |
|
if(_11){ |
|
this._updateKeyIndex(_f); |
|
} |
|
},_load:function(key){ |
|
var _14=this._getPagePath()+key+".txt"; |
|
var _15=null; |
|
if(this._isAvailableXPCOM()){ |
|
_15=this._loadFileXPCOM(_14); |
|
}else{ |
|
if(this._isAvailableActiveX()){ |
|
_15=this._loadFileActiveX(_14); |
|
}else{ |
|
if(this._isAvailableJava()){ |
|
_15=this._loadFileJava(_14); |
|
} |
|
} |
|
} |
|
if(_15==null){ |
|
return null; |
|
} |
|
if(!dojo.lang.isUndefined(_15)&&_15!=null&&/^\/\* JavaScript \*\//.test(_15)){ |
|
_15=dojo.json.evalJson(_15); |
|
} |
|
return _15; |
|
},_updateKeyIndex:function(key){ |
|
this._loadKeyIndex(); |
|
var _17=false; |
|
for(var i=0;i<this._keyIndex.length;i++){ |
|
if(this._keyIndex[i]==key){ |
|
_17=true; |
|
break; |
|
} |
|
} |
|
if(_17==false){ |
|
this._keyIndex[this._keyIndex.length]=key; |
|
} |
|
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false); |
|
},_loadKeyIndex:function(){ |
|
var _19=this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME); |
|
if(_19==null){ |
|
this._keyIndex=new Array(); |
|
}else{ |
|
this._keyIndex=_19; |
|
} |
|
},_saveFileXPCOM:function(_1a,_1b){ |
|
try{ |
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); |
|
var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); |
|
f.initWithPath(_1a); |
|
var _1d=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); |
|
_1d.init(f,32|4|8,256+128,null); |
|
_1d.write(_1b,_1b.length); |
|
_1d.close(); |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileXPCOM(): "+msg); |
|
} |
|
},_loadFileXPCOM:function(_1f){ |
|
try{ |
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); |
|
var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); |
|
f.initWithPath(_1f); |
|
if(f.exists()==false){ |
|
return null; |
|
} |
|
var inp=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); |
|
inp.init(f,1,4,null); |
|
var _22=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); |
|
_22.init(inp); |
|
var _23=_22.read(_22.available()); |
|
return _23; |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileXPCOM(): "+msg); |
|
} |
|
return null; |
|
},_saveFileActiveX:function(_25,_26){ |
|
try{ |
|
var _27=new ActiveXObject("Scripting.FileSystemObject"); |
|
var f=_27.OpenTextFile(_25,2,true); |
|
f.Write(_26); |
|
f.Close(); |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileActiveX(): "+msg); |
|
} |
|
},_loadFileActiveX:function(_2a){ |
|
try{ |
|
var _2b=new ActiveXObject("Scripting.FileSystemObject"); |
|
if(_2b.FileExists(_2a)==false){ |
|
return null; |
|
} |
|
var f=_2b.OpenTextFile(_2a,1); |
|
var _2d=f.ReadAll(); |
|
f.Close(); |
|
return _2d; |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileActiveX(): "+msg); |
|
} |
|
},_saveFileJava:function(_2f,_30){ |
|
try{ |
|
var _31=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID); |
|
_31.save(_2f,_30); |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileJava(): "+msg); |
|
} |
|
},_loadFileJava:function(_33){ |
|
try{ |
|
var _34=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID); |
|
var _35=_34.load(_33); |
|
return _35; |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileJava(): "+msg); |
|
} |
|
},_isAvailableActiveX:function(){ |
|
try{ |
|
if(window.ActiveXObject){ |
|
var _37=new window.ActiveXObject("Scripting.FileSystemObject"); |
|
return true; |
|
} |
|
} |
|
catch(e){ |
|
dojo.debug(e); |
|
} |
|
return false; |
|
},_isAvailableXPCOM:function(){ |
|
try{ |
|
if(window.Components){ |
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); |
|
Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); |
|
return true; |
|
} |
|
} |
|
catch(e){ |
|
dojo.debug(e); |
|
} |
|
return false; |
|
},_isAvailableJava:function(){ |
|
try{ |
|
if(dojo.render.html.safari==true||dojo.render.html.opera==true()){ |
|
if(navigator.javaEnabled()==true){ |
|
return true; |
|
} |
|
} |
|
} |
|
catch(e){ |
|
dojo.debug(e); |
|
} |
|
return false; |
|
},_getPagePath:function(){ |
|
var _38=window.location.pathname; |
|
if(/\.html?$/i.test(_38)){ |
|
_38=_38.replace(/(?:\/|\\)?[^\.\/\\]*\.html?$/,""); |
|
} |
|
if(/^\/?[a-z]+\:/i.test(_38)){ |
|
_38=_38.replace(/^\/?/,""); |
|
_38=_38.replace(/\//g,"\\"); |
|
}else{ |
|
if(/^[\/\\]{2,3}[^\/]/.test(_38)){ |
|
_38=_38.replace(/^[\/\\]{2,3}/,""); |
|
_38=_38.replace(/\//g,"\\"); |
|
_38="\\\\"+_38; |
|
} |
|
} |
|
if(/\/$/.test(_38)==false&&/\\$/.test(_38)==false){ |
|
if(/\//.test(_38)){ |
|
_38+="/"; |
|
}else{ |
|
_38+="\\"; |
|
} |
|
} |
|
_38=unescape(_38); |
|
return _38; |
|
},_removeXPCOM:function(_39){ |
|
try{ |
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); |
|
var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); |
|
f.initWithPath(_39); |
|
if(f.exists()==false||f.isDirectory()){ |
|
return; |
|
} |
|
if(f.isFile()){ |
|
f.remove(false); |
|
} |
|
} |
|
catch(e){ |
|
dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString()); |
|
} |
|
},_removeActiveX:function(_3b){ |
|
try{ |
|
var _3c=new ActiveXObject("Scripting.FileSystemObject"); |
|
_3c.DeleteFile(_3b); |
|
} |
|
catch(e){ |
|
dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString()); |
|
} |
|
},_removeJava:function(_3d){ |
|
try{ |
|
var _3e=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID); |
|
_3e.remove(_3d); |
|
} |
|
catch(e){ |
|
var msg=e.toString(); |
|
if(e.name&&e.message){ |
|
msg=e.name+": "+e.message; |
|
} |
|
dojo.raise("dojo.storage.browser.FileStorageProvider._removeJava(): "+msg); |
|
} |
|
},_writeApplet:function(){ |
|
var _40=dojo.uri.moduleUri("dojo","../DojoFileStorageProvider.jar").toString(); |
|
var tag="<applet "+"id='"+dojo.storage.browser.FileStorageProvider._APPLET_ID+"' "+"style='position: absolute; top: -500px; left: -500px; width: 1px; height: 1px;' "+"code='DojoFileStorageProvider.class' "+"archive='"+_40+"' "+"width='1' "+"height='1' "+">"+"</applet>"; |
|
document.writeln(tag); |
|
}}); |
|
dojo.storage.browser.WhatWGStorageProvider=function(){ |
|
}; |
|
dojo.inherits(dojo.storage.browser.WhatWGStorageProvider,dojo.storage); |
|
dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider,{namespace:"default",initialized:false,_domain:null,_available:null,_statusHandler:null,initialize:function(){ |
|
if(djConfig["disableWhatWGStorage"]==true){ |
|
return; |
|
} |
|
this._domain=location.hostname; |
|
this.initialized=true; |
|
dojo.storage.manager.loaded(); |
|
},isAvailable:function(){ |
|
try{ |
|
var _42=globalStorage[location.hostname]; |
|
} |
|
catch(e){ |
|
this._available=false; |
|
return this._available; |
|
} |
|
this._available=true; |
|
return this._available; |
|
},put:function(key,_44,_45){ |
|
if(this.isValidKey(key)==false){ |
|
dojo.raise("Invalid key given: "+key); |
|
} |
|
this._statusHandler=_45; |
|
if(dojo.lang.isString(_44)){ |
|
_44="string:"+_44; |
|
}else{ |
|
_44=dojo.json.serialize(_44); |
|
} |
|
window.addEventListener("storage",function(evt){ |
|
_45.call(null,dojo.storage.SUCCESS,key); |
|
},false); |
|
try{ |
|
var _47=globalStorage[this._domain]; |
|
_47.setItem(key,_44); |
|
} |
|
catch(e){ |
|
this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString()); |
|
} |
|
},get:function(key){ |
|
if(this.isValidKey(key)==false){ |
|
dojo.raise("Invalid key given: "+key); |
|
} |
|
var _49=globalStorage[this._domain]; |
|
var _4a=_49.getItem(key); |
|
if(_4a==null){ |
|
return null; |
|
} |
|
_4a=_4a.value; |
|
if(!dojo.lang.isUndefined(_4a)&&_4a!=null&&/^string:/.test(_4a)){ |
|
_4a=_4a.substring("string:".length); |
|
}else{ |
|
_4a=dojo.json.evalJson(_4a); |
|
} |
|
return _4a; |
|
},getKeys:function(){ |
|
var _4b=globalStorage[this._domain]; |
|
var _4c=new Array(); |
|
for(i=0;i<_4b.length;i++){ |
|
_4c[i]=_4b.key(i); |
|
} |
|
return _4c; |
|
},clear:function(){ |
|
var _4d=globalStorage[this._domain]; |
|
var _4e=new Array(); |
|
for(var i=0;i<_4d.length;i++){ |
|
_4e[_4e.length]=_4d.key(i); |
|
} |
|
for(var i=0;i<_4e.length;i++){ |
|
_4d.removeItem(_4e[i]); |
|
} |
|
},remove:function(key){ |
|
var _51=globalStorage[this._domain]; |
|
_51.removeItem(key); |
|
},isPermanent:function(){ |
|
return true; |
|
},getMaximumSize:function(){ |
|
return dojo.storage.SIZE_NO_LIMIT; |
|
},hasSettingsUI:function(){ |
|
return false; |
|
},showSettingsUI:function(){ |
|
dojo.raise(this.getType()+" does not support a storage settings user-interface"); |
|
},hideSettingsUI:function(){ |
|
dojo.raise(this.getType()+" does not support a storage settings user-interface"); |
|
},getType:function(){ |
|
return "dojo.storage.browser.WhatWGProvider"; |
|
}}); |
|
dojo.storage.browser.FlashStorageProvider=function(){ |
|
}; |
|
dojo.inherits(dojo.storage.browser.FlashStorageProvider,dojo.storage); |
|
dojo.lang.extend(dojo.storage.browser.FlashStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,initialize:function(){ |
|
if(djConfig["disableFlashStorage"]==true){ |
|
return; |
|
} |
|
var _52=function(){ |
|
dojo.storage._flashLoaded(); |
|
}; |
|
dojo.flash.addLoadedListener(_52); |
|
var _53=dojo.uri.moduleUri("dojo","../Storage_version6.swf").toString(); |
|
var _54=dojo.uri.moduleUri("dojo","../Storage_version8.swf").toString(); |
|
dojo.flash.setSwf({flash6:_53,flash8:_54,visible:false}); |
|
},isAvailable:function(){ |
|
if(djConfig["disableFlashStorage"]==true){ |
|
this._available=false; |
|
}else{ |
|
this._available=true; |
|
} |
|
return this._available; |
|
},put:function(key,_56,_57){ |
|
if(this.isValidKey(key)==false){ |
|
dojo.raise("Invalid key given: "+key); |
|
} |
|
this._statusHandler=_57; |
|
if(dojo.lang.isString(_56)){ |
|
_56="string:"+_56; |
|
}else{ |
|
_56=dojo.json.serialize(_56); |
|
} |
|
dojo.flash.comm.put(key,_56,this.namespace); |
|
},get:function(key){ |
|
if(this.isValidKey(key)==false){ |
|
dojo.raise("Invalid key given: "+key); |
|
} |
|
var _59=dojo.flash.comm.get(key,this.namespace); |
|
if(_59==""){ |
|
return null; |
|
} |
|
if(!dojo.lang.isUndefined(_59)&&_59!=null&&/^string:/.test(_59)){ |
|
_59=_59.substring("string:".length); |
|
}else{ |
|
_59=dojo.json.evalJson(_59); |
|
} |
|
return _59; |
|
},getKeys:function(){ |
|
var _5a=dojo.flash.comm.getKeys(this.namespace); |
|
if(_5a==""){ |
|
return []; |
|
} |
|
return _5a.split(","); |
|
},clear:function(){ |
|
dojo.flash.comm.clear(this.namespace); |
|
},remove:function(key){ |
|
dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove"); |
|
},isPermanent:function(){ |
|
return true; |
|
},getMaximumSize:function(){ |
|
return dojo.storage.SIZE_NO_LIMIT; |
|
},hasSettingsUI:function(){ |
|
return true; |
|
},showSettingsUI:function(){ |
|
dojo.flash.comm.showSettings(); |
|
dojo.flash.obj.setVisible(true); |
|
dojo.flash.obj.center(); |
|
},hideSettingsUI:function(){ |
|
dojo.flash.obj.setVisible(false); |
|
if(dojo.storage.onHideSettingsUI!=null&&!dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){ |
|
dojo.storage.onHideSettingsUI.call(null); |
|
} |
|
},getType:function(){ |
|
return "dojo.storage.browser.FlashStorageProvider"; |
|
},_flashLoaded:function(){ |
|
this._initialized=true; |
|
dojo.storage.manager.loaded(); |
|
},_onStatus:function(_5c,key){ |
|
var ds=dojo.storage; |
|
var dfo=dojo.flash.obj; |
|
if(_5c==ds.PENDING){ |
|
dfo.center(); |
|
dfo.setVisible(true); |
|
}else{ |
|
dfo.setVisible(false); |
|
} |
|
if((!dj_undef("_statusHandler",ds))&&(ds._statusHandler!=null)){ |
|
ds._statusHandler.call(null,_5c,key); |
|
} |
|
}}); |
|
dojo.storage.manager.register("dojo.storage.browser.FileStorageProvider",new dojo.storage.browser.FileStorageProvider()); |
|
dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",new dojo.storage.browser.WhatWGStorageProvider()); |
|
dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",new dojo.storage.browser.FlashStorageProvider()); |
|
dojo.storage.manager.initialize();
|
|
|