Web uygulaması, depo kökündeki webapp/ klasöründe tutulan tek sayfalık bir tarayıcı istemcisidir. API sunucusu onu aynı kökenden /app altında sunar; bu yüzden tarayıcı /api/v1 uçlarını kökenler arası istek olmadan çağırır. Bu sayfa klasör yapısını, dosyaların nasıl sunulup önbelleğe alındığını ve ekranların sunucu metadata'sından geldiği kuralını anlatır. Açılış ve API katmanı açılış, oturum ve API çağrıları sayfasındadır.
Kısaca¶
- Web uygulaması derleme adımı olmayan düz ES modülleridir:
index.htmltek bir modül betiği yükler,js/main.js(webapp/index.html:406). webapp/js/51 JavaScript dosyası vevendor/klasörünü içerir (ls webapp/jsile sayıldı: 52 girdi).- Sunucu klasörü iki kez bağlar: her yüklemede yeniden doğrulanan
/appve değişmez dosyalar olarak/app/v/<stamp>/(92f8051 commit'indesrc/cluster_erp/server/app.py:1633-1644). - Her liste, form, kart, aksiyon ve modül sekmesi
GET /api/v1/_metayanıtından kurulur (webapp/js/meta.js:16-47). Projenin yazılı mühendislik kuralları web uygulamasını tamamen metadata güdümlü yapar.
Nasıl çalışır¶
Klasör yapısı¶
| Yol | İçerik | Sayı | Nasıl sayıldı |
|---|---|---|---|
webapp/index.html |
Kabuk: giriş ekranı, ana ekran, uygulama görünümü, katmanlar ve modül betiği | 1 dosya, 408 satır | wc -l |
webapp/operator.html |
Operatör konsolu sayfası | 1 dosya | ls webapp |
webapp/js/ |
Motor ve ekran modülleri | 51 .js dosyası ve vendor/ |
ls webapp/js |
webapp/js/vendor/pdfjs/ |
Depoya alınmış PDF çizici (pdfjs-dist 6.2.108, Apache-2.0) |
4 dosya | webapp/js/vendor/pdfjs/README.txt |
webapp/css/ |
tokens.css, app.css, gen.css, tiles.css, mail.css |
5 dosya | ls webapp/css |
webapp/i18n/ |
en.json, tr.json ve languages.json manifestosu |
3 dosya | ls webapp/i18n |
webapp/fonts/ |
Düğümden sunulan Manrope yazı tipi dosyaları, manrope.css ve OFL.txt |
8 dosya | ls webapp/fonts |
webapp/assets/ |
Asistan ekranı için sohbet duvar kâğıdı görselleri | 2 dosya | ls webapp/assets |
webapp/store/ |
Uygulama mağazası girdileri için ekran görüntüsü galerileri, uygulama başına bir klasör | 26 klasör | ls webapp/store |
Operatör konsolu operatör konsolu sayfasında belgelenir. webapp/index.html:8-12 içindeki yorum, yazı tipinin düğümden sunulduğunu ve hiçbir ziyaretçi isteğinin yazı tipi için kurulumun dışına çıkmadığını belirtir.
js klasöründeki modül grupları¶
| Grup | Dosyalar |
|---|---|
| Açılış ve taşıma | main.js, api.js, app-session.js, gen-api.js, meta.js, data-bus.js, ui-state.js |
| Genel motorlar | gen-list.js, gen-form.js, gen-detail.js, gen-tree.js, gen-settings.js, entity.js, action-sheet.js, customselect.js, form-drafts.js, table-align.js, avatar.js |
| Kabuk | home.js, module-app.js, app-scope.js, nav.js, app-wheel.js, tiles.js, touch-gate.js, device-class.js, search-index.js, custom-widgets.js |
| Bileşenler | widget-ai.js, widget-approvals.js, widget-scope.js |
| Dil ve görünüm | i18n.js, prefs.js, a11y.js, a11y-ui.js, icons.js, ui.js |
| Ekranlar | general.js, retention.js, changed.js, logs.js, profile.js, mail.js, mail-settings.js, signup.js, record-docs.js, viewer.js, share.js, assistant.js, chat-task.js |
| Operatör sayfası | operator.js |
Gruplama her dosyanın başlık yorumunu izler. Bu bir okuma kolaylığıdır, koddaki bir yapı değildir.
Sunum ve varlık damgası¶
webapp/index.html her stil sayfasını, modülü ve yazı tipini ./v/__ASSET_STAMP__/ altında bağlar (webapp/index.html:13-74). Sunucu index.html döndürürken yer tutucuyu klasördeki her dosya üzerinden hesaplanan bir özet olan asset_stamp(webapp_dir) ile değiştirir ve Cache-Control: no-cache ile bir ETag gönderir (92f8051 commit'inde src/cluster_erp/server/app.py:1616-1625). Geçerli damga altında istenen bir dosya public, max-age=31536000, immutable ile gönderilir. Eski bir damga altındaki dosya no-cache ile gönderilir (src/cluster_erp/server/app.py:1599-1614). Bu yüzden her dağıtım yeni bir URL kümesi üretir. Damga işlevi önbellek ve varlık damgası sayfasında belgelenir.
index.html içindeki modulepreload listesi web-client/_gen_modulepreload.mjs tarafından üretilir ve elle düzenlenmemesi işaretlenmiştir (webapp/index.html:24).
İstemciyi biçimlendiren güvenlik başlıkları¶
Sunucu her yanıtla bir içerik güvenlik ilkesi gönderir. Betikler yalnız aynı kökenden ve blob: URL'lerinden yüklenebilir. Yorum, blob: izninin kapılı uygulama modülü içe aktarımı ve nesne URL'li önizlemeler için gerektiğini belirtir (92f8051 commit'inde src/cluster_erp/server/app.py:1325-1352). Çerçeveleme aynı kökenle sınırlıdır; çoğaltılmış ana ekran kutuları buna ihtiyaç duyar (src/cluster_erp/server/app.py:1348-1351). Bkz. kapılı uygulama paketleri ve ana ekran, dock ve başlatıcı.
Neden böyle kurulu¶
- Aynı kökenden sunum: 92f8051 commit'inde
src/cluster_erp/server/app.py:1574-1576içindeki yorum, ön yüzün API sunucusundan sunulmasının tarayıcının API'ye CORS olmadan ulaşmasını sağladığını belirtir. - İki bağlama:
src/cluster_erp/server/app.py:1578-1588içindeki yorum, bir yenilemenin önceden 62 yeniden doğrulama gidiş dönüşüne mal olduğunu ve sürümlü URL'lerin bunu kaldırırkenindex.htmldosyasının bir dağıtımı hemen almaya devam ettiğini belirtir. - Metadata güdümlü ekranlar: projenin yazılı mühendislik kuralları ekran, form, liste ve aksiyon davranışının metadata'dan gelmesini ister ve arayüze özgü gömülü kuralları yasaklar. Bkz. metadata güdümlü arayüz.
Kurallar ve sınırlar¶
gen-list.js,gen-detail.js,gen-form.js,entity.jsvegen-settings.jsgenel motorları iş modülü adlarıyla karşılaştırma yapmamalıdır.tests/test_architecture_boundaries.py:75(test_generic_web_engines_do_not_branch_on_business_module_names) bunu zorunlu kılar.- Genel web dosyaları modül yollarını, modül izinlerini veya dil başına sütunları adlandırmamalı ve bir dil koduna göre dallanmamalıdır.
tests/test_metadata_driven_rules.py:85bunu on bir dosya için zorunlu kılar. - Web uygulaması yalnız paketin yanında
webappklasörü varsa bağlanır (src/cluster_erp/server/app.py:1633-1634).
Diğer parçalarla etkileşim¶
- Metadata'nın sunucu tarafı metadata modeli sayfasında belgelenir.
- Oturum çerezleri ve giriş kimlik doğrulama ve oturumlar sayfasında belgelenir.
- Ana ekranın arkasındaki uygulama kataloğu ve haklar uygulama mağazası, lisans ve haklar sayfasında belgelenir.
- Masaüstü istemci aynı metadata'yı çizer; bkz. masaüstü bölümü.
Sınırlar ve açık noktalar¶
web-client/klasörü tarayıcı test bataryasını ve ayrı bir Vite projesini içerir. Bu projenin kullanımda olup olmadığı koddan belirlenemedi; bkz. depo haritası.index.htmlişaretlemedelang="tr"ve Türkçe bir giriş etiketi bildirir (webapp/index.html:2,webapp/index.html:161). İkisi de açılışta seçili dil ile değiştirilir (webapp/js/i18n.js:81,webapp/js/main.js:221).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| web app | webapp/ |
Sunucunun /app yolunda sunduğu, webapp/ içindeki tarayıcı istemcisi. |
web uygulaması | src/cluster_erp/server/app.py:1633 |
| asset stamp placeholder | __ASSET_STAMP__ |
Sunucunun index.html içinde geçerli varlık damgasıyla değiştirdiği belirteç. |
varlık damgası yer tutucusu | webapp/index.html:18 |
| versioned mount | /app/v |
Bir damga altındaki dosyaları değişmez olarak sunan statik bağlama. | sürümlü bağlama | src/cluster_erp/server/app.py:1635-1639 |
İlgili sayfalar¶
- Web uygulaması platformu
- Açılış, oturum ve API çağrıları
- Metadata çizimi
- Önbellek ve varlık damgası
- İstek hattı ve ara katman
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.