mirror of
				https://github.com/MontFerret/ferret.git
				synced 2025-10-30 23:37:40 +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