mirror of
https://github.com/MontFerret/ferret.git
synced 2025-11-23 21:54:45 +02:00
@@ -4,6 +4,7 @@
|
||||
#### Added
|
||||
- DateTime functions.
|
||||
- ``PAGINATION`` function.
|
||||
- ``SCROLL_TOP`` and ``SCROLL_BOTTOM`` functions.
|
||||
|
||||
#### Fixed
|
||||
- Unable to define variables and make function calls before FILTER, SORT and etc statements.
|
||||
|
||||
@@ -810,6 +810,30 @@ func (doc *HTMLDocument) CaptureScreenshot(params *ScreenshotArgs) (core.Value,
|
||||
return values.NewBinary(reply.Data), nil
|
||||
}
|
||||
|
||||
func (doc *HTMLDocument) ScrollTop() error {
|
||||
_, err := eval.Eval(doc.client, `
|
||||
window.scrollTo({
|
||||
left: 0,
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
`, false, false)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (doc *HTMLDocument) ScrollBottom() error {
|
||||
_, err := eval.Eval(doc.client, `
|
||||
window.scrollTo({
|
||||
left: 0,
|
||||
top: window.document.body.scrollHeight,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
`, false, false)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (doc *HTMLDocument) handlePageLoad(_ interface{}) {
|
||||
doc.Lock()
|
||||
defer doc.Unlock()
|
||||
|
||||
@@ -34,6 +34,8 @@ func NewLib() map[string]core.Function {
|
||||
"INNER_TEXT_ALL": InnerTextAll,
|
||||
"SELECT": Select,
|
||||
"SCREENSHOT": Screenshot,
|
||||
"SCROLL_TOP": ScrollTop,
|
||||
"SCROLL_BOTTOM": ScrollBottom,
|
||||
"PAGINATION": Pagination,
|
||||
"PDF": PDF,
|
||||
"DOWNLOAD": Download,
|
||||
|
||||
56
pkg/stdlib/html/scroll.go
Normal file
56
pkg/stdlib/html/scroll.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package html
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/MontFerret/ferret/pkg/html/dynamic"
|
||||
"github.com/MontFerret/ferret/pkg/runtime/core"
|
||||
"github.com/MontFerret/ferret/pkg/runtime/values"
|
||||
)
|
||||
|
||||
// ScrollTop Scrolls the document's window to its top.
|
||||
// @param doc (Document) - Target document.
|
||||
func ScrollTop(_ context.Context, args ...core.Value) (core.Value, error) {
|
||||
err := core.ValidateArgs(args, 1, 1)
|
||||
|
||||
if err != nil {
|
||||
return values.None, err
|
||||
}
|
||||
|
||||
err = core.ValidateType(args[0], core.HTMLDocumentType)
|
||||
|
||||
if err != nil {
|
||||
return values.None, err
|
||||
}
|
||||
|
||||
doc, ok := args[0].(*dynamic.HTMLDocument)
|
||||
|
||||
if !ok {
|
||||
return values.None, core.Errors(core.ErrInvalidType, ErrNotDynamic)
|
||||
}
|
||||
|
||||
return values.None, doc.ScrollTop()
|
||||
}
|
||||
|
||||
// ScrollTop Scrolls the document's window to its bottom.
|
||||
// @param doc (Document) - Target document.
|
||||
func ScrollBottom(_ context.Context, args ...core.Value) (core.Value, error) {
|
||||
err := core.ValidateArgs(args, 1, 1)
|
||||
|
||||
if err != nil {
|
||||
return values.None, err
|
||||
}
|
||||
|
||||
err = core.ValidateType(args[0], core.HTMLDocumentType)
|
||||
|
||||
if err != nil {
|
||||
return values.None, err
|
||||
}
|
||||
|
||||
doc, ok := args[0].(*dynamic.HTMLDocument)
|
||||
|
||||
if !ok {
|
||||
return values.None, core.Errors(core.ErrInvalidType, ErrNotDynamic)
|
||||
}
|
||||
|
||||
return values.None, doc.ScrollBottom()
|
||||
}
|
||||
Reference in New Issue
Block a user