Hazır vidjetlər: eyni kod həm desktopda, həm vebdə#

alqor işlət 08-vidjetler.alq            desktop pəncərəsi
alqor işlət 08-vidjetler.alq -- veb     veb server (8081)
alqor işlət 08-vidjetler.alq -- sınaq   heç nə açmadan yoxlayır

Necə işlətmək#

PowerShell
alqor işlət numuneler\08-vidjetler.alq

Studio-da: faylı açın və F5 basın. Nümunələr ilk açılışda Sənədlər\Alqor\nümunələr qovluğuna kopyalanır.

Kod#

Alqor
// Nümunə 8 — Hazır vidjetlər: eyni kod həm desktopda, həm vebdə
//
//   alqor işlət 08-vidjetler.alq            desktop pəncərəsi
//   alqor işlət 08-vidjetler.alq -- veb     veb server (8081)
//   alqor işlət 08-vidjetler.alq -- sınaq   heç nə açmadan yoxlayır

gətir vidjet
gətir pəncərə
gətir veb

sinif İşçi
    qurucu(açıq xassə ad: mətn,
           açıq xassə vəzifə: mətn,
           açıq xassə əmək: tam)
son

komponent Panel
    vəziyyət nişan: mətn = "Heyət"
    vəziyyət axtarış: mətn = ""
    vəziyyət səhifə: tam = 1
    vəziyyət bildirişlər: məntiq = doğru
    vəziyyət səs: tam = 60
    vəziyyət silinəcək: mətn = ""

    vəziyyət heyət: siyahı[İşçi] = [
        yeni İşçi("Aysel Məmmədova", "Mühəndis", 2800),
        yeni İşçi("Rəşad Əliyev", "Dizayner", 2200),
        yeni İşçi("Nurlan Həsənov", "Analitik", 2500)
    ]

    hesablanan süzülmüş: siyahı[İşçi]
        əgər özü.axtarış.kəs() == "" onda
            qaytar özü.heyət
        son
        dəyişən s = özü.axtarış.kiçiyə()
        qaytar özü.heyət.filtr((i) => s içindədir i.ad.kiçiyə())
    son

    hesablanan cəmiƏmək: tam
        qaytar özü.heyət.çevir((i) => i.əmək).cəm()
    son

    metod nişanSeçildi(dəyər: mətn)
        özü.nişan = dəyər
    son

    metod axtar(dəyər: mətn)
        özü.axtarış = dəyər
    son

    metod səhifəSeçildi(dəyər: mətn)
        özü.səhifə = tamƏt(dəyər, 1)
    son

    metod bildirişDəyişdi(_dəyər: istənilən)
        özü.bildirişlər = deyil özü.bildirişlər
    son

    metod səsDəyişdi(dəyər: mətn)
        özü.səs = tamƏt(dəyər, 0)
    son

    metod silməkİstə()
        özü.silinəcək = "Aysel Məmmədova"
    son

    metod silməniLəğvEt()
        özü.silinəcək = ""
    son

    metod sil()
        özü.heyət = özü.heyət.filtr((i) => i.ad != özü.silinəcək)
        özü.silinəcək = ""
    son

    göstər()
        qaytar vidjet.sütun(boşluq: 0, məzmun: [
            vidjet.naviqasiya(başlıq: "Heyət paneli", sağ: [
                vidjet.avatar(ad: "Admin İstifadəçi", ölçü: "kiçik")
            ]),

            vidjet.qutu(boşluq: 20, məzmun: [
                vidjet.nişanlar(elementlər: ["Heyət", "Ayarlar"],
                                cari: özü.nişan,
                                klik: özü.nişanSeçildi),

                əgər özü.nişan == "Heyət" onda
                    özü.heyətiGöstər()
                yoxsa
                    özü.ayarlarıGöstər()
                son
            ])
        ])
    son

    metod heyətiGöstər() -> istənilən
        qaytar vidjet.sütun(boşluq: 16, məzmun: [
            vidjet.tor(sütunlar: 3, boşluq: 12, məzmun: [
                vidjet.statistika(etiket: "İşçi sayı",
                                  dəyər: "{uzunluq(özü.heyət)}"),
                vidjet.statistika(etiket: "Cəmi əmək",
                                  dəyər: "{özü.cəmiƏmək} ₼",
                                  dəyişmə: 8),
                vidjet.statistika(etiket: "Orta əmək",
                                  dəyər: "{özü.ortaƏmək()} ₼")
            ]),

            vidjet.axtarış(yazıldı: özü.axtar),

            əgər uzunluq(özü.süzülmüş) == 0 onda
                vidjet.boşBaxış(başlıq: "Nəticə yoxdur",
                                mətn: "Axtarış sözünü dəyişin")
            yoxsa
                vidjet.cədvəl(
                    sütunlar: [["ad", "Ad"], ["vəzifə", "Vəzifə"],
                               ["əmək", "Əmək haqqı"]],
                    sətirlər: özü.süzülmüş)
            son,

            vidjet.sətir(düzləndir: "ara", məzmun: [
                vidjet.səhifələmə(səhifə: özü.səhifə, cəmi: 7,
                                  klik: özü.səhifəSeçildi),
                vidjet.düymə(mətn: "İşçini sil", növ: "təhlükə",
                             klik: özü.silməkİstə)
            ]),

            vidjet.modal(başlıq: "Silinsin?",
                         görünür: özü.silinəcək != "",
                         bağlandı: özü.silməniLəğvEt,
                         məzmun: [
                             vidjet.mətn(
                                 məzmun: "{özü.silinəcək} siyahıdan "
                                         + "çıxarılacaq.")
                         ],
                         altlıq: [
                             vidjet.düymə(mətn: "Ləğv et", növ: "ikinci",
                                          klik: özü.silməniLəğvEt),
                             vidjet.düymə(mətn: "Sil", növ: "təhlükə",
                                          klik: özü.sil)
                         ])
        ])
    son

    metod ortaƏmək() -> tam
        əgər uzunluq(özü.heyət) == 0 onda
            qaytar 0
        son
        qaytar özü.cəmiƏmək ~/ uzunluq(özü.heyət)
    son

    metod ayarlarıGöstər() -> istənilən
        qaytar vidjet.sütun(boşluq: 16, məzmun: [
            vidjet.panel(başlıq: "Bildirişlər", məzmun: [
                vidjet.açar(etiket: "E-poçt bildirişləri",
                            ad: "bildirişlər",
                            yanıq: özü.bildirişlər,
                            dəyişdi: özü.bildirişDəyişdi),
                vidjet.sürüşdürücü(etiket: "Səs səviyyəsi", ad: "səs",
                                   dəyər: özü.səs,
                                   dəyişdi: özü.səsDəyişdi)
            ]),

            vidjet.panel(başlıq: "Hesab", məzmun: [
                vidjet.təsvirSiyahısı(cütlər: {
                    "Plan": "Komanda",
                    "Yaradılıb": "2026-01-15",
                    "Vəziyyət": "Aktiv"
                })
            ]),

            vidjet.xəbərdarlıq(
                başlıq: "Diqqət",
                mətn: "Dəyişikliklər dərhal qüvvəyə minir",
                növ: "xəbərdarlıq"),

            vidjet.yığcam(başlıq: "Təcrübi imkanlar", məzmun: [
                vidjet.qeyd(etiket: "Yeni redaktoru sına", ad: "təcrübə")
            ])
        ])
    son
son

// ═══════════════════════════════════════════════════════════════
//  Üç hədəf, bir komponent
// ═══════════════════════════════════════════════════════════════

funksiya desktop()
    dəyişən p = yeni pəncərə.Pəncərə("Heyət paneli", 900, 700)
    p.məzmun(<Panel />)
    p.mərkəzə()
    p.göstər()
    yaz("Pəncərə açıldı: {p.ünvan()}")
    pəncərə.işlət()
son

funksiya vebServeri()
    dəyişən s = yeni veb.Server()
    // Komponent birbaşa qoşulur: düymələr, nişanlar, axtarış vebdə də
    // işləyir. Hər brauzer sessiyası öz `Panel` nümunəsini alır.
    s.komponent("/", Panel, başlıq: "Heyət paneli")
    s.dinlə(8081)
son

funksiya yoxla()
    dəyişən p = yeni pəncərə.Pəncərə("Heyət paneli", 900, 700)
    p.məzmun(<Panel />)
    dəyişən s = pəncərə.sınaq.aç(p)

    yaz("── Heyət nişanı ──")
    yaz("İşçi sayı    : {"3" içindədir s.HTML()}")
    yaz("Cədvəl var   : {"Aysel Məmmədova" içindədir s.HTML()}")

    s.yaz("axtarış", "rəşad")
    yaz("Axtarışdan   : {s.ehtiva("Rəşad Əliyev")}, "
        + "Aysel gizlidir: {deyil s.ehtiva("Aysel")}")

    s.yaz("axtarış", "zzz")
    yaz("Boş baxış    : {s.ehtiva("Nəticə yoxdur")}")

    s.yaz("axtarış", "")
    s.klik("6")
    yaz("Səhifə 6     : {s.ehtiva("v-səhifə-düyməsi--seçili")}")

    yaz("")
    yaz("── Silmə dialoqu ──")
    s.klik("İşçini sil")
    yaz("Modal açıq   : {s.ehtiva("Silinsin?")}")
    s.klik("Sil")
    yaz("İşçi silindi : {deyil s.ehtiva("Aysel Məmmədova")}")
    yaz("Qalan say    : {"2" içindədir s.HTML()}")

    yaz("")
    yaz("── Ayarlar nişanı ──")
    s.klik("Ayarlar")
    yaz("Açar var     : {s.ehtiva("v-açar")}")
    yaz("Təsvir var   : {s.ehtiva("Komanda")}")
    s.klik("E-poçt bildirişləri")
    yaz("Açar söndü   : {deyil s.ehtiva("checked")}")

    yaz("")
    yaz("── Vebdə eyni komponent ──")
    dəyişən server = yeni veb.Server()
    server.komponent("/", Panel, başlıq: "Heyət")
    dəyişən m = veb.sınaq.server(server)
    dəyişən c = m.al("/")
    yaz("Vəziyyət     : {c.vəziyyət()}")
    yaz("DOCTYPE      : {"<!DOCTYPE html>" içindədir c.mətnƏt()}")
    yaz("Üslub daxil  : {".v-düymə" içindədir c.mətnƏt()}")
    yaz("Cədvəl       : {"Aysel Məmmədova" içindədir c.mətnƏt()}")

    // Brauzerin göndərdiyi hadisəni təqlid edirik: "Ayarlar" nişanı
    dəyişən h = c.mətnƏt().böl("value=\"Ayarlar\"")[0]
    dəyişən açar = (h.böl("data-a-klik=\"").son() ?? "").böl("\"")[0]
    dəyişən cavab = m.göndər("/_alqor/hadise",
                             {"k": 0, "id": açar, "dəyər": "Ayarlar"})
    yaz("Vebdə klik   : {"v-açar" içindədir cavab.json()["html"]}")

    yaz("")
    yaz("── IDE kataloqu ──")
    yaz("Vidjet sayı  : {uzunluq(vidjet.kataloq())}")
    yaz("Form vidjeti : {uzunluq(vidjet.kataloq("form"))}")
    yaz("")
    yaz("`sahə` üçün iki klik bu kodu yazır:")
    yaz(vidjet.skelet("sahə", "istifadəçiAdı"))
son

funksiya əsas(arqumentlər: siyahı[mətn])
    əgər "sınaq" içindədir arqumentlər onda
        yoxla()
    yoxsa əgər "veb" içindədir arqumentlər onda
        vebServeri()
    yoxsa
        desktop()
    son
son