|
|
|
|
@@ -45,9 +45,7 @@ Clipperz.PM.DataModel.Record = function(args) {
|
|
|
|
|
this._createNewDirectLoginFunction = args.createNewDirectLoginFunction || null;
|
|
|
|
|
|
|
|
|
|
this._tags = [];
|
|
|
|
|
|
|
|
|
|
this._directLogins = {};
|
|
|
|
|
|
|
|
|
|
this._versions = {};
|
|
|
|
|
|
|
|
|
|
this._currentRecordVersion = null;
|
|
|
|
|
@@ -163,16 +161,20 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt
|
|
|
|
|
|
|
|
|
|
//............................................................................
|
|
|
|
|
|
|
|
|
|
'tagRegExp': function () { return Clipperz.PM.DataModel.Record.tagRegExp(); },
|
|
|
|
|
'trimSpacesRegExp': function () { return Clipperz.PM.DataModel.Record.tagRegExp(); },
|
|
|
|
|
'filterOutTags': function (aValue) { return Clipperz.PM.DataModel.Record.filterOutTags(aValue); },
|
|
|
|
|
'extractLabelFromFullLabel': function (aValue) {
|
|
|
|
|
return Clipperz.PM.DataModel.Record.extractLabelFromFullLabel(aValue);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
'extractTagsFromFullLabel': function (aLabel) {
|
|
|
|
|
return Clipperz.PM.DataModel.Record.extractTagsFromFullLabel(aLabel);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//............................................................................
|
|
|
|
|
|
|
|
|
|
'label': function () {
|
|
|
|
|
return Clipperz.Async.callbacks("Record.label", [
|
|
|
|
|
MochiKit.Base.method(this, 'fullLabel'),
|
|
|
|
|
MochiKit.Base.method(this, 'filterOutTags')
|
|
|
|
|
MochiKit.Base.method(this, 'extractLabelFromFullLabel')
|
|
|
|
|
], {trace:false});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
@@ -193,22 +195,6 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt
|
|
|
|
|
|
|
|
|
|
//.........................................................................
|
|
|
|
|
|
|
|
|
|
'extractTagsFromFullLabel': function (aLabel) {
|
|
|
|
|
var tagRegEx;
|
|
|
|
|
var result;
|
|
|
|
|
var match;
|
|
|
|
|
|
|
|
|
|
result = {};
|
|
|
|
|
tagRegEx = this.tagRegExp();
|
|
|
|
|
match = tagRegEx.exec(aLabel);
|
|
|
|
|
while (match != null) {
|
|
|
|
|
result[match[1]] = true;
|
|
|
|
|
match = tagRegEx.exec(aLabel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
'tags': function () {
|
|
|
|
|
return Clipperz.Async.callbacks("Record.label", [
|
|
|
|
|
MochiKit.Base.method(this, 'fullLabel'),
|
|
|
|
|
@@ -1163,6 +1149,64 @@ console.log("Record.hasPendingChanges RESULT", result);
|
|
|
|
|
], {trace:false});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//=========================================================================
|
|
|
|
|
|
|
|
|
|
'exportDirectLogins': function() {
|
|
|
|
|
var result;
|
|
|
|
|
var directLoginsObject = this.directLogins();
|
|
|
|
|
|
|
|
|
|
if (MochiKit.Base.keys(directLoginsObject).length == 0) {
|
|
|
|
|
result = {};
|
|
|
|
|
} else {
|
|
|
|
|
var callbackObject = Object.keys(directLoginsObject).reduce(function(previous, current) {
|
|
|
|
|
previous[current] = MochiKit.Base.method( directLoginsObject[current], 'serializedData' );
|
|
|
|
|
return previous;
|
|
|
|
|
}, {});
|
|
|
|
|
|
|
|
|
|
result = Clipperz.Async.collectResults("Record.exportDirectLogins", callbackObject,{trace:false})();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
'export': function() {
|
|
|
|
|
var deferredResult;
|
|
|
|
|
var label;
|
|
|
|
|
var data;
|
|
|
|
|
var currentVersion;
|
|
|
|
|
var directLogins;
|
|
|
|
|
var currentVersionObject;
|
|
|
|
|
|
|
|
|
|
data = {};
|
|
|
|
|
currentVersion = {};
|
|
|
|
|
directLogins = {};
|
|
|
|
|
deferredResult = new Clipperz.Async.Deferred('Record.export', {trace:false});
|
|
|
|
|
deferredResult.addMethod(this, 'getCurrentRecordVersion');
|
|
|
|
|
deferredResult.addCallback(function(recordVersionIn) { currentVersionObject = recordVersionIn; })
|
|
|
|
|
deferredResult.addMethod(this, 'fullLabel');
|
|
|
|
|
deferredResult.addMethod(this, function(labelIn) {label = labelIn});
|
|
|
|
|
deferredResult.addMethod(this, 'exportDirectLogins');
|
|
|
|
|
deferredResult.addCallback(function(directLoginsIn) { data['directLogins'] = directLoginsIn; });
|
|
|
|
|
deferredResult.addCallback(function() { return currentVersionObject.getKey(); }),
|
|
|
|
|
// deferredResult.addMethod(this,function(keyIn) { data['currentVersionKey'] = keyIn; });
|
|
|
|
|
deferredResult.addMethod(this, 'notes');
|
|
|
|
|
deferredResult.addMethod(this, function(notesIn) { data['notes'] = notesIn; });
|
|
|
|
|
// deferredResult.addMethod(this, function() { currentVersion['reference'] = this.currentVersionReference(); });
|
|
|
|
|
deferredResult.addCallback(function() { return currentVersionObject.exportFields(); }),
|
|
|
|
|
deferredResult.addCallback(function(fieldsIn) { currentVersion['fields'] = fieldsIn; });
|
|
|
|
|
deferredResult.addMethod(this, function() {
|
|
|
|
|
return {
|
|
|
|
|
'label': label,
|
|
|
|
|
'data': data,
|
|
|
|
|
'currentVersion': currentVersion
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
deferredResult.callback();
|
|
|
|
|
|
|
|
|
|
return deferredResult;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//=========================================================================
|
|
|
|
|
__syntaxFix__: "syntax fix"
|
|
|
|
|
});
|
|
|
|
|
@@ -1203,20 +1247,33 @@ Clipperz.PM.DataModel.Record.regExpForSearch = function (aSearch) {
|
|
|
|
|
return new RegExp(aSearch.replace(/[^A-Za-z0-9]/g, '\\$&'), 'i');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Clipperz.PM.DataModel.Record.tagRegExp = function () {
|
|
|
|
|
return new RegExp('\\' + Clipperz.PM.DataModel.Record.tagChar + '(' + Clipperz.PM.DataModel.Record.specialTagChar + '?\\w+)', 'g');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Clipperz.PM.DataModel.Record.trimSpacesRegExp = function () {
|
|
|
|
|
return new RegExp('^\\s+|\\s+$', 'g');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Clipperz.PM.DataModel.Record.filterOutTags = function (aValue) {
|
|
|
|
|
Clipperz.PM.DataModel.Record.tagRegExp = new RegExp('\\' + Clipperz.PM.DataModel.Record.tagChar + '(' + Clipperz.PM.DataModel.Record.specialTagChar + '?\\w+)', 'g');
|
|
|
|
|
Clipperz.PM.DataModel.Record.trimSpacesRegExp = new RegExp('^\\s+|\\s+$', 'g');
|
|
|
|
|
|
|
|
|
|
Clipperz.PM.DataModel.Record.extractLabelFromFullLabel = function (aValue) {
|
|
|
|
|
var value;
|
|
|
|
|
|
|
|
|
|
value = aValue;
|
|
|
|
|
value = value.replace(Clipperz.PM.DataModel.Record.tagRegExp(), '');
|
|
|
|
|
value = value.replace(Clipperz.PM.DataModel.Record.trimSpacesRegExp(), '');
|
|
|
|
|
value = value.replace(Clipperz.PM.DataModel.Record.tagRegExp, '');
|
|
|
|
|
value = value.replace(Clipperz.PM.DataModel.Record.trimSpacesRegExp, '');
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Clipperz.PM.DataModel.Record.extractTagsFromFullLabel = function (aLabel) {
|
|
|
|
|
var tagRegEx;
|
|
|
|
|
var result;
|
|
|
|
|
var match;
|
|
|
|
|
|
|
|
|
|
result = {};
|
|
|
|
|
tagRegEx = Clipperz.PM.DataModel.Record.tagRegExp;
|
|
|
|
|
match = tagRegEx.exec(aLabel);
|
|
|
|
|
while (match != null) {
|
|
|
|
|
result[match[1]] = true;
|
|
|
|
|
match = tagRegEx.exec(aLabel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
|