[WIP] Step away from embedding merlin types into a specific data model
Change-Id: I5ab6d13e56073c2f63a5dc559e138d95a0751a75
This commit is contained in:
parent
d6e2842979
commit
1d9ae69248
|
@ -15,26 +15,25 @@
|
||||||
|
|
||||||
function varlistValueFactory(json, parameters) {
|
function varlistValueFactory(json, parameters) {
|
||||||
var type = Barricade.getType(json);
|
var type = Barricade.getType(json);
|
||||||
|
var value;
|
||||||
if ( angular.isUndefined(json) || type === String ) {
|
if ( angular.isUndefined(json) || type === String ) {
|
||||||
return fields.string.create(json, parameters);
|
return fields.string.create(json, parameters);
|
||||||
} else if ( type === Array ) {
|
} else if ( type === Array ) {
|
||||||
return fields.list.extend({
|
value = fields.list.extend({}, {
|
||||||
inline: true
|
'*': {'@type': String}
|
||||||
}, {
|
|
||||||
'*': {'@class': fields.string}
|
|
||||||
}).create(json, parameters);
|
}).create(json, parameters);
|
||||||
} else if ( type === Object ) {
|
} else if ( type === Object ) {
|
||||||
return fields.dictionary.extend({
|
value = fields.dictionary.extend({}, {
|
||||||
inline: true
|
'?': {'@type': String}
|
||||||
}, {
|
|
||||||
'?': {'@class': fields.string}
|
|
||||||
}).create(json, parameters);
|
}).create(json, parameters);
|
||||||
}
|
}
|
||||||
|
value.inline = true;
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
models.varlist = fields.list.extend({
|
models.varlist = Barricade.Array.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.list.create.call(this, json, parameters);
|
var self = Barricade.Array.create.call(this, json, parameters);
|
||||||
self.on('childChange', function(child, op) {
|
self.on('childChange', function(child, op) {
|
||||||
if ( op == 'empty' ) {
|
if ( op == 'empty' ) {
|
||||||
self.each(function(index, item) {
|
self.each(function(index, item) {
|
||||||
|
@ -47,6 +46,7 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Array,
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.frozendict.extend({
|
'@class': fields.frozendict.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
|
@ -73,15 +73,14 @@
|
||||||
return self;
|
return self;
|
||||||
},
|
},
|
||||||
_getPrettyJSON: function() {
|
_getPrettyJSON: function() {
|
||||||
var json = fields.frozendict._getPrettyJSON.apply(this, arguments);
|
var json = Barricade.ImmutableObject._getPrettyJSON.apply(this, arguments);
|
||||||
return json.value;
|
return json.value;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'type': {
|
'type': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@enum': ['string', 'list', 'dictionary'],
|
'@enum': ['string', 'list', 'dictionary'],
|
||||||
'@default': 'string'
|
'@default': 'string'
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'value': {
|
'value': {
|
||||||
'@class': fields.generic,
|
'@class': fields.generic,
|
||||||
|
@ -99,20 +98,21 @@
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'yaql': {
|
'yaql': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
},
|
},
|
||||||
'action': {
|
'action': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.yaqllist = fields.list.extend({}, {
|
models.yaqllist = Barricade.create({
|
||||||
|
'@type': Array,
|
||||||
'*': {'@class': models.YAQLField}
|
'*': {'@class': models.YAQLField}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.Action = fields.frozendict.extend({
|
models.Action = Barricade.ImmutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.frozendict.create.call(this, json, parameters);
|
var self = Barricade.ImmutableObject.create.call(this, json, parameters);
|
||||||
var base = self.get('base');
|
var base = self.get('base');
|
||||||
base.on('change', function(operation) {
|
base.on('change', function(operation) {
|
||||||
var argsEntry, pos, entry;
|
var argsEntry, pos, entry;
|
||||||
|
@ -128,6 +128,7 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'base': {
|
'base': {
|
||||||
'@class': fields.linkedcollection.extend({
|
'@class': fields.linkedcollection.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
|
@ -164,7 +165,7 @@
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'?': {'@class': fields.string},
|
'?': {'@type': String},
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 2,
|
'index': 2,
|
||||||
'title': 'Base Input'
|
'title': 'Base Input'
|
||||||
|
@ -172,12 +173,11 @@
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
'input': {
|
'input': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 3
|
'index': 3
|
||||||
},
|
},
|
||||||
'*': {'@class': fields.string}
|
'*': {'@type': String}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'output': {
|
'output': {
|
||||||
'@class': models.varlist.extend({}, {
|
'@class': models.varlist.extend({}, {
|
||||||
|
@ -188,9 +188,9 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.Task = fields.frozendict.extend({
|
models.Task = Barricade.ImmutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.frozendict.create.call(this, json, parameters);
|
var self = Barricade.ImmutableObject.create.call(this, json, parameters);
|
||||||
self.on('childChange', function(child, op) {
|
self.on('childChange', function(child, op) {
|
||||||
if ( child === self.get('type') && op !== 'id' ) {
|
if ( child === self.get('type') && op !== 'id' ) {
|
||||||
self.emit('change', 'taskType');
|
self.emit('change', 'taskType');
|
||||||
|
@ -199,59 +199,57 @@
|
||||||
return self;
|
return self;
|
||||||
},
|
},
|
||||||
_getPrettyJSON: function() {
|
_getPrettyJSON: function() {
|
||||||
var json = fields.frozendict._getPrettyJSON.apply(this, arguments);
|
var json = Barricade.ImmutableObject._getPrettyJSON.apply(this, arguments);
|
||||||
delete json.type;
|
delete json.type;
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'baseKey': 'task',
|
'baseKey': 'task',
|
||||||
'baseName': 'Task '
|
'baseName': 'Task '
|
||||||
},
|
},
|
||||||
'type': {
|
'type': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@enum': [{
|
'@enum': [{
|
||||||
value: 'action', label: 'Action-based'
|
value: 'action', label: 'Action-based'
|
||||||
}, {
|
}, {
|
||||||
value: 'workflow', label: 'Workflow-based'
|
value: 'workflow', label: 'Workflow-based'
|
||||||
}],
|
}],
|
||||||
'@default': 'action',
|
'@default': 'action',
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 0
|
'index': 0
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'description': {
|
'description': {
|
||||||
'@class': fields.text.extend({}, {
|
'@type': String,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 2
|
'widget': 'text',
|
||||||
}
|
'index': 2
|
||||||
})
|
}
|
||||||
},
|
},
|
||||||
'input': {
|
'input': {
|
||||||
'@class': fields.dictionary.extend({}, {
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 4
|
'index': 4
|
||||||
},
|
},
|
||||||
'?': {
|
'?': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'publish': {
|
'publish': {
|
||||||
'@class': fields.dictionary.extend({}, {
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 5
|
'index': 5
|
||||||
},
|
},
|
||||||
'?': {
|
'?': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'policies': {
|
'policies': {
|
||||||
'@class': fields.frozendict.extend({
|
'@class': Barricade.ImmutableObject.extend({
|
||||||
_getPrettyJSON: function() {
|
_getPrettyJSON: function() {
|
||||||
var json = fields.frozendict._getPrettyJSON.apply(this, arguments);
|
var json = Barricade.ImmutableObject._getPrettyJSON.apply(this, arguments);
|
||||||
json.retry = {
|
json.retry = {
|
||||||
count: utils.pop(json, 'retry-count'),
|
count: utils.pop(json, 'retry-count'),
|
||||||
delay: utils.pop(json, 'retry-delay'),
|
delay: utils.pop(json, 'retry-delay'),
|
||||||
|
@ -260,62 +258,57 @@
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 9
|
'index': 9
|
||||||
},
|
},
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'wait-before': {
|
'wait-before': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 0,
|
'index': 0,
|
||||||
'title': 'Wait before'
|
'title': 'Wait before'
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'wait-after': {
|
'wait-after': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 1,
|
'index': 1,
|
||||||
'title': 'Wait after'
|
'title': 'Wait after'
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'timeout': {
|
'timeout': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 2
|
'index': 2
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'retry-count': {
|
'retry-count': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 3,
|
'index': 3,
|
||||||
'title': 'Retry count'
|
'title': 'Retry count'
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'retry-delay': {
|
'retry-delay': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 4,
|
'index': 4,
|
||||||
'title': 'Retry delay'
|
'title': 'Retry delay'
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'retry-break-on': {
|
'retry-break-on': {
|
||||||
'@class': fields.number.extend({}, {
|
'@type': Number,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 5,
|
'index': 5,
|
||||||
'title': 'Retry break on'
|
'title': 'Retry break on'
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -323,47 +316,43 @@
|
||||||
|
|
||||||
models.ReverseWFTask = models.Task.extend({}, {
|
models.ReverseWFTask = models.Task.extend({}, {
|
||||||
'requires': {
|
'requires': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 3
|
'index': 3
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.DirectWFTask = models.Task.extend({}, {
|
models.DirectWFTask = models.Task.extend({}, {
|
||||||
'on-error': {
|
'on-error': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On error',
|
'title': 'On error',
|
||||||
'index': 6
|
'index': 6
|
||||||
},
|
},
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'on-success': {
|
'on-success': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On success',
|
'title': 'On success',
|
||||||
'index': 7
|
'index': 7
|
||||||
},
|
},
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'on-complete': {
|
'on-complete': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On complete',
|
'title': 'On complete',
|
||||||
'index': 8
|
'index': 8
|
||||||
},
|
},
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -422,9 +411,9 @@
|
||||||
return taskClass.create(json, parameters);
|
return taskClass.create(json, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
models.Workflow = fields.frozendict.extend({
|
models.Workflow = Barricade.ImmutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.frozendict.create.call(this, json, parameters);
|
var self = Barricade.ImmutableObject.create.call(this, json, parameters);
|
||||||
self.on('childChange', function(child, op) {
|
self.on('childChange', function(child, op) {
|
||||||
if ( child === self.get('type') && op !== 'id' ) {
|
if ( child === self.get('type') && op !== 'id' ) {
|
||||||
self.emit('change', 'workflowType');
|
self.emit('change', 'workflowType');
|
||||||
|
@ -433,41 +422,39 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'type': {
|
'type': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@enum': ['reverse', 'direct'],
|
'@enum': ['reverse', 'direct'],
|
||||||
'@default': 'direct',
|
'@default': 'direct',
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 1
|
'index': 1
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'input': {
|
'input': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 2
|
'index': 2
|
||||||
},
|
},
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'output': {
|
'output': {
|
||||||
'@class': fields.list.extend({}, {
|
'@type': Array,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 3
|
'index': 3
|
||||||
},
|
},
|
||||||
'*': {
|
'*': {
|
||||||
'@class': fields.string
|
'@type': String
|
||||||
}
|
}
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'tasks': {
|
'tasks': {
|
||||||
'@class': fields.dictionary.extend({
|
'@class': Barricade.MutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.dictionary.create.call(this, json, parameters);
|
var self = Barricade.MutableObject.create.call(this, json, parameters);
|
||||||
self.on('childChange', function(child, op, arg) {
|
self.on('childChange', function(child, op, arg) {
|
||||||
if ( op === 'taskType' ) {
|
if ( op === 'taskType' ) {
|
||||||
var taskId = child.getID();
|
var taskId = child.getID();
|
||||||
|
@ -481,6 +468,7 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 5
|
'index': 5
|
||||||
},
|
},
|
||||||
|
@ -496,36 +484,36 @@
|
||||||
models.ReverseWorkflow = models.Workflow.extend({});
|
models.ReverseWorkflow = models.Workflow.extend({});
|
||||||
models.DirectWorkflow = models.Workflow.extend({}, {
|
models.DirectWorkflow = models.Workflow.extend({}, {
|
||||||
'task-defaults': {
|
'task-defaults': {
|
||||||
'@class': fields.frozendict.extend({}, {
|
'@type': Object,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 4
|
'index': 4
|
||||||
},
|
},
|
||||||
'on-error': {
|
'on-error': {
|
||||||
'@class': models.yaqllist.extend({}, {
|
'@class': models.yaqllist.extend({}, {
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On error',
|
'title': 'On error',
|
||||||
'index': 0
|
'index': 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
'on-success': {
|
'on-success': {
|
||||||
'@class': models.yaqllist.extend({}, {
|
'@class': models.yaqllist.extend({}, {
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On success',
|
'title': 'On success',
|
||||||
'index': 1
|
'index': 1
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
'on-complete': {
|
'on-complete': {
|
||||||
'@class': models.yaqllist.extend({}, {
|
'@class': models.yaqllist.extend({}, {
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'title': 'On complete',
|
'title': 'On complete',
|
||||||
'index': 2
|
'index': 2
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -540,7 +528,8 @@
|
||||||
return workflowTypes[type].create(json, parameters);
|
return workflowTypes[type].create(json, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
models.Actions = fields.dictionary.extend({}, {
|
models.Actions = Barricade.create({
|
||||||
|
'@type': Object,
|
||||||
'@required': false,
|
'@required': false,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 3
|
'index': 3
|
||||||
|
@ -550,9 +539,9 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.Workflows = fields.dictionary.extend({
|
models.Workflows = Barricade.MutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = fields.dictionary.create.call(this, json, parameters);
|
var self = Barricade.MutableObject.create.call(this, json, parameters);
|
||||||
self.on('childChange', function(child, op) {
|
self.on('childChange', function(child, op) {
|
||||||
if ( op === 'workflowType' ) {
|
if ( op === 'workflowType' ) {
|
||||||
var workflowId = child.getID();
|
var workflowId = child.getID();
|
||||||
|
@ -567,6 +556,7 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 4
|
'index': 4
|
||||||
},
|
},
|
||||||
|
@ -576,39 +566,38 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
models.Workbook = fields.frozendict.extend({
|
models.Workbook = Barricade.ImmutableObject.extend({
|
||||||
toYAML: function() {
|
toYAML: function() {
|
||||||
return jsyaml.dump(this.toJSON({pretty: true}));
|
return jsyaml.dump(this.toJSON({pretty: true}));
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
'@type': Object,
|
||||||
'version': {
|
'version': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@enum': ['2.0'],
|
'@enum': ['2.0'],
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 2
|
'index': 2
|
||||||
},
|
},
|
||||||
'@default': '2.0'
|
'@default': '2.0'
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'name': {
|
'name': {
|
||||||
'@class': fields.string.extend({}, {
|
'@type': String,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 0
|
'index': 0
|
||||||
},
|
},
|
||||||
'@constraints': [
|
'@constraints': [
|
||||||
function(value) {
|
function(value) {
|
||||||
return value !== 'workbook1' ? true : 'The sample validation failure.';
|
return value !== 'workbook1' ? true : 'The sample validation failure.';
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
|
||||||
},
|
},
|
||||||
'description': {
|
'description': {
|
||||||
'@class': fields.text.extend({}, {
|
'@type': String,
|
||||||
'@meta': {
|
'@meta': {
|
||||||
'index': 1
|
'index': 1,
|
||||||
},
|
'widget': 'text'
|
||||||
'@required': false
|
},
|
||||||
})
|
'@required': false
|
||||||
},
|
},
|
||||||
'actions': {
|
'actions': {
|
||||||
'@class': models.Actions
|
'@class': models.Actions
|
||||||
|
|
|
@ -216,15 +216,37 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
typedField.$inject = ['$compile', 'merlin.templates'];
|
typedField.$inject = ['$compile', 'merlin.templates', 'merlin.field.models', 'merlin.utils'];
|
||||||
function typedField($compile, templates) {
|
function typedField($compile, templates, fields, utils) {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
scope: {
|
scope: {
|
||||||
value: '='
|
value: '='
|
||||||
},
|
},
|
||||||
link: function(scope, element) {
|
link: function(scope, element) {
|
||||||
var type = scope.value.getType();
|
var field = scope.value;
|
||||||
|
var type;
|
||||||
|
if (!field.instanceof(fields.generic)) {
|
||||||
|
if (field.instanceof(Barricade.Primitive)) {
|
||||||
|
type = Barricade.getType(field.get());
|
||||||
|
if (type === String) {
|
||||||
|
if (utils.getMeta(field, 'widget') === 'text') {
|
||||||
|
fields.generic.call(field, 'text');
|
||||||
|
} else {
|
||||||
|
fields.generic.call(field, 'string');
|
||||||
|
}
|
||||||
|
} else if (type === Number) {
|
||||||
|
fields.generic.call(field, 'number');
|
||||||
|
}
|
||||||
|
} else if (field.instanceof(Barricade.ImmutableObject)) {
|
||||||
|
fields.frozendictmixin.call(field);
|
||||||
|
} else if (field.instanceof(Barricade.MutableObject)) {
|
||||||
|
fields.dictionarymixin.call(field);
|
||||||
|
} else if (field.instanceof(Barricade.Array)) {
|
||||||
|
fields.listmixin.call(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type = scope.value.getType();
|
||||||
templates.templateReady(type).then(function(template) {
|
templates.templateReady(type).then(function(template) {
|
||||||
element.append($compile(template)(scope));
|
element.append($compile(template)(scope));
|
||||||
});
|
});
|
||||||
|
|
|
@ -150,89 +150,102 @@
|
||||||
}
|
}
|
||||||
}, {'@type': Number});
|
}, {'@type': Number});
|
||||||
|
|
||||||
|
var listMixin = Barricade.Blueprint.create(function() {
|
||||||
|
var self = this;
|
||||||
|
modelMixin.call(self, 'list');
|
||||||
|
|
||||||
|
self.add = function() {
|
||||||
|
self.push(undefined, self._parameters);
|
||||||
|
};
|
||||||
|
plainStructureMixin.call(self);
|
||||||
|
return self;
|
||||||
|
});
|
||||||
|
|
||||||
var listModel = Barricade.Array.extend({
|
var listModel = Barricade.Array.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = Barricade.Array.create.call(this, json, parameters);
|
var self = Barricade.Array.create.call(this, json, parameters);
|
||||||
|
return listMixin.call(self);
|
||||||
modelMixin.call(self, 'list');
|
|
||||||
|
|
||||||
self.add = function() {
|
|
||||||
self.push(undefined, parameters);
|
|
||||||
};
|
|
||||||
plainStructureMixin.call(self);
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
}, {'@type': Array});
|
}, {'@type': Array});
|
||||||
|
|
||||||
var frozendictModel = Barricade.ImmutableObject.extend({
|
var frozendictModel = Barricade.ImmutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = Barricade.ImmutableObject.create.call(this, json, parameters);
|
var self = Barricade.ImmutableObject.create.call(this, json, parameters);
|
||||||
|
return frozendictMixin.call(self);
|
||||||
modelMixin.call(self, 'frozendict');
|
|
||||||
plainStructureMixin.call(self);
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
}, {'@type': Object});
|
}, {'@type': Object});
|
||||||
|
|
||||||
|
var frozendictMixin = Barricade.Blueprint.create(function() {
|
||||||
|
var self = this;
|
||||||
|
modelMixin.call(self, 'frozendict');
|
||||||
|
plainStructureMixin.call(self);
|
||||||
|
return self;
|
||||||
|
});
|
||||||
|
|
||||||
|
var dictionaryMixin = Barricade.Blueprint.create(function() {
|
||||||
|
var self = this;
|
||||||
|
var _elClass = self._elementClass;
|
||||||
|
var baseKey = utils.getMeta(_elClass, 'baseKey') || 'key';
|
||||||
|
var baseName = utils.getMeta(_elClass, 'baseName') || utils.makeTitle(baseKey);
|
||||||
|
|
||||||
|
modelMixin.call(self, 'dictionary');
|
||||||
|
plainStructureMixin.call(self);
|
||||||
|
|
||||||
|
function initKeyAccessor(value) {
|
||||||
|
value.keyValue = function () {
|
||||||
|
if ( arguments.length ) {
|
||||||
|
value.setID(arguments[0]);
|
||||||
|
} else {
|
||||||
|
return value.getID();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
self.each(function(key, value) {
|
||||||
|
initKeyAccessor(value);
|
||||||
|
}).on('change', function(op, index) {
|
||||||
|
if (op === 'add' || op === 'set') {
|
||||||
|
initKeyAccessor(self.get(index));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.add = function(newID) {
|
||||||
|
var regexp = new RegExp('(' + baseKey + ')([0-9]+)');
|
||||||
|
var newValue;
|
||||||
|
newID = newID || baseKey + utils.getNextIDSuffix(self, regexp);
|
||||||
|
if ( _elClass.instanceof(Barricade.ImmutableObject) ) {
|
||||||
|
if ( 'name' in _elClass._schema ) {
|
||||||
|
var nameNum = utils.getNextIDSuffix(self, regexp);
|
||||||
|
newValue = {name: baseName + nameNum};
|
||||||
|
} else {
|
||||||
|
newValue = {};
|
||||||
|
}
|
||||||
|
} else { // usually, it's either frozendict inside or string
|
||||||
|
newValue = '';
|
||||||
|
}
|
||||||
|
self.push(newValue, utils.extend(self._parameters, {id: newID}));
|
||||||
|
};
|
||||||
|
self.empty = function() {
|
||||||
|
for ( var i = this._data.length; i > 0; i-- ) {
|
||||||
|
self.remove(i - 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
self.resetKeys = function(keys) {
|
||||||
|
self.empty();
|
||||||
|
keys.forEach(function(key) {
|
||||||
|
self.push(undefined, {id: key});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
self.removeItem = function(key) {
|
||||||
|
self.remove(self.getPosByID(key));
|
||||||
|
};
|
||||||
|
return self;
|
||||||
|
});
|
||||||
|
|
||||||
var dictionaryModel = Barricade.MutableObject.extend({
|
var dictionaryModel = Barricade.MutableObject.extend({
|
||||||
create: function(json, parameters) {
|
create: function(json, parameters) {
|
||||||
var self = Barricade.MutableObject.create.call(this, json, parameters);
|
var self = Barricade.MutableObject.create.call(this, json, parameters);
|
||||||
var _elClass = self._elementClass;
|
return dictionaryMixin.call(self);
|
||||||
var baseKey = utils.getMeta(_elClass, 'baseKey') || 'key';
|
|
||||||
var baseName = utils.getMeta(_elClass, 'baseName') || utils.makeTitle(baseKey);
|
|
||||||
|
|
||||||
modelMixin.call(self, 'dictionary');
|
|
||||||
plainStructureMixin.call(self);
|
|
||||||
|
|
||||||
function initKeyAccessor(value) {
|
|
||||||
value.keyValue = function () {
|
|
||||||
if ( arguments.length ) {
|
|
||||||
value.setID(arguments[0]);
|
|
||||||
} else {
|
|
||||||
return value.getID();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
self.each(function(key, value) {
|
|
||||||
initKeyAccessor(value);
|
|
||||||
}).on('change', function(op, index) {
|
|
||||||
if (op === 'add' || op === 'set') {
|
|
||||||
initKeyAccessor(self.get(index));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
self.add = function(newID) {
|
|
||||||
var regexp = new RegExp('(' + baseKey + ')([0-9]+)');
|
|
||||||
var newValue;
|
|
||||||
newID = newID || baseKey + utils.getNextIDSuffix(self, regexp);
|
|
||||||
if ( _elClass.instanceof(Barricade.ImmutableObject) ) {
|
|
||||||
if ( 'name' in _elClass._schema ) {
|
|
||||||
var nameNum = utils.getNextIDSuffix(self, regexp);
|
|
||||||
newValue = {name: baseName + nameNum};
|
|
||||||
} else {
|
|
||||||
newValue = {};
|
|
||||||
}
|
|
||||||
} else { // usually, it's either frozendict inside or string
|
|
||||||
newValue = '';
|
|
||||||
}
|
|
||||||
self.push(newValue, utils.extend(self._parameters, {id: newID}));
|
|
||||||
};
|
|
||||||
self.empty = function() {
|
|
||||||
for ( var i = this._data.length; i > 0; i-- ) {
|
|
||||||
self.remove(i - 1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
self.resetKeys = function(keys) {
|
|
||||||
self.empty();
|
|
||||||
keys.forEach(function(key) {
|
|
||||||
self.push(undefined, {id: key});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
self.removeItem = function(key) {
|
|
||||||
self.remove(self.getPosByID(key));
|
|
||||||
};
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
}, {'@type': Object});
|
}, {'@type': Object});
|
||||||
|
|
||||||
|
@ -282,6 +295,9 @@
|
||||||
text: textModel,
|
text: textModel,
|
||||||
number: numberModel,
|
number: numberModel,
|
||||||
list: listModel,
|
list: listModel,
|
||||||
|
listmixin: listMixin,
|
||||||
|
frozendictmixin: frozendictMixin,
|
||||||
|
dictionarymixin: dictionaryMixin,
|
||||||
linkedcollection: linkedCollectionModel,
|
linkedcollection: linkedCollectionModel,
|
||||||
dictionary: dictionaryModel,
|
dictionary: dictionaryModel,
|
||||||
frozendict: frozendictModel,
|
frozendict: frozendictModel,
|
||||||
|
|
Loading…
Reference in New Issue