Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F390513
test_storage.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Subscribers
None
test_storage.js
View Options
dojo
.
require
(
"dojox.storage"
);
var
TestStorage
=
{
currentProvider
:
"default"
,
currentNamespace
:
dojox
.
storage
.
DEFAULT_NAMESPACE
,
initialize
:
function
(){
//console.debug("test_storage.initialize()");
// do we even have a storage provider?
if
(
dojox
.
storage
.
manager
.
available
==
false
){
alert
(
"No storage provider is available on this browser"
);
return
;
}
// clear out old values and enable input forms
dojo
.
byId
(
"storageNamespace"
).
value
=
this
.
currentNamespace
;
dojo
.
byId
(
"storageNamespace"
).
disabled
=
false
;
dojo
.
byId
(
"storageKey"
).
value
=
""
;
dojo
.
byId
(
"storageKey"
).
disabled
=
false
;
dojo
.
byId
(
"storageValue"
).
value
=
""
;
dojo
.
byId
(
"storageValue"
).
disabled
=
false
;
// write out our available namespaces
this
.
_printAvailableNamespaces
();
// write out our available keys
this
.
_printAvailableKeys
();
// initialize our event handlers
var
namespaceDirectory
=
dojo
.
byId
(
"namespaceDirectory"
);
dojo
.
connect
(
namespaceDirectory
,
"onchange"
,
this
,
this
.
namespaceChange
);
var
directory
=
dojo
.
byId
(
"directory"
);
dojo
.
connect
(
directory
,
"onchange"
,
this
,
this
.
directoryChange
);
var
storageValueElem
=
dojo
.
byId
(
"storageValue"
);
dojo
.
connect
(
storageValueElem
,
"onkeyup"
,
this
,
this
.
printValueSize
);
// make the directory be unselected if the key name field gets focus
var
keyNameField
=
dojo
.
byId
(
"storageKey"
);
dojo
.
connect
(
keyNameField
,
"onfocus"
,
function
(
evt
){
directory
.
selectedIndex
=
-
1
;
});
// add onclick listeners to all of our buttons
var
buttonContainer
=
dojo
.
byId
(
"buttonContainer"
);
var
currentChild
=
buttonContainer
.
firstChild
;
while
(
currentChild
.
nextSibling
!=
null
){
if
(
currentChild
.
nodeType
==
1
){
var
buttonName
=
currentChild
.
id
;
var
functionName
=
buttonName
.
match
(
/^(.*)Button$/
)[
1
];
dojo
.
connect
(
currentChild
,
"onclick"
,
this
,
this
[
functionName
]);
currentChild
.
disabled
=
false
;
}
currentChild
=
currentChild
.
nextSibling
;
}
// print out metadata
this
.
_printProviderMetadata
();
// disable the configuration button if none is supported for this provider
if
(
dojox
.
storage
.
hasSettingsUI
()
==
false
){
dojo
.
byId
(
"configureButton"
).
disabled
=
true
;
}
},
namespaceChange
:
function
(
evt
){
var
ns
=
evt
.
target
.
value
;
this
.
currentNamespace
=
ns
;
// update our available keys
this
.
_printAvailableKeys
();
// clear out our key and values
dojo
.
byId
(
"storageNamespace"
).
value
=
this
.
currentNamespace
;
dojo
.
byId
(
"storageKey"
).
value
=
""
;
dojo
.
byId
(
"storageValue"
).
value
=
""
;
},
directoryChange
:
function
(
evt
){
var
key
=
evt
.
target
.
value
;
// add this value into the form
var
keyNameField
=
dojo
.
byId
(
"storageKey"
);
keyNameField
.
value
=
key
;
this
.
_handleLoad
(
key
);
},
load
:
function
(
evt
){
// cancel the button's default behavior
evt
.
preventDefault
();
evt
.
stopPropagation
();
// get the key to load
var
key
=
dojo
.
byId
(
"storageKey"
).
value
;
if
(
key
==
null
||
typeof
key
==
"undefined"
||
key
==
""
){
alert
(
"Please enter a key name"
);
return
;
}
this
.
_handleLoad
(
key
);
},
save
:
function
(
evt
){
// cancel the button's default behavior
evt
.
preventDefault
();
evt
.
stopPropagation
();
// get the new values
var
key
=
dojo
.
byId
(
"storageKey"
).
value
;
var
value
=
dojo
.
byId
(
"storageValue"
).
value
;
var
namespace
=
dojo
.
byId
(
"storageNamespace"
).
value
;
if
(
key
==
null
||
typeof
key
==
"undefined"
||
key
==
""
){
alert
(
"Please enter a key name"
);
return
;
}
if
(
value
==
null
||
typeof
value
==
"undefined"
||
value
==
""
){
alert
(
"Please enter a key value"
);
return
;
}
// print out the size of the value
this
.
printValueSize
();
// do the save
this
.
_save
(
key
,
value
,
namespace
);
},
clearNamespace
:
function
(
evt
){
// cancel the button's default behavior
evt
.
preventDefault
();
evt
.
stopPropagation
();
dojox
.
storage
.
clear
(
this
.
currentNamespace
);
this
.
_printAvailableNamespaces
();
this
.
_printAvailableKeys
();
},
configure
:
function
(
evt
){
// cancel the button's default behavior
evt
.
preventDefault
();
evt
.
stopPropagation
();
if
(
dojox
.
storage
.
hasSettingsUI
()){
// redraw our keys after the dialog is closed, in
// case they have all been erased
var
self
=
this
;
dojox
.
storage
.
onHideSettingsUI
=
function
(){
self
.
_printAvailableKeys
();
}
// show the dialog
dojox
.
storage
.
showSettingsUI
();
}
},
remove
:
function
(
evt
){
// cancel the button's default behavior
evt
.
preventDefault
();
evt
.
stopPropagation
();
// determine what key to delete; if the directory has a selected value,
// use that; otherwise, use the key name field
var
directory
=
dojo
.
byId
(
"directory"
);
var
keyNameField
=
dojo
.
byId
(
"storageKey"
);
var
keyValueField
=
dojo
.
byId
(
"storageValue"
);
var
key
;
if
(
directory
.
selectedIndex
!=
-
1
){
key
=
directory
.
value
;
// delete this option
var
options
=
directory
.
childNodes
;
for
(
var
i
=
0
;
i
<
options
.
length
;
i
++
){
if
(
options
[
i
].
nodeType
==
1
&&
options
[
i
].
value
==
key
){
directory
.
removeChild
(
options
[
i
]);
break
;
}
}
}
else
{
key
=
keyNameField
.
value
;
}
keyNameField
.
value
=
""
;
keyValueField
.
value
=
""
;
// now delete the value
this
.
_printStatus
(
"Removing '"
+
key
+
"'..."
);
if
(
this
.
currentNamespace
==
dojox
.
storage
.
DEFAULT_NAMESPACE
){
dojox
.
storage
.
remove
(
key
);
}
else
{
dojox
.
storage
.
remove
(
key
,
this
.
currentNamespace
);
}
// update our UI
this
.
_printAvailableNamespaces
();
this
.
_printStatus
(
"Removed '"
+
key
);
},
printValueSize
:
function
(){
var
storageValue
=
dojo
.
byId
(
"storageValue"
).
value
;
var
size
=
0
;
if
(
storageValue
!=
null
&&
typeof
storageValue
!=
"undefined"
){
size
=
storageValue
.
length
;
}
// determine the units we are dealing with
var
units
;
if
(
size
<
1024
)
units
=
" bytes"
;
else
{
units
=
" K"
;
size
=
size
/
1024
;
size
=
Math
.
round
(
size
);
}
size
=
size
+
units
;
var
valueSize
=
dojo
.
byId
(
"valueSize"
);
valueSize
.
innerHTML
=
size
;
},
saveBook
:
function
(
evt
){
this
.
_printStatus
(
"Loading book..."
);
var
d
=
dojo
.
xhrGet
({
url
:
"resources/testBook.txt"
,
handleAs
:
"text"
});
d
.
addCallback
(
dojo
.
hitch
(
this
,
function
(
results
){
this
.
_printStatus
(
"Book loaded"
);
this
.
_save
(
"testBook"
,
results
);
}));
d
.
addErrback
(
dojo
.
hitch
(
this
,
function
(
error
){
alert
(
"Unable to load testBook.txt: "
+
error
);
}));
if
(
!
typeof
evt
!=
"undefined"
&&
evt
!=
null
){
evt
.
preventDefault
();
evt
.
stopPropagation
();
}
return
false
;
},
saveXML
:
function
(
evt
){
this
.
_printStatus
(
"Loading XML..."
);
var
d
=
dojo
.
xhrGet
({
url
:
"resources/testXML.xml"
,
handleAs
:
"text"
});
d
.
addCallback
(
dojo
.
hitch
(
this
,
function
(
results
){
this
.
_printStatus
(
"XML loaded"
);
this
.
_save
(
"testXML"
,
results
);
}));
d
.
addErrback
(
dojo
.
hitch
(
this
,
function
(
error
){
alert
(
"Unable to load testXML.xml: "
+
error
);
}));
if
(
!
typeof
evt
!=
"undefined"
&&
evt
!=
null
){
evt
.
preventDefault
();
evt
.
stopPropagation
();
}
return
false
;
},
_save
:
function
(
key
,
value
,
namespace
){
this
.
_printStatus
(
"Saving '"
+
key
+
"'..."
);
var
self
=
this
;
var
saveHandler
=
function
(
status
,
keyName
){
if
(
status
==
dojox
.
storage
.
FAILED
){
alert
(
"You do not have permission to store data for this web site. "
+
"Press the Configure button to grant permission."
);
}
else
if
(
status
==
dojox
.
storage
.
SUCCESS
){
// clear out the old value
dojo
.
byId
(
"storageKey"
).
value
=
""
;
dojo
.
byId
(
"storageValue"
).
value
=
""
;
self
.
_printStatus
(
"Saved '"
+
key
+
"'"
);
if
(
typeof
namespace
!=
"undefined"
&&
namespace
!=
null
){
self
.
currentNamespace
=
namespace
;
}
// update the list of available keys and namespaces
// put this on a slight timeout, because saveHandler is called back
// from Flash, which can cause problems in Flash 8 communication
// which affects Safari
// FIXME: Find out what is going on in the Flash 8 layer and fix it
// there
window
.
setTimeout
(
function
(){
self
.
_printAvailableKeys
();
self
.
_printAvailableNamespaces
();
},
1
);
}
};
try
{
if
(
namespace
==
dojox
.
storage
.
DEFAULT_NAMESPACE
){
dojox
.
storage
.
put
(
key
,
value
,
saveHandler
);
}
else
{
dojox
.
storage
.
put
(
key
,
value
,
saveHandler
,
namespace
);
}
}
catch
(
exp
){
alert
(
exp
);
}
},
_printAvailableKeys
:
function
(){
var
directory
=
dojo
.
byId
(
"directory"
);
// clear out any old keys
directory
.
innerHTML
=
""
;
// add new ones
var
availableKeys
;
if
(
this
.
currentNamespace
==
dojox
.
storage
.
DEFAULT_NAMESPACE
){
availableKeys
=
dojox
.
storage
.
getKeys
();
}
else
{
availableKeys
=
dojox
.
storage
.
getKeys
(
this
.
currentNamespace
);
}
for
(
var
i
=
0
;
i
<
availableKeys
.
length
;
i
++
){
var
optionNode
=
document
.
createElement
(
"option"
);
optionNode
.
appendChild
(
document
.
createTextNode
(
availableKeys
[
i
]));
optionNode
.
value
=
availableKeys
[
i
];
directory
.
appendChild
(
optionNode
);
}
},
_printAvailableNamespaces
:
function
(){
var
namespacesDir
=
dojo
.
byId
(
"namespaceDirectory"
);
// clear out any old namespaces
namespacesDir
.
innerHTML
=
""
;
// add new ones
var
availableNamespaces
=
dojox
.
storage
.
getNamespaces
();
for
(
var
i
=
0
;
i
<
availableNamespaces
.
length
;
i
++
){
var
optionNode
=
document
.
createElement
(
"option"
);
optionNode
.
appendChild
(
document
.
createTextNode
(
availableNamespaces
[
i
]));
optionNode
.
value
=
availableNamespaces
[
i
];
namespacesDir
.
appendChild
(
optionNode
);
}
},
_handleLoad
:
function
(
key
){
this
.
_printStatus
(
"Loading '"
+
key
+
"'..."
);
// get the value
var
results
;
if
(
this
.
currentNamespace
==
dojox
.
storage
.
DEFAULT_NAMESPACE
){
results
=
dojox
.
storage
.
get
(
key
);
}
else
{
results
=
dojox
.
storage
.
get
(
key
,
this
.
currentNamespace
);
}
// jsonify it if it is a JavaScript object
if
(
typeof
results
!=
"string"
){
results
=
dojo
.
toJson
(
results
);
}
// print out its value
this
.
_printStatus
(
"Loaded '"
+
key
+
"'"
);
dojo
.
byId
(
"storageValue"
).
value
=
results
;
// print out the size of the value
this
.
printValueSize
();
},
_printProviderMetadata
:
function
(){
var
storageType
=
dojox
.
storage
.
manager
.
currentProvider
.
declaredClass
;
var
isSupported
=
dojox
.
storage
.
isAvailable
();
var
maximumSize
=
dojox
.
storage
.
getMaximumSize
();
var
permanent
=
dojox
.
storage
.
isPermanent
();
var
uiConfig
=
dojox
.
storage
.
hasSettingsUI
();
var
moreInfo
=
""
;
if
(
dojox
.
storage
.
manager
.
currentProvider
.
declaredClass
==
"dojox.storage.FlashStorageProvider"
){
moreInfo
=
"Flash Comm Version "
+
dojo
.
flash
.
info
.
commVersion
;
}
dojo
.
byId
(
"currentStorageProvider"
).
innerHTML
=
storageType
;
dojo
.
byId
(
"isSupported"
).
innerHTML
=
isSupported
;
dojo
.
byId
(
"isPersistent"
).
innerHTML
=
permanent
;
dojo
.
byId
(
"hasUIConfig"
).
innerHTML
=
uiConfig
;
dojo
.
byId
(
"maximumSize"
).
innerHTML
=
maximumSize
;
dojo
.
byId
(
"moreInfo"
).
innerHTML
=
moreInfo
;
},
_printStatus
:
function
(
message
){
// remove the old status
var
top
=
dojo
.
byId
(
"top"
);
for
(
var
i
=
0
;
i
<
top
.
childNodes
.
length
;
i
++
){
var
currentNode
=
top
.
childNodes
[
i
];
if
(
currentNode
.
nodeType
==
1
&&
currentNode
.
className
==
"status"
){
top
.
removeChild
(
currentNode
);
}
}
var
status
=
document
.
createElement
(
"span"
);
status
.
className
=
"status"
;
status
.
innerHTML
=
message
;
top
.
appendChild
(
status
);
dojo
.
fadeOut
({
node
:
status
,
duration
:
2000
}).
play
();
}
};
// wait until the storage system is finished loading
if
(
dojox
.
storage
.
manager
.
isInitialized
()
==
false
){
// storage might already be loaded when we get here
dojo
.
connect
(
dojox
.
storage
.
manager
,
"loaded"
,
TestStorage
,
TestStorage
.
initialize
);
}
else
{
dojo
.
connect
(
dojo
,
"loaded"
,
TestStorage
,
TestStorage
.
initialize
);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 22, 15:27 (8 h, 8 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27069
Default Alt Text
test_storage.js (11 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment