browser.js
来自「Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是」· JavaScript 代码 · 共 551 行 · 第 1/2 页
JS
551 行
/*
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 protocol = window.location.protocol;
if (protocol.indexOf("file") != -1 || protocol.indexOf("chrome") != -1) {
this._available = this._isAvailableXPCOM();
if (this._available == false) {
this._available = this._isAvailableActiveX();
}
}
return this._available;
}, put:function (key, value, resultsHandler) {
if (this.isValidKey(key) == false) {
dojo.raise("Invalid key given: " + key);
}
this._statusHandler = resultsHandler;
try {
this._save(key, value);
resultsHandler.call(null, dojo.storage.SUCCESS, key);
}
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 results = this._load(key);
return results;
}, getKeys:function () {
return this._keyIndex;
}, hasKey:function (key) {
if (this.isValidKey(key) == false) {
dojo.raise("Invalid key given: " + key);
}
this._loadKeyIndex();
var exists = false;
for (var i = 0; i < this._keyIndex.length; i++) {
if (this._keyIndex[i] == key) {
exists = true;
}
}
return exists;
}, clear:function () {
this._loadKeyIndex();
var keyIndex = new Array();
for (var i = 0; i < this._keyIndex.length; i++) {
keyIndex[keyIndex.length] = new String(this._keyIndex[i]);
}
for (var i = 0; i < keyIndex.length; i++) {
this.remove(keyIndex[i]);
}
}, remove:function (key) {
if (this.isValidKey(key) == false) {
dojo.raise("Invalid key given: " + key);
}
this._loadKeyIndex();
for (var i = 0; i < this._keyIndex.length; i++) {
if (this._keyIndex[i] == key) {
this._keyIndex.splice(i, 1);
break;
}
}
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME, this._keyIndex, false);
var fullPath = this._getPagePath() + key + ".txt";
if (this._isAvailableXPCOM()) {
this._removeXPCOM(fullPath);
} else {
if (this._isAvailableActiveX()) {
this._removeActiveX(fullPath);
}
}
}, 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 (key, value, updateKeyIndex) {
if (typeof updateKeyIndex == "undefined") {
updateKeyIndex = true;
}
if (dojo.lang.isString(value) == false) {
value = dojo.json.serialize(value);
value = "/* JavaScript */\n" + value + "\n\n";
}
var fullPath = this._getPagePath() + key + ".txt";
if (this._isAvailableXPCOM()) {
this._saveFileXPCOM(fullPath, value);
} else {
if (this._isAvailableActiveX()) {
this._saveFileActiveX(fullPath, value);
}
}
if (updateKeyIndex) {
this._updateKeyIndex(key);
}
}, _load:function (key) {
var fullPath = this._getPagePath() + key + ".txt";
var results = null;
if (this._isAvailableXPCOM()) {
results = this._loadFileXPCOM(fullPath);
} else {
if (this._isAvailableActiveX()) {
results = this._loadFileActiveX(fullPath);
} else {
if (this._isAvailableJava()) {
results = this._loadFileJava(fullPath);
}
}
}
if (results == null) {
return null;
}
if (!dojo.lang.isUndefined(results) && results != null && /^\/\* JavaScript \*\//.test(results)) {
results = dojo.json.evalJson(results);
}
return results;
}, _updateKeyIndex:function (key) {
this._loadKeyIndex();
var alreadyAdded = false;
for (var i = 0; i < this._keyIndex.length; i++) {
if (this._keyIndex[i] == key) {
alreadyAdded = true;
break;
}
}
if (alreadyAdded == false) {
this._keyIndex[this._keyIndex.length] = key;
}
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME, this._keyIndex, false);
}, _loadKeyIndex:function () {
var indexContents = this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME);
if (indexContents == null) {
this._keyIndex = new Array();
} else {
this._keyIndex = indexContents;
}
}, _saveFileXPCOM:function (filename, value) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(filename);
var ouputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
ouputStream.init(f, 32 | 4 | 8, 256 + 128, null);
ouputStream.write(value, value.length);
ouputStream.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 (filename) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var f = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
f.initWithPath(filename);
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 inputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
inputStream.init(inp);
var results = inputStream.read(inputStream.available());
return results;
}
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 (filename, value) {
try {
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var f = fileSystem.OpenTextFile(filename, 2, true);
f.Write(value);
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 (filename) {
try {
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
if (fileSystem.FileExists(filename) == false) {
return null;
}
var f = fileSystem.OpenTextFile(filename, 1);
var results = f.ReadAll();
f.Close();
return results;
}
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 (filename, value) {
try {
var applet = dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
applet.save(filename, value);
}
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 (filename) {
try {
var applet = dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
var results = applet.load(filename);
return results;
}
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 fileSystem = new window.ActiveXObject("Scripting.FileSystemObject");
return true;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?