Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
jio
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Roque
jio
Commits
7ab7782a
Commit
7ab7782a
authored
Jul 03, 2013
by
Tristan Cavelier
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into splitstorage
parents
9627819f
0d857363
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
33 deletions
+41
-33
src/jio.storage/localstorage.js
src/jio.storage/localstorage.js
+39
-33
test/jiotests.js
test/jiotests.js
+2
-0
No files found.
src/jio.storage/localstorage.js
View file @
7ab7782a
...
@@ -11,6 +11,37 @@
...
@@ -11,6 +11,37 @@
/**
/**
* JIO Local Storage. Type = 'local'.
* JIO Local Storage. Type = 'local'.
* Local browser "database" storage.
* Local browser "database" storage.
*
* Storage Description:
*
* {
* "type": "local",
* "username": <non empty string>, // to define user space
* "application_name": <string> // default 'untitled'
* }
*
* Document are stored in path
* 'jio/localstorage/username/application_name/document_id' like this:
*
* {
* "_id": "document_id",
* "_attachments": {
* "attachment_name": {
* "length": data_length,
* "digest": "md5-XXX",
* "content_type": "mime/type"
* },
* "attachment_name2": {..}, ...
* },
* "metadata_name": "metadata_value"
* "metadata_name2": ...
* ...
* }
*
* Only "_id" and "_attachments" are specific metadata keys, other one can be
* added without loss.
*
* @class LocalStorage
*/
*/
jIO
.
addStorageType
(
'
local
'
,
function
(
spec
,
my
)
{
jIO
.
addStorageType
(
'
local
'
,
function
(
spec
,
my
)
{
...
@@ -64,34 +95,6 @@ jIO.addStorageType('local', function (spec, my) {
...
@@ -64,34 +95,6 @@ jIO.addStorageType('local', function (spec, my) {
S4
()
+
S4
();
S4
()
+
S4
();
};
};
/**
* Update [doc] the document object and remove [doc] keys
* which are not in [new_doc]. It only changes [doc] keys not starting
* with an underscore.
* ex: doc: {key:value1,_key:value2} with
* new_doc: {key:value3,_key:value4} updates
* doc: {key:value3,_key:value2}.
* @param {object} doc The original document object.
* @param {object} new_doc The new document object
*/
priv
.
documentObjectUpdate
=
function
(
doc
,
new_doc
)
{
var
k
;
for
(
k
in
doc
)
{
if
(
doc
.
hasOwnProperty
(
k
))
{
if
(
k
[
0
]
!==
'
_
'
)
{
delete
doc
[
k
];
}
}
}
for
(
k
in
new_doc
)
{
if
(
new_doc
.
hasOwnProperty
(
k
))
{
if
(
k
[
0
]
!==
'
_
'
)
{
doc
[
k
]
=
new_doc
[
k
];
}
}
}
};
/**
/**
* Checks if an object has no enumerable keys
* Checks if an object has no enumerable keys
* @method objectIsEmpty
* @method objectIsEmpty
...
@@ -137,11 +140,11 @@ jIO.addStorageType('local', function (spec, my) {
...
@@ -137,11 +140,11 @@ jIO.addStorageType('local', function (spec, my) {
}
}
doc
=
localstorage
.
getItem
(
priv
.
localpath
+
"
/
"
+
doc_id
);
doc
=
localstorage
.
getItem
(
priv
.
localpath
+
"
/
"
+
doc_id
);
if
(
doc
===
null
)
{
if
(
doc
===
null
)
{
// the document does not exist
doc
=
command
.
cloneDoc
();
doc
=
command
.
cloneDoc
();
doc
.
_id
=
doc_id
;
doc
.
_id
=
doc_id
;
// the document does not exist
delete
doc
.
_attachments
;
localstorage
.
setItem
(
priv
.
localpath
+
"
/
"
+
doc_id
,
localstorage
.
setItem
(
priv
.
localpath
+
"
/
"
+
doc_id
,
doc
);
doc
);
that
.
success
({
that
.
success
({
"
ok
"
:
true
,
"
ok
"
:
true
,
"
id
"
:
doc_id
"
id
"
:
doc_id
...
@@ -166,14 +169,17 @@ jIO.addStorageType('local', function (spec, my) {
...
@@ -166,14 +169,17 @@ jIO.addStorageType('local', function (spec, my) {
*/
*/
that
.
put
=
function
(
command
)
{
that
.
put
=
function
(
command
)
{
setTimeout
(
function
()
{
setTimeout
(
function
()
{
var
doc
;
var
doc
,
tmp
;
doc
=
localstorage
.
getItem
(
priv
.
localpath
+
"
/
"
+
command
.
getDocId
());
doc
=
localstorage
.
getItem
(
priv
.
localpath
+
"
/
"
+
command
.
getDocId
());
if
(
doc
===
null
)
{
if
(
doc
===
null
)
{
// the document does not exist
// the document does not exist
doc
=
command
.
cloneDoc
();
doc
=
command
.
cloneDoc
();
delete
doc
.
_attachments
;
}
else
{
}
else
{
// the document already exists
// the document already exists
priv
.
documentObjectUpdate
(
doc
,
command
.
cloneDoc
());
tmp
=
command
.
cloneDoc
();
tmp
.
_attachments
=
doc
.
_attachments
;
doc
=
tmp
;
}
}
// write
// write
localstorage
.
setItem
(
priv
.
localpath
+
"
/
"
+
command
.
getDocId
(),
doc
);
localstorage
.
setItem
(
priv
.
localpath
+
"
/
"
+
command
.
getDocId
(),
doc
);
...
...
test/jiotests.js
View file @
7ab7782a
...
@@ -2163,6 +2163,7 @@ test ("Remove", function(){
...
@@ -2163,6 +2163,7 @@ test ("Remove", function(){
o
.
tick
(
o
);
o
.
tick
(
o
);
o
.
doctree
=
{
o
.
doctree
=
{
"
_id
"
:
"
remove1.revision_tree.json
"
,
"
children
"
:[{
"
children
"
:[{
"
rev
"
:
"
1-veryoldrev
"
,
"
status
"
:
"
available
"
,
"
children
"
:
[{
"
rev
"
:
"
1-veryoldrev
"
,
"
status
"
:
"
available
"
,
"
children
"
:
[{
"
rev
"
:
"
2-oldrev
"
,
"
status
"
:
"
available
"
,
"
children
"
:
[{
"
rev
"
:
"
2-oldrev
"
,
"
status
"
:
"
available
"
,
"
children
"
:
[{
...
@@ -3221,6 +3222,7 @@ module ("JIO Replicate Revision Storage");
...
@@ -3221,6 +3222,7 @@ module ("JIO Replicate Revision Storage");
// add documents to localstorage
// add documents to localstorage
o
.
doctree1_1
=
{
o
.
doctree1_1
=
{
"
_id
"
:
"
doc1.revision_tree.json
"
,
"
children
"
:
[{
"
children
"
:
[{
"
rev
"
:
"
1-111
"
,
"
rev
"
:
"
1-111
"
,
"
status
"
:
"
available
"
,
"
status
"
:
"
available
"
,
...
...
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