//Mashup has a number of Containers (containerSchema is a sub-doc)
//so that the same Component could belong to two different Containers
var containerSchema = new Schema({
pos: { top: Number, left: Number }
, size: { width: Number, height: Number }
, component: { type: ObjectId, ref: 'Component' }
})
var mashupSchema = new Schema({
name: String
, desc: String
, size: { width: Number, height: Number }
, active: Boolean
, containers: [containerSchema]
})
//I am using 'mongoose-schema-extend' to inherit from componentSchema (waiting for the new PR)
var componentSchema = new Schema({
name: String
, desc: String
}, { collection : 'components', discriminatorKey : '_type' })
//now the various components
var imageComponentSchema = componentSchema.extend({
url: String
})
var textComponentSchema = componentSchema.extend({
text: String
})
var htmlComponentSchema = componentSchema.extend({
html: String
})
//this particular component needs a page and a selector
//(which could live outside it and belong to multiple components)
var webComponentSchema = componentSchema.extend({
page: { type: ObjectId, ref: 'Page' }
, selector: { type: ObjectId, ref: 'Selector' }
})
var pageSchema = new Schema({
name: String
, desc: String
, url: String
, active: { type: Boolean, default: false }
})
var selectorSchema = new Schema({
desc: String
, url: String
, cssPath: String
})
///MODELS
var Mashup = mongoose.model("Mashup", mashupSchema)
var Component = mongoose.model("Component", componentSchema)
var ImageComponent = mongoose.model("ImageComponent", imageComponentSchema)
var TextComponent = mongoose.model("TextComponent", textComponentSchema)
var HtmlComponent = mongoose.model("HtmlComponent", htmlComponentSchema)
var WebComponent = mongoose.model("WebComponent", webComponentSchema)
var Page = mongoose.model("Page", pageSchema)
var Selector = mongoose.model("Selector", selectorSchema)