12
Situs Dokumentasi dengan Situs
Dokumentasi Waves tidak tersusun dari banyak berkas halaman. Repositori menyimpan satu berkas konfigurasi situs.json dan satu berkas induk docs/index.html. Situs memakai keduanya untuk merangkai partial di docs/_pages/ menjadi satu halaman HTML. situs.json:1-41 README.md:8-172
Konfigurasi situs.json
situs.json hanya berisi dua field, dan keduanya menentukan berkas mana yang ikut diproses. situs.json:1-41
| Field | Nilai | Akibat |
|---|---|---|
source | ./docs | direktori docs/ menjadi akar pemrosesan |
ignore | ["_pages/**/*"] | semua berkas di docs/_pages/ dilewati sebagai halaman mandiri |
Karena _pages masuk daftar ignore, partial di sana tidak pernah menjadi halaman sendiri. Partial hanya muncul di hasil akhir setelah disisipkan ke docs/index.html, dan setiap partial sudah membawa kelas hide pada elemen akarnya sehingga tidak ada bagian yang tampil sebelum JavaScript memunculkannya. docs/_pages/home.html:1-23
Langkah menjalankan dokumentasi di komputer sendiri ada di README: pasang Situs global dengan npm install situs -g, jalankan grunt atau grunt build, lalu nyalakan situs server dan buka http://localhost:4000/. README.md:12-174
Struktur situs
graph TD berikut menunjukkan bagaimana konfigurasi, partial, dan router bertemu di satu berkas induk.
graph TD
CFG["situs.json: source ./docs, ignore _pages/**/*"]
ENTRY["docs/index.html"]
P1["docs/_pages/home.html"]
P2["docs/_pages/examples.html"]
P3["docs/_pages/source.html"]
P4["docs/_pages/getting-started.html"]
P5["docs/_pages/api.html"]
P6["docs/_pages/faq.html"]
PAGE["satu halaman HTML hasil rakitan"]
ROUTER["routing(): baca window.location.hash"]
NAV["#examples #start #api #faq"]
CFG --> ENTRY
P1 --> ENTRY
P2 --> ENTRY
P3 --> ENTRY
P4 --> ENTRY
P5 --> ENTRY
P6 --> ENTRY
ENTRY --> PAGE
PAGE --> ROUTER
ROUTER --> NAV
style CFG fill:#f59e0b,color:#000
style ENTRY fill:#336791,color:#fff
style PAGE fill:#2d7d46,color:#fff
style ROUTER fill:#8b5cf6,color:#fff
%% fig: Struktur situs dokumentasi Waves
%% desc: situs.json dan enam partial bertemu di docs/index.html, lalu routing() memilih bagian yang tampil berdasarkan hash.docs/index.html menyisipkan enam partial dengan direktif @situs-include, masing-masing ditutup titik koma. docs/index.html:50-605
| Partial | Baris direktif | Elemen akar | Kelas awal |
|---|---|---|---|
./_pages/home.html | 50 | #landing | section hide |
./_pages/examples.html | 52 | #example | section page hide |
./_pages/source.html | 54 | #source-code | hide |
./_pages/getting-started.html | 56 | #getting-started | content section page hide |
./_pages/api.html | 58 | #api | content section page hide |
./_pages/faq.html | 60 | #faq | content section page hide |
Empat partial memakai kelas section page, #landing hanya memakai section hide, dan #source-code hanya memakai hide. docs/_pages/examples.html:16 docs/_pages/getting-started.html:17 docs/_pages/api.html:18 docs/_pages/faq.html:19
#source-code bukan bagian yang dirutekan lewat hash. Lapisan itu dibuka oleh handler klik #example .top-button dan ditutup oleh handler #source-code .top-button. docs/_pages/source.html:110 docs/index.html:222-23411
Peta rute hash
Navigasi di docs/index.html hanya memakai anchor hash tanpa berkas tujuan. docs/index.html:41-4612
| Hash | Kunci routes | Elemen | Catatan |
|---|---|---|---|
| kosong | index | #landing | routing() mengganti hash kosong dengan 'index' |
#examples | examples | #example | nama elemen tanpa huruf s |
#start | start | #getting-started | label navigasinya Docs |
#api | api | #api | |
#faq | faq | #faq |
Objek routes memuat lima kunci itu. Rute index punya transisi sendiri, sedangkan examples, start, api, dan faq memanggil enterTransition dan leaveTransition dengan nama elemen masing-masing. docs/index.html:105-17113 docs/index.html:132-15914
routing() membaca window.location.hash, membuang tanda #, dan menggantinya dengan 'index' bila kosong. Hash di luar daftar ['index', 'examples', 'start', 'api', 'faq'] langsung dijawab return false. docs/index.html:173-19715 docs/index.html:181-18316
Percabangan berikutnya memakai currentRoute. Selama currentRoute masih false, hanya enter rute tujuan yang dijalankan. Setelah itu leave rute lama dipanggil lebih dulu, dan enter rute baru dijalankan di dalam callback-nya. docs/index.html:185-19517
Pemanggilan pertama datang dari init(): setelah jeda 500 ms #navigation mendapat kelas show, lalu routing() dijalankan. Perubahan hash berikutnya ditangani $(window).on('hashchange', routing). docs/index.html:199-20418 docs/index.html:214-21619
Landing punya jalur sendiri: enter menghapus hide lalu menambah show setelah 100 ms, sedangkan leave menghapus show dan menambah hide setelah 500 ms, tanpa kelas appear maupun flow. docs/index.html:108-12920
Siklus transisi kelas
enterTransition dan leaveTransition menggerakkan tiga kelas, show, appear, dan flow, dengan jeda bertingkat. docs/index.html:70-10321
stateDiagram-v2
[*] --> hidden
hidden --> shown: "enter: removeClass hide, addClass show dan appear"
shown --> flowing: "1000 ms: addClass flow, callback"
flowing --> shown: "leave: removeClass flow dan show"
shown --> hidden: "300 ms lalu 500 ms: removeClass appear, addClass hide"
%% fig: Siklus kelas satu bagian
%% desc: Bagian bergerak dari hidden ke shown dan flowing saat masuk, lalu kembali lewat dua jeda saat keluar.| Fase | Aksi | Jeda |
|---|---|---|
| enter | removeClass('hide') | langsung |
| enter | addClass('show') dan addClass('appear') | 100 ms |
| enter | addClass('flow') lalu callback | 1000 ms setelahnya |
| leave | removeClass('flow') dan removeClass('show') | langsung |
| leave | removeClass('appear') | 300 ms |
| leave | addClass('hide') lalu callback | 500 ms setelahnya |
Angka itu berasal dari dua setTimeout bertingkat: 100 ms lalu 1000 ms pada enterTransition, dan 300 ms lalu 500 ms pada leaveTransition. docs/index.html:70-10321
Jebakan saat menambah bagian
⚠️ Menambah satu partial baru menuntut tiga suntingan yang sinkron: direktif
@situs-includedidocs/index.html, kunci baru di objekroutes, dan entri baru di daftar putih['index', 'examples', 'start', 'api', 'faq']. Bila daftar putih terlewat,routing()berhenti direturn falsedan bagian baru tetap memakai kelashidesehingga tidak pernah tampil. docs/index.html:50-605 docs/index.html:181-18316
Nama kunci juga tidak selalu sama dengan id elemen: start mengarah ke #getting-started dan examples mengarah ke #example. Menyalin nama kunci menjadi nama elemen membuat enterTransition mencari elemen yang tidak ada. docs/index.html:132-15914
Berkas gaya dan skrip halaman ini dimuat dari ./static/: prims.css, snarl.min.css, style.css, serta waves.min.css?v=0.7.6 dan waves.min.js?v=0.7.6. Cara berkas itu sampai ke docs/static/ dibahas di Pipeline Build Grunt dan Artefak Distribusi. docs/index.html:15-1922