mirror of
https://github.com/MontFerret/ferret.git
synced 2025-02-07 13:31:56 +02:00
* Added release notes * #509 fixedOCOD typo * Updated values * Updated comments * Changed stdlib docs format * Changed format of array in docs * Use 'any' instead of 'value' in docs * New format for optional params * Updated docs for testing package * Added namespace information
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package html
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/MontFerret/ferret/pkg/drivers"
|
|
"github.com/MontFerret/ferret/pkg/runtime/core"
|
|
"github.com/MontFerret/ferret/pkg/runtime/values"
|
|
"github.com/MontFerret/ferret/pkg/runtime/values/types"
|
|
)
|
|
|
|
// SCROLL_ELEMENT scrolls an element on.
|
|
// @param {HTMLPage | HTMLDocument | HTMLElement} node - Target html node.
|
|
// @param {String} selector - If document is passed, this param must represent an element selector.
|
|
// @param {Object} [params] - Scroll params.
|
|
// @param {String} [params.behavior="instant"] - Scroll behavior
|
|
// @param {String} [params.block="center"] - Scroll vertical alignment.
|
|
// @param {String} [params.inline="center"] - Scroll horizontal alignment.
|
|
func ScrollInto(ctx context.Context, args ...core.Value) (core.Value, error) {
|
|
err := core.ValidateArgs(args, 1, 3)
|
|
|
|
if err != nil {
|
|
return values.None, err
|
|
}
|
|
|
|
var doc drivers.HTMLDocument
|
|
var el drivers.HTMLElement
|
|
var selector values.String
|
|
var opts drivers.ScrollOptions
|
|
|
|
if len(args) == 3 {
|
|
if err = core.ValidateType(args[1], types.String); err != nil {
|
|
return values.None, errors.Wrap(err, "selector")
|
|
}
|
|
|
|
if err = core.ValidateType(args[2], types.Object); err != nil {
|
|
return values.None, errors.Wrap(err, "options")
|
|
}
|
|
|
|
doc, err = drivers.ToDocument(args[0])
|
|
|
|
if err != nil {
|
|
return values.None, errors.Wrap(err, "document")
|
|
}
|
|
|
|
selector = values.ToString(args[1])
|
|
o, err := toScrollOptions(args[2])
|
|
|
|
if err != nil {
|
|
return values.None, errors.Wrap(err, "options")
|
|
}
|
|
|
|
opts = o
|
|
} else if len(args) == 2 {
|
|
if err = core.ValidateType(args[1], types.String, types.Object); err != nil {
|
|
return values.None, err
|
|
}
|
|
|
|
if args[1].Type() == types.String {
|
|
doc, err = drivers.ToDocument(args[0])
|
|
|
|
if err != nil {
|
|
return values.None, errors.Wrap(err, "document")
|
|
}
|
|
|
|
selector = values.ToString(args[1])
|
|
} else {
|
|
el, err = drivers.ToElement(args[0])
|
|
o, err := toScrollOptions(args[1])
|
|
|
|
if err != nil {
|
|
return values.None, errors.Wrap(err, "options")
|
|
}
|
|
|
|
opts = o
|
|
}
|
|
} else {
|
|
el, err = drivers.ToElement(args[0])
|
|
|
|
if err != nil {
|
|
return values.None, errors.Wrap(err, "element")
|
|
}
|
|
}
|
|
|
|
if doc != nil {
|
|
if selector != values.EmptyString {
|
|
return values.None, doc.ScrollBySelector(ctx, selector, opts)
|
|
}
|
|
|
|
return values.None, doc.GetElement().ScrollIntoView(ctx, opts)
|
|
}
|
|
|
|
if el != nil {
|
|
return values.None, el.ScrollIntoView(ctx, opts)
|
|
}
|
|
|
|
return values.None, core.TypeError(
|
|
args[0].Type(),
|
|
drivers.HTMLPageType,
|
|
drivers.HTMLDocumentType,
|
|
drivers.HTMLElementType,
|
|
)
|
|
}
|