From 50b86007cf86ce65f7ea14a357acb98c2348a393 Mon Sep 17 00:00:00 2001 From: maddalax Date: Sun, 29 Sep 2024 11:45:52 -0500 Subject: [PATCH] add EvalJs on Sibling, EvalJs on Children, EvalJs on Parent --- framework/h/lifecycle.go | 58 +++++++++++++++++++++++----------------- framework/js/commands.go | 3 +++ 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/framework/h/lifecycle.go b/framework/h/lifecycle.go index c60bbc1..53924d1 100644 --- a/framework/h/lifecycle.go +++ b/framework/h/lifecycle.go @@ -186,45 +186,55 @@ func ToggleClassOnElement(selector, class string) ComplexJsCommand { )) } -func SetClassOnChildren(selector, class string) ComplexJsCommand { +func EvalJsOnParent(js string) ComplexJsCommand { // language=JavaScript return EvalJs(fmt.Sprintf(` - var children = self.querySelectorAll('%s'); - children.forEach(function(child) { - child.classList.add('%s'); + if(!self.parentElement) { return; } + let element = self.parentElement; + %s + `, js)) +} + +func EvalJsOnChildren(selector, js string) ComplexJsCommand { + // language=JavaScript + return EvalJs(fmt.Sprintf(` + let children = self.querySelectorAll('%s'); + children.forEach(function(element) { + %s }); - `, selector, class)) + `, selector, js)) +} + +func EvalJsOnSibling(selector, js string) ComplexJsCommand { + // language=JavaScript + return EvalJs(fmt.Sprintf(` + if(!self.parentElement) { return; } + let siblings = self.parentElement.querySelectorAll('%s'); + siblings.forEach(function(element) { + %s + }); + `, selector, js)) +} + +func SetClassOnChildren(selector, class string) ComplexJsCommand { + // language=JavaScript + return EvalJsOnChildren(selector, fmt.Sprintf("element.classList.add('%s')", class)) } func SetClassOnSibling(selector, class string) ComplexJsCommand { // language=JavaScript - return EvalJs(fmt.Sprintf(` - var siblings = self.parentElement.querySelectorAll('%s'); - siblings.forEach(function(sibling) { - sibling.classList.remove('%s'); - }); - self.classList.add('%s'); - `, selector, class, class)) + return EvalJsOnSibling(selector, fmt.Sprintf("element.classList.add('%s')", class)) } func RemoveClassOnSibling(selector, class string) ComplexJsCommand { // language=JavaScript - return EvalJs(fmt.Sprintf(` - var siblings = self.parentElement.querySelectorAll('%s'); - siblings.forEach(function(sibling) { - sibling.classList.remove('%s'); - }); - `, selector, class)) + return EvalJsOnSibling(selector, fmt.Sprintf("element.classList.remove('%s')", class)) + } func RemoveClassOnChildren(selector, class string) ComplexJsCommand { // language=JavaScript - return EvalJs(fmt.Sprintf(` - var children = self.querySelectorAll('%s'); - children.forEach(function(child) { - child.classList.remove('%s'); - }); - `, selector, class)) + return EvalJsOnChildren(selector, fmt.Sprintf("element.classList.remove('%s')", class)) } func Alert(text string) SimpleJsCommand { diff --git a/framework/js/commands.go b/framework/js/commands.go index 226142e..24f99ff 100644 --- a/framework/js/commands.go +++ b/framework/js/commands.go @@ -15,6 +15,9 @@ var RemoveClass = h.RemoveClass var Alert = h.Alert var SetClassOnChildren = h.SetClassOnChildren var RemoveClassOnChildren = h.RemoveClassOnChildren +var EvalJsOnChildren = h.EvalJsOnChildren +var EvalJsOnSibling = h.EvalJsOnSibling +var EvalJsOnParent = h.EvalJsOnParent var SetClassOnSibling = h.SetClassOnSibling var RemoveClassOnSibling = h.RemoveClassOnSibling var Remove = h.Remove