• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

scriptype / writ-cms / 22203879000

19 Feb 2026 11:06PM UTC coverage: 38.437% (-0.1%) from 38.574%
22203879000

push

github

scriptype
Draft a proto-layout for contentType selection

List of types and a visualisation of current ontology is imagined. The
former is hereby attempted, and the latter needs more think

618 of 3672 branches covered (16.83%)

Branch coverage included in aggregate %.

0 of 8 new or added lines in 2 files covered. (0.0%)

21 existing lines in 1 file now uncovered.

2166 of 3571 relevant lines covered (60.66%)

1169.5 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/cms/server/public/app/defaultContentTypes.js
NEW
1
const homepageTypes = [{
×
2
  name: 'BasicHomepage',
3
  model: 'homepage',
4
  description: 'A generic landing page',
5
  attributes: {
6
    title: 'title',
7
    description: 'text',
8
    content: 'content'
9
  }
10
}, {
11
  name: 'FancyHomepage',
12
  model: 'homepage',
13
  description: 'A fancy landing page',
14
  attributes: {
15
    title: 'title',
16
    description: 'text',
17
    content: 'content',
18
    fancyAttribute: 'date'
19
  }
20
}]
21

NEW
22
const subpageTypes = [{
×
23
  name: 'BasicSubpage',
24
  model: 'subpage',
25
  description: 'A generic subpage',
26
  attributes: {
27
    title: 'title',
28
    description: 'text',
29
    content: 'content'
30
  }
31
}, {
32
  name: 'FancySubpage',
33
  model: 'subpage',
34
  description: 'A fancy subpage',
35
  attributes: {
36
    title: 'title',
37
    description: 'text',
38
    content: 'content'
39
  }
40
}]
41

NEW
42
const collectionTypes = [{
×
43
  name: 'Blog',
44
  model: 'collection',
45
  description: 'A collection of blog posts',
46
  facets: ['tags', 'date', 'author'],
47
  collectionAlias: 'blog',
48
  categoryContentType: '',
49
  categoryAlias: '',
50
  categoriesAlias: '',
51
  entryContentType: 'BlogPost',
52
  entryAlias: 'post',
53
  entriesAlias: 'posts',
54
  attributes: {
55
    title: 'title',
56
    description: 'text',
57
    content: 'content'
58
  }
59
}, {
60
  name: 'Podcast',
61
  model: 'collection',
62
  description: 'A collection of podcast episodes',
63
  facets: ['tags', 'date', 'guests', 'hosts'],
64
  collectionAlias: 'podcast',
65
  categoryContentType: '',
66
  categoryAlias: '',
67
  categoriesAlias: '',
68
  entryContentType: 'PodcastEpisode',
69
  entryAlias: 'episode',
70
  entriesAlias: 'episodes',
71
  attributes: {
72
    title: 'title',
73
    description: 'text',
74
    content: 'content'
75
  }
76
}]
77

NEW
78
const categoryTypes = [{
×
79
  name: 'Category',
80
  model: 'category',
81
  description: 'A group of entries in a collection',
82
  attributes: {
83
    title: 'title',
84
    description: 'text',
85
    content: 'content'
86
  }
87
}]
88

NEW
89
const entryTypes = [{
×
90
  name: 'BlogPost',
91
  model: 'entry',
92
  description: 'Article in a blog',
93
  attributes: {
94
    title: 'title',
95
    tags: 'string[]',
96
    author: 'Person',
97
    date: 'date',
98
    summary: 'text',
99
    content: 'content',
100
    coverImage: 'imageAttachment'
101
  }
102
}, {
103
  name: 'PodcastEpisode',
104
  model: 'entry',
105
  description: 'An episode of a podcast show',
106
  attributes: {
107
    title: 'title',
108
    tags: 'string[]',
109
    audioFile: 'attachment:audio',
110
    transcript: 'attachment:text',
111
    guests: 'PodcastGuest[]',
112
    hosts: 'PodcastHost[]'
113
  }
114
}, {
115
  name: 'Person',
116
  model: 'entry',
117
  description: 'A person',
118
  attributes: {
119
    title: 'title',
120
    email: 'email',
121
    bio: 'text',
122
    avatar: 'image',
123
  }
124
}, {
125
  name: 'Author',
126
  model: 'entry',
127
  description: 'An author',
128
  attributes: {
129
    title: 'title',
130
    email: 'email',
131
    bio: 'text',
132
    avatar: 'image',
133
    blogPosts: ['+BlogPost:author']
134
  }
135
}, {
136
  name: 'PodcastHost',
137
  model: 'entry',
138
  description: 'A host in a podcast episode',
139
  attributes: {
140
    title: 'title',
141
    email: 'email',
142
    bio: 'text',
143
    avatar: 'image',
144
    hosted: ['+PodcastEpisode:hosts']
145
  }
146
}, {
147
  name: 'PodcastGuest',
148
  model: 'entry',
149
  description: 'A guest in a podcast episode',
150
  attributes: {
151
    title: 'title',
152
    email: 'email',
153
    bio: 'text',
154
    avatar: 'image',
155
    hosted: ['+PodcastEpisode:guests']
156
  }
157
}]
158

159
export default [
160
  ...homepageTypes,
161
  ...subpageTypes,
162
  ...collectionTypes,
163
  ...categoryTypes,
164
  ...entryTypes
165
]
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc