mirror of
https://github.com/strongdm/comply
synced 2024-08-27 17:56:48 +00:00
88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
|
package ace
|
||
|
|
||
|
import "bytes"
|
||
|
|
||
|
// elementBase holds common fields for the elements.
|
||
|
type elementBase struct {
|
||
|
ln *line
|
||
|
rslt *result
|
||
|
src *source
|
||
|
parent element
|
||
|
children []element
|
||
|
opts *Options
|
||
|
lastChild bool
|
||
|
}
|
||
|
|
||
|
// AppendChild appends the child element to the element.
|
||
|
func (e *elementBase) AppendChild(child element) {
|
||
|
e.children = append(e.children, child)
|
||
|
}
|
||
|
|
||
|
// ContainPlainText returns false.
|
||
|
// This method should be overrided by a struct which contains
|
||
|
// the element base struct.
|
||
|
func (e *elementBase) ContainPlainText() bool {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// Base returns the element base.
|
||
|
func (e *elementBase) Base() *elementBase {
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
// CanHaveChildren returns true.
|
||
|
// This method should be overrided by a struct which contains
|
||
|
// the element base struct.
|
||
|
func (e *elementBase) CanHaveChildren() bool {
|
||
|
return true
|
||
|
}
|
||
|
func (e *elementBase) IsBlockElement() bool {
|
||
|
return false
|
||
|
}
|
||
|
func (e *elementBase) IsControlElement() bool {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// InsertBr returns false.
|
||
|
// This method should be overrided by a struct which contains
|
||
|
// the element base struct.
|
||
|
func (e *elementBase) InsertBr() bool {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// SetLastChild set the value to the last child field.
|
||
|
func (e *elementBase) SetLastChild(lastChild bool) {
|
||
|
e.lastChild = lastChild
|
||
|
}
|
||
|
|
||
|
// writeChildren writes the children's HTML.
|
||
|
func (e *elementBase) writeChildren(bf *bytes.Buffer) (int64, error) {
|
||
|
l := len(e.children)
|
||
|
for index, child := range e.children {
|
||
|
if index == l-1 {
|
||
|
child.SetLastChild(true)
|
||
|
}
|
||
|
|
||
|
if e.opts.formatter != nil {
|
||
|
if i, err := e.opts.formatter.OpeningElement(bf, child); err != nil {
|
||
|
return int64(i), err
|
||
|
}
|
||
|
}
|
||
|
if i, err := child.WriteTo(bf); err != nil {
|
||
|
return int64(i), err
|
||
|
}
|
||
|
}
|
||
|
return 0, nil
|
||
|
}
|
||
|
|
||
|
// newElementBase creates and returns an element base.
|
||
|
func newElementBase(ln *line, rslt *result, src *source, parent element, opts *Options) elementBase {
|
||
|
return elementBase{
|
||
|
ln: ln,
|
||
|
rslt: rslt,
|
||
|
src: src,
|
||
|
parent: parent,
|
||
|
opts: opts,
|
||
|
}
|
||
|
}
|