Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
officejs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
officejs
Commits
10a18668
Commit
10a18668
authored
May 31, 2012
by
Tristan Cavelier
Committed by
Sebastien Robin
Jun 07, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improving LocalStorage + updating Qunit tests.
parent
d0ac8107
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
162 additions
and
110 deletions
+162
-110
OfficeJS/src/jio.storage.js
OfficeJS/src/jio.storage.js
+120
-93
OfficeJS/test/jiotests.js
OfficeJS/test/jiotests.js
+42
-17
No files found.
OfficeJS/src/jio.storage.js
View file @
10a18668
// Adds 3 storages to JIO
// type:
// - local
// - dav
// - replicate
/**
* Adds 3 storages to JIO.
* - LocalStorage ('local')
* - DAVStorage ('dav')
* - ReplicateStorage ('replicate')
*
* @module JIOStorages
*/
(
function
()
{
var
jio_storage_loader
=
function
(
LocalOrCookieStorage
,
Base64
,
Jio
,
$
)
{
////////////////////////////////////////////////////////////////////////////
// Tools
var
extend
=
function
(
o1
,
o2
)
{
var
key
;
for
(
key
in
o2
)
{
o1
[
key
]
=
o2
[
key
];
}
return
o1
;
},
// end Tools
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Classes
newLocalStorage
,
newDAVStorage
,
newReplicateStorage
;
var
newLocalStorage
,
newDAVStorage
,
newReplicateStorage
,
newIndexedStorage
,
newCryptedStorage
;
// end Classes
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Local Storage
/**
* JIO Local Storage. Type = 'local'.
* It is a database located in the browser local storage.
*/
newLocalStorage
=
function
(
spec
,
my
)
{
// LocalStorage constructor
var
that
=
Jio
.
newBaseStorage
(
spec
,
my
),
priv
=
{};
priv
.
storage_file_array_name
=
'
jio/localfilearray
'
;
priv
.
storage_user_array_name
=
'
jio/localuserarray
'
;
priv
.
storage_file_array_name
=
'
jio/localfilenamearray/
'
+
that
.
getStorageUserName
()
+
'
/
'
+
that
.
getApplicantID
();
/**
* Returns a list of users.
* @method getUserArray
* @return {array} The list of users.
*/
priv
.
getUserArray
=
function
()
{
return
LocalOrCookieStorage
.
getItem
(
priv
.
storage_user_array_name
)
||
[];
};
/**
* Adds a user to the user list.
* @method addUser
* @param {string} username The user name.
*/
priv
.
addUser
=
function
(
username
)
{
var
userarray
=
priv
.
getUserArray
();
userarray
.
push
(
username
);
LocalOrCookieStorage
.
setItem
(
priv
.
storage_user_array_name
,
userarray
);
};
priv
.
getPathArray
=
function
()
{
/**
* Returns the file names of all existing files owned by the user.
* @method getFileNameArray
* @return {array} All the existing file paths.
*/
priv
.
getFileNameArray
=
function
()
{
return
LocalOrCookieStorage
.
getItem
(
priv
.
storage_file_array_name
)
||
[];
};
priv
.
addPath
=
function
(
path
)
{
var
patharray
=
priv
.
getPathArray
();
patharray
.
push
(
path
);
/**
* Adds a file name to the local file name array.
* @method addFileName
* @param {string} filename The new file name.
*/
priv
.
addFileName
=
function
(
filename
)
{
var
filenamearray
=
priv
.
getFileNameArray
();
filenamearray
.
push
(
filename
);
LocalOrCookieStorage
.
setItem
(
priv
.
storage_file_array_name
,
path
array
);
filename
array
);
};
priv
.
removePath
=
function
(
path
)
{
var
i
,
patharray
=
priv
.
getPathArray
(),
newpatharray
=
[];
for
(
i
=
0
;
i
<
patharray
.
length
;
i
+=
1
)
{
if
(
patharray
[
i
]
!==
path
)
{
newpatharray
.
push
(
patharray
[
i
]);
/**
* Removes a file name from the local file name array.
* @method removeFileName
* @param {string} filename The file name to remove.
*/
priv
.
removeFileName
=
function
(
filename
)
{
var
i
,
l
,
array
=
priv
.
getFileNameArray
(),
newarray
=
[];
for
(
i
=
0
,
l
=
array
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
array
[
i
]
!==
filename
)
{
newarray
.
push
(
array
[
i
]);
}
}
LocalOrCookieStorage
.
setItem
(
priv
.
storage_file_array_name
,
new
path
array
);
newarray
);
};
/**
* Checks the availability of a user name set in the job.
* It will check if the user is set in the local user object
* @method checkNameAvailability
*/
that
.
checkNameAvailability
=
function
()
{
// checks the availability of the [job.userName].
// if the name already exists, it is not available.
// this.job.userName: the name we want to check.
// wait a little in order to simulate asynchronous operation
setTimeout
(
function
()
{
var
allpatharray
,
i
,
split
;
allpatharray
=
priv
.
getPathArray
();
for
(
i
=
0
;
i
<
allpatharray
.
length
;
i
+=
1
)
{
split
=
allpatharray
[
i
].
split
(
'
/
'
);
if
(
split
[
0
]
===
'
jio
'
&&
split
[
1
]
===
'
local
'
&&
split
[
2
]
===
that
.
getUserName
())
{
return
that
.
done
(
false
);
var
i
,
l
,
array
=
priv
.
getUserArray
();
for
(
i
=
0
,
l
=
array
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
array
[
i
]
===
that
.
getUserName
())
{
that
.
done
(
false
);
return
;
}
}
return
that
.
done
(
true
);
that
.
done
(
true
);
},
100
);
};
// end checkNameAvailability
/**
* Saves a document in the local storage.
* It will store the file in 'jio/local/USR/APP/FILENAME'.
* @method saveDocument
*/
that
.
saveDocument
=
function
()
{
// Save a document in the local storage
// this.job.fileName: the document name.
// this.job.fileContent: the document content.
// this.job.storage: the storage information.
// this.job.storage.userName: the user name
// this.job.applicant.ID: the applicant id.
// wait a little in order to simulate asynchronous saving
setTimeout
(
function
()
{
var
doc
=
null
,
path
=
...
...
@@ -102,32 +137,30 @@ var jio_storage_loader = function ( LocalOrCookieStorage, Base64, Jio, $) {
'
creationDate
'
:
Date
.
now
(),
'
lastModified
'
:
Date
.
now
()
};
priv
.
add
Path
(
path
);
priv
.
add
FileName
(
that
.
getFileName
()
);
}
else
{
// overwriting
doc
.
lastModified
=
Date
.
now
();
doc
.
fileContent
=
that
.
getFileContent
();
}
LocalOrCookieStorage
.
setItem
(
'
jio/local/
'
+
that
.
getStorageUserName
()
+
'
/
'
+
that
.
getApplicantID
()
+
'
/
'
+
that
.
getFileName
(),
doc
);
LocalOrCookieStorage
.
setItem
(
path
,
doc
);
return
that
.
done
();
},
100
);
};
// end saveDocument
/**
* Loads a document from the local storage.
* It will load file in 'jio/local/USR/APP/FILENAME'.
* You can add an 'options' object to the job, it can contain:
* - getContent {boolean} default true, retrieve the file content or not
* @method loadDocument
*/
that
.
loadDocument
=
function
()
{
// Load a document from the storage. It returns a document object
// containing all information of the document and its content.
// this.job.fileName : the document name we want to load.
// this.job.options.getContent: if true, also get the file content.
// document object is {'fileName':string,'fileContent':string,
// 'creationDate':date,'lastModified':date}
// wait a little in order to simulate asynchronous operation
setTimeout
(
function
()
{
var
doc
=
null
,
settings
=
extend
(
var
doc
=
null
,
settings
=
$
.
extend
(
{
'
getContent
'
:
true
},
that
.
cloneOptionObject
());
doc
=
LocalOrCookieStorage
.
getItem
(
...
...
@@ -146,45 +179,40 @@ var jio_storage_loader = function ( LocalOrCookieStorage, Base64, Jio, $) {
},
100
);
};
// end loadDocument
/**
* Gets a document list from the local storage.
* It will retreive an array containing files meta data owned by
* the user.
* @method getDocumentList
*/
that
.
getDocumentList
=
function
()
{
// Get a document list from the storage. It returns a document
// array containing all the user documents informations.
// this.job.storage: the storage informations.
// this.job.storage.userName: the userName.
// this.job.storage.applicant.ID: the applicant ID.
// the list is [object,object] -> object = {'fileName':string,
// 'lastModified':date,'creationDate':date}
setTimeout
(
function
()
{
var
list
=
[],
patharray
=
[],
i
,
k
=
'
key
'
,
splitk
=
[
'
splitedkey
'
],
fileObject
=
{};
patharray
=
priv
.
getPathArray
();
for
(
i
=
0
;
i
<
patharray
.
length
;
i
+=
1
)
{
k
=
patharray
[
i
];
splitk
=
k
.
split
(
'
/
'
);
if
(
splitk
[
0
]
===
'
jio
'
&&
splitk
[
1
]
===
'
local
'
&&
splitk
[
2
]
===
that
.
getStorageUserName
()
&&
splitk
[
3
]
===
that
.
getApplicantID
())
{
fileObject
=
LocalOrCookieStorage
.
getItem
(
k
);
list
.
push
({
'
fileName
'
:
fileObject
.
fileName
,
'
creationDate
'
:
fileObject
.
creationDate
,
'
lastModified
'
:
fileObject
.
lastModified
});
}
var
newarray
=
[],
array
=
[],
i
,
l
,
k
=
'
key
'
,
path
=
'
jio/local/
'
+
that
.
getStorageUserName
()
+
'
/
'
+
that
.
getApplicantID
(),
fileObject
=
{};
array
=
priv
.
getFileNameArray
();
for
(
i
=
0
,
l
=
array
.
length
;
i
<
l
;
i
+=
1
)
{
fileObject
=
LocalOrCookieStorage
.
getItem
(
path
+
'
/
'
+
array
[
i
]);
newarray
.
push
({
'
fileName
'
:
fileObject
.
fileName
,
'
creationDate
'
:
fileObject
.
creationDate
,
'
lastModified
'
:
fileObject
.
lastModified
});
}
that
.
done
(
list
);
that
.
done
(
newarray
);
},
100
);
};
// end getDocumentList
/**
* Removes a document from the local storage.
* It will also remove the path from the local file array.
* @method removeDocument
*/
that
.
removeDocument
=
function
()
{
// Remove a document from the storage.
// this.job.storage.userName: the userName.
// this.job.applicant.ID: the applicant ID.
// this.job.fileName: the document name.
setTimeout
(
function
()
{
var
path
=
'
jio/local/
'
+
that
.
getStorageUserName
()
+
'
/
'
+
...
...
@@ -192,13 +220,12 @@ var jio_storage_loader = function ( LocalOrCookieStorage, Base64, Jio, $) {
that
.
getFileName
()
// deleting
LocalOrCookieStorage
.
deleteItem
(
path
);
priv
.
remove
Path
(
path
);
priv
.
remove
FileName
(
that
.
getFileName
()
);
return
that
.
done
();
},
100
);
};
return
that
;
};
// end Local Storage
////////////////////////////////////////////////////////////////////////////
...
...
@@ -218,7 +245,7 @@ var jio_storage_loader = function ( LocalOrCookieStorage, Base64, Jio, $) {
// TODO this method is not working !!!
var
settings
=
extend
({
var
settings
=
$
.
extend
({
'
success
'
:
function
(){},
'
error
'
:
function
(){}},
options
),
splitpath
=
[
'
splitedpath
'
],
tmppath
=
'
temp/path
'
;
...
...
@@ -351,7 +378,7 @@ var jio_storage_loader = function ( LocalOrCookieStorage, Base64, Jio, $) {
// 'creationDate':date,'lastModified':date}
var
doc
=
{},
settings
=
extend
({
'
getContent
'
:
true
},
that
.
cloneOptionObject
()),
settings
=
$
.
extend
({
'
getContent
'
:
true
},
that
.
cloneOptionObject
()),
// TODO check if job's features are good
getContent
=
function
()
{
...
...
OfficeJS/test/jiotests.js
View file @
10a18668
...
...
@@ -23,20 +23,47 @@ var getXML = function (url) {
dataType
:
'
text
'
,
success
:
function
(
xml
){
tmp
=
xml
;}});
return
tmp
;
},
addPath
=
function
(
path
)
{
var
array
=
LocalOrCookieStorage
.
getItem
(
'
jio/localfilearray
'
)
||
[];
array
.
push
(
path
);
LocalOrCookieStorage
.
setItem
(
'
jio/localfilearray
'
,
array
);
addFile
=
function
(
user
,
appid
,
file
)
{
var
i
,
l
,
found
=
false
,
filenamearray
,
userarray
=
LocalOrCookieStorage
.
getItem
(
'
jio/localuserarray
'
)
||
[];
for
(
i
=
0
,
l
=
userarray
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
userarray
[
i
]
===
user
)
{
found
=
true
;
}
}
if
(
!
found
)
{
userarray
.
push
(
user
);
LocalOrCookieStorage
.
setItem
(
'
jio/localuserarray
'
,
userarray
);
LocalOrCookieStorage
.
setItem
(
'
jio/localfilenamearray/
'
+
user
+
'
/
'
+
appid
,
[
file
.
fileName
]);
}
else
{
filenamearray
=
LocalOrCookieStorage
.
getItem
(
'
jio/localfilenamearray/
'
+
user
+
'
/
'
+
appid
)
||
[];
filenamearray
.
push
(
file
.
fileName
);
LocalOrCookieStorage
.
setItem
(
'
jio/localfilenamearray/
'
+
user
+
'
/
'
+
appid
,
filenamearray
);
LocalOrCookieStorage
.
setItem
(
'
jio/local/
'
+
user
+
'
/
'
+
appid
+
'
/
'
+
file
.
fileName
,
file
);
}
LocalOrCookieStorage
.
setItem
(
'
jio/local/
'
+
user
+
'
/
'
+
appid
+
'
/
'
+
file
.
fileName
,
file
);
},
removePath
=
function
(
path
)
{
var
array
=
LocalOrCookieStorage
.
getItem
(
'
jio/localfilearray
'
)
||
[],
newarray
=
[],
i
;
for
(
i
=
0
;
i
<
array
.
length
;
i
+=
1
)
{
if
(
array
[
i
]
!==
path
)
{
newarray
.
push
(
array
[
i
]);
removeFile
=
function
(
user
,
appid
,
file
)
{
var
i
,
l
,
newarray
=
[],
filenamearray
=
LocalOrCookieStorage
.
getItem
(
'
jio/localfilenamearray/
'
+
user
+
'
/
'
+
appid
)
||
[];
for
(
i
=
0
,
l
=
filenamearray
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
filenamearray
[
i
]
!==
file
.
fileName
)
{
newarray
.
push
(
filenamearray
[
i
]);
}
}
LocalOrCookieStorage
.
setItem
(
'
jio/localfilearray
'
,
newarray
);
LocalOrCookieStorage
.
setItem
(
'
jio/localfilenamearray/
'
+
user
+
'
/
'
+
appid
,
newarray
);
LocalOrCookieStorage
.
deleteItem
(
'
jio/local/
'
+
user
+
'
/
'
+
appid
+
'
/
'
+
file
.
fileName
);
};
//// end tools
...
...
@@ -281,11 +308,11 @@ test ('Check name availability', function () {
{
"
ID
"
:
'
noid
'
});
// name must be available
remove
Path
(
'
jio/local/MrCheckName/jiotests/file
'
);
remove
File
(
'
MrCheckName
'
,
'
jiotests
'
,{
fileName
:
'
file
'
}
);
mytest
(
true
);
// name must be unavailable
add
Path
(
'
jio/local/MrCheckName/jiotests/file
'
);
add
File
(
'
MrCheckName
'
,
'
jiotests
'
,{
fileName
:
'
file
'
}
);
mytest
(
false
);
o
.
jio
.
stop
();
...
...
@@ -401,10 +428,8 @@ test ('Get document list', function () {
'
lastModified
'
:
1
,
'
creationDate
'
:
0
};
doc2
=
{
'
fileName
'
:
'
memo
'
,
'
fileContent
'
:
'
test
'
,
'
lastModified
'
:
5
,
'
creationDate
'
:
2
};
addPath
(
'
jio/local/MrListName/jiotests/file
'
);
addPath
(
'
jio/local/MrListName/jiotests/memo
'
);
LocalOrCookieStorage
.
setItem
(
'
jio/local/MrListName/jiotests/file
'
,
doc1
);
LocalOrCookieStorage
.
setItem
(
'
jio/local/MrListName/jiotests/memo
'
,
doc2
);
addFile
(
'
MrListName
'
,
'
jiotests
'
,
doc1
);
addFile
(
'
MrListName
'
,
'
jiotests
'
,
doc2
);
delete
doc1
.
fileContent
;
delete
doc2
.
fileContent
;
mytest
([
doc1
,
doc2
]);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment