init - add project files
This commit is contained in:
55
ui/scripts.go
Normal file
55
ui/scripts.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
. "maxwarden/basic"
|
||||
"maxwarden/config"
|
||||
"strings"
|
||||
|
||||
. "maragu.dev/gomponents"
|
||||
. "maragu.dev/gomponents/html"
|
||||
)
|
||||
|
||||
// This component generates a <script> tag that automatically includes a blank scope { }.
|
||||
// Avoid using the javascript `var` keyword inside the scope as it will be placed in the global
|
||||
// scope.
|
||||
//
|
||||
// WARNING: DO NOT PASS USER INPUT TO THIS COMPONENT!!
|
||||
// THIS COULD BE A ONE WAY TICKET TO XSS IF USED IMPROPERLY!
|
||||
func InlineScript(script string) Node {
|
||||
// minify in production only
|
||||
if !config.DEBUG {
|
||||
script = strings.ReplaceAll(script, "\n", " ")
|
||||
script = strings.ReplaceAll(script, "\t", "")
|
||||
}
|
||||
|
||||
return Script(Raw(`{` + script + `}`))
|
||||
}
|
||||
|
||||
// Wrapper function around `InlineScript` that allows for printf style format strings + data
|
||||
//
|
||||
// WARNING: DO NOT PASS USER INPUT TO THIS COMPONENT!!
|
||||
// THIS COULD BE A ONE WAY TICKET TO XSS IF USED IMPROPERLY!
|
||||
func InlineScriptf(scriptFormat string, items ...interface{}) Node {
|
||||
return InlineScript(fmt.Sprintf(scriptFormat, items...))
|
||||
}
|
||||
|
||||
// Convert Go arrays to a string containing a javascript array.
|
||||
// Useful for injecting data into a dynamically generated script.
|
||||
func MakeJsArray[T any](list []T) string {
|
||||
var out_string string
|
||||
|
||||
out_string += "["
|
||||
|
||||
for i, v := range list {
|
||||
if i == len(list)-1 {
|
||||
out_string += fmt.Sprintf("'%s'", ToString(v))
|
||||
} else {
|
||||
out_string += fmt.Sprintf("'%s',", ToString(v))
|
||||
}
|
||||
}
|
||||
|
||||
out_string += "]"
|
||||
|
||||
return out_string
|
||||
}
|
||||
Reference in New Issue
Block a user