1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-01-26 03:51:57 +02:00
ferret/pkg/drivers/scroll.go
Tim Voronov c9dfb79641
Added scroll options (#471)
* Added scroll options

* Updated dependencies

* Updates after code review

* Updates after review

* Added comments
2020-04-25 15:06:00 -04:00

128 lines
3.4 KiB
Go

package drivers
import "strings"
// ScrollBehavior defines the transition animation.
// In HTML specification, default value is auto, but in Ferret it's instant.
// More details here https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
type ScrollBehavior int
const (
ScrollBehaviorInstant ScrollBehavior = 0
ScrollBehaviorSmooth ScrollBehavior = 1
ScrollBehaviorAuto ScrollBehavior = 2
)
func NewScrollBehavior(value string) ScrollBehavior {
switch strings.ToLower(value) {
case "instant":
return ScrollBehaviorInstant
case "smooth":
return ScrollBehaviorSmooth
default:
return ScrollBehaviorAuto
}
}
func (b ScrollBehavior) String() string {
switch b {
case ScrollBehaviorInstant:
return "instant"
case ScrollBehaviorSmooth:
return "smooth"
default:
return "auto"
}
}
// ScrollVerticalAlignment defines vertical alignment after scrolling.
// In HTML specification, default value is start, but in Ferret it's center.
// More details here https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
type ScrollVerticalAlignment int
const (
ScrollVerticalAlignmentCenter ScrollVerticalAlignment = 0
ScrollVerticalAlignmentStart ScrollVerticalAlignment = 1
ScrollVerticalAlignmentEnd ScrollVerticalAlignment = 2
ScrollVerticalAlignmentNearest ScrollVerticalAlignment = 3
)
func NewScrollVerticalAlignment(value string) ScrollVerticalAlignment {
switch strings.ToLower(value) {
case "center":
return ScrollVerticalAlignmentCenter
case "start":
return ScrollVerticalAlignmentStart
case "end":
return ScrollVerticalAlignmentEnd
case "nearest":
return ScrollVerticalAlignmentNearest
default:
return ScrollVerticalAlignmentCenter
}
}
func (a ScrollVerticalAlignment) String() string {
switch a {
case ScrollVerticalAlignmentCenter:
return "center"
case ScrollVerticalAlignmentStart:
return "start"
case ScrollVerticalAlignmentEnd:
return "end"
case ScrollVerticalAlignmentNearest:
return "nearest"
default:
return "center"
}
}
// ScrollHorizontalAlignment defines horizontal alignment after scrolling.
// In HTML specification, default value is nearest, but in Ferret it's center.
// More details here https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
type ScrollHorizontalAlignment int
const (
ScrollHorizontalAlignmentCenter ScrollHorizontalAlignment = 0
ScrollHorizontalAlignmentStart ScrollHorizontalAlignment = 1
ScrollHorizontalAlignmentEnd ScrollHorizontalAlignment = 2
ScrollHorizontalAlignmentNearest ScrollHorizontalAlignment = 3
)
func NewScrollHorizontalAlignment(value string) ScrollHorizontalAlignment {
switch strings.ToLower(value) {
case "center":
return ScrollHorizontalAlignmentCenter
case "start":
return ScrollHorizontalAlignmentStart
case "end":
return ScrollHorizontalAlignmentEnd
case "nearest":
return ScrollHorizontalAlignmentNearest
default:
return ScrollHorizontalAlignmentCenter
}
}
func (a ScrollHorizontalAlignment) String() string {
switch a {
case ScrollHorizontalAlignmentCenter:
return "center"
case ScrollHorizontalAlignmentNearest:
return "nearest"
case ScrollHorizontalAlignmentStart:
return "start"
case ScrollHorizontalAlignmentEnd:
return "end"
default:
return "center"
}
}
// ScrollOptions defines how scroll animation should be performed.
type ScrollOptions struct {
Behavior ScrollBehavior
Block ScrollVerticalAlignment
Inline ScrollHorizontalAlignment
}