Commit 7ab7782a authored by Tristan Cavelier's avatar Tristan Cavelier

Merge remote-tracking branch 'origin/master' into splitstorage

parents 9627819f 0d857363
......@@ -11,6 +11,37 @@
/**
* JIO Local Storage. Type = 'local'.
* 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) {
......@@ -64,34 +95,6 @@ jIO.addStorageType('local', function (spec, my) {
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
* @method objectIsEmpty
......@@ -137,11 +140,11 @@ jIO.addStorageType('local', function (spec, my) {
}
doc = localstorage.getItem(priv.localpath + "/" + doc_id);
if (doc === null) {
// the document does not exist
doc = command.cloneDoc();
doc._id = doc_id;
// the document does not exist
localstorage.setItem(priv.localpath + "/" + doc_id,
doc);
delete doc._attachments;
localstorage.setItem(priv.localpath + "/" + doc_id, doc);
that.success({
"ok": true,
"id": doc_id
......@@ -166,14 +169,17 @@ jIO.addStorageType('local', function (spec, my) {
*/
that.put = function (command) {
setTimeout(function () {
var doc;
var doc, tmp;
doc = localstorage.getItem(priv.localpath + "/" + command.getDocId());
if (doc === null) {
// the document does not exist
doc = command.cloneDoc();
delete doc._attachments;
} else {
// the document already exists
priv.documentObjectUpdate(doc, command.cloneDoc());
tmp = command.cloneDoc();
tmp._attachments = doc._attachments;
doc = tmp;
}
// write
localstorage.setItem(priv.localpath + "/" + command.getDocId(), doc);
......
......@@ -2163,6 +2163,7 @@ test ("Remove", function(){
o.tick(o);
o.doctree = {
"_id": "remove1.revision_tree.json",
"children":[{
"rev": "1-veryoldrev", "status": "available", "children": [{
"rev": "2-oldrev", "status": "available", "children": [{
......@@ -3221,6 +3222,7 @@ module ("JIO Replicate Revision Storage");
// add documents to localstorage
o.doctree1_1 = {
"_id": "doc1.revision_tree.json",
"children": [{
"rev": "1-111",
"status": "available",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment