substance
Version:
Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing systems.
79 lines (65 loc) • 1.37 kB
JavaScript
import { isArray, last } from '../util'
import Coordinate from './Coordinate'
/*
Internal helper class used by model/data/Node.
*/
export default class Property {
constructor(definition) {
this.definition = definition
}
isArray() {
return isArray(this.definition.type)
}
isReference() {
if (this.isArray()) {
return last(this.definition.type) === 'id'
} else {
return this.definition.type === 'id'
}
}
isText() {
return Boolean(this.definition._isText)
}
isOwned() {
return Boolean(this.definition.owned)
}
isOptional() {
return Boolean(this.definition.optional)
}
isNotNull() {
return Boolean(this.definition.notNull)
}
hasDefault() {
return this.definition.hasOwnProperty('default')
}
getDefault() {
return this.definition.default
}
createDefaultValue() {
if (isArray(this.definition.type)) {
return []
}
switch(this.definition.type) {
case 'object':
return {}
case 'number':
return -1
case 'coordinate':
return new Coordinate([], 0)
case 'boolean':
return false
case 'id':
return null
case 'string':
return ''
default:
return null
}
}
get type() {
return this.definition.type
}
get name() {
return this.definition.name
}
}