Documentation
¶
Overview ¶
Package content defines the content object at the center of the CMS.
Index ¶
- Constants
- Variables
- func Acyclic(fields []Field) error
- func AddressPrefix(path, slug string) string
- func AddressUnder(prefix, slug string) string
- func CodeOf(err error) (string, bool)
- func Concealed(fields []Field, scope, submitted Values) error
- func ConditionsSetting(rules Rules) []any
- func Declaring(ctx context.Context, origin string) context.Context
- func Filled(values Values, relations Relations, fields []Field) error
- func FirstSegment(path string) string
- func GroupKeyFrom(title string) string
- func Hidden(fields []Field, scope Values) map[string]bool
- func Listed(f Field) bool
- func MediaIdentity(value any) (int64, bool)
- func NamesFieldFilter(query url.Values) bool
- func OwnedBy(origin string) error
- func ParseFieldFilter(query url.Values, fields []Field) (map[string]any, error)
- func ParsePerPage(raw string) (int, error)
- func Referenced(fields []Field, key string) (string, bool)
- func Refuse(err error, code, message string, held Details) error
- func ReservedRoot(segment string) bool
- func ResolveLocale(asked LocaleAsked) string
- func ResolvePerPage(held string, found bool) int
- func Slugify(title string) string
- func SourceOperators(kind FieldKind, multiple bool) []string
- func SplitValues(patch Values, fields []Field) (Values, Relations, error)
- func Stands(siblings []Field, f Field) error
- func Uncollided(types []Type, held []Group, target Group, keys []string, leaving int, ...) error
- func Unreferenced(fields []Field, key string) error
- func ValidGroupKey(key string) error
- func ValidateLocale(locale string) error
- func ValidateSettings(kind FieldKind, settings map[string]any) error
- type Address
- type AddressReader
- type Choice
- type Content
- type Details
- type Error
- type Field
- type FieldKind
- type Filter
- type Group
- type Kind
- type LocaleAsked
- type Order
- type OrderBy
- type PageKind
- type Param
- type ParamRegistry
- type Registry
- func (r *Registry) Active(ctx context.Context, key string) (Type, error)
- func (r *Registry) AdoptGroup(ctx context.Context, key string) error
- func (r *Registry) AdoptType(ctx context.Context, key string) error
- func (r *Registry) All(ctx context.Context) ([]Type, error)
- func (r *Registry) ByKey(ctx context.Context, key string) (Type, error)
- func (r *Registry) ByRouteWord(ctx context.Context, word string) (Type, error)
- func (r *Registry) Create(ctx context.Context, t Type) (Type, error)
- func (r *Registry) CreateField(ctx context.Context, f Field) (Field, error)
- func (r *Registry) CreateFieldInGroup(ctx context.Context, groupID int, f Field) (Field, error)
- func (r *Registry) CreateGroup(ctx context.Context, g Group) (Group, error)
- func (r *Registry) CreateSubField(ctx context.Context, parentID int, f Field) (Field, error)
- func (r *Registry) Default(ctx context.Context) (Type, error)
- func (r *Registry) Delete(ctx context.Context, key string) error
- func (r *Registry) DeleteFieldInGroup(ctx context.Context, groupID int, key string) error
- func (r *Registry) DeleteGroup(ctx context.Context, id int) error
- func (r *Registry) DeleteSubField(ctx context.Context, id int) error
- func (r *Registry) Groups(ctx context.Context) ([]Group, error)
- func (r *Registry) MoveField(ctx context.Context, groupID int, key string, toGroup int) (Field, error)
- func (r *Registry) Params(ctx context.Context) *ParamRegistry
- func (r *Registry) ReorderFieldsInGroup(ctx context.Context, groupID int, keys []string) ([]Field, error)
- func (r *Registry) ReorderGroups(ctx context.Context, ids []int) ([]Group, error)
- func (r *Registry) ReorderSubFields(ctx context.Context, parentID int, keys []string) ([]Field, error)
- func (r *Registry) Update(ctx context.Context, t Type) (Type, error)
- func (r *Registry) UpdateFieldInGroup(ctx context.Context, groupID int, f Field, expectedUpdatedAt time.Time) (Field, error)
- func (r *Registry) UpdateGroup(ctx context.Context, g Group) (Group, error)
- func (r *Registry) UpdateSubField(ctx context.Context, id int, f Field, expectedUpdatedAt time.Time) (Field, error)
- func (r *Registry) WithParams(params *ParamRegistry) *Registry
- type Relations
- type Resolver
- type Revision
- type RevisionKind
- type Rule
- type Rules
- type Screen
- type Status
- type Store
- type Target
- type Targets
- type Type
- type TypeChoices
- type TypeReader
- type TypeStore
- type Values
Constants ¶
const AnyContentType = "*"
AnyContentType is the rule value matching every content type.
const DefaultLocale = "en-US"
DefaultLocale is the language the site answers in when nothing else applies.
const DefaultPerPage = 20
DefaultPerPage is how many items a public listing page carries when nothing else applies.
const LocaleSettingKey = "locale.default"
LocaleSettingKey names the stored site default language.
const MaxDepth = 10
MaxDepth bounds how many levels of content nest under one another.
const MaxFieldDepth = 32
MaxFieldDepth is how many containers a field may stand inside.
const MaxPerPage = 100
MaxPerPage is the most items one listing page may carry.
const OperatorContains = "contains"
OperatorContains is the operator matching a value holding the rule value.
const OperatorEmpty = "empty"
OperatorEmpty is the operator matching a value that is not set.
const OperatorGreater = ">"
OperatorGreater is the operator matching a value above the rule value.
const OperatorIs = "=="
OperatorIs is the operator matching a rule value exactly.
const OperatorIsNot = "!="
OperatorIsNot is the operator excluding a rule value.
const OperatorLess = "<"
OperatorLess is the operator matching a value below the rule value.
const OperatorNotEmpty = "not_empty"
OperatorNotEmpty is the operator matching a value that is set.
const PageWord = "page"
PageWord is the segment a numbered listing hides behind.
const PerPageSettingKey = "content.per_page"
PerPageSettingKey names the stored public listing page size.
const ScreenContentType = "content_type"
ScreenContentType is the screen entry naming the content type fields would appear on.
const SettingAllowCustom = "allow_custom"
SettingAllowCustom names whether a choice field takes values outside its choices.
const SettingAllowNull = "allow_null"
SettingAllowNull names whether a choice control offers an explicit empty entry.
const SettingChoices = "choices"
SettingChoices names the value and label pairs a choice field offers.
const SettingConditions = "conditions"
SettingConditions is the setting holding the rules a field is shown under.
const SettingDefault = "default"
SettingDefault names the value the editor pre-fills a fresh item with.
const SettingInstructions = "instructions"
SettingInstructions names the help text shown under the control.
const SettingListed = "listed"
SettingListed is the setting opting a field into the admin list as a column.
const SettingMax = "max"
SettingMax names the largest value a number field accepts.
const SettingMaxLength = "maxlength"
SettingMaxLength names the longest text a text field accepts.
const SettingMin = "min"
SettingMin names the smallest value a number field accepts.
const SettingMultiple = "multiple"
SettingMultiple names whether a choice field holds several values.
const SettingPlaceholder = "placeholder"
SettingPlaceholder names the ghost text an empty control shows.
const SettingPresentation = "presentation"
SettingPresentation names the control a field is edited as.
const SettingStep = "step"
SettingStep names the increment the editor control moves by.
const SettingVariant = "variant"
SettingVariant names the flavor a text field is edited and checked as.
const TypePost = "post"
TypePost is the key of the built-in post type.
Variables ¶
var ErrConflict = errors.New("content: conflicting update")
ErrConflict reports that the content item changed after the update was prepared.
var ErrCycle = errors.New("content: the item cannot nest inside itself")
ErrCycle reports that content would nest inside itself.
var ErrDefaultRequired = errors.New("content: the default type must stay")
ErrDefaultRequired reports that the default content type may not be deactivated or removed.
var ErrDefinitionReadOnly = errors.New("content: a plugin declared the definition")
ErrDefinitionReadOnly reports a write to a definition a plugin declared.
var ErrFieldBounds = errors.New("content: value out of bounds")
ErrFieldBounds reports a value falling outside the bounds its field carries.
var ErrFieldFilterInvalid = errors.New("content: field filter invalid")
ErrFieldFilterInvalid reports a field filter term a list cannot read.
var ErrFieldHidden = errors.New("content: field is hidden")
ErrFieldHidden reports a value submitted under a field its conditions hide.
var ErrFieldNotFound = errors.New("content: field not found")
ErrFieldNotFound reports that the type declares no field under the key.
var ErrFieldNotRelational = errors.New("content: the kind takes no target or many")
ErrFieldNotRelational reports a target or many on a kind that takes neither.
var ErrFieldOrder = errors.New("content: incomplete field order")
ErrFieldOrder reports that an order does not name every declared field exactly once.
var ErrFieldReferenced = errors.New("content: a sibling's conditions read the field")
ErrFieldReferenced reports a field a sibling's conditions read.
var ErrFieldRequired = errors.New("content: field is required")
ErrFieldRequired reports that a field must hold a value before publishing.
var ErrFieldShape = errors.New("content: wrong kind of value")
ErrFieldShape reports that a value is not the kind its field holds.
var ErrFieldTaken = errors.New("content: field key taken")
ErrFieldTaken reports that the type already declares a field under the key.
var ErrFieldTooDeep = errors.New("content: field nested too deep")
ErrFieldTooDeep reports that a field would stand deeper than a container tree runs.
var ErrGroupKeyTaken = errors.New("content: field group key already taken")
ErrGroupKeyTaken reports a field group key another group already holds.
var ErrGroupNotFound = errors.New("content: field group not found")
ErrGroupNotFound reports that no field group holds the identifier.
var ErrGroupOrder = errors.New("content: incomplete field group order")
ErrGroupOrder reports an order that does not name every field group exactly once.
var ErrHoldsChildren = errors.New("content: the item still holds children")
ErrHoldsChildren reports that content still holds content nested under it.
var ErrInvalidAuthor = errors.New("content: invalid author")
ErrInvalidAuthor reports that a content item carries no author.
var ErrInvalidFieldKey = errors.New("content: invalid field key")
ErrInvalidFieldKey reports that a field key is not a lowercase word.
var ErrInvalidFieldKind = errors.New("content: invalid field kind")
ErrInvalidFieldKind reports that a field kind is not one the CMS holds.
var ErrInvalidFieldLabel = errors.New("content: invalid field label")
ErrInvalidFieldLabel reports that a field carries no label.
var ErrInvalidGroupKey = errors.New("content: invalid field group key")
ErrInvalidGroupKey reports a field group key that is not shaped like a key.
var ErrInvalidGroupTitle = errors.New("content: a field group needs a title")
ErrInvalidGroupTitle reports a field group carrying no title.
var ErrInvalidKey = errors.New("content: invalid type key")
ErrInvalidKey reports that a type key is not a lowercase word.
var ErrInvalidLabel = errors.New("content: invalid type label")
ErrInvalidLabel reports that a type carries no label.
var ErrInvalidOrder = errors.New("content: invalid order")
ErrInvalidOrder reports that a sort direction is not one the CMS sorts in.
var ErrInvalidOrderBy = errors.New("content: invalid orderby")
ErrInvalidOrderBy reports that a sort column is not one the CMS sorts by.
var ErrInvalidPageKind = errors.New("content: invalid page kind")
ErrInvalidPageKind reports that a page kind is not one the CMS renders.
var ErrInvalidRevisionCap = errors.New("content: invalid revision cap")
ErrInvalidRevisionCap reports that a revision cap is not a number of rows.
var ErrInvalidRouteWord = errors.New("content: invalid route word")
ErrInvalidRouteWord reports that a route word is not a lowercase word.
var ErrInvalidStatus = errors.New("content: invalid status")
ErrInvalidStatus reports that a status value is not one the CMS stores.
var ErrInvalidTransition = errors.New("content: invalid status transition")
ErrInvalidTransition reports that a status change is not allowed.
var ErrInvalidType = errors.New("content: invalid type")
ErrInvalidType reports that a content type is not registered.
var ErrLocaleUnknown = errors.New("content: locale unknown")
ErrLocaleUnknown reports that a language is not one the site answers in.
var ErrNotFound = errors.New("content: not found")
ErrNotFound reports that no content item exists for the requested ID.
var ErrNotHierarchical = errors.New("content: the type does not nest")
ErrNotHierarchical reports that a content type does not nest.
var ErrParamTaken = errors.New("content: param name taken")
ErrParamTaken reports a second param registering under a taken name.
var ErrParentTrashed = errors.New("content: the parent is in the trash")
ErrParentTrashed reports that a parent is on its way out of the site.
var ErrParentType = errors.New("content: the parent holds another kind of content")
ErrParentType reports that a parent holds another kind of content.
var ErrPerPageInvalid = errors.New("content: per page invalid")
ErrPerPageInvalid reports that a listing page size is not a whole number from 1 to MaxPerPage.
var ErrRelationNeedsTarget = errors.New("content: a relation field needs a target type")
ErrRelationNeedsTarget reports that a relation field names no target type.
var ErrRepeatedTarget = errors.New("content: repeated target")
ErrRepeatedTarget reports that a relation field was given the same target twice.
var ErrReservedAddress = errors.New("content: the address is reserved")
ErrReservedAddress reports that an address names a place the CMS keeps.
var ErrRevisionNotFound = errors.New("content: revision not found")
ErrRevisionNotFound reports that no revision exists for the requested ID.
var ErrRootTaken = errors.New("content: another type holds the root")
ErrRootTaken reports that another content type already lives at the root.
var ErrRouteWordReserved = errors.New("content: route word reserved")
ErrRouteWordReserved reports that the route word names a place the CMS keeps.
var ErrRouteWordTaken = errors.New("content: route word taken")
ErrRouteWordTaken reports that another content type answers under the route word.
var ErrRuleAnyNegated = errors.New("content: the any value takes only the is operator")
ErrRuleAnyNegated reports the any value beside the is not operator.
var ErrRuleCycle = errors.New("content: conditions loop")
ErrRuleCycle reports conditions that lead back to the field they show.
var ErrRuleOperator = errors.New("content: rule operator not offered")
ErrRuleOperator reports a location rule using an operator its source does not offer.
var ErrRuleSourceUnknown = errors.New("content: rule source unknown")
ErrRuleSourceUnknown reports a location rule naming an unregistered source.
var ErrRuleValue = errors.New("content: rule value missing")
ErrRuleValue reports a location rule holding no value.
var ErrSelfTarget = errors.New("content: an item cannot point at itself")
ErrSelfTarget reports that a relation field points an item at itself.
var ErrSettingBounds = errors.New("content: settings disagree")
ErrSettingBounds reports settings that disagree with each other.
var ErrSettingShape = errors.New("content: setting shape")
ErrSettingShape reports a setting holding a value of the wrong shape.
var ErrSettingUnknown = errors.New("content: setting unknown")
ErrSettingUnknown reports a setting the field's kind does not take.
var ErrSlugTaken = errors.New("content: slug taken")
ErrSlugTaken reports that a content type already holds the requested slug.
var ErrTargetNotFound = errors.New("content: target not found")
ErrTargetNotFound reports that a relation names an item nothing holds.
var ErrTargetType = errors.New("content: target is not the type the field points at")
ErrTargetType reports that a relation names an item of the wrong type.
var ErrTargetUnknown = errors.New("content: relation target unknown")
ErrTargetUnknown reports that a relation field targets an unregistered type.
var ErrTooDeep = errors.New("content: the nesting limit is reached")
ErrTooDeep reports that content nests beyond the limit.
var ErrTooManyTargets = errors.New("content: field holds one target")
ErrTooManyTargets reports that a relation field holding one was given more.
var ErrTypeInUse = errors.New("content: type still holds content")
ErrTypeInUse reports that the content type still holds content.
var ErrTypeInactive = errors.New("content: type is not active")
ErrTypeInactive reports that the content type is not active.
var ErrTypeNotFound = errors.New("content: type not found")
ErrTypeNotFound reports that no content type carries the requested key.
var ErrTypeTaken = errors.New("content: type key taken")
ErrTypeTaken reports that a content type already carries the requested key.
var ErrTypeTargeted = errors.New("content: a field still targets the type")
ErrTypeTargeted reports that a relation field of another type still targets the type.
var ErrUnknownField = errors.New("content: unknown field")
ErrUnknownField reports that the type declares no field under the key.
var ReservedRouteWords = []string{"admin", "api", "gophenberg", "_gophenberg", "media"}
ReservedRouteWords are the first address segments the CMS keeps for itself.
var SupportedLocales = []string{DefaultLocale, "es-ES", "fr-FR"}
SupportedLocales are the languages the site answers in, the fallback first.
Functions ¶
func Acyclic ¶ added in v0.11.0
Acyclic reports the first field whose conditions lead back to itself, if one does.
func AddressPrefix ¶
AddressPrefix returns the address an item's slug hangs from.
func AddressUnder ¶
AddressUnder returns the address of a child carrying slug beneath prefix.
func CodeOf ¶ added in v0.6.0
CodeOf returns the condition code an error names, reporting false when it names none.
func Concealed ¶ added in v0.11.0
Concealed reports the first field of the scope that its rules hide and a request still names.
func ConditionsSetting ¶ added in v0.11.0
ConditionsSetting returns the stored form of the rules, the value to hold under SettingConditions.
func Declaring ¶ added in v0.11.0
Declaring returns a context carrying the plugin whose declarations the writes it reaches belong to.
func Filled ¶ added in v0.5.0
Filled reports whether every required field the conditions show holds a value.
func FirstSegment ¶
FirstSegment returns the first segment of an address.
func GroupKeyFrom ¶ added in v0.11.0
GroupKeyFrom returns the key a group title mints, shaped like every other key.
func Hidden ¶ added in v0.11.0
Hidden returns the keys of the fields their conditions hide on the scope, a hidden source reading as absent.
func MediaIdentity ¶ added in v0.11.0
MediaIdentity returns the identity the value names, and whether the library can store it.
func NamesFieldFilter ¶ added in v0.11.0
NamesFieldFilter reports whether the query names any field filter term.
func OwnedBy ¶ added in v0.11.0
OwnedBy returns the refusal a definition the named plugin declared answers a write with.
func ParseFieldFilter ¶ added in v0.11.0
ParseFieldFilter returns the containment object the field[<key>] parameters name, each coerced by its field's kind.
func ParsePerPage ¶ added in v0.11.0
ParsePerPage returns the page size the text names, or the reason it is not one.
func Referenced ¶ added in v0.11.0
Referenced returns the sibling whose conditions read the key, and whether one does.
func Refuse ¶ added in v0.6.0
Refuse returns the sentinel carrying its condition code, its message and the details a client reads.
func ReservedRoot ¶
ReservedRoot reports whether the segment names a place the CMS keeps for itself.
func ResolveLocale ¶ added in v0.6.0
func ResolveLocale(asked LocaleAsked) string
ResolveLocale returns the language to answer in, preferring the reader, then the site, then the languages the request accepts.
func ResolvePerPage ¶ added in v0.11.0
ResolvePerPage returns the page size a stored setting names, or the default when it names none.
func Slugify ¶
Slugify returns title as a URL slug, or [untitledSlug] when it holds no slug characters.
func SourceOperators ¶ added in v0.11.0
SourceOperators returns the operators a field of the kind offers as a rule source, none for a kind no rule reads.
func SplitValues ¶ added in v0.5.0
SplitValues divides a patch into the scalar values and the targets its type declares.
func Stands ¶ added in v0.11.0
Stands reports whether a field's conditions close no loop and read siblings of its scope.
func Uncollided ¶ added in v0.10.0
func Uncollided( types []Type, held []Group, target Group, keys []string, leaving int, params *ParamRegistry, ) error
Uncollided reports whether the keys stay free of every other group sharing a type with this one.
func Unreferenced ¶ added in v0.11.0
Unreferenced reports whether a sibling's conditions read the key, refusing the removal when one does.
func ValidGroupKey ¶ added in v0.11.0
ValidGroupKey returns the reason a field group cannot carry the key, or nothing when it can.
func ValidateLocale ¶ added in v0.6.0
ValidateLocale reports whether the site answers in the language.
Types ¶
type AddressReader ¶
AddressReader reads the published content an address holds.
type Content ¶
type Content struct {
ID uuid.UUID
Type string
ParentID *uuid.UUID
Path string
Slug string
Title string
Content string
Excerpt string
Status Status
AuthorID uuid.UUID
Fields Values
Relations Relations
PublishedAt *time.Time
CreatedAt time.Time
UpdatedAt time.Time
}
Content is a content item holding Gutenberg-serialized block HTML.
func Reparent ¶
Reparent returns the item and the height it carries nested under parent, or the reason they may not sit there.
func (Content) Rename ¶
Rename returns the item carrying slug where it already answers, or the reason it may not.
func (*Content) Restore ¶
Restore returns a trashed content item to draft, or reports ErrInvalidTransition.
func (Content) SelfTargeted ¶ added in v0.5.0
SelfTargeted reports whether any relation field of the item points at the item itself.
func (*Content) Transition ¶
Transition moves the content item to the given status, stamping PublishedAt on the first publication and returning ErrInvalidTransition when disallowed.
type Details ¶ added in v0.6.0
Details holds the parts of an error a client reads as data rather than as prose.
type Error ¶ added in v0.9.0
Error is a sentinel carrying its condition code and the dynamic parts of the message.
type Field ¶ added in v0.5.0
type Field struct {
ID int
GroupID int
ParentID int
TypeKey string
Key string
Label string
Kind FieldKind
RelatesTo string
Many bool
Required bool
Origin string
Settings map[string]any
Fields []Field
CreatedAt time.Time
UpdatedAt time.Time
}
Field describes one typed field a group declares, flattened onto the types its group matches.
func NewField ¶ added in v0.5.0
NewField returns a field definition ready to store, or the reason it is not one.
func NewSubField ¶ added in v0.11.0
NewSubField returns a field definition ready to store inside the parent kind, or the reason it is not one.
type FieldKind ¶ added in v0.5.0
type FieldKind string
FieldKind is the shape of value a field holds.
const ( FieldKindText FieldKind = "text" FieldKindNumber FieldKind = "number" FieldKindBoolean FieldKind = "boolean" FieldKindDate FieldKind = "date" FieldKindMedia FieldKind = "media" FieldKindRelation FieldKind = "relation" FieldKindChoice FieldKind = "choice" FieldKindSection FieldKind = "section" FieldKindRepeater FieldKind = "repeater" )
The field kinds a content type declares.
type Filter ¶
type Filter struct {
Type string
Status Status
Search string
OrderBy OrderBy
Order Order
Page int
PerPage int
Fields map[string]any
}
Filter narrows a content listing.
type Group ¶ added in v0.10.0
type Group struct {
ID int
Key string
Title string
Location Rules
Position int
Active bool
Origin string
Fields []Field
CreatedAt time.Time
UpdatedAt time.Time
}
Group is a bundle of ordered fields shown where its location rules match.
type LocaleAsked ¶ added in v0.6.0
LocaleAsked carries what each leg of the resolution chain offered.
type Order ¶
type Order string
Order names a sort direction.
The directions a listing can be sorted in.
func ParseOrder ¶
ParseOrder returns the direction named by raw, or ErrInvalidOrder.
type OrderBy ¶
type OrderBy string
OrderBy names a column a listing can be sorted by.
The columns a listing can be sorted by.
func ParseOrderBy ¶
ParseOrderBy returns the column named by raw, or ErrInvalidOrderBy.
type Param ¶ added in v0.10.0
type Param interface {
// Name returns the source string rules reference the param by.
Name() string
// Operators returns the operators the param accepts.
Operators() []string
// Values returns the choices a rule builder offers for the param.
Values(ctx context.Context) ([]Choice, error)
// Stands reports why a rule value does not stand beside the operator, if it does not.
Stands(operator, value string) error
// Holds reports whether the screen satisfies the operator and the value.
Holds(scr Screen, operator, value string) bool
}
Param is one rule source the location engine validates and matches against.
func NewContentTypeParam ¶ added in v0.10.0
func NewContentTypeParam(choices TypeChoices) Param
NewContentTypeParam returns the built in param matching the content type of a screen.
type ParamRegistry ¶ added in v0.10.0
type ParamRegistry struct {
// contains filtered or unexported fields
}
ParamRegistry holds the rule sources locations validate and match against.
func DefaultParamRegistry ¶ added in v0.10.0
func DefaultParamRegistry(choices TypeChoices) *ParamRegistry
DefaultParamRegistry returns a registry holding the built in content type param.
func NewParamRegistry ¶ added in v0.10.0
func NewParamRegistry() *ParamRegistry
NewParamRegistry returns a registry holding no params.
func ScopeParams ¶ added in v0.11.0
func ScopeParams(fields []Field) *ParamRegistry
ScopeParams returns the registry of the sibling fields a condition may read.
func (*ParamRegistry) All ¶ added in v0.10.0
func (r *ParamRegistry) All() []Param
All returns every registered param in registration order.
func (*ParamRegistry) Param ¶ added in v0.10.0
func (r *ParamRegistry) Param(name string) (Param, bool)
Param returns the registered param of a name, and whether one holds it.
func (*ParamRegistry) Register ¶ added in v0.10.0
func (r *ParamRegistry) Register(p Param) error
Register adds a param, refusing a name already taken.
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry answers which content types the CMS holds, caching what it reads.
func NewRegistry ¶
NewRegistry returns a Registry reading through store.
func (*Registry) Active ¶
Active returns the type carrying the key when it is active, or the reason it serves nothing.
func (*Registry) AdoptGroup ¶ added in v0.11.0
AdoptGroup takes a plugin's field group and the fields inside it over as the site's own.
func (*Registry) AdoptType ¶ added in v0.11.0
AdoptType takes a plugin's content type over as the site's own.
func (*Registry) ByKey ¶
ByKey returns the type carrying the key, or ErrTypeNotFound.
func (*Registry) ByRouteWord ¶
ByRouteWord returns the active type answering under the word, or ErrTypeNotFound.
func (*Registry) CreateField ¶ added in v0.5.0
CreateField declares the field on its type, or reports why the registry refuses it.
func (*Registry) CreateFieldInGroup ¶ added in v0.10.0
CreateFieldInGroup declares the field inside the group, or reports why the registry refuses it.
func (*Registry) CreateGroup ¶ added in v0.10.0
CreateGroup stores a new field group, or reports why the registry refuses it.
func (*Registry) CreateSubField ¶ added in v0.11.0
CreateSubField declares the field inside the container the parent names.
func (*Registry) Default ¶
Default returns the type living at the root, or ErrTypeNotFound.
func (*Registry) DeleteFieldInGroup ¶ added in v0.10.0
DeleteFieldInGroup removes the field and its values from the types its group matches.
func (*Registry) DeleteGroup ¶ added in v0.10.0
DeleteGroup removes the group with its fields and their values, or reports it missing.
func (*Registry) DeleteSubField ¶ added in v0.11.0
DeleteSubField removes the field standing inside a container, and the values every item held under it.
func (*Registry) Groups ¶ added in v0.10.0
Groups returns every field group in position order with its fields attached.
func (*Registry) MoveField ¶ added in v0.10.0
func (r *Registry) MoveField(ctx context.Context, groupID int, key string, toGroup int) (Field, error)
MoveField carries the field into another group, keeping the values it holds.
func (*Registry) Params ¶ added in v0.10.0
func (r *Registry) Params(ctx context.Context) *ParamRegistry
Params returns the rule sources locations evaluate against, the built in ones by default.
func (*Registry) ReorderFieldsInGroup ¶ added in v0.10.0
func (r *Registry) ReorderFieldsInGroup(ctx context.Context, groupID int, keys []string) ([]Field, error)
ReorderFieldsInGroup stores the declaration order of a group's fields.
func (*Registry) ReorderGroups ¶ added in v0.10.0
ReorderGroups stores the given order, or reports why the order does not stand.
func (*Registry) ReorderSubFields ¶ added in v0.11.0
func (r *Registry) ReorderSubFields(ctx context.Context, parentID int, keys []string) ([]Field, error)
ReorderSubFields stands the fields inside the container in the order the keys name.
func (*Registry) Update ¶
Update stores the edited type, or reports why the registry keeps it as it stands.
func (*Registry) UpdateFieldInGroup ¶ added in v0.10.0
func (r *Registry) UpdateFieldInGroup( ctx context.Context, groupID int, f Field, expectedUpdatedAt time.Time, ) (Field, error)
UpdateFieldInGroup carries the field's label, required flag and settings when the expectation still holds.
func (*Registry) UpdateGroup ¶ added in v0.10.0
UpdateGroup stores the group's title, location and active flag, or reports why it stands as it is.
func (*Registry) UpdateSubField ¶ added in v0.11.0
func (r *Registry) UpdateSubField( ctx context.Context, id int, f Field, expectedUpdatedAt time.Time, ) (Field, error)
UpdateSubField carries a label, a required flag and settings onto the field standing inside a container.
func (*Registry) WithParams ¶ added in v0.10.0
func (r *Registry) WithParams(params *ParamRegistry) *Registry
WithParams returns the registry evaluating locations against the given rule sources.
type Relations ¶ added in v0.5.0
Relations holds the items a content item points at, keyed by field key.
type Resolver ¶
type Resolver struct {
// contains filtered or unexported fields
}
Resolver answers what a public address holds.
func NewResolver ¶
func NewResolver(store AddressReader, registry TypeReader) *Resolver
NewResolver returns a Resolver reading content through store and types through registry.
type Revision ¶
type Revision struct {
ID uuid.UUID
ContentID uuid.UUID
Kind RevisionKind
AuthorID uuid.UUID
Title string
Content string
Excerpt string
Fields Values
CreatedAt time.Time
}
Revision is a snapshot of a content item's editable content.
func NewRevision ¶
NewRevision returns a snapshot of the item's editable content, credited to the given author.
type RevisionKind ¶
type RevisionKind string
RevisionKind distinguishes an update snapshot from a per-author autosave.
const ( RevisionKindRevision RevisionKind = "revision" RevisionKindAutosave RevisionKind = "autosave" )
The kinds of revision a content item carries.
type Rule ¶ added in v0.10.0
type Rule struct {
Source string `json:"source"`
Operator string `json:"operator"`
Value string `json:"value"`
}
Rule is one location condition a field group states.
type Rules ¶ added in v0.10.0
type Rules [][]Rule
Rules is the location of a field group, OR groups of AND rules.
func ConditionsOf ¶ added in v0.11.0
ConditionsOf returns the rules a field is shown under, none when it carries none.
func (Rules) Equal ¶ added in v0.11.0
Equal reports whether the rules match once both are normalized.
func (Rules) Match ¶ added in v0.10.0
func (r Rules) Match(scr Screen, params *ParamRegistry) bool
Match reports whether any rule group fully matches the screen.
func (Rules) Normalize ¶ added in v0.10.0
Normalize returns the rules without zero rules, empty groups and values under valueless operators, never nil.
func (Rules) Validate ¶ added in v0.10.0
func (r Rules) Validate(params *ParamRegistry) error
Validate reports the first rule that is not well formed against the registered params.
type Status ¶
type Status string
Status is the publication state of a content item.
const ( StatusDraft Status = "draft" StatusPending Status = "pending" StatusPrivate Status = "private" StatusScheduled Status = "scheduled" StatusPublished Status = "published" StatusTrash Status = "trash" )
The statuses a content item may hold. Scheduled is stored but unreachable until a publish worker exists.
func ParseStatus ¶
ParseStatus returns the Status named by value, or ErrInvalidStatus.
type Store ¶
type Store interface {
Create(ctx context.Context, c Content) (Content, error)
ByID(ctx context.Context, id uuid.UUID) (Content, error)
PublishedByPath(ctx context.Context, path string) (Content, error)
Children(ctx context.Context, id uuid.UUID) (int, error)
Depth(ctx context.Context, id uuid.UUID) (int, error)
List(ctx context.Context, f Filter) ([]Content, int, error)
RelatedTo(ctx context.Context, target uuid.UUID, page, perPage int) ([]Content, int, error)
TargetsOf(ctx context.Context, from uuid.UUID) (Targets, error)
Update(
ctx context.Context, c Content, expectedUpdatedAt time.Time, snapshot *Revision, revisionCap int,
) (Content, error)
Trash(ctx context.Context, id uuid.UUID, updatedAt time.Time) (Content, error)
Restore(ctx context.Context, id uuid.UUID, updatedAt time.Time) (Content, error)
Delete(ctx context.Context, id uuid.UUID) error
Counts(ctx context.Context, contentType string) (map[Status]int, error)
Revisions(ctx context.Context, contentID uuid.UUID) ([]Revision, error)
RevisionByID(ctx context.Context, contentID, revisionID uuid.UUID) (Revision, error)
DeleteRevision(ctx context.Context, contentID, revisionID uuid.UUID) error
SaveAutosave(ctx context.Context, autosave Revision) (Revision, error)
Autosave(ctx context.Context, contentID, authorID uuid.UUID) (Revision, error)
DeleteAutosave(ctx context.Context, contentID, authorID uuid.UUID) error
}
Store persists content items and their revisions.
type Target ¶ added in v0.5.0
Target names one item a relation field points at, as a public reader sees it.
type Targets ¶ added in v0.5.0
Targets holds the items a content item points at, named and addressed, keyed by field key.
type Type ¶
type Type struct {
Key string
SingularLabel string
PluralLabel string
RouteWord string
Hierarchical bool
Revisions bool
RevisionCap int
PageKind PageKind
Default bool
Active bool
Origin string
Fields []Field
CreatedAt time.Time
UpdatedAt time.Time
}
Type describes a kind of content the CMS stores.
type TypeChoices ¶ added in v0.10.0
TypeChoices lists the type choices the content type param offers.
type TypeReader ¶
type TypeReader interface {
ByRouteWord(ctx context.Context, word string) (Type, error)
ByKey(ctx context.Context, key string) (Type, error)
}
TypeReader answers which type answers under a route word and which carries a key.
type TypeStore ¶
type TypeStore interface {
List(ctx context.Context) ([]Type, error)
ByKey(ctx context.Context, key string) (Type, error)
Create(ctx context.Context, t Type) (Type, error)
Update(ctx context.Context, t Type) (Type, error)
Delete(ctx context.Context, key string) error
ListGroups(ctx context.Context) ([]Group, error)
CreateGroup(ctx context.Context, g Group) (Group, error)
UpdateGroup(ctx context.Context, g Group) (Group, error)
DeleteGroup(ctx context.Context, id int) error
ReorderGroups(ctx context.Context, ids []int) error
CreateFieldInGroup(ctx context.Context, groupID int, f Field) (Field, error)
CreateSubField(ctx context.Context, parentID int, f Field) (Field, error)
DeleteSubField(ctx context.Context, id int) error
UpdateSubField(ctx context.Context, id int, f Field, expectedUpdatedAt time.Time) (Field, error)
ReorderSubFields(ctx context.Context, parentID int, keys []string) error
UpdateFieldInGroup(ctx context.Context, groupID int, f Field, expectedUpdatedAt time.Time) (Field, error)
DeleteFieldInGroup(ctx context.Context, groupID int, key string) error
ReorderFieldsInGroup(ctx context.Context, groupID int, keys []string) error
MoveField(ctx context.Context, groupID int, key string, toGroup int) (Field, error)
CreateField(ctx context.Context, f Field) (Field, error)
AdoptType(ctx context.Context, key string) error
AdoptGroup(ctx context.Context, key string) error
}
TypeStore persists the content type registry and its field definitions.
type Values ¶ added in v0.5.0
Values holds a content item's scalar field values keyed by field key.
func ListedValues ¶ added in v0.11.0
ListedValues returns the shown values under the fields opted into the admin list.
func Shown ¶ added in v0.11.0
Shown returns the values with every key the conditions hide taken away, at any depth.
func (Values) Merge ¶ added in v0.5.0
Merge returns the stored values with the patch applied, where a nil value clears its key.
func (Values) Validate ¶ added in v0.5.0
Validate reports whether every value matches the kind its field declares and the bounds it carries.
func (Values) ValidateShape ¶ added in v0.11.0
ValidateShape reports whether every value matches its field's kind, leaving the bounds alone.