Lompat ke konten
dokumentasi.id
Commit 83fc07e
v2
Star3,5 rb

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-4 README.md:8-17

Konfigurasi situs.json

situs.json hanya berisi dua field, dan keduanya menentukan berkas mana yang ikut diproses. situs.json:1-4

FieldNilaiAkibat
source./docsdirektori 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-2

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-17

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.
Fig. 1: Struktur situs dokumentasi Wavessitus.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-60

PartialBaris direktifElemen akarKelas awal
./_pages/home.html50#landingsection hide
./_pages/examples.html52#examplesection page hide
./_pages/source.html54#source-codehide
./_pages/getting-started.html56#getting-startedcontent section page hide
./_pages/api.html58#apicontent section page hide
./_pages/faq.html60#faqcontent section page hide

Empat partial memakai kelas section page, #landing hanya memakai section hide, dan #source-code hanya memakai hide. docs/_pages/examples.html:1 docs/_pages/getting-started.html:1 docs/_pages/api.html:1 docs/_pages/faq.html:1

#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:1 docs/index.html:222-234

Peta rute hash

Navigasi di docs/index.html hanya memakai anchor hash tanpa berkas tujuan. docs/index.html:41-46

HashKunci routesElemenCatatan
kosongindex#landingrouting() mengganti hash kosong dengan 'index'
#examplesexamples#examplenama elemen tanpa huruf s
#startstart#getting-startedlabel navigasinya Docs
#apiapi#api
#faqfaq#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-171 docs/index.html:132-159

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-197 docs/index.html:181-183

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-195

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-204 docs/index.html:214-216

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-129

Siklus transisi kelas

enterTransition dan leaveTransition menggerakkan tiga kelas, show, appear, dan flow, dengan jeda bertingkat. docs/index.html:70-103

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.
Fig. 2: Siklus kelas satu bagianBagian bergerak dari hidden ke shown dan flowing saat masuk, lalu kembali lewat dua jeda saat keluar.
FaseAksiJeda
enterremoveClass('hide')langsung
enteraddClass('show') dan addClass('appear')100 ms
enteraddClass('flow') lalu callback1000 ms setelahnya
leaveremoveClass('flow') dan removeClass('show')langsung
leaveremoveClass('appear')300 ms
leaveaddClass('hide') lalu callback500 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-103

Jebakan saat menambah bagian

⚠️ Menambah satu partial baru menuntut tiga suntingan yang sinkron: direktif @situs-include di docs/index.html, kunci baru di objek routes, dan entri baru di daftar putih ['index', 'examples', 'start', 'api', 'faq']. Bila daftar putih terlewat, routing() berhenti di return false dan bagian baru tetap memakai kelas hide sehingga tidak pernah tampil. docs/index.html:50-60 docs/index.html:181-183

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-159

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-19