Tsükkel

Paneel määrab view(state) ning vabatahtlikult initial(), on_open(state) ja on_action(action, state). Clink kutsub initial() korra algoleku jaoks, on_open iga kord, kui paneel ilmub, ja siis view(state), et liides üles ehitada. Juhtelement kas sisestab teksti sinna, kuhu kirjutad, seab uue oleku või nimetab toimingu, mida on_action käsitleb, ja vaade ehitatakse uuesti.

def initial():
    return {"count": 0, "step": 1}

def view(state):
    return vstack([
        text(f"{state['count']}", size=34, weight="bold", align="center"),
        segmented(["1", "5", "10"], value=str(state["step"]), action="step"),
        hstack([
            button("−", "bump", value=-1),
            button("+", "bump", value=1, style="primary"),
        ]),
        button("Type it", "type", icon="keyboard"),
    ])

def on_action(action, value, state):
    if action == "bump":
        state["count"] = state["count"] + value * state["step"]
    elif action == "step":
        state["step"] = int(value)
    elif action == "type":
        insert(str(state["count"]))
        close()
    return state
Alustuspaneel, otse redaktori nupu „Uus paneel“ alt.

Kalkulaatorid, nippide tahvlid, valijad: sinu paneelid ilmuvad klaviatuuri paneelinupu taha.

Ehitajad

view(state) tagastab sõlmed, mille loovad need 19 funktsiooni. Pesasta neid vabalt: virnad ja ruudustikud võtavad laste loendi.

EhitajaMida see joonistab
vstack(children, spacing=6, align="leading")Laob lapsed paneelil ülalt alla.
hstack(children, spacing=6, align="center")Laob lapsed üksteise kõrvale.
grid(children, columns=4, spacing=6)Jaotab lapsed ühtlastesse veergudesse.
wrap(children, spacing=6)Laotab oma elemendid üle paneeli ja jätkab järgmisel real.
scroll(children, spacing=6)Omaette keritav ala nimekirjale, mis on paneelist pikem.
card(children, padding=10, color="")Koondab oma elemendid ühele pinnale, ümber jääb ruumi.
spacer(size=0)Lükkab järgneva kõige kaugemasse otsa.
divider()Juuspeen joon ridade vahel.
text(s, size=17, weight="regular", color="", align="leading", lines=0, mono=False)Tekstirida. weight võtab regular, medium, semibold, bold, heavy, light või thin; align võtab leading, center või trailing; lines piirab ridade arvu; color võtab värvinime või #RRGGBB.
icon(name, size=20, color="")SF Symbol, nime järgi.
badge(s, color="")Lühike sõna värvilises kapslis.
progress(value, total=1, label="")Riba, mis on täidetud väärtuseni value kogusummast total.
button(label, action="", value=None, insert="", set=None, style="plain", icon="", enabled=True)Nupp. insert kirjutab oma teksti sinna, kuhu parajasti kirjutad, set liidab võtmed olekusse ja action nimetab käsitleja on_action jaoks. style võtab plain, primary, tinted, quiet või destructive.
row(title, subtitle="", detail="", icon="", action="", value=None, insert="")Puudutatav rida: pealkiri, teine rida, ikoon ja detail paremal.
toggle(label, on=False, key="", action="")Lüliti. key kirjutab sellesse olekuvõtmesse True või False.
slider(value, min=0, max=100, step=1, label="", key="", action="")Liugur min ja max vahel. key kirjutab asendi sellesse olekuvõtmesse.
stepper(value, min=0, max=100, step=1, label="", key="", action="")Väärtus, mille kõrval on − ja +, vahemikus min kuni max.
segmented(options, value=None, key="", action="")Üks valik loendist. key kirjutab valitud variandi sellesse olekuvõtmesse.
field(key, placeholder="", action="", submit="")Tekstikast, mis on seotud state[key]-ga. Puudutus suunab klahvid sellesse võtmesse; submit nimetab käsitleja, mille käivitab Enter.

Tavaline sõne kõlbab kõikjale, kuhu kõlbab sõlm: see joonistub tekstina vaikimisi suuruses.

Puudutusele vastamine

Juhtelement, mis peab midagi välja arvutama, nimetab action'i, selle asemel et kanda kindlat set'i. Clink kutsub siis on_action(action, state), või on_action(action, value, state), kui tahad juhtelemendi väärtust. Olek on tavaline sõnastik: võid seda kohapeal muuta ja mitte midagi tagastada või tagastada uue.

def initial():
    return {"items": [], "draft": ""}

def view(state):
    return vstack([
        field("draft", placeholder="Add one…", submit="add"),
        scroll([row(item, action="use", value=item) for item in state["items"]]),
    ])

def on_action(action, value, state):
    if action == "add" and value:
        state["items"].append(value)
        state["draft"] = ""
    elif action == "use":
        insert(value)
        close()
    return state
Nimekiri, kuhu lisad ja kust puudutusega sisestad.

on_open(state) käivitub iga kord, kui paneel ilmub. Seal saab paneel oma alguse sellest, mida sa parajasti kirjutad.

Klaviatuurilt palumine

Funktsioonidest on_action ja on_open saab paneel paluda klaviatuurilt seda, mida tagastusväärtus ei väljenda. Iga kutse pannakse kirja ja rakendatakse alles pärast funktsiooni lõppu, nii et paneel ei muuda välja kunagi oma vaate ehitamise ajal.

Käsud

  • insert()
  • backspace()
  • delete_word()
  • replace()
  • move_cursor()
  • copy()
  • close()
  • haptic()
  • toast()
def on_action(action, state):
    if action == "quote":
        word = context()["word"]
        replace(len(word), "“" + word + "”")
        haptic("light")
    return state
Kursori juures oleva sõna asendamine jutumärkides sõnaga.

context() loeb, mis kursori ümber on: before, selected, after, word, clipboard, locale, language, full_access ja time. See on hetktõmmis kõne algusest, nii et see ei saa keset renderdamist sinu all muutuda.

Olek

Olek on tavaline sõnastik ja hoiab kõike, mida skript oskab ehitada: arve, sõnesid, tõeväärtusi, None'i ning nende loendeid ja sõnastikke. See antakse sulle iga kutse juures tagasi, nii et loend, kuhu ühel puudutusel lisasid, on järgmisel alles.

def initial():
    return {"name": ""}

def view(state):
    return vstack([
        field("name", placeholder="Who?"),
        button("Greet", insert="Hi " + state["name"] + "!", style="primary"),
    ])
Väli kirjutab otse sellesse olekuvõtmesse, mille nimetad.

Jäta olek meelde hoiab paneeli sisu alles avamiste vahel ja ka klaviatuuri uuesti avades. Kalkulaatori puhul jäta välja, nimekirja puhul lülita sisse.

Olek elab nii kaua, kui klaviatuur on ekraanil, ja kauem, kui paneel mäletab. Paneel saab funktsiooniga context() lugeda kursori ümbert teksti; midagi muud sinu kohta ta lugeda ei saa.

Piirid

Klaviatuur saab murdosa sellest mälust, mis on rakendusel, seega paneelid on piiratud, mitte usaldatud. Iga joonistus saab 2 000 000 interpretaatori sammu ja lahti pääsenud tsükkel lõpeb veateatega ekraanil, mitte klaviatuuriga, mis enam ei vasta.

Paneel, mis saabub failina või hoidlast, kontrollitakse enne salvestamist üle. See peab jääma alla 48 000 baidi ja 1200 rea, määrama def view(, iga import peab nimetama üht liivakastis olevat nimeruumi, ja need katked lükatakse otsemaid tagasi:

Jagatud paneelis tagasi lükatud

  • __
  • exec(
  • eval(
  • open(
  • compile(

Jagatud paneelis imporditav

  • json
  • math
  • random
  • re
  • sys
  • time

Paneelid, mille kirjutad rakenduses, selle loendi alla ei käi. Siis peatab lõputu tsükli üksnes sammueelarve, nii et jäta talle väljapääs.

Asetus

Anna igale paneelile valijas oma nupp, selle asemel et neid ühe Paneelid-nupu taha peita. Üksikud paneelid saavad seda oma redaktoris üle kirjutada.

Vaikimisi järgib seda lülitit, Eraldiseisev saab alati oma nupu ja Grupeeritud pesastub alati.

Kirjuta enda oma

  1. Ava Clinkis Kohandatud paneelid ja puuduta Uus paneel.
  2. Kirjuta skript. Kõrval jookseb päris paneeli eelvaade ja vead ilmuvad kirjutamise käigus.
  3. Salvesta, lülita paneel sisse ja ava klaviatuuril paneelinupp.

Jagamise paneel kirjutab faili .clinkpanel, mis on JSON. Clinkis uuesti avades salvestub see värske id-ga, nii et sama paneeli kaks korda importides ei kirjutata esimest kunagi üle.

Looja ›
Laadi alla App Store’ist