Quick Reference

Quick Reference

Quick reference cheat sheet for Fynerisor v0.5.0 development with Risor v2 syntax.

Basic Widgets

Widget Example
Button widget.NewButton("Click", () => {})
Label widget.NewLabel("Hello")
Entry widget.NewEntry()
MultiLineEntry widget.NewMultiLineEntry()
Check widget.NewCheck("Enable", (checked) => {})
Select widget.NewSelect(["A", "B"], (val) => {})
Slider widget.NewSlider(0, 100, (val) => {})
ProgressBar widget.NewProgressBar()

Data Binding

let name = binding.NewString("John")
let label = widget.NewLabelWithData(name)
name.Set("Jane")  // Auto-updates UI

Types: NewString, NewBool, NewInt, NewFloat

Containers

Container Example
VBox container.NewVBox(w1, w2, w3)
HBox container.NewHBox(w1, w2, w3)
Border container.NewBorder(top, bottom, left, right, center)
Grid container.NewGrid(2, w1, w2, w3, w4)
Scroll container.NewScroll(content)
HSplit container.NewHSplit(left, right)
VSplit container.NewVSplit(top, bottom)

Window Object

window.SetContent(widget)
window.SetStatus("text")
window.Title = "My App"  // Get or set window title
window.Do(() => { /* update GUI from background */ })
window.OnDropped((paths) => { /* handle file drops */ })

Properties: window.DroppedPaths (array of dropped file paths)

HTTP Module

require("@http")

let response = http.get("https://api.example.com/data")
print(response.body)

let response = http.post(url, {"key": "value"})

SQL Module

require("@sql")

let conn = sql.connect("sqlserver://user:pass@server/db")
let rows = conn.query("SELECT * FROM Users WHERE id = ?", 123)
rows.each(row => print(row["name"]))
conn.close()

Arrow Functions

// Single expression
let double = x => x * 2

// Block
let process = x => {
    let result = x * 2
    return result + 1
}

// No params
let onClick = () => print("Clicked")

Iteration

// Each
[1, 2, 3].each(x => print(x))

// Map
let doubled = [1, 2, 3].map(x => x * 2)

// Filter
let evens = [1, 2, 3, 4].filter(x => x % 2 == 0)

Background Tasks

go(() => {
    let result = heavyWork()
    
    window.Do(() => {
        label.SetText(result)
    })
})

Rule: Always use window.Do() to update GUI from go() blocks.

Module Loading

require("@gui")
require(["v0.4", "@gui", "@http", "@sql"])

import("./utils.risor")
import("https://example.com/helpers.risor")

Available Modules: @gui, @http, @sql, @os, @strings, @filepath, @time, @io

Common Patterns

Form:

let entry = widget.NewEntry()
let form = widget.NewForm(
    widget.NewFormItem("Name:", entry)
)

Table:

let table = widget.NewTable("Data", 20)
table.Columns(() => ["ID", "Name"])
table.Data((offset, limit) => data.slice(offset, limit))

Progress:

let progress = widget.NewProgressBarInfinite()
progress.Start()
// Later: progress.Stop()